本文基于 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 条件、日志、网络和存储逐层定位。线上操作务必显式指定命名空间,优先声明式变更,并为回滚、资源配额和中断预算留出余量。

更多推荐