kubectl
kubectl
is the primary command-line tool for interacting with Kubernetes clusters. It allows you to deploy applications, inspect and manage cluster resources, and view logs. Mastery of kubectl
is essential for DevOps engineers working with AWS EKS, Azure AKS, GCP GKE, NixOS, and WSL environments.
Installation
macOS (Homebrew):
brew install kubectl
Linux (Debian/Ubuntu):
sudo apt-get update && sudo apt-get install -y kubectl
NixOS (declarative):
Add to your /etc/nixos/configuration.nix
:
environment.systemPackages = with pkgs; [ kubectl ];
Then run:
sudo nixos-rebuild switch
Windows (WSL): Install via Chocolatey or manually download the binary from the official docs.
Quick Reference: Common kubectl Commands
Cluster Management
kubectl cluster-info
– Show cluster endpointskubectl version
– Show client/server versionskubectl config view
– Show kubeconfigkubectl get all --all-namespaces
– List all resources in all namespaces
Resource Listing
kubectl get namespaces
– List all namespaceskubectl get pods
– List all pods in current namespacekubectl get pods -o wide
– Detailed pod infokubectl get pods --field-selector=spec.nodeName=<node>
– Pods on a nodekubectl get rc,services
– List replication controllers and services
Deployments & Rollouts
kubectl get deployment
– List deploymentskubectl describe deployment <name>
– Deployment detailskubectl edit deployment <name>
– Edit deploymentkubectl create deployment <name> --image=<image>
– Create deploymentkubectl delete deployment <name>
– Delete deploymentkubectl rollout status deployment <name>
– Rollout statuskubectl rollout history deployment/<name>
– Rollout historykubectl rollout undo deployment/<name>
– Rollback deploymentkubectl rollout restart deployment/<name>
– Restart deployment
Pods
kubectl get pod
– List podskubectl describe pod <name>
– Pod detailskubectl logs <pod>
– Pod logskubectl logs -f <pod>
– Follow logskubectl exec -it <pod> -- /bin/sh
– Shell into podkubectl delete pod <name>
– Delete pod
Namespaces
kubectl create namespace <name>
– Create namespacekubectl get namespace
– List namespaceskubectl describe namespace <name>
– Namespace detailskubectl delete namespace <name>
– Delete namespace
Nodes
kubectl get nodes
– List nodeskubectl describe node <name>
– Node detailskubectl cordon <node>
– Mark node unschedulablekubectl drain <node>
– Prepare node for maintenancekubectl uncordon <node>
– Mark node schedulablekubectl top node
– Node resource usage
DaemonSets
kubectl get daemonset
– List daemonsetskubectl describe ds <name> -n <namespace>
– DaemonSet detailskubectl edit daemonset <name>
– Edit DaemonSetkubectl delete daemonset <name>
– Delete DaemonSet
Events
kubectl get events
– List eventskubectl get events --field-selector type=Warning
– List warnings
Logs
kubectl logs <pod>
– Pod logskubectl logs -c <container> <pod>
– Container logskubectl logs --since=1h <pod>
– Last hour logskubectl logs --tail=20 <pod>
– Last 20 lineskubectl logs --previous <pod>
– Previous pod logs
Services & Service Accounts
kubectl get services
– List serviceskubectl describe service <name>
– Service detailskubectl expose deployment <name>
– Expose as servicekubectl get serviceaccounts
– List service accountskubectl describe serviceaccount <name>
– Service account details
Secrets
kubectl create secret generic <name> --from-literal=key=value
– Create secretkubectl get secrets
– List secretskubectl describe secret <name>
– Secret detailskubectl delete secret <name>
– Delete secret
Real-World DevOps Example: Rolling Update
kubectl set image deployment/myapp myapp=nginx:1.25.0
kubectl rollout status deployment/myapp
kubectl rollout undo deployment/myapp
Best Practices
Use
kubectl --context
and--namespace
to avoid mistakes in multi-cluster/multi-namespace environmentsUse
kubectl explain <resource>
to discover resource fieldsUse
kubectl apply -f <file.yaml>
for declarative resource managementIntegrate
kubectl
with CI/CD (GitHub Actions, Azure Pipelines, GitLab CI)Use kubectx/kubens for fast context/namespace switching
Never run destructive commands (
delete
,drain
) without double-checking the context/namespace
References
Tip: Use shell aliases and prompt tools (e.g., kube-ps1) to display current context/namespace and avoid costly mistakes.
Last updated