阿里云容器服务ACK集群常见问题和解决方法

本文介绍阿里云容器服务ACK集群在使用过程中常见问题的故障分析和排查流程。

ACK集群异常

更多关于容器服务ACK的常见问题,请参见常见问题旧版索引

容器服务ACK应用故障排查

  • Pod停留在Pending状态

    表示该Pod不能被调度到任何一个节点上,通常是因为集群中缺乏需要的资源导致。您可以通过kubectl describe pod命令查看事件和排查。

  • Pod停留在Waiting状态

    说明此Pod已经被调度到某个节点,但是却不能运行。通常是私有镜像、公网镜像拉取不成功或镜像地址不存在等问题导致。

  • Pod不断被拉起但状态为Crashing或者Unhealthy

    通常表示Pod已经完成调度并启动,但是启动失败,通常是由配置、权限等问题造成。您可以查看容器的日志,以诊断容器中应用程序出现的问题。

  • Pod状态为Running但是没有正常工作

    通常是由部署使用的YAML文件中存在的部分字段拼写错误造成的,您可以通过校验部署来进行故障排查。

  • Service无法正常工作

    在排除网络插件自身的问题外,最可能的是label配置有问题,您可以通过查看endpoints进行故障排查。

更多信息,请参见Pod异常问题排查

如何升级集群?

排查故障的经典步骤与常见原因

  • ECS实例之间的互通是否有异常?具体操作,请参见ECS实例间ping不通的排查思路

  • 安全组是否配置有误?具体操作,请参见安全组检查

    关于如何配置ECS安全组,请参见ECS安全组配置案例

  • 使用的RAM用户(即子账户)是否被正确授权?具体操作,请参见为RAM用户授权

  • 采用docker run的方式执行命令,确认运行环境是否正常?

  • 当集群异常时,是否可以使用kubectl命令登录集群?执行kubectl get event命令是否有异常?具体操作,请参见获取集群KubeConfig并通过kubectl工具连接集群

  • 在K8s里通过一个Pod去访问目标的Pod是否正常?具体操作,请参见Pod访问其他节点上的Pod异常

  • 通过Service方式访问应用是否正常?具体操作,请参见通过使用已有负载均衡的服务暴露应用

  • 通过Ingress方式访问应用是否正常?具体操作,请参见通过ALB Ingress访问服务

  • API Server、Scheduler或Controller日志是否有异常?

  • Docker Daemon日志是否有异常?

    如果报错信息提示docker daemon is not running,您只需要在cmd.exe中执行,开启守护进程即可。

    • 如果您使用的系统是Windows,请执行以下命令开启守护进程:

      cd C:\Program Files\Docker\Docker
      DockerCli.exe -SwitchDaemon
    • 如果您使用的系统是Linux,请执行以下命令开启守护进程:

      service docker restart

如何通过查看日志排查故障?

您可以通过以下命令查询日志信息,排查分析故障:

  • 查看事件:kubectl describe ****

  • Docker引擎日志:journalctl -u docker -f

  • Kubelet日志:journalctl -u kubelet -f

  • API Server日志:docker logs <api server container id>

    说明

    该命令用于查看专有集群的API Server日志,如果是托管集群,具体操作,请参见收集ACK托管集群控制平面组件日志

  • Scheduler日志:docker logs <scheduler container id>

  • Worker proxy日志:docker logs <worker proxy container id>

  • Master proxy日志:docker logs <master proxy container id>

  • Controller日志:docker logs <controller container id><controller container id>涉及的组件包括Kube Controller、Alicloud Monitor Controller、Alicloud Disk Controller和Cloud Controller。

建议您将上述信息上传到日志分析服务进行分析。具体操作,请参见快速入门