Kubernetes Cheat Sheet

If you use minikube, instead of pushing your Docker image to a registry, you can simply build the image using the same Docker host as the Minikube VM, so that the images are automatically present.

To do this we need to make sure we are using the Minikube Docker daemon, you can do this by running the following:

eval $(minikube docker-env)

Later, when you no longer wish to use the Minikube host, you can undo this change by running:

eval $(minikube docker-env -u)

Viewing Resource Information

Nodes

kubectl get no

kubectl get no -o wide

kubectl describe no

kubectl get no -o yaml

kubectl get node --selector=[label_name]

kubectl get nodes -o jsonpath='{.items[*].status.addresses[?(@.type=="ExternalIP")].address}'

kubectl top node [node_name]

Pods

kubectl get po
kubectl get po -o wide
kubectl describe po
kubectl get po --show-labels
kubectl get po -l app=ngi nx
kubectl get po -o yaml
kubectl get pod [pod_name] -o yaml --export
kubectl get pod [pod_name] -o yaml --export > nameoffile.yaml
kubectl get pods --field-selector status. phase=Runni ng

# force delete pod
kubectl delete pods --all --grace-period=0 --force

Namespaces

kubectl get ns
kubectl get ns -o yaml
kubectl describe ns

Deployments

kubectl get deploy
kubectl describe deploy
kubectl get deploy -o wide
kubectl get deploy -o yaml

Services

kubectl get svc
kubectl describe svc
kubectl get svc -o wide
kubectl get svc -o yaml
kubectl get svc --show-labels

Daemon sets

kubectl get ds
kubectl get ds --all -namespaces
kubectl describeds [daemonset_name] -n [namespace_name]
kubectl get ds [ds_name] -n [ns_name] -o yaml

Events

kubectl get events
kubectl get events -n kube-system
kubectl get events -w

Logs

kubectl logs [pod_name]
kubectl logs --since=1h [pod_name]
kubectl logs --tail=20 [pod_name]
kubectl logs -f -c [container_name] [pod_name]
kubectl logs [pod_name] > pod.log

Service accounts

kubectl get sa
kubectl get sa -o yaml
kubectl get serviceaccounts default -o yaml > ./sa.yaml
kubectl replace serviceaccount default -f ./sa.yaml

Replica Sets

kubectl get rs
kubectl describe rs
kubectl get rs -o wide
kubectl get rs -o yaml

Roles

kubectl get roles --all -namespaces
kubectl get roles --all -namespaces -o yaml

Secrets

kubectl get secrets
kubectl get secrets --all -namespaces
kubectl get secrets -o yaml

Config maps

kubectl get cm
kubectl get cm --all -namespaces
kubectl get cm --all -namespaces -o yaml

Ingress

kubectl get ing
kubectl get ing --all -namespaces

Persistent Volume

kubectl get pv
kubectl describe pv

Persistent Volume Clain

kubectl get pvc
kubectl describe pvc

Storage class

kubectl get sc
kubectl get sc -o yaml

Multiple resources

kubectl get svc, po
kubectl get deploy, no
kubectl get all
kubectl get all --all-namespaces

Changing Resource Attributes

Taint

kubectl taint [node_name] [taint_name]

Labels

kubectl label [node_name] disktype=ssd
kubectl label [pod_name] env=prod

Cordon/Uncordon

kubectl cordon [node_name]
kubectl uncordon [node_name]

Drain

kubectl drain [node_name]

Nodes/Pods

kubectl delete node [node_name]
kubectl delete pod [pod_name]
kubectl edit node [node_name]
kubectl edit pod [pod_name]

Deployments/Namespaces

kubectl edit deploy [deploy_name]
kubectl delete deploy [deploy_name]
kubectl expose deploy [deploy_name] --port=80 --type=NodePort
kubectl scale deploy [deploy_name] --replicas=5
kubectl delete ns
kubectl edit ns [ns_name]

Services

kubectl edit svc [svc_name]
kubectl delete svc [svc_name]

DaemonSets

kubectl edit ds [ds_name] -n kube-system
kubectl delete ds [ds_name]

Service Accounts

kubectl edit sa [sa_name]
kubectl delete sa [sa_name]

Annotate

kubectl annotate po [pod_name] [annotation]
kubectl annotate no [node_name]

Adding Resources

Creating a Pod

kubectl create -f [name_of_file]
kubectl apply - f [name_of_file]
kubectl run [pod_name] --image=nginx --restart=Never
kubectl run [pod_name] --generator=run-pod/v1 --image=nginx
kubectl run [pod_name] --image=nginx --restart=Never

Creating a Service

kubectl create svc nodeport [svc_name] --tcp=8080:80

Creating a deployment

kubectl create -f [name_of_file]
kubectl apply -f [name_of_file]
kubectl create deploy [deploy_name] --image=nginx

Interactive Pod

kubectl run [pod_name] --image=busybox --rm -it --restart=Never --sh

Output a YAML to a File

kubectl create deploy [deploy_name] --image=nginx --dry-run -o yaml > deploy.yaml
kubectl get po [pod_name] -o yaml --export > pod.yaml

Getting Help

kubectl -h
kubectl create -h
kubectl run -h
kubectl explain deploy.spec

Requests

Api Call

kubectl get --raw /apis/metrics.k8s.io/

Cluster info

kubectl config
kubectl cluster -info
kubectl get component statuses

Others

# get private ip of node
curl http://169.254.169.254/latest/meta-data/local-ipv4/