在Debian上对Kubernetes(k8s)进行故障排查可以通过以下步骤进行:
使用 kubectl get pods
命令查看Pod的状态,了解其运行状况。
kubectl get pods -n <namespace>
使用 kubectl describe pod
命令获取Pod的详细信息,重点关注Events部分和Conditions。
kubectl describe pod <pod-name> -n <namespace>
使用 kubectl logs
命令查看Pod中容器的日志,帮助诊断应用启动错误和依赖服务连接失败等问题。
kubectl logs <pod-name> -c <container-name> -n <namespace>
验证Service的状态和Endpoints,确保Service的selector与Pod标签匹配。
kubectl get svc <service-name> -n <namespace> kubectl describe svc <service-name> -n <namespace> kubectl get endpoints <service-name> -n <namespace>
进入Pod执行命令,检查Pod间的网络连通性和Service的DNS解析。
kubectl exec -it <pod-name> -n <namespace> -- sh ping <another-pod-ip> curl <service-name>.<namespace>.svc.cluster.local nslookup <service-name>
查看节点状态,检查资源不足、Kubelet服务未运行或容器运行时故障等问题。
kubectl get nodes kubectl describe node <node-name>
检查PersistentVolumeClaim (PVC)和PersistentVolume (PV)的状态,解决PVC未绑定或权限问题。
kubectl get pvc -n <namespace> kubectl describe pvc <pvc-name> -n <namespace>
确认Pod中引用的ConfigMap和Secret名称和键值正确,检查环境变量和命令行参数。
kubectl get configmap <configmap-name> -n <namespace> -o yaml
查看核心组件如kube-apiserver、kube-controller-manager和kube-scheduler的日志。
kubectl logs -n <kube-system> kube-apiserver-<pod-name> kubectl logs -n <kube-system> kube-controller-manager-<pod-name> kubectl logs -n <kube-system> kube-scheduler-<pod-name>
部署EFK(Elasticsearch, Fluentd, Kibana)实现日志的统一管理,帮助集中化收集、存储、索引和展示日志。
通过这些步骤,可以系统性地定位和解决Debian上Kubernetes集群的问题。在复杂情况下,建议结合Kubernetes官方文档和社区资源进行深入分析。