## cheatsheet * https://kubernetes.io/docs/user-guide/kubectl-cheatsheet/ * https://learnk8s.io/blog/kubectl-productivity/ * https://gist.github.com/so0k/42313dbb3b547a0f51a547bb968696ba * https://speakerdeck.com/so0k/kubectl-tips-and-tricks * https://github.com/dennyzhang/cheatsheet-kubernetes-A4 * https://medium.com/bitnami-perspectives/imperative-declarative-and-a-few-kubectl-tricks-9d6deabdde * http://blog.kubernetes.io/2015/10/some-things-you-didnt-know-about-kubectl_28.html * https://coreos.com/blog/kubectl-tips-and-tricks ## context, namespace ``` get current context: kubectl config view -o=jsonpath='{.current-context}' get all contexts: kubectl config get-contexts -o=name | sort -n get namesapce: kubectl get namespaces -o=jsonpath='{range .items[*].metadata.name}{@}{"\n"}{end}' kubectl config use-context kubectl --context ## set the namespace for the current context kubectl config set-context gke_sandbox-co_us-west1-a_cka --namespace=kube-system kubectl config set-context --current --namespace=kube-system ``` ## generate yaml (dryrun) * generate yaml: https://blog.heptio.com/using-kubectl-to-jumpstart-a-yaml-file-heptioprotip-6f5b8a63a3ea ``` kubectl run my-cool-app —-image=me/my-cool-app:v1 \ -o yaml --dry-run > my-cool-app.yaml kubectl run kuard --generator=run-pod/v1 --replicas=2 --image=gcr.io/kuar-demo/kuard-amd64:1 --dry-run -o yaml kubectl create configmap ip-masq-agent --from-file=config --namespace=kube-system --dry-run -o yaml > ip-masq-agent.yaml ``` ## API ``` kubectl get --raw /apis/apps/v1/namespaces/default/statefulsets/es-data/status | jq -r '.spec.replicas' ``` * https://kubernetes.io/docs/tasks/administer-cluster/access-cluster-api/ ## kubectl run ``` kubectl run kuard --generator=run-pod/v1 --replicas=2 --image=gcr.io/kuar-demo/kuard-amd64:1 kubectl port-forward kuard 8080:8080 kubectl expose deployment kuard --type=LoadBalancer --port=80 --target-port=8080 ``` ## how it works * https://github.com/jamiehannaford/what-happens-when-k8s ## secret ``` echo $(kubectl get secret/terraform -o jsonpath="{.data['terraform\.json']}" | base64 --decode) ``` ## Play with jid and jq * https://gist.github.com/so0k/42313dbb3b547a0f51a547bb968696ba * https://kubernetes.io/docs/tasks/access-application-cluster/list-all-running-container-images/ ``` grace=$(kubectl get po cassandra-0 -o=jsonpath=‘{.spec.terminationGracePeriodSeconds}’) grace=$(kubectl get sts -l component=elasticsearch,role=data -o jsonpath='{..terminationGracePeriodSeconds}' kubectl get svc -l component=elasticsearch,role=client -o jsonpath='{..ip}' kubectl get pods -o jsonpath="{..image}" kubectl get pods -o jsonpath="{.items[*].spec.containers[*].image}" kubectl get pods -o jsonpath='{.items[*].status.podIP}' kubectl get pods -o jsonpath='{range .items[*]}{"\n"}{.metadata.name}{":\t"}{range .spec.containers[*]}{.image}{", "}{end}{end}' kubectl get pods -o go-template --template="{{range .items}}{{range .spec.containers}}{{.image}} {{end}}{{end}}" kubectl get po -o wide --sort-by=.spec.nodeName ``` ## Get the pod cidr from nodes ``` kubectl get nodes -o jsonpath='{.items[*].spec.podCIDR}' | tr " " "\n" kubectl get nodes -o json | jq '.items[] | .spec' kubectl get no -o go-template='{{range .items}}{{.spec.podCIDR}}{{"\n"}}{{end}}' ``` ## Get the TCP LB port and IP ``` EXT_IP="$(kubectl get svc hello-server -o=jsonpath='{.status.loadBalancer.ingress[0].ip}')" EXT_PORT=$(kubectl --namespace default get service hello-server -o=jsonpath='{.spec.ports[0].port}') echo "$EXT_IP:$EXT_PORT" [ "$(curl -s -o /dev/null -w '%{http_code}' "$EXT_IP:$EXT_PORT"/)" -eq 200 ] || exit 1 ``` ## loop over pods ``` kubectl get pods -o jsonpath --template='{range .items[*]}{.met ata.name}{"\t"}{"\t"}{.spec.containers[0].image}{"\n"}{end}' ``` ## export all * https://github.com/kubernetes/kubernetes/issues/24873 ## deployment ### rollout ``` kubectl rollout pause deployment/hello kubectl rollout status deployment/hello # check the versions on pods kubectl get pods -o jsonpath --template='{range .items[*]}{.metadata.name}{"\t"}{"\t"}{.spec.containers[0].image}{"\n"}{end}' kubectl rollout resume deployment/hello # roll back kubectl rollout undo deployment/hello ``` ## find top resource hungry pod ``` # cpu kubectl top pods -A | sort --reverse --key 3 --numeric # memory kubectl top pods -A | sort --reverse --key 4 --numeric # top 1 kubectl top pod | grep -v NAME | sort -k 3 -nr | awk -F ' ' 'NR==1{print $1}' ```