1.Kubernetes API 服务器响应变慢或不可用
1.1 问题点
Kubernetes API 服务器响应时间明显增加,或出现无法连接、请求超时、返回错误等情况
影响范围:
- 直接影响:所有依赖 Kubernetes API 的操作(如
kubectl
命令、CI/CD 流程、集群自动化管理等)都将受到影响。 - 间接影响:可能导致集群管理困难、应用部署延迟、监控数据丢失、故障响应不及时等问题,严重时可能影响整个系统的稳定运行
1.2 排查方法
- 检查 API 服务器日志:查看 API 服务器(kube-apiserver)的日志,查找异常消息、错误或警告,定位可能的问题根源。
- 监控 API 服务器性能指标:监视 API 服务器的 CPU、内存使用率、请求数、错误率等性能指标,判断是否存在资源瓶颈或异常波动。
- 检查 etcd 状态:API 服务器依赖于 etcd 存储集群状态,使用
etcdctl
工具检查 etcd 集群的健康状况和响应时间。 - 排查网络问题:检查 API 服务器所在节点的网络连接,确认与其他节点及客户端的网络通信是否正常。
- 审查近期变更:回顾最近对集群进行的配置更改、版本升级、RBAC 规则调整等操作,判断是否引入了导致 API 性能下降的因素
2. 集群中某个服务不可用,如何排查?
- 使用
kubectl get pods -n [namespace_name]
命令查看相关服务的所有 Pod 的状态信息,判断是否存在故障。 - 使用
kubectl describe pod [pod_name] -n [namespace_name]
命令检查 Pod 的网络连接和存储访问等问题,寻找故障原因。 - 使用
kubectl describe service [service_name] -n [namespace_name]
命令查看服务的配置和状态信息,判断是否存在故障。
3. 集群中的 Node 和 Pod 不平衡,如何排查
- 使用
kubectl get nodes
和kubectl get pods -o wide --all-namespaces
命令查看所有 Node 和 Pod 的状态信息,判断是否存在分布不均的情况。 - 使用
kubectl top pod -n [namespace_name]
命令查看所有 Pod 的 CPU 和内存使用情况,判断是否存在资源瓶颈导致 Pod 分布不均。 - 使用
kubectl describe pod [pod_name] -n [namespace_name]
命令查看 Pod 所运行的节点信息,并使用kubectl describe node [node_name]
命令查看相关节点的状态信息,判断是否存在节点不平衡的情况。 - 使用
kubectl describe pod / node [node_name]
查看当前Pod / Node上是否有相关的亲和或反亲和策略导致固定调度。
4. 集群中某个节点宕机,如何处理
- 使用
kubectl get nodes
命令检查节点状态,找到异常节点。 - 使用
kubectl drain [node_name] --ignore-daemonsets
命令将节点上的 Pod 驱逐出去,并将其部署到其他节点上。添加--ignore-daemonsets
参数可以忽略 DaemonSet 资源。 - 如果需要对节点进行维护或替换硬件:
- 先将节点设置为不可以调度
kubectl cordon [node_name]
- 再通过
kubectl drain [node_name] --ignore-daemonsets
命令将节点上的 Pod 驱逐出去,并将其部署到其他节点上。 - 然后再次
kubectl delete node [node_name]
安全的进行节点下线。
- 先将节点设置为不可以调度
5. Kubernetes 命令执行失败,怎么办?
- 检查 Kubernetes API server 是否可用:
kubectl cluster-info
- 检查当前用户对集群的权限是否足够:
kubectl auth can-i <verb> <resource>
- 检查 kubeconfig 文件中的登录信息是否正确:
kubectl config view
6. Kubernetes master 节点不可用,怎么办?
- 检查 kube-apiserver、kube-scheduler、kube-controller-manager 是否都在运行状态
- 检查 etcd 存储系统是否可用
- 尝试重新启动 master 节点上的 kubelet 和容器运行时
7. Kubernetes 集群绕过了 LoadBalancer,直接访问 Pod,怎么办?
- 检查 Service 和 Pod 的通信是否使用了 ClusterIP 类型的 Service
- 确认该 Service 的 selector 是否匹配到了正确的 Pod
9. Kubernetes 集群中的 Deployment 自动更新失败,怎么办?
- 检查更新策略是否设置正确,如
rollingUpdate
或recreate
- 检查 Kubernetes API server 和 kubelet 之间的连接是否正常
- 检查 Pod 的定义是否正确
10. Kubernetes 集群中的状态检查错误,怎么办?
- 检查节点日志和事件信息,并确认错误类型
- 确认该状态检查是否与 kubelet 的版本兼容
- 尝试升级 kubelet 和容器运行时等组件