阿里云首页

容器服务ACK集群故障排查

概述

本文主要介绍关于如何排查ACK集群出现的问题。

详细信息

检查集群节点

  1. 首先要做的是查看集群中的节点状态,确认所有的Node节点都存在并且状态是Ready,命令如下。
    kubectl get nodes
    系统显示类似如下。
  2. 对于异常的节点,执行以下命令,查看节点上的详细信息,以及节点上的事件。
    kubectl describe node [$NODE_NAME]
    说明
    • [$NODE_NAME]为您的节点名称。
    • kubectl输出的信息解析,请参见K8S官方文档

检查集群组件

此时,如果还不能确定问题在哪,则需要您进一步到Master节点上查询集群组件的日志:

  1. 执行以下命令,查看kube-system命名空间下所有的组件。
    kubectl get pods -n kube-system
    输出结果如下所示,其中,以kube-开头的Pod都是Kubernetes集群的系统级组件,coredns-开头的是DNS插件。
  2. 若组件状态异常,执行以下命令,查看其日志信息,定位并解决问题。
    kubectl logs -f [$Component_Name] -n kube-system
    说明:[$Component_Name]为异常组件名称。

检查kubelet组件

  1. 执行以下命令,查看kubelet的运行状态。
    systemctl status kubelet
  2. 如果您的kubelet运行状态不是active (running),那么您需要执行以下命令,进一步查看kubelet的日志,定位并解决问题。
    journalctl -u kubelet

集群常见问题

下表罗列了一部分ACK集群常见的故障原因以及处理方法:

故障场景 处理方法

API Server组件停止或Master组件停止:

  • 不能创建(停止、更新)Pod、Service、Deployment等资源。
  • 已有的Pod和Service仍然能够正常工作,除非该Pod或Service需要调用ACK的接口,例如Kubernetes Dashboard。

ACK组件本身有一定高可用的功能,建议您查看组件本身是否有异常。例如,ACK使用的API Server组件是SLB,您可以排查您SLB停止的原因。

API Server后端数据丢失:

  • API Server将不能再启动。
  • 已有的Pod和Service仍然能够正常工作,除非该Pod或Service需要调用ACK的接口,例如Kubernetes Dashboard。
  • 需要恢复(或重建)Apiserver的数据才能启动Apiserver。

若您创建了快照,在出现问题时,可以通过快照恢复正常的数据。若没有创建快照,建议问题解决后参见以下方法预防该问题:

个别节点关机:

该节点上的所有Pod不再运行。

尝试使用Deployment、StatefulSet、DaemonSet等控制器创建Pod,而不是直接创建Pod,避免Pod不能调度到其他正常节点。

kubelet组件故障:

  • 不能在异常Kubelet节点上再创建新的Pod。
  • kubelet可能错误地删除了某些Pod。
  • 节点被标记为unhealthy
  • Deployment或ReplicationController在其他节点创建了新的Pod。

您可以参考检查kubelet组件步骤定位解决问题:

  • 若您创建了快照,在出现问题时,可以通过快照恢复正常的数据。若没有创建快照,建议问题解决后,周期性的为kubelet软件所使用的数据卷创建快照,详情请参见使用云盘存储快照
  • 使用Deployment、StatefulSet、DaemonSet等控制器创建Pod,而不是直接创建Pod,避免Pod不能调度到其他正常节点。

人为配置或其他问题。

若您创建了快照,在出现问题时,可以通过快照恢复正常的数据。若没有创建快照,建议问题解决后,周期性的为kubelet软件所使用的数据卷创建快照,详情请参见使用云盘存储快照

若问题还是没有解决,请参见如何收集Kubernetes集群的诊断信息,尝试通过诊断信息定位解决问题,或者提交工单,将诊断信息提交给阿里云技术支持处理。

参考文档

本文的排查方案参考了以下文档:

适用于

  • 容器服务Kubernetes版
首页 容器服务ACK集群故障排查