Kubernetes 运维实用 100 条命令(建议收藏)
·
本文基于 Kubernetes 1.36 的 kubectl 命令体系,整理集群、工作负载、网络、存储、配置、发布和排障常用的 100 条命令。示例命名空间为 prod。
删除、强制终止、扩缩容、驱逐、污点和回滚会影响线上服务,执行前应确认上下文、命名空间、选择器和 PodDisruptionBudget。
一、上下文与集群信息
1. 查看客户端与服务端版本
kubectl version
2. 查看集群信息
kubectl cluster-info
3. 查看当前上下文
kubectl config current-context
4. 查看全部上下文
kubectl config get-contexts
5. 切换上下文
kubectl config use-context prod-cluster
6. 设置默认命名空间
kubectl config set-context --current --namespace=prod
7. 查看 API 资源
kubectl api-resources
8. 查看 API 版本
kubectl api-versions
9. 查看命令帮助
kubectl explain deployment.spec
10. 查看原始健康接口
kubectl get --raw='/readyz?verbose'
二、节点与命名空间
11. 查看节点
kubectl get nodes -o wide
12. 查看节点详情
kubectl describe node worker-1
13. 查看节点资源使用
kubectl top nodes
14. 标记节点不可调度
kubectl cordon worker-1
15. 驱逐节点工作负载
kubectl drain worker-1 --ignore-daemonsets --delete-emptydir-data
16. 恢复节点调度
kubectl uncordon worker-1
17. 添加节点标签
kubectl label node worker-1 workload=database
18. 添加节点污点
kubectl taint node worker-1 dedicated=database:NoSchedule
19. 查看命名空间
kubectl get namespaces
20. 创建命名空间
kubectl create namespace prod
三、Pod 查看与操作
21. 查看 Pod
kubectl -n prod get pods -o wide
22. 实时观察 Pod
kubectl -n prod get pods -w
23. 查看 Pod 详情
kubectl -n prod describe pod api-0
24. 查看 Pod YAML
kubectl -n prod get pod api-0 -o yaml
25. 按标签查 Pod
kubectl -n prod get pods -l app=api
26. 按字段筛选异常 Pod
kubectl -n prod get pods --field-selector=status.phase!=Running
27. 查看 Pod 资源使用
kubectl -n prod top pod --containers
28. 进入容器
kubectl -n prod exec -it api-0 -c api -- sh
29. 在容器中执行命令
kubectl -n prod exec api-0 -- env
30. 删除 Pod 触发重建
kubectl -n prod delete pod api-0
四、日志、调试与文件
31. 查看 Pod 日志
kubectl -n prod logs api-0
32. 实时追踪日志
kubectl -n prod logs -f api-0 -c api
33. 查看最近 200 行
kubectl -n prod logs --tail=200 api-0
34. 查看一小时前日志
kubectl -n prod logs --since=1h api-0
35. 查看上一个容器实例日志
kubectl -n prod logs --previous api-0 -c api
36. 按标签聚合日志
kubectl -n prod logs -l app=api --all-containers --prefix
37. 复制文件到 Pod
kubectl -n prod cp ./app.conf api-0:/tmp/app.conf -c api
38. 从 Pod 复制文件
kubectl -n prod cp api-0:/tmp/diag.tar.gz ./diag.tar.gz -c api
39. 启动临时调试容器
kubectl -n prod debug -it api-0 --image=busybox:1.36 --target=api
40. 调试节点
kubectl debug node/worker-1 -it --image=ubuntu
五、Deployment 与发布
41. 查看 Deployment
kubectl -n prod get deployments
42. 创建 Deployment
kubectl -n prod create deployment api --image=nginx:1.29
43. 查看发布状态
kubectl -n prod rollout status deployment/api
44. 查看发布历史
kubectl -n prod rollout history deployment/api
45. 更新镜像
kubectl -n prod set image deployment/api api=registry.example.com/api:v2
46. 暂停发布
kubectl -n prod rollout pause deployment/api
47. 恢复发布
kubectl -n prod rollout resume deployment/api
48. 回滚上一版本
kubectl -n prod rollout undo deployment/api
49. 回滚指定版本
kubectl -n prod rollout undo deployment/api --to-revision=3
50. 重启 Deployment
kubectl -n prod rollout restart deployment/api
六、扩缩容与其他工作负载
51. 手动扩容
kubectl -n prod scale deployment/api --replicas=6
52. 创建 HPA
kubectl -n prod autoscale deployment/api --min=2 --max=10 --cpu-percent=70
53. 查看 HPA
kubectl -n prod get hpa
54. 查看 StatefulSet
kubectl -n prod get statefulsets
55. 重启 StatefulSet
kubectl -n prod rollout restart statefulset/db
56. 查看 DaemonSet
kubectl -n prod get daemonsets
57. 创建一次性 Job
kubectl -n prod create job migrate --image=registry.example.com/app:v2 -- ./migrate
58. 从 CronJob 创建 Job
kubectl -n prod create job --from=cronjob/backup backup-manual
59. 查看 CronJob
kubectl -n prod get cronjobs
60. 暂停 CronJob
kubectl -n prod patch cronjob backup -p '{"spec":{"suspend":true}}'
七、Service、Ingress 与网络
61. 查看 Service
kubectl -n prod get services
62. 暴露 Deployment
kubectl -n prod expose deployment api --port=80 --target-port=8080
63. 查看 EndpointSlice
kubectl -n prod get endpointslices -l kubernetes.io/service-name=api
64. 转发本地端口
kubectl -n prod port-forward service/api 8080:80
65. 查看 Ingress
kubectl -n prod get ingress
66. 查看 NetworkPolicy
kubectl -n prod get networkpolicies
67. 启动临时网络工具 Pod
kubectl -n prod run netshoot --rm -it --restart=Never --image=nicolaka/netshoot -- bash
68. 测试集群 DNS
kubectl -n prod run dns-test --rm -it --restart=Never --image=busybox:1.36 -- nslookup api
69. 测试 Service HTTP
kubectl -n prod run curl --rm -it --restart=Never --image=curlimages/curl -- curl -fsS http://api/health
70. 查看 CoreDNS 日志
kubectl -n kube-system logs -l k8s-app=kube-dns --tail=200
八、配置、密钥与存储
71. 创建 ConfigMap
kubectl -n prod create configmap app-config --from-file=app.yaml
72. 查看 ConfigMap
kubectl -n prod get configmap app-config -o yaml
73. 创建 Secret
kubectl -n prod create secret generic db-auth --from-literal=username=app --from-literal=password='REPLACE_ME'
74. 解码 Secret 字段
kubectl -n prod get secret db-auth -o jsonpath='{.data.username}' | base64 -d; echo
75. 创建 TLS Secret
kubectl -n prod create secret tls app-tls --cert=tls.crt --key=tls.key
76. 查看 PVC
kubectl -n prod get pvc
77. 查看 PV
kubectl get pv
78. 查看 StorageClass
kubectl get storageclass
79. 查看 PVC 详情
kubectl -n prod describe pvc data-db-0
80. 查看卷快照
kubectl -n prod get volumesnapshots
九、声明式管理与权限
81. 预览应用清单
kubectl apply --dry-run=server -f app.yaml
82. 应用清单
kubectl apply -f app.yaml
83. 查看清单差异
kubectl diff -f app.yaml
84. 删除清单资源
kubectl delete -f app.yaml
85. 导出资源 YAML
kubectl -n prod get deployment api -o yaml > api.yaml
86. 交互编辑资源
kubectl -n prod edit deployment api
87. 合并补丁
kubectl -n prod patch deployment api --type=merge -p '{"spec":{"replicas":4}}'
88. 检查当前权限
kubectl auth can-i --list -n prod
89. 检查特定权限
kubectl auth can-i delete pods -n prod
90. 模拟 ServiceAccount 权限
kubectl auth can-i get secrets --as=system:serviceaccount:prod:api -n prod
十、事件与综合排障
91. 按时间查看事件
kubectl -n prod get events --sort-by=.metadata.creationTimestamp
92. 只看警告事件
kubectl -n prod events --types=Warning
93. 等待 Deployment 可用
kubectl -n prod wait --for=condition=available deployment/api --timeout=120s
94. 等待 Pod 就绪
kubectl -n prod wait --for=condition=Ready pod -l app=api --timeout=120s
95. 查看所有资源
kubectl -n prod get all
96. 自定义列输出
kubectl -n prod get pods -o custom-columns='NAME:.metadata.name,STATUS:.status.phase,NODE:.spec.nodeName'
97. JSONPath 输出镜像
kubectl -n prod get pods -o jsonpath='{range .items[*]}{.metadata.name}{"\t"}{.spec.containers[*].image}{"\n"}{end}'
98. 查看 finalizer
kubectl -n prod get pod api-0 -o jsonpath='{.metadata.finalizers}'
99. 查看组件租约
kubectl -n kube-system get leases
100. 生成命名空间诊断摘要
{ kubectl -n prod get pods -o wide; kubectl -n prod get events --sort-by=.lastTimestamp; kubectl -n prod top pods; } > k8s-prod-check.txt
总结
Kubernetes 排障应从上下文、事件、控制器状态、Pod 条件、日志、网络和存储逐层定位。线上操作务必显式指定命名空间,优先声明式变更,并为回滚、资源配额和中断预算留出余量。
更多推荐
所有评论(0)