- Namespaces
- List all namespaces:
kubectl get namespace - Set a namespace:
kubens <namespace-name> - See currently set namespace: kubens -c
- List all namespaces:
- Pods
- List all pods:
kubectl get pods - List all pods in specific namespace:
kubectl get pods -n <namespace> - Kill a pod:
kubectl delete pod <pod-name> - Describe/get details of pod:
kubectl describe pods <pod-name> - InitContainers
- Get logs: First describe the pod and look for the name of the init container. Then run
kubectl logs <pod-name> -c <init-container-name>
- Get logs: First describe the pod and look for the name of the init container. Then run
- List all pods:
- Deployments
- Get the deployment name from a pod:
kubectl get pod -n -o jsonpath='{.metadata.ownerReferences[0].name}' - Get the manifest for a deployment:
kubectl get deploy <deployment-name> -o yaml - Scaling a deployment:
kubectl scale --replicas=<n> deployment/<deployment-name> - Gen env vars defined on a pod:
kubectl exec <pod> -- env - Restart a deployment:
kubectl -n <namespace> rollout restart deploy/<deployment-name>
- Get the deployment name from a pod:
- ConfigMaps
- View data in a ConfigMap:
kubectl describe configmaps <name>
- View data in a ConfigMap:
- Port-Forwarding
kubectl port-forward <resource-type>/<name> <local-port>:<pod-port>
- Secrets
- Getting an unsealed secret:
kubectl -n <namespace> get secret <secret-name> -o json | jq -r '.data | map_values(@base64d)'
- Getting an unsealed secret:
- List all resouces:
kubectl api-resources
kubectl JSONPath — the must-know minimal set
Enough to read any jsonpath you’ll encounter and write the few that kubectl requires. For everything else, use -o json | jq.
| Construct | Means | Example |
|---|---|---|
{ } | Expression delimiter; text outside braces is literal | {.metadata.name} |
.foo.bar | Walk into fields | .status.phase |
[*] | All elements of an array | .items[*] |
[0] | Index | .items[0].metadata.name |
{range …}{end} | Loop over an array | {range .items[*]}{.metadata.name}{"\n"}{end} |
?(@.x=="y") | Filter — pick array elements where a condition holds; @ = current element | .status.conditions[?(@.type=="Ready")].status |
The four common variants
# 1. pull one field
kubectl get pod mypod -o jsonpath='{.status.podIP}'
# 2. loop with literal text + newlines
kubectl get pods -o jsonpath='{range .items[*]}{.metadata.name}{"\t"}{.status.phase}{"\n"}{end}'
# 3. the FILTER idiom — read a specific condition/container by name
kubectl get kustomization ionic-query-engine \
-o jsonpath='{.status.conditions[?(@.type=="Ready")].status}'
# 4. kubectl wait (jsonpath is mandatory here)
kubectl wait pod/mypod --for=jsonpath='{.status.phase}'=Running --timeout=60s
What to memorize
The single most important construct is the filter [?(@.type=="...")] — it’s the non-obvious one, and it shows up constantly for reading conditions, containers, ports, etc. The rest you can infer on sight.
Bonus cousin (not jsonpath, but same niche and often cleaner for tables):
kubectl get pods -o custom-columns=NAME:.metadata.name,READY:.status.conditions[?(@.type=="Ready")].status