kubectl Tips #
kubectl adalah interface utama untuk berinteraksi dengan Kubernetes cluster. Mayoritas engineer hanya menggunakan sebagian kecil dari kemampuannya. Artikel ini mengumpulkan tips dan trik yang meningkatkan produktivitas secara signifikan — dari shortcut sederhana sampai teknik debugging yang jarang diketahui.
Shortcut Resource Names #
# Resource shortnames yang perlu dihapal
kubectl get po # pods
kubectl get deploy # deployments
kubectl get svc # services
kubectl get ns # namespaces
kubectl get cm # configmaps
kubectl get pvc # persistentvolumeclaims
kubectl get ing # ingresses
kubectl get sa # serviceaccounts
kubectl get ep # endpoints
kubectl get no # nodes
kubectl get hpa # horizontalpodautoscalers
kubectl get crd # customresourcedefinitions
# Lihat semua shortnames yang tersedia
kubectl api-resources
Output Formatting yang Powerful #
# Format wide: tampilkan kolom tambahan (IP, node, dll)
kubectl get pods -o wide
# YAML/JSON output
kubectl get deployment api -o yaml
kubectl get deployment api -o json
# JSONPath: extract field spesifik
kubectl get pods -o jsonpath='{.items[*].metadata.name}'
kubectl get nodes -o jsonpath='{range .items[*]}{.metadata.name}{"\t"}{.status.capacity.cpu}{"\n"}{end}'
# Custom columns
kubectl get pods \
-o custom-columns=\
"NAME:.metadata.name,\
STATUS:.status.phase,\
IP:.status.podIP,\
NODE:.spec.nodeName,\
RESTARTS:.status.containerStatuses[0].restartCount"
# Filter dengan jq (piped output)
kubectl get pods -o json | jq '.items[] | {name: .metadata.name, phase: .status.phase}'
# Sort by field
kubectl get pods --sort-by=.metadata.creationTimestamp
kubectl get pods --sort-by='.status.containerStatuses[0].restartCount'
# Tampilkan labels
kubectl get pods --show-labels
kubectl get pods -l app=api # filter by label
kubectl get pods -l 'app in (api, worker)' # filter set
kubectl get pods -l 'env!=staging' # negasi
Debugging dengan exec dan port-forward #
# Masuk ke shell container
kubectl exec -it <pod-name> -- bash
kubectl exec -it <pod-name> -- sh # jika tidak ada bash
# Exec di container tertentu (Pod dengan multiple container)
kubectl exec -it <pod-name> -c <container-name> -- bash
# Jalankan perintah tanpa interactive shell
kubectl exec <pod-name> -- env | sort
kubectl exec <pod-name> -- cat /etc/config/app.yaml
kubectl exec <pod-name> -- ls -la /var/log
# Ephemeral debug container (tidak perlu restart Pod)
kubectl debug -it <pod-name> --image=nicolaka/netshoot --target=<container>
# Port-forward ke Pod
kubectl port-forward pod/<pod-name> 8080:8080
kubectl port-forward deployment/api 8080:8080
kubectl port-forward service/api-service 8080:80
# Port-forward dengan binding ke semua interface (akses dari luar localhost)
kubectl port-forward service/api-service 8080:80 --address=0.0.0.0
Watch dan Events #
# Watch perubahan resource secara real-time
kubectl get pods -w
kubectl get pods -w -l app=api
# Lihat events (sangat berguna saat debugging Pod tidak start)
kubectl get events -n production --sort-by=.lastTimestamp
# Events hanya untuk satu resource
kubectl describe pod <pod-name> -n production | tail -20
# Watch events secara real-time
kubectl get events -w -n production
# Events lintas semua namespace
kubectl get events -A --sort-by=.lastTimestamp | tail -30
Rollout dan Scaling #
# Rolling restart (tanpa ubah konfigurasi apapun)
kubectl rollout restart deployment/api -n production
# Scale manual
kubectl scale deployment api --replicas=10 -n production
# Autoscale
kubectl autoscale deployment api --min=2 --max=10 --cpu-percent=70
# Lihat status rollout
kubectl rollout status deployment/api -n production
# Pause dan resume rollout
kubectl rollout pause deployment/api -n production
kubectl rollout resume deployment/api -n production
# Rollback
kubectl rollout undo deployment/api -n production
kubectl rollout undo deployment/api --to-revision=3 -n production
Multi-Cluster dengan kubeconfig #
# Lihat semua context yang tersedia
kubectl config get-contexts
# Switch context
kubectl config use-context production-cluster
kubectl config use-context staging-cluster
# Jalankan command di context tertentu tanpa switch permanen
kubectl get pods --context=staging-cluster -n production
# Set namespace default untuk context saat ini
kubectl config set-context --current --namespace=production
# Merge beberapa kubeconfig
KUBECONFIG=~/.kube/config:~/.kube/config-staging kubectl config view --merge --flatten > ~/.kube/merged-config
# Tool yang lebih user-friendly untuk multi-cluster
# kubectx: switch context dengan mudah
# kubens: switch namespace dengan mudah
brew install kubectx # atau apt install kubectx
kubectx production
kubens production
Plugin kubectl via Krew #
Krew adalah plugin manager untuk kubectl:
# Install Krew
(
set -x; cd "$(mktemp -d)" &&
OS="$(uname | tr '[:upper:]' '[:lower:]')" &&
ARCH="$(uname -m | sed -e 's/x86_64/amd64/' -e 's/arm64/arm64/')" &&
curl -fsSLO "https://github.com/kubernetes-sigs/krew/releases/latest/download/krew-${OS}_${ARCH}.tar.gz" &&
tar zxvf "krew-${OS}_${ARCH}.tar.gz" &&
KREW=./krew-"${OS}_${ARCH}" &&
"$KREW" install krew
)
# Plugin yang paling berguna
kubectl krew install ctx # kubectx — switch cluster context
kubectl krew install ns # kubens — switch namespace
kubectl krew install neat # bersihkan output yaml (hapus managed fields)
kubectl krew install tree # tampilkan resource hierarchy
kubectl krew install whoami # tampilkan user/serviceaccount saat ini
kubectl krew install ktop # top untuk pods dengan lebih banyak info
kubectl krew install images # list semua images yang digunakan
kubectl krew install outdated # cari pods dengan image yang outdated
Alias yang Berguna #
# Tambahkan ke ~/.bashrc atau ~/.zshrc
alias k='kubectl'
alias kg='kubectl get'
alias kd='kubectl describe'
alias kl='kubectl logs'
alias kx='kubectl exec -it'
alias kns='kubectl config set-context --current --namespace'
# Dengan namespace default
alias kprod='kubectl --namespace production'
alias kdev='kubectl --namespace development'
# Yang lebih advanced: fungsi
klog() {
kubectl logs -f -l app=$1 --max-log-requests=10 -n ${2:-production}
}
# klog api
# klog worker staging
# Shell completion (sangat membantu untuk autocomplete)
source <(kubectl completion bash) # bash
source <(kubectl completion zsh) # zsh
Ringkasan #
kubectl api-resources— tampilkan semua resource types dan shortnames; berguna saat lupa singkatan atau ingin tahu resource CRD yang tersedia.-o custom-columnsdan JSONPath — format output sesuai kebutuhan spesifik; lebih efisien dari parse manual; gabungkan dengan--sort-byuntuk informasi yang terurut.kubectl debug --image=nicolaka/netshoot— inject debug container ke Pod yang bermasalah tanpa restart; toolkit networking lengkap untuk troubleshooting.kubectl get events --sort-by=.lastTimestamp— events adalah sumber informasi pertama saat Pod tidak start; selalu cek ini sebelum masuk ke log yang lebih detail.kubectxdankubens— switch cluster dan namespace dengan satu kata; wajib untuk engineer yang bekerja di multi-cluster atau multi-namespace.- Shell completion —
source <(kubectl completion zsh)membuat autocomplete resource name, Pod name, dan flag; menghemat banyak waktu mengetik.
← Sebelumnya: Kustomize Berikutnya: Local Development Tools →