本文介绍阿里云容器服务ACK集群在使用过程中常见问题的故障分析和排查流程。
ACK集群异常
更多关于容器服务ACK的常见问题,请参见常见问题旧版索引。
容器服务ACK应用故障排查
Pod停留在Pending状态
表示该Pod不能被调度到任何一个节点上,通常是因为集群中缺乏需要的资源导致。您可以通过
kubectl describe pod
命令查看事件和排查。Pod停留在Waiting状态
说明此Pod已经被调度到某个节点,但是却不能运行。通常是私有镜像、公网镜像拉取不成功或镜像地址不存在等问题导致。
Pod不断被拉起但状态为Crashing或者Unhealthy
通常表示Pod已经完成调度并启动,但是启动失败,通常是由配置、权限等问题造成。您可以查看容器的日志,以诊断容器中应用程序出现的问题。
Pod状态为Running但是没有正常工作
通常是由部署使用的YAML文件中存在的部分字段拼写错误造成的,您可以通过校验部署来进行故障排查。
Service无法正常工作
在排除网络插件自身的问题外,最可能的是
label
配置有问题,您可以通过查看endpoints
进行故障排查。
更多信息,请参见Pod异常问题排查。
如何升级集群?
升级集群的Kubernetes版本,具体操作,请参见手动升级集群。
从ACK集群基础版升级到ACK集群Pro版,具体操作,请参见热迁移ACK集群基础版至ACK集群Pro版。
排查故障的经典步骤与常见原因
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。
建议您将上述信息上传到日志分析服务进行分析。具体操作,请参见快速入门。