Administrator
Administrator
发布于 2026-04-03 / 7 阅读
0

第 2 章 kubectl 高频命令与真实示例

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-resources

3.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

3.5 变更类命令的风险边界

命令

用途

注意事项

kubectl scale

临时/手动调整副本数

会与 HPA/GitOps 冲突;操作前需先确认控制来源

kubectl set image

触发镜像滚动更新

记录旧镜像与 revision;避免使用 latest 标签

kubectl rollout restart

重建 Pod 使配置/证书生效

会造成滚动流量变化;需检查 PDB、容量与探针

kubectl edit

紧急修改在线对象

难审计且可能被 GitOps 覆盖;优先修改仓库 YAML

kubectl delete pod

让控制器重建异常 Pod

只是恢复手段,不等于根因修复

--force --grace-period=0

强制删除卡住的对象

可能导致双写/数据损坏;必须有明确授权和风险评估