Collection of useful kubectl commands
Here is list of important kubectl commands cheatsheet of Kubernetes.
Impersonate a user and group
kubectl get pods
--as-group="somecompany:somecompany-teamname" --as="test"
Explain a resource
kubectl explain hpa
kubectl explain svc
kubectl explain svc
Get nodes region and zone
kubectl get nodes
--label-columns failure-domain.beta.kubernetes.io/region,failure-domain.beta.kubernetes.io/zone
--label-columns failure-domain.beta.kubernetes.io/region,failure-domain.beta.kubernetes.io/zone
Get Arch, OS, Instance type and node type if kops
kubectl get nodes -o wide -L beta.kubernetes.io/arch -L
beta.kubernetes.io/os -L beta.kubernetes.io/instance-type -L kops.k8s.io/instancegroupkubectl get nodes -L
beta.kubernetes.io/arch -L beta.kubernetes.io/os -L
beta.kubernetes.io/instance-type -L
kops.k8s.io/instancegroup
Get node version and name only
kubectl get nodes -o custom-columns=NAME:.metadata.name,VER:.status.nodeInfo.kubeletVersion
Get scheduleable nodes
kubectl get nodes --output 'jsonpath={range
$.items[*]}{.metadata.name} {.spec.taints[*].effect}{"\n"}{end}' |
awk '!/NoSchedule/{print $1}'
Get all deployments nameonly
kubectl get deployment -o=jsonpath={.items[*].metadata.name}
Get one deployment only (first one)
kubectl get deployment
-o=jsonpath={.items[0].metadata.name}
Get all pods statuses only
kubectl get pods -o=jsonpath=‘{.items[*].status.phase}’
--all-namespaces
Get pods qos
kubectl get pods --all-namespaces -o
custom-columns=NAME:.metadata.name,NAMESPACE:.metadata.namespace,QOS-CLASS:.status.qosClass
Get images running
kubectl get pod
-o=jsonpath='{.spec.containers[*].image}' --all-namespaces
kubectl get pod -o=custom-columns=NAME:.metadata.name,IMAGE:.spec.containers[*].image --all-namespaces
kubectl get pod -o=custom-columns=NAME:.metadata.name,IMAGE:.spec.containers[*].image --all-namespaces
Where is my pod running
kubectl get pods -n sock-shop -l name=carts -o wide
Check node/pod usage memory and cpu
kubectl top nodes
kubectl top pods
kubectl top pods
Check health of etcd
kubectl get --raw=/healthz/etcd
Check status of node autoscaler
kubectl describe configmap cluster-autoscaler-status -n
kube-system
Get where pods are running from nodenames
kubectl get pod
-o=custom-columns=NAME:.metadata.name,STATUS:.status.phase,NODE:.spec.nodeName
--all-namespaceskubectl get pod
-o=custom-columns=NODE:.spec.nodeName,NAME:.metadata.name --all-namespaces
Example
sorting pods by nodeName:
kubectl get pods -o wide
--sort-by="{.spec.nodeName}"
Example
of getting pods on nodes using label filter:
for n in $(kubectl get nodes -l
your_label_key=your_label_value --no-headers | cut -d " " -f1); do
kubectl get pods --all-namespaces --no-headers --field-selector spec.nodeName=${n}
done
kubectl get pods --all-namespaces --no-headers --field-selector spec.nodeName=${n}
done
or
by number of restarts
kubectl get pods
--sort-by="{.status.containerStatuses[:1].restartCount}"
Example
filtering by nodeName using — template flag:
$ kubectl get nodes
NAME
STATUS AGE
ip-254-0-90-30.ec2.internal Ready 2d
ip-254-0-90-35.ec2.internal Ready 2d
ip-254-0-90-50.ec2.internal Ready,SchedulingDisabled 2d
ip-254-0-91-60.ec2.internal Ready 2d
ip-254-0-91-65.ec2.internal Ready 2d
$ kubectl get pods --template '{{range .items}}{{if eq .spec.nodeName "ip-254-0-90-30.ec2.internal"}}{{.metadata.name}}{{"\n"}}{{end}}}{{end}}' filebeat-000
app-0000
node-exporter-0000
prometheus-000
ip-254-0-90-30.ec2.internal Ready 2d
ip-254-0-90-35.ec2.internal Ready 2d
ip-254-0-90-50.ec2.internal Ready,SchedulingDisabled 2d
ip-254-0-91-60.ec2.internal Ready 2d
ip-254-0-91-65.ec2.internal Ready 2d
$ kubectl get pods --template '{{range .items}}{{if eq .spec.nodeName "ip-254-0-90-30.ec2.internal"}}{{.metadata.name}}{{"\n"}}{{end}}}{{end}}' filebeat-000
app-0000
node-exporter-0000
prometheus-000
Check pods which are not Runnning
kubectl get pods --field-selector=status.phase!=Running
--all-namespaces
Sort Nodes by Role, Age and kubelet version
kubectl get nodes
--sort-by={.metadata.labels."kubernetes\.io\/role"}
kubectl get node --sort-by={.status.nodeInfo.kubeletVersion}
watch kubectl get node --sort-by={.status.nodeInfo.kubeletVersion}
watch "kubectl get nodes --sort-by={.metadata.labels.\"kubernetes\.io\/role\"}"
kubectl get nodes --sort-by=".status.conditions[?(@.reason == 'KubeletReady' )].lastTransitionTime"
kubectl get node --sort-by={.status.nodeInfo.kubeletVersion}
watch kubectl get node --sort-by={.status.nodeInfo.kubeletVersion}
watch "kubectl get nodes --sort-by={.metadata.labels.\"kubernetes\.io\/role\"}"
kubectl get nodes --sort-by=".status.conditions[?(@.reason == 'KubeletReady' )].lastTransitionTime"
Query apiservers
kubectl get --raw=/apis
kubectl get --raw=/logs/kube-apiserver.log
kubectl get --raw=/logs/kube-apiserver.log
Setup a deployment with limits and requests
·
kubectl run
ken-test --image=docker/docker-curl -i --tty
--limits='cpu=50m,memory=128Mi' --requests='cpu=50m,memory=128Mi'
·
kubectl delete
deployment docker-test
Get events for an individual resource
kubectl get event --field-selector=involvedObject.name
=foo -w
Get apiresources
Check for an api resources available, this should show
your crd api endpoints as well
·
kubectl
api-resources
·
kubectl
api-versions
Check apiservices added (registered)
·
kubectl get
apiservices.apiregistration.k8s.io
·
kubectl get
apiservices.apiregistration.k8s.io v1beta1.metrics.k8s.io -o yaml
Check hpa (maybe because you have custom metrics enabled
in prometheus)?
·
kubectl get
hpa
·
kubectl get
hpa --all-namespaces
kubectl get --raw /apis/metrics.k8s.io
kubectl get --raw /apis/metrics.k8s.io
Kube Diff
·
kubectl alpha
diff -h