Sổ tay kỹ thuật

kubectl – lệnh hay dùng hằng ngày

cheatsheet#kubernetes#kubectl· cập nhật 2026-11-06

Tra nhanh kubectl cho context/namespace, apply/diff, output jsonpath/custom-columns, patch, scale, port-forward và tạo manifest bằng generator.

Sửa trang này
Mục lục

Trang này cho thao tác hằng ngày; lệnh khoanh vùng lỗi (events, logs, debug, rollout undo) xem Kubernetes – lệnh troubleshooting. Ví dụ dùng kubectl 1.31.

Context và namespace

Mục đích Lệnh
Liệt kê context, context hiện tại kubectl config get-contexts / kubectl config current-context
Chuyển context kubectl config use-context prod
Đặt namespace mặc định cho context hiện tại kubectl config set-context --current --namespace=app
Đổi tên context dài kubectl config rename-context arn:aws:eks:...:cluster/prod prod
Dùng kubeconfig khác cho một lệnh / cả shell kubectl --kubeconfig ~/.kube/lab get nodes / export KUBECONFIG=~/.kube/lab
Gộp nhiều kubeconfig thành một file KUBECONFIG=~/.kube/config:~/.kube/lab kubectl config view --flatten > /tmp/merged
Mình là ai với cluster kubectl auth whoami

Apply, diff, delete

Mục đích Lệnh
Apply file / thư mục / kustomize kubectl apply -f app.yaml / kubectl apply -f k8s/ -R / kubectl apply -k overlays/prod
Xem trước thay đổi (exit code 1 khi có diff) kubectl diff -f app.yaml
Kiểm tra với API server mà không lưu kubectl apply -f app.yaml --dry-run=server
Server-side apply, giành quyền field kubectl apply --server-side --force-conflicts -f app.yaml
Xoá theo file / label kubectl delete -f app.yaml / kubectl delete pod -l app=api
Chờ tới khi sẵn sàng kubectl wait deploy/api --for=condition=Available --timeout=120s
Chờ theo jsonpath kubectl wait pod/job-x --for=jsonpath='{.status.phase}'=Succeeded

Tạo manifest bằng generator

Mục đích Lệnh
Deployment kubectl create deployment api --image=registry.example.com/api:1.4.2 --replicas=2 --dry-run=client -o yaml
Service cho Deployment kubectl expose deployment api --port=80 --target-port=8000 --dry-run=client -o yaml
Job / CronJob kubectl create job once --image=busybox -- date / kubectl create cronjob nightly --image=busybox --schedule="0 2 * * *" -- date
Chạy Job ngay từ CronJob kubectl create job manual-1 --from=cronjob/nightly
Tra field của resource kubectl explain deployment.spec.strategy / kubectl explain pod.spec --recursive

Thêm > file.yaml để lưu, sửa rồi apply. ConfigMap/Secret xem ConfigMap và Secret.

Output: wide, jsonpath, custom-columns

Mục đích Lệnh
Thêm cột node, IP kubectl get pods -o wide
Hiện label thành cột kubectl get pods -L app,version
Chỉ lấy tên (dùng cho script) kubectl get pods -l app=api -o name
Một field kubectl get svc api -o jsonpath='{.spec.clusterIP}'
Lặp qua list, mỗi phần tử một dòng kubectl get pods -o jsonpath='{range .items[*]}{.metadata.name}{"\t"}{.status.podIP}{"\n"}{end}'
Lọc trong jsonpath kubectl get nodes -o jsonpath='{.items[*].status.addresses[?(@.type=="InternalIP")].address}'
Bảng tự chọn cột kubectl get pods -o custom-columns=NAME:.metadata.name,NODE:.spec.nodeName,IMAGE:.spec.containers[*].image
Sắp xếp kubectl get pods --sort-by=.metadata.creationTimestamp
Giải mã một key của Secret kubectl get secret api-db -o jsonpath='{.data.password}' | base64 -d
Xử lý phức tạp hơn kubectl get pods -o json | jq -r '.items[] | select(.status.phase!="Running") | .metadata.name'
Theo dõi thay đổi kubectl get pods -w

Sửa nhanh: patch, set, label, scale

Mục đích Lệnh
Scale kubectl scale deploy/api --replicas=5
Đổi image kubectl set image deploy/api api=registry.example.com/api:1.4.3
Đặt env kubectl set env deploy/api LOG_LEVEL=debug (xoá: LOG_LEVEL-)
Đặt resources kubectl set resources deploy/api -c api --requests=cpu=100m,memory=128Mi --limits=memory=256Mi
Patch strategic merge (mặc định) kubectl patch deploy api -p '{"spec":{"replicas":3}}'
Patch merge (CRD không hỗ trợ strategic) kubectl patch mycrd x --type=merge -p '{"spec":{"enabled":false}}'
Patch JSON (theo đường dẫn, xoá phần tử list) kubectl patch deploy api --type=json -p '[{"op":"remove","path":"/spec/template/spec/containers/0/args/1"}]'
Thêm / xoá label kubectl label pod x tier=web / kubectl label pod x tier-
Annotation (ghi đè) kubectl annotate deploy api owner=netops --overwrite
Sửa trực tiếp trong editor KUBE_EDITOR=vim kubectl edit deploy api

scale, set, patch, edit sửa thẳng trên cluster. Nếu manifest được quản lý bằng Git/Helm/Argo CD, lần deploy sau sẽ ghi đè lại; chỉ dùng cho xử lý tạm.

Port-forward và copy

Mục đích Lệnh
Forward tới Service / Deployment / Pod kubectl port-forward svc/api 8080:80 / deploy/api 8080:8000 / pod/api-x 8080:8000
Nhiều port một lúc kubectl port-forward svc/db 5432:5432 9187:9187
Cho máy khác truy cập (cẩn thận) kubectl port-forward --address 0.0.0.0 svc/api 8080:80
Port local ngẫu nhiên kubectl port-forward svc/api :80
Copy file ra/vào Pod (cần tar trong container) kubectl cp app/api-x:/tmp/dump.sql ./dump.sql / kubectl cp ./f.txt app/api-x:/tmp/
Proxy tới API server kubectl proxy --port=8001 rồi curl localhost:8001/api/v1/namespaces

port-forward svc/... thực chất chọn một Pod phía sau Service và giữ nguyên Pod đó; không cân bằng tải. Pod restart thì phải chạy lại lệnh.