在CentOS上进行Kubernetes(k8s)故障排查可以通过以下步骤进行:
1. 检查节点状态
首先,使用以下命令检查集群中各个节点的状态:
kubectl get nodes
如果某个节点显示为 NotReady,则需要进一步查看该节点的详细信息:
kubectl describe node
2. 查看Pod状态
检查哪些Pod处于非Running状态,并查看它们的详细信息:
kubectl get pods --all-namespaces -o wide
kubectl describe pod
3. 检查服务状态
查看服务的状态和详细信息:
kubectl get services
kubectl describe service
4. 查看日志
使用 journalctl 查看Kubernetes组件的日志:
journalctl -xe
也可以查看特定组件的日志,例如kubelet:
journalctl -u kubelet
5. 测试网络连接
测试节点之间的网络连接,可以使用ping命令:
ping
6. 使用Node Problem Detector (NPD)
NPD是一个开源工具,用于检测节点级别的异常状态。可以通过以下步骤安装和配置NPD:
安装NPD
helm repo add deliveryhero https://charts.deliveryhero.io/helm
helm install --generate-name deliveryhero/node-problem-detector
配置NPD
创建 node-problem-detector-config.yaml 和 node-problem-detector.yaml 配置文件,并根据需要进行调整。
验证NPD捕获信息
在测试节点上注入测试日志并查看节点事件:
sudo sh -c "echo 'kernel: BUG: unable to handle kernel NULL pointer dereference at TESTING' >> /dev/kmsg"
kubectl describe node
7. 使用KubeNurse进行集群网络监控
KubeNurse是一个用于监控Kubernetes集群网络的工具,可以通过以下命令安装和配置:
kubectl apply -f https://raw.githubusercontent.com/kubernetes/kube-state-metrics/master/deploy/recommended.yaml
8. 检查系统资源
使用以下命令检查系统的内存、CPU和磁盘使用情况:
free -g
cat /proc/cpuinfo | grep "physical id" | sort | uniq | wc -l
dd if=/dev/zero of=/tmp/testfile bs=4K count=512 conv=fdatasync oflag=direct,nonblock
9. 处理特定问题
根据具体的错误信息,采取相应的解决措施。例如,如果遇到iptables规则失效的问题,可以修改iptables模式:
update-alternatives --set iptables /usr/sbin/iptables-legacy