k8s排错方法
常见Kubernetes问题排查方法
检查Pod状态 使用kubectl get pods查看Pod状态,常见状态包括:
- Pending:调度问题或镜像拉取失败
- CrashLoopBackOff:容器启动后立即退出
- ImagePullBackOff:镜像拉取失败
- Running但服务不可用:应用内部问题
查看Pod详细日志 通过kubectl logs <pod-name>查看标准输出日志,添加-p参数查看前一个容器的日志(适用于CrashLoopBackOff情况)。对于多容器Pod,使用-c指定容器名称。
检查事件信息 kubectl describe pod <pod-name>显示Pod的详细事件记录,包括调度、镜像拉取、容器创建等关键事件,常用于识别资源不足、节点选择器不匹配等问题。
网络连接问题排查
Service访问测试 使用临时Pod进行网络测试:
kubectl run -it --rm testpod --image=busybox --restart=Never -- sh
在测试Pod内通过nslookup <service-name>验证DNS解析,使用wget -qO- <service>:<port>测试服务可达性。
Ingress控制器检查 验证Ingress控制器是否正常运行:
kubectl get pods -n ingress-nginx
kubectl describe ingress <ingress-name>
检查后端服务与路径配置是否正确,查看控制器日志获取详细路由信息。
存储卷问题排查
PersistentVolumeClaim状态检查 使用kubectl get pvc查看绑定状态,未绑定的PVC通常意味着没有符合条件的PV或StorageClass配置错误。通过kubectl describe pvc <pvc-name>查看具体事件。
文件系统权限问题 当容器无法写入卷时,检查Pod安全上下文中的fsGroup设置,确保与存储系统的权限要求匹配。对于NFS等网络存储,验证导出选项和Squash设置。
资源限制与调度问题
节点资源检查 kubectl describe nodes显示节点资源分配情况,关注CPU、内存和Pod数量的使用率。资源不足会导致Pod处于Pending状态。
Pod资源限制验证 检查Pod定义中的resources.requests和resources.limits配置,不合理的设置可能导致OOMKilled或CPU节流。使用kubectl top pod监控实际资源使用情况。
API服务器与组件故障
控制平面组件状态 检查核心组件健康状况:
kubectl get componentstatuses
kubectl get pods -n kube-system
关注kube-apiserver、kube-controller-manager、kube-scheduler和etcd等组件的运行状态。
证书过期问题 使用openssl检查证书有效期:
openssl x509 -noout -text -in /etc/kubernetes/pki/apiserver.crt | grep Validity
证书过期会导致API服务器不可用,需定期轮换或使用自动续期工具。
配置验证工具
使用kubectl诊断 kubectl --v=9设置高日志级别输出API请求细节,kubectl get --raw /healthz直接检查API健康状态。kubectl api-resources验证API资源可用性。
集群状态收集 官方诊断工具kubectl cluster-info dump输出完整集群状态,适合提供给支持团队分析。第三方工具如kube-bench可检查安全配置合规性。
更多推荐
所有评论(0)