
1. Kubernetes运维必备集群健康检查命令刚接手Kubernetes集群时我总习惯先跑几个基础命令摸清集群状态。就像医生问诊要先量血压一样这些命令能快速判断集群是否健康。查看集群基本信息就像检查身份证# 查看集群版本客户端和服务端 kubectl version --short # 显示集群核心服务地址 kubectl cluster-info # 获取节点状态-o wide显示更详细信息 kubectl get nodes -o wide记得有次凌晨处理告警就是靠kubectl get nodes发现有个节点NotReady后来排查是kubelet进程挂了。这里分享几个实用技巧添加--show-labels参数可以看到节点标签使用-o jsonpath{.items[*].status.addresses}能提取特定信息深度检查节点状态要用describe命令# 查看节点详情重点关注Conditions部分 kubectl describe node node-name # 检查节点资源分配情况 kubectl describe node | grep -A 10 Allocated resources这个命令会显示CPU/内存分配、污点(taints)、事件等关键信息。我常用grep -A 10快速定位资源瓶颈比如发现某个节点内存耗尽导致Pod被驱逐。命名空间检查也很重要# 列出所有命名空间 kubectl get ns # 查看特定命名空间资源概览 kubectl get all -n namespace提示生产环境建议用kubectl get all --all-namespaces全局巡检但数据量大时可能卡顿可以配合--chunk-size参数分批次获取2. Pod排障三板斧状态检查与日志分析Pod是Kubernetes的最小调度单元也是问题高发区。我总结了一套快速诊断流程第一步检查Pod状态# 列出异常Pod按状态排序 kubectl get pods -A --sort-by.status.phase | grep -v Running # 显示Pod详细状态 kubectl get pods -o custom-columnsNAME:.metadata.name,STATUS:.status.phase,REASON:.status.reason常见状态解析Pending调度问题资源不足、亲和性冲突CrashLoopBackOff容器持续崩溃ImagePullBackOff镜像拉取失败第二步查看事件日志# 查看Pod事件按时间排序 kubectl describe pod pod-name | grep -A 10 Events # 集群级事件查询 kubectl get events --sort-by.lastTimestamp有次发现Pod一直Pending通过事件日志看到是持久卷声明(PVC)绑定失败原来是存储类配置错误。第三步查看容器日志# 查看标准输出日志-f实时追踪 kubectl logs -f pod-name -c container-name # 查看前一个容器的日志适合CrashLoop场景 kubectl logs --previous pod-name # 带时间戳的日志排查时序问题 kubectl logs pod-name --timestamps注意如果Pod有多个容器必须用-c指定容器名。对于初始化容器(initContainer)需要添加--all-containers参数3. 服务与网络故障排查技巧服务发现是Kubernetes的核心能力但网络问题往往最难排查。这些命令是我的网络诊断包服务诊断# 查看服务详情重点关注Endpoints kubectl describe svc service-name # 检查EndpointSlice新版本替代Endpoints kubectl get endpointslice # 测试服务DNS解析 kubectl run -it --rm --imagebusybox dns-test -- nslookup service-name网络连通性测试# 创建临时诊断Pod kubectl run net-tool --imagenicolaka/netshoot --restartNever --rm -it # 在容器内执行测试 curl -v http://service-name:port traceroute target-ip高级诊断技巧# 查看kube-proxy规则需要节点SSH权限 iptables -t nat -L KUBE-SERVICES # 检查网络策略 kubectl get networkpolicy -A # 端口转发本地调试 kubectl port-forward svc/service-name 8080:80曾经遇到个诡异案例服务间调用超时最终发现是Pod的securityContext配置了allowPrivilegeEscalation: false导致某些网络操作被拒绝。4. 高级调试与性能分析命令当常规手段失效时这些进阶命令能帮你深入问题本质资源监控# 实时资源监控需metrics-server kubectl top pod --containers kubectl top node # 查看资源定义 kubectl get pod pod-name -o jsonpath{.spec.containers[*].resources}调试容器# 进入容器shell/bin/sh不存在时可尝试/bin/bash kubectl exec -it pod-name -- sh # 拷贝诊断工具到容器 kubectl cp /usr/local/bin/strace pod-name:/tmpAPI资源检查# 查看API资源版本 kubectl api-resources # 检查RBAC授权 kubectl auth can-i create pods --assystem:serviceaccount:default:defaultYAML调试技巧# 干跑验证YAML kubectl apply -f deploy.yaml --dry-runclient # 差异对比 kubectl diff -f deploy.yaml # 查看资源最后生效的配置 kubectl get resource-type resource-name -o yaml --export记得定期整理你的命令手册我习惯用alias kkubectl设置快捷命令。随着Kubernetes版本更新也要注意命令的兼容性变化比如--export参数在1.14后就被废弃了。