在CentOS上部署和运行Kubernetes(k8s)时,可能会遇到各种故障。以下是一个详细的故障排查指南,可以帮助您系统地定位和解决问题:
kubectl get nodes
命令检查所有节点的状态,确保所有关键组件如etcd、kubelet和kube-proxy正常运行。kubectl get nodes
kubectl get pods --all-namespaces
命令检查所有Pod的状态,特别关注那些未处于Running状态的Pod,并通过 kubectl describe pod <pod_name>
获取详细信息。kubectl get pods --all-namespaces
kubectl describe pod <pod_name>
kubectl get events
命令查看集群中发生的事件,这些事件可能包含有关故障的线索。kubectl get events
free -g
命令检查内存使用情况。cat /proc/cpuinfo | grep "physical id" | sort | uniq | wc -l
命令查询物理CPU数量。dd
命令测试4k小文件读写速度。free -g
cat /proc/cpuinfo | grep "physical id" | sort | uniq | wc -l
dd if=/dev/zero of=/tmp/testfile bs=4k count=1024k conv=fdatasync
journalctl -xe | grep kubelet
查看kubelet的日志。tail -f /var/log/messages
查看系统日志。dmesg -T
命令查看相关信息。tail -f /sysvol/mariadb/mariadb_data/mysql-error.log
查看数据库错误日志。cannot allocate memory
或 no space left on device
错误,检查是否存在内存泄露。/sys/fs/cgroup/memory/kubepods/memory.kmem.slabinfo
文件,判断是否存在内存泄露。kubectl get pods -n kube-system
查看相关Pod的状态。ping
、traceroute
等工具检查节点间的连通性。kubectl get pv
, kubectl get pvc
, 和 kubectl get storageclass
命令检查存储相关状态。kubectl logs <pod_name> -c <container_name>
查看特定Pod中容器的日志输出。如果Pod内有多个容器,可以使用 kubectl logs -c <container_name> <pod_name>
查看特定容器的日志。kubectl debug
命令允许在运行中的Pod中启动一个新的容器,以便进行调试。这个新容器可以与目标容器共享进程命名空间,并允许你安装和使用常用的调试工具。kubectl debug pod_name --image=debug-image --target=container_name
通过上述步骤,您可以系统地对Kubernetes集群在CentOS上进行故障排查,快速定位并解决问题,确保系统的稳定运行。