Skip to main content
Menu
Kubernetes | Cheatsheets
Kubernetes

Quick References #

Minikube #

Start #

minikube start --nodes=1 --cpus=4 --memory 8192 --disk-size=35g --embed-certs=true

Common Commands #

Run curl test temporarily #

kubectl run --generator=run-pod/v1 --rm mytest --image=yauritux/busybox-curl -it

Run wget test temporarily #

kubectl run --generator=run-pod/v1 --rm mytest --image=busybox -it wget

Run nginx deployment with 2 replicas #

kubectl run my-nginx --image=nginx --replicas=2 --port=80

Run nginx pod and expose it #

kubectl run my-nginx --restart=Never --image=nginx --port=80 --expose

Run nginx deployment and expose it #

kubectl run my-nginx --image=nginx --port=80 --expose

List authenticated contexts #

kubectl config get-contexts, ~/.kube/config

Set namespace preference #

kubectl config set-context <context_name> --namespace=<ns_name>

List pods with nodes info #

kubectl get pod -o wide

List everything #

kubectl get all --all-namespaces

Get all services #

kubectl get service --all-namespaces

Get all deployments #

kubectl get deployments --all-namespaces

Show nodes with labels #

kubectl get nodes --show-labels

Get resources with json output #

kubectl get pods --all-namespaces -o json

Validate yaml file with dry run #

kubectl create --dry-run --validate -f pod-dummy.yaml

Start a temporary pod for testing #

kubectl run --rm -i -t --image=alpine test-$RANDOM -- sh

kubectl run shell command #

kubectl exec -it mytest -- ls -l /etc/hosts

Get system conf via configmap #

kubectl -n kube-system get cm kubeadm-config -o yaml

Get deployment yaml #

kubectl -n denny-websites get deployment mysql -o yaml

Explain resource #

kubectl explain pods, kubectl explain svc

Watch pods #

kubectl get pods -n wordpress --watch

Query healthcheck endpoint #

curl -L http://127.0.0.1:10250/healthz

Open a bash terminal in a pod #

kubectl exec -it storage sh

Check pod environment variables #

kubectl exec redis-master-ft9ex env

Enable kubectl shell autocompletion #

echo "source <(kubectl completion bash)" >>~/.bashrc, and reload

Use minikube dockerd in your laptop #

eval $(minikube docker-env), No need to push docker hub any more

Kubectl apply a folder of yaml files #

kubectl apply -R -f .

Get services sorted by name #

kubectl get services –sort-by=.metadata.name

Get pods sorted by restart count #

kubectl get pods –sort-by=’.status.containerStatuses[0].restartCount’

List pods and images #

kubectl get pods -o=’custom-columns=PODS:.metadata.name,Images:.spec.containers[*].image’

Check Performance #

Get node resource usage #

kubectl top node

Get pod resource usage #

kubectl top pod

Get resource usage for a given pod #

kubectl top <podname> --containers

List resource utilization for all containers #

kubectl top pod --all-namespaces --containers=true

Resources Deletion #

Delete pod #

kubectl delete pod/<pod-name> -n <my-namespace>

Delete pod by force #

kubectl delete pod/<pod-name> --grace-period=0 --force

Delete pods by labels #

kubectl delete pod -l env=test

Delete deployments by labels #

kubectl delete deployment -l app=wordpress

Delete all resources filtered by labels #

kubectl delete pods,services -l name=myLabel

Delete resources under a namespace #

kubectl -n my-ns delete po,svc --all

Delete persist volumes by labels #

kubectl delete pvc -l app=wordpress

Delete state fulset only (not pods) #

kubectl delete sts/<stateful_set_name> --cascade=false

Log & Conf Files #

Config folder #

/etc/kubernetes/

Certificate files #

/etc/kubernetes/pki/

Credentials to API server #

/etc/kubernetes/kubelet.conf

Superuser credentials #

/etc/kubernetes/admin.conf

kubectl config file #

~/.kube/config

Kubernetes working dir #

/var/lib/kubelet/

Docker working dir #

/var/lib/docker/, /var/log/containers/

Etcd working dir #

/var/lib/etcd/

Network cni #

/etc/cni/net.d/

Log files #

/var/log/pods/

log in worker node #

/var/log/kubelet.log 
/var/log/kube-proxy.log

log in master node #

kube-apiserver.log, kube-scheduler.log, kube-controller-manager.log
Env	/etc/systemd/system/kubelet.service.d/10-kubeadm.conf
Env	export KUBECONFIG=/etc/kubernetes/admin.conf

Pod #

List all pods #

kubectl get pods

List pods for all namespace #

kubectl get pods -all-namespaces

List all critical pods #

kubectl get -n kube-system pods -a

List pods with more info #

kubectl get pod -o wide, kubectl get pod/<pod-name> -o yaml

Get pod info #

kubectl describe pod/srv-mysql-server

List all pods with labels #

kubectl get pods --show-labels

List all unhealthy pods #

kubectl get pods –field-selector=status.phase!=Running –all-namespaces

List running pods #

kubectl get pods –field-selector=status.phase=Running

Get Pod initContainer status #

kubectl get pod --template '{{.status.initContainerStatuses}}' <pod-name>
kubectl run command	
kubectl exec -it -n “$ns” “$podname” – sh -c “echo $msg >>/dev/err.log”

Watch pods #

kubectl get pods -n wordpress --watch

Get pod by selector #

kubectl get pods –selector=”app=syslog” -o jsonpath={.items[*].metadata.name}

List pods and images #

kubectl get pods -o=’custom-columns=PODS:.metadata.name,Images:.spec.containers[*].image’

List pods and containers #

-o=’custom-columns=PODS:.metadata.name,CONTAINERS:.spec.containers[*].name’

Label & Annotation #

Filter pods by label #

kubectl get pods -l owner=anand

Manually add label to a pod #

kubectl label pods dummy-input owner=anand

Remove label #

kubectl label pods dummy-input owner-

Manually add annotation to a pod #

kubectl annotate pods anand-input my-url=https://anandtiwari.com

Deployment & Scale #

Scale out #

kubectl scale --replicas=3 deployment/nginx-app

online rolling upgrade #

kubectl rollout app-v1 app-v2 --image=img:v2

Roll backup #

kubectl rollout app-v1 app-v2 --rollback

List rollout #

kubectl get rs

Check update status #

kubectl rollout status deployment/nginx-app

Check update history #

kubectl rollout history deployment/nginx-app

Pause/Resume #

kubectl rollout pause deployment/nginx-deployment, resume

Rollback to previous version #

kubectl rollout undo deployment/nginx-deployment

Quota & Limits & Resource #

List Resource Quota #

kubectl get resourcequota

List Limit Range #

kubectl get limitrange

Customize resource definition #

kubectl set resources deployment nginx -c=nginx --limits=cpu=200m

Customize resource definition #

kubectl set resources deployment nginx -c=nginx --limits=memory=512Mi

Service #

ist all services #

kubectl get services

List service endpoints #

kubectl get endpoints

Get service detail #

kubectl get service nginx-service -o yaml

Get service cluster ip #

kubectl get service nginx-service -o go-template={{.spec.clusterIP}}

Get service cluster port #

kubectl get service nginx-service -o go-template={{(index .spec.ports 0).port}}

Expose deployment as lb service #

kubectl expose deployment/my-app --type=LoadBalancer --name=my-service

Expose service as lb service #

kubectl expose service/wordpress-1-svc --type=LoadBalancer --name=ns1

Secrets #

List secrets #

kubectl get secrets --all-namespaces

Generate secret #

echo -n 'mypasswd', then redirect to base64 --decode

Get secret #

kubectl get secret denny-cluster-kubeconfig

Get a specific field of a secret #

kubectl get secret denny-cluster-kubeconfig -o jsonpath={.data.value}

Create secret from cfg file #

kubectl create secret generic db-user-pass –from-file=./username.txt

StatefulSet #

List statefulset #

kubectl get sts

Delete statefulset only (not pods) #

kubectl delete sts/<stateful_set_name> --cascade=false

Scale statefulset #

kubectl scale sts/<stateful_set_name> --replicas=5

Volumes & Volume Claims #

List storage class #

kubectl get storageclass

Check the mounted volumes #

kubectl exec storage ls /data

Check persist volume #

kubectl describe pv/pv0001

Copy local file to pod #

kubectl cp /tmp/my <some-namespace>/<some-pod>:/tmp/server

Copy pod file to local #

kubectl cp <some-namespace>/<some-pod>:/tmp/server /tmp/my

Events & Metrics #

View all events #

kubectl get events --all-namespaces

List Events sorted by timestamp #

kubectl get events –sort-by=.metadata.creationTimestamp

Node Maintenance #

Mark node as unschedulable #

kubectl cordon $NODE_NAME

Mark node as schedulable #

kubectl uncordon $NODE_NAME

Drain node in preparation for maintenance #

kubectl drain $NODE_NAME

Namespace & Security #

List authenticated contexts #

kubectl config get-contexts, ~/.kube/config

Set namespace preference #

kubectl config set-context <context_name> --namespace=<ns_name>

Switch context #

kubectl config use-context <context_name>

Load context from config file #

kubectl get cs --kubeconfig kube_config.yml

Delete the specified context #

kubectl config delete-context <context_name>

List all namespaces defined #

kubectl get namespaces

List certificates #

kubectl get csr

Check user privilege #

kubectl –as=system:serviceaccount:ns-denny:test-privileged-sa -n ns-denny auth can-i use pods/list

Check user privilege #

kubectl auth can-i use pods/list

Network #

Temporarily add a port-forwarding #

kubectl port-forward redis-134 6379:6379

Add port-forwarding for deployment #

kubectl port-forward deployment/redis-master 6379:6379

Add port-forwarding for replicaset #

kubectl port-forward rs/redis-master 6379:6379

Add port-forwarding for service #

kubectl port-forward svc/redis-master 6379:6379

Get network policy #

kubectl get NetworkPolicy

Patch #

Patch service to loadbalancer #

kubectl patch svc $svc_name -p ‘{“spec”: {“type”: “LoadBalancer”}}

Extenstions #

Enumerates the resource types available #

kubectl api-resources

List api group #

kubectl api-versions

List all CRD #

kubectl get crd

List storageclass #

kubectl get storageclass

Credit #

Most of the Cheat Sheet copied from cheatsheet.dennyzhang.com