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 kubectlLinux (Debian/Ubuntu):
sudo apt-get update && sudo apt-get install -y kubectlNixOS (declarative):
Add to your /etc/nixos/configuration.nix:
environment.systemPackages = with pkgs; [ kubectl ];Then run:
sudo nixos-rebuild switchWindows (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/myappBest Practices
Use
kubectl --contextand--namespaceto avoid mistakes in multi-cluster/multi-namespace environmentsUse
kubectl explain <resource>to discover resource fieldsUse
kubectl apply -f <file.yaml>for declarative resource managementIntegrate
kubectlwith 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