kubectl 是观察与变更 Kubernetes API 的主要工具。高质量运维操作不只看 get 的 STATUS,还要结合 describe、events、logs、对象 YAML 和链路验证。生产中执行命令前先确认 context、namespace 与对象。
3.1 上下文与命名空间
kubectl config get-contexts
kubectl config current-context
kubectl config view --minify
kubectl get ns
kubectl create namespace ops-lab
# 临时使用 -n 最清晰;设置默认 namespace 前先确认 context
kubectl config set-context --current --namespace=ops-lab
kubectl config view --minify | grep namespace
3.2 查看、解释与输出
kubectl get deploy,rs,pod,svc -n ops-lab -o wide
kubectl get pod -n ops-lab --show-labels
kubectl get pod -n ops-lab -l app=web-demo
kubectl describe pod <pod-name> -n ops-lab
kubectl get events -n ops-lab --sort-by=.metadata.creationTimestamp
kubectl get pod <pod-name> -n ops-lab -o yaml
kubectl explain deployment.spec.strategy
kubectl api-resources3.3 日志、进入容器与端口转发
kubectl logs <pod> -n ops-lab
kubectl logs <pod> -c web -n ops-lab --since=10m --timestamps
kubectl logs <pod> -c web -n ops-lab --previous///
kubectl logs -f deployment/web-demo -n ops-lab --tail=100
kubectl exec -it <pod> -n ops-lab -c web -- sh
kubectl port-forward -n ops-lab svc/web-demo 8080:80
curl -i http://127.0.0.1:8080/
无法进入容器?容器没有Shell?
精简镜像可能没有 sh、curl、ping。不要为了排障临时修改生产镜像;可在授权下使用 kubectl debug 创建临时调试容器 ,或从独立 netshoot/curl Pod 发起测试。
3.4 声明式变更与差异
kubectl apply --dry-run=server -f web.yaml
kubectl diff -f web.yaml
kubectl apply -f web.yaml
kubectl rollout status deployment/web-demo -n ops-lab --timeout=120s
# 只导出排障参考;不要把包含 Secret 的完整 YAML 随意发到群聊
kubectl get deployment web-demo -n ops-lab -o yaml > /tmp/web-demo.live.yaml