本文介绍您在创建集群、使用集群、管理集群等过程中可能遇到的常见问题及对应解决方案。
Alibaba Cloud Linux操作系统的集群兼容CentOS的容器镜像吗?
兼容。更多信息,请参见Alibaba Cloud Linux 3。
创建集群选择了containerd容器运行时,是否可以改为Docker?
集群创建后,容器运行时不可更改。您可以创建不同类型运行时的节点池,节点池与节点池的运行时可以不同。更多信息,请参见创建节点池。
如需将节点容器运行时从Docker迁移到containerd。具体操作,请参见将节点容器运行时从Docker迁移到containerd。
v1.24及之后的集群版本不再支持将Docker作为内置容器运行时。请在v1.24及之后的集群中使用containerd作为节点池运行时。
容器运行时containerd、Docker、安全沙箱有什么区别?
容器服务 Kubernetes 版支持containerd、Docker、安全沙箱三种运行时。推荐您使用containerd运行时。Docker运行时仅支持v1.22版本及以下的集群;安全沙箱运行时仅支持v1.24版本及以下的集群。更多运行时的对比信息,请参见如何选择Docker运行时、Containerd运行时、或者安全沙箱运行时?。将ACK集群升级至v1.24及更高版本时,需将节点容器运行时从Docker迁移到containerd。具体操作,请参见将节点容器运行时从Docker迁移到containerd。
容器服务ACK通过等保三级认证了吗?
您可以为您的集群开启等保加固、配置基线检查策略,基于Alibaba Cloud Linux实现等保2.0三级版以及配置等保合规的基线检查,以便满足以下等保合规要求:
身份鉴别
访问控制
安全审计
入侵防范
恶意代码防范
更多信息,请参见ACK等保加固使用说明。
误删了ACK专有集群的一个Master节点后,还能升级集群吗?
不能。删除ACK专有集群的Master节点后,无法添加Master节点,也无法进行集群的版本升级。您可以重新创建ACK专有集群。
如何访问Master节点?
ACK专有集群:具体操作,请参见通过SSH连接ACK专有集群的Master节点。
ACK托管集群:ACK托管集群下控制面节点完全托管,您无法登录到控制面节点的终端。如果需要登录到控制面节点,您可以考虑使用ACK专有集群。
如何收集Kubernetes集群诊断信息?
当Kubernetes集群出现问题或者节点异常时,您可通过容器服务ACK提供的一键故障诊断功能,辅助您定位集群中出现的问题,详情请参见使用集群诊断。
如果集群诊断功能无法满足需求,您需要分别在Master节点和异常的Worker节点上收集Kubernetes集群的诊断信息时,请根据下文步骤收集Linux节点或Windows节点的诊断信息。
收集Linux节点诊断信息
不同节点所使用的操作系统有所限制,Worker节点可以使用Linux系统和Windows系统,Master节点只能使用Linux系统,以下方法同时适用于Linux系统的Master和Worker节点,该操作以Master节点为例。
登录Kubernetes集群的Master节点,执行以下命令,下载诊断脚本。
curl -o /usr/local/bin/diagnose_k8s.sh http://aliacs-k8s-cn-hangzhou.oss-cn-hangzhou.aliyuncs.com/public/diagnose/diagnose_k8s.sh
说明Linux节点的诊断脚本仅支持从华东1(杭州)地域下载。
执行以下命令,给诊断脚本添加执行权限。
chmod u+x /usr/local/bin/diagnose_k8s.sh
执行以下命令,进入指定目录。
cd /usr/local/bin
执行以下命令,运行诊断脚本。
diagnose_k8s.sh
系统显示类似如下,每次执行诊断脚本,产生的日志文件名称不同,本文以diagnose_1514939155.tar.gz为例,现场以实际环境为准。
...... + echo 'please get diagnose_1514939155.tar.gz for diagnostics' please get diagnose_1514939155.tar.gz for diagnostics + echo '请上传 diagnose_1514939155.tar.gz' 请上传 diagnose_1514939155.tar.gz
执行如下命令,查看存放集群诊断信息的文件。
ls -ltr | grep diagnose_1514939155.tar.gz
说明将diagnose_1514939155.tar.gz替换为现场环境产生的日志文件名称。
收集Windows节点诊断信息
Windows系统的Worker节点,请下载并运行diagnose诊断脚本,收集集群诊断信息,具体操作如下。
Windows系统仅充当Worker节点。
登录异常Worker节点,打开运行窗口,输入cmd,单击确定,打开命令行工具。
执行以下命令,进入PowerShell模式。
powershell
执行以下命令,下载并运行诊断脚本。
Windows节点的诊断脚本支持从所属地域下载,请根据集群所在地域替换命令行中的
[$Region_ID]
。Invoke-WebRequest -UseBasicParsing -Uri http://aliacs-k8s-[$Region_ID].oss-[$Region_ID].aliyuncs.com/public/pkg/windows/diagnose/diagnose.ps1 | Invoke-Expression
预期输出如下,表示收集诊断信息成功。
INFO: Compressing diagnosis clues ... INFO: ...done INFO: Please get diagnoses_1514939155.zip for diagnostics
说明diagnoses_1514939155.zip文件会保存在脚本执行时所在目录。
如何排查ACK集群出现的问题?
步骤一:检查集群节点
执行以下命令,查看集群中的节点状态,确认所有的Node节点都存在并且状态是Ready。
执行以下命令,查看节点上的详细信息以及节点上的事件。
替换
[$NODE_NAME]
为您的节点名称。kubectl describe node [$NODE_NAME]
说明关于kubectl输出的信息解析,请参见Node status。
步骤二:检查集群组件
如果检查完集群Node节点后仍然无法确认问题,请继续在控制平面上检查集群组件日志。
执行以下命令,查看kube-system命名空间下所有的组件。
kubectl get pods -n kube-system
预期输出如下。其中,以kube-开头的Pod都是Kubernetes集群的系统组件,coredns-开头的是DNS插件。预期输出表明,组件状态正常。如果组件状态异常,请执行下一步。
执行以下命令,查看其日志信息,定位并解决问题。
替换
[$Component_Name]
为异常组件名称。kubectl logs -f [$Component_Name] -n kube-system
步骤三:检查kubelet组件
执行以下命令,查看kubelet的运行状态。
systemctl status kubelet
如果您的kubelet运行状态不是active (running),那么您需要执行以下命令,进一步查看kubelet的日志,定位并解决问题。
journalctl -u kubelet
集群常见问题
下表罗列了一部分ACK集群常见的故障原因以及处理方法。
故障场景 | 处理方法 |
API Server组件停止或Master组件停止:
| ACK组件本身有一定高可用的功能,建议您查看组件本身是否有异常。例如,ACK集群的API Server默认使用CLB实例,您可以排查CLB状态异常的原因。 |
API Server后端数据丢失:
| 若您创建了快照,在出现问题时,可以通过快照恢复正常的数据。若没有创建快照,可联系我们。问题解决后,请参见以下方法预防该问题: |
个别节点关机,即该节点上的所有Pod不再运行。 | 使用Deployment、StatefulSet、DaemonSet等工作负载创建Pod,而不是直接创建Pod,避免Pod无法调度到其他正常节点。 |
kubelet组件故障:
|
|
人为配置或其他问题。 | 若您创建了快照,在出现问题时,可以通过快照恢复正常的数据。若没有创建快照,请联系我们反馈问题。问题解决后,周期性地为kubelet软件所使用的数据卷创建快照。详细信息,请参见使用云盘存储快照。 |
如何创建包年包月的节点,但使用按量计费的API Server CLB实例?
当您选择集群的付费类型为包年包月时,节点池中的节点(即ECS实例)和API Server的CLB实例均会创建为包年包月的实例。如果您希望使用包年包月的节点,但API Server的CLB为按量计费,您可以参照以下流程实现:
创建集群,且满足以下配置项。关于创建集群的配置项详细说明,请参见创建ACK托管集群。
付费类型:选择按量付费,此时将为API Server创建一个私网CLB实例,默认为按使用量计费。
期望节点数:设置为0,表示暂无需创建节点。
准备包年包月的ECS实例。如需创建,请参见一键购买包年包月实例。
将ECS实例添加至节点池。操作的使用限制、注意事项、操作流程以及常见问题,请参见添加已有节点。
配置集群API Server的SLB访问控制策略时需要放行哪些IP网段?
API Server的SLB的ACL控制规则必须放行以下网段。
容器服务 Kubernetes 版管控的网段100.104.0.0/16。
集群专有网络VPC的主网段及附加网段(如有),或集群节点所在的交换机vSwitch网段。
其他需访问API Server连接端点的客户端出口网段。
ACK Edge集群还需放行边缘节点出口网段。
ACK灵骏集群还需放行灵骏VPD网段。
配置访问控制策略白名单时,务必将以上放行网段添加到白名单;配置访问控制策略黑名单时,请勿将以上放行网段添加到黑名单。
更多信息,请参见配置集群API Server的访问控制策略。