kubectl 命令速查

kubectl 高频命令,覆盖查看、调试、日志、事件、上下文和资源变更。

kubectl 命令速查

kubectl 是 Kubernetes 日常运维最常用的命令行工具。生产操作前先确认当前上下文和命名空间,避免误操作集群。

上下文

kubectl config get-contexts
kubectl config current-context
kubectl config use-context prod-cluster

kubectl config view --minify
kubectl config set-context --current --namespace=default

查看资源

kubectl get nodes -o wide
kubectl get namespaces
kubectl get pods -A
kubectl get pods -n default -o wide
kubectl get deploy,sts,ds -n default
kubectl get svc,ep,endpointslice -n default
kubectl get ingress -A

常用输出格式:

kubectl get pod nginx -o yaml
kubectl get pod nginx -o json
kubectl get pod nginx -o jsonpath='{.status.phase}'
kubectl get pod -o custom-columns=NAME:.metadata.name,PHASE:.status.phase,NODE:.spec.nodeName

描述和事件

kubectl describe pod nginx -n default
kubectl describe node worker-01

kubectl get events -A --sort-by='.lastTimestamp'
kubectl get events -n default --field-selector involvedObject.name=nginx

describe 适合看对象状态、调度事件、镜像拉取失败、探针失败和挂载异常。

日志

kubectl logs nginx -n default
kubectl logs nginx -n default -c app
kubectl logs nginx -n default --previous
kubectl logs -f deploy/order-api -n default
kubectl logs -l app=order -n default --tail=200

--previous 用于查看上一个已退出容器的日志,排查 CrashLoopBackOff 很常用。

进入容器和临时调试

kubectl exec -it nginx -n default -- sh
kubectl exec -it nginx -n default -c app -- bash

kubectl run debug-shell --image=busybox:1.36 -it --rm -- sh
kubectl run netshoot --image=nicolaka/netshoot -it --rm -- bash

给已有 Pod 注入临时容器:

kubectl debug -it nginx -n default --image=nicolaka/netshoot --target=app

创建和变更

kubectl apply -f app.yaml
kubectl diff -f app.yaml
kubectl delete -f app.yaml

kubectl create namespace demo
kubectl create deployment nginx --image=nginx:1.27
kubectl expose deployment nginx --port=80 --type=ClusterIP

直接修改线上对象:

kubectl edit deployment nginx -n default
kubectl patch deployment nginx -n default -p '{"spec":{"replicas":3}}'

生产环境更推荐通过 YAML、Helm 或 GitOps 变更,减少临时手改。

发布和回滚

kubectl rollout status deployment/order-api -n default
kubectl rollout history deployment/order-api -n default
kubectl rollout undo deployment/order-api -n default
kubectl rollout restart deployment/order-api -n default

修改镜像:

kubectl set image deployment/order-api app=registry.example.com/order-api:v1.2.3 -n default

伸缩

kubectl scale deployment/order-api --replicas=5 -n default
kubectl autoscale deployment/order-api --min=2 --max=10 --cpu-percent=70 -n default
kubectl get hpa -n default

资源使用

需要 Metrics Server:

kubectl top nodes
kubectl top pods -A
kubectl top pod -n default --containers

权限检查

kubectl auth can-i get pods -n default
kubectl auth can-i create deployments -n default
kubectl auth can-i '*' '*' --all-namespaces
kubectl auth can-i get secrets --as=system:serviceaccount:default:app-sa -n default

常用排查组合

Pod 异常:

kubectl get pod nginx -n default -o wide
kubectl describe pod nginx -n default
kubectl logs nginx -n default --previous
kubectl get events -n default --sort-by='.lastTimestamp'

Service 不通:

kubectl get svc nginx -n default -o wide
kubectl get endpointslice -n default -l kubernetes.io/service-name=nginx
kubectl describe svc nginx -n default
kubectl run netshoot --image=nicolaka/netshoot -it --rm -- curl nginx.default.svc.cluster.local