Skip to content

1.Kubernetes API 服务器响应变慢或不可用

1.1 问题点

Kubernetes API 服务器响应时间明显增加,或出现无法连接、请求超时、返回错误等情况

影响范围:

  • 直接影响:所有依赖 Kubernetes API 的操作(如 kubectl 命令、CI/CD 流程、集群自动化管理等)都将受到影响。
  • 间接影响:可能导致集群管理困难、应用部署延迟、监控数据丢失、故障响应不及时等问题,严重时可能影响整个系统的稳定运行

1.2 排查方法

  1. 检查 API 服务器日志:查看 API 服务器(kube-apiserver)的日志,查找异常消息、错误或警告,定位可能的问题根源。
  2. 监控 API 服务器性能指标:监视 API 服务器的 CPU、内存使用率、请求数、错误率等性能指标,判断是否存在资源瓶颈或异常波动。
  3. 检查 etcd 状态:API 服务器依赖于 etcd 存储集群状态,使用 etcdctl 工具检查 etcd 集群的健康状况和响应时间。
  4. 排查网络问题:检查 API 服务器所在节点的网络连接,确认与其他节点及客户端的网络通信是否正常。
  5. 审查近期变更:回顾最近对集群进行的配置更改、版本升级、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 nodeskubectl 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 自动更新失败,怎么办?

  • 检查更新策略是否设置正确,如 rollingUpdaterecreate
  • 检查 Kubernetes API server 和 kubelet 之间的连接是否正常
  • 检查 Pod 的定义是否正确

10. Kubernetes 集群中的状态检查错误,怎么办?

  • 检查节点日志和事件信息,并确认错误类型
  • 确认该状态检查是否与 kubelet 的版本兼容
  • 尝试升级 kubelet 和容器运行时等组件