在Debian上部署Kubernetes(K8s)时,故障排查是一个关键技能,可以帮助你快速定位和解决问题。以下是一些常用的故障排查方法:
1. 审视集群状态
- 使用
kubectl get nodes
命令检查节点状态,确保所有节点正常运行。 - 检查基本组件如etcd、kubelet和kube-proxy是否正常运行。
2. 追踪事件日志
- 使用
kubectl get events
命令查看集群事件日志,了解重要事件和错误信息。
3. 聚焦Pod状态
- 使用
kubectl get pods --all-namespaces
命令获取所有Pod的状态,检查是否有Pod未处于运行状态。 - 使用
kubectl describe pod
获取特定Pod的详细信息。-n
4. 检查网络连通性
- 使用
kubectl get services
命令查看服务状态,验证服务、Pod和节点之间的网络通信。 - 检查网络策略和防火墙规则的正确配置。
5. 审视存储配置
- 使用
kubectl get pv
,kubectl get pvc
和kubectl get storageclass
命令检查存储卷声明、存储类和持久卷的状态。
6. 研究容器日志
- 使用
kubectl logs
命令查看特定Pod中容器的日志输出。-n
7. 网络诊断
- 连通性测试:使用
ping
,nc
,telnet
等工具测试Pod间的网络连通性,或通过curl
检查服务端口是否可达。 - NetworkPolicy 检查:确认NetworkPolicy规则是否过于严格导致通信阻断,使用
kubectl get netpol
查看并分析现有策略。 - CNI插件排查:检查CNI插件(如Calico、Flannel等)的日志,排查网络配置或插件自身问题。
8. 存储问题排查
- PVC/PV状态检查:使用
kubectl get pvc
,kubectl get pv
查看PersistentVolumeClaim和PersistentVolume的绑定状态与容量,确认是否存在未绑定、容量不足等问题。 - 存储日志与事件:检查存储插件(如local volume、CSI driver等)日志,以及PVC/PV的事件信息,查找存储访问异常。
- 数据完整性验证:必要时,直接在宿主机上挂载存储卷,检查数据完整性和一致性。
9. 资源调度与亲和性问题
- 节点资源分析:使用
kubectl top nodes
查看节点资源使用情况,判断是否存在资源瓶颈。 - 调度策略检查:确认Deployments、StatefulSets等资源的
.spec.template.spec.nodeselector
,.spec.affinity
,.spec.tolerations
等调度相关字段配置,看是否限制了Pod的调度范围。 - kube-scheduler日志:分析kube-scheduler日志,了解调度决策过程,找出影响调度的因素。
10. 认证授权与访问控制
- RBAC规则审查:使用
kubectl get rolebindings
,clusterrolebindings
检查角色绑定关系,确保用户或服务账户具有正确的API访问权限。 - api server访问日志:分析
kube-apiserver-audit.log
,跟踪特定用户或账户的API请求与响应,排查授权问题。 - 网络代理与认证配置:检查
kubeconfig
文件、api server配置及网络代理(如kube-proxy、ingress-nginx等)的认证设置,确保访问路径无误。
11. 常用故障案例
- 服务间网络通信异常:使用
ping
,nc
或curl
等工具测试与目标服务的网络连通性,包括ClusterIP、NodePort或Headless service的DNS解析。 - Pod无法启动:检查Pod状态,查看Pod日志,确认镜像拉取是否成功。
通过这些方法,你可以系统地排查和解决Debian上K8s部署中遇到的问题。根据具体现象和错误信息,选择合适的排查步骤和方法,能够帮助你快速定位并解决问题。