Kubernetes集群(含StatefulSet扩缩容无响应问题)通用故障排查方法咨询
Kubernetes集群(含StatefulSet扩缩容无响应问题)通用故障排查方法咨询
Hey there, let's break down how to dig into your misbehaving Kubernetes cluster step by step—no need to wade through 600k lines of dump without a plan first!
1. 先从核心组件健康状态入手
首先确认控制平面是否正常运行,用这些命令快速获取快照:
- 检查
kube-system命名空间下所有控制平面Pod的状态:
留意任何非kubectl get pods -n kube-systemRunning状态的Pod——崩溃循环、Pending或未知状态都是明显的异常信号。比如如果kube-scheduler或kube-controller-manager挂了,那调度问题的根源就找到了。 - 验证API Server是否响应正常:
如果这个命令卡顿或报错,说明API Server可能过载或状态异常。kubectl version
2. 针对性排查Pod调度问题
既然你提到Pod无法调度,咱们聚焦这个方向:
- 针对某个Pending状态的Pod,查看详细事件和状态:
重点看kubectl describe pod <pod-name> -n <namespace>Events部分——Kubernetes通常会明确说明无法调度的原因,比如CPU/内存不足、没有匹配节点选择器、污点/容忍度不匹配等。 - 检查节点状态,看看是否有节点被封锁、驱逐,或者存在资源问题:
在节点详情里,关注kubectl get nodes kubectl describe node <node-name>Conditions(Ready状态是否为True?)和Allocated resources,确认是否触达了资源上限。
3. 深挖集群性能瓶颈
命令响应缓慢通常指向资源不足或控制平面过载:
- 检查控制平面组件的CPU和内存使用率:
如果kubectl top pods -n kube-systemkube-apiserver、etcd或kube-scheduler的CPU/内存占满了,那大概率是导致卡顿的原因。针对etcd,还可以用这个命令检查健康状态:kubectl exec -n kube-system <etcd-pod-name> -- etcdctl endpoint health --cacert /etc/kubernetes/pki/etcd/ca.crt --cert /etc/kubernetes/pki/etcd/server.crt --key /etc/kubernetes/pki/etcd/server.key - 检查etcd存储使用情况——如果磁盘空间不足,整个集群都会瘫痪:
kubectl exec -n kube-system <etcd-pod-name> -- etcdctl endpoint status --cacert /etc/kubernetes/pki/etcd/ca.crt --cert /etc/kubernetes/pki/etcd/server.crt --key /etc/kubernetes/pki/etcd/server.key -w table
4. 高效利用kubectl cluster-info dump
不用从头翻600k行内容,通过过滤提取有用信息:
- 筛选所有组件的错误日志:
kubectl cluster-info dump | grep -i error - 聚焦调度器日志,排查调度失败问题:
kubectl cluster-info dump --components=scheduler | grep -i "failed\|error\|unable" - 如果启用了API Server审计日志或请求延迟统计,也可以查看这些内容,能发现哪些请求在卡顿或耗时过长。
5. 针对StatefulSet的专属排查(涉及扩缩容问题)
如果你的StatefulSet扩缩容无响应:
- 查看StatefulSet的详情和事件:
留意类似"failed to create pod"或"volume provisioning failed"的事件——StatefulSet依赖稳定的网络标识和持久化卷,PV/PVC问题是常见诱因。kubectl describe statefulset <statefulset-name> -n <namespace> - 确认StatefulSet控制器是否正常运行:
kubectl get pods -n kube-system | grep statefulsetstatefulset-controllerPod必须处于Running状态,否则会直接导致StatefulSet无法正常工作。
6. 最后一招:检查节点级日志
如果集群层面的命令没找到答案,登录有问题的节点(如果有权限)查看系统日志:
- 查看kubelet日志:
这里能发现节点注册失败、Pod运行时问题,或者节点上的资源冲突。journalctl -u kubelet -f - 查看容器运行时日志(比如containerd或docker):
如果容器无法启动,运行时日志可能会记录Kubernetes事件里没显示的细节。journalctl -u containerd -f
按这些步骤逐步排查,你大概率会找到明确的错误信息或资源瓶颈——就是它们在搞破坏啦。
备注:内容来源于stack exchange,提问作者freebie
相关产品推荐
相关产品推荐

