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.