Kubernetes 集群的故障排查(Troubleshooting)是确保集群和应用稳定运行的关键任务。由于 Kubernetes 涉及多个组件和复杂的分布式系统,故障排查时需要关注的地方非常多。以下是一个详细的 Kubernetes Troubleshooting 指南,从集群层面、节点层面、应用层面到网络等各个方面进行了细分。
一、集群状态检查
1. 集群健康检查
kubectl cluster-info
:检查集群的基本信息,确保 Kubernetes API Server、DNS 服务等都处于正常状态。
[root@k8s-master01 ~]#kubectl cluster-info
Kubernetes control plane is running at https://10.1.2.26:8443
CoreDNS is running at https://10.1.2.26:8443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy
To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.
这会显示集群的控制平面组件地址,确认各个控制平面服务是否可达。
kubectl get componentstatuses
:检查控制平面组件的健康状况(包括 API Server、Controller Manager、Scheduler 等)。
[root@k8s-master01 ~]#kubectl get componentstatuses
Warning: v1 ComponentStatus is deprecated in v1.19+
NAME STATUS MESSAGE ERROR
controller-manager Healthy ok
scheduler Healthy ok
etcd-0 Healthy ok
如果返回 Healthy
状态则正常,如果有任何服务状态为 Unhealthy
或 Unknown
,需要进一步排查。
2. 检查节点状态
kubectl get nodes
:查看节点的状态。检查每个节点的状态(Ready、NotReady、Unknown等),并确保没有节点处于NotReady
状态。
[root@k8s-master01 ~]#kubectl get nodes
NAME STATUS ROLES AGE VERSION
k8s-master01 Ready <none> 187d v1.28.0
k8s-master02 Ready <none> 187d v1.28.0
k8s-master03 Ready <none> 187d v1.28.0
k8s-node01 Ready <none> 187d v1.28.0
k8s-node02 Ready <none> 187d v1.28.0
如果有节点出现 NotReady
,可以使用 kubectl describe node <node-name>
查看详细信息,找出原因。
kubectl describe node <node-name>
:查看特定节点的详细状态,特别是节点的Conditions
、Events
、Kubelet
日志等。
[root@k8s-master01 ~]#kubectl describe node k8s-master01
Name: k8s-master01
Roles: <none>
Labels: beta.kubernetes.io/arch=amd64
beta.kubernetes.io/os=linux
gpu=true
kubernetes.io/arch=amd64
kubernetes.io/hostname=k8s-master01
kubernetes.io/os=linux
node.kubernetes.io/node=
ssd=true
Annotations: csi.volume.kubernetes.io/nodeid: {
"rook-ceph.cephfs.csi.ceph.com":"k8s-master01","rook-ceph.rbd.csi.ceph.com":"k8s-master01"}
node.alpha.kubernetes.io/ttl: 0
projectcalico.org/IPv4Address: 10.1.2.21/16
projectcalico.org/IPv4IPIPTunnelAddr: 172.16.32.128
volumes.kubernetes.io/controller-managed-attach-detach: true
CreationTimestamp: Sun, 25 Aug 2024 11:49:54 +0800
Taints: <none>
Unschedulable: false
Lease:
HolderIdentity: k8s-master01
AcquireTime: <unset