全部产品
Search
文档中心

容器服务 Kubernetes 版 ACK:集群管理FAQ

更新时间:Aug 09, 2024

本文介绍您在创建集群、使用集群、管理集群等过程中可能遇到的常见问题及对应解决方案。

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节点为例。

  1. 登录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(杭州)地域下载。

  2. 执行以下命令,给诊断脚本添加执行权限。

    chmod u+x /usr/local/bin/diagnose_k8s.sh
  3. 执行以下命令,进入指定目录。

    cd /usr/local/bin
  4. 执行以下命令,运行诊断脚本。

    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
  5. 执行如下命令,查看存放集群诊断信息的文件。

    ls -ltr | grep diagnose_1514939155.tar.gz
    说明

    将diagnose_1514939155.tar.gz替换为现场环境产生的日志文件名称。

收集Windows节点诊断信息

Windows系统的Worker节点,请下载并运行diagnose诊断脚本,收集集群诊断信息,具体操作如下。

说明

Windows系统仅充当Worker节点。

  1. 登录异常Worker节点,打开运行窗口,输入cmd,单击确定,打开命令行工具。

  2. 执行以下命令,进入PowerShell模式。

    powershell
  3. 执行以下命令,下载并运行诊断脚本。

    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集群出现的问题?

步骤一:检查集群节点

  1. 执行以下命令,查看集群中的节点状态,确认所有的Node节点都存在并且状态是Ready。

    kubectl get nodes

    预期输出类似如下。p

    • 如果所有的节点都存在并且状态是Ready,表明集群节点没有问题。

    • 如果节点异常,请执行步骤2

  2. 执行以下命令,查看节点上的详细信息以及节点上的事件。

    替换[$NODE_NAME]为您的节点名称。

    kubectl describe node [$NODE_NAME]
    说明

    关于kubectl输出的信息解析,请参见Node status

步骤二:检查集群组件

如果检查完集群Node节点后仍然无法确认问题,请继续在控制平面上检查集群组件日志。

  1. 执行以下命令,查看kube-system命名空间下所有的组件。

    kubectl get pods -n kube-system

    预期输出如下。1其中,以kube-开头的Pod都是Kubernetes集群的系统组件,coredns-开头的是DNS插件。预期输出表明,组件状态正常。如果组件状态异常,请执行下一步。

  2. 执行以下命令,查看其日志信息,定位并解决问题。

    替换[$Component_Name]为异常组件名称。

    kubectl logs -f [$Component_Name] -n kube-system

步骤三:检查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默认使用CLB实例,您可以排查CLB状态异常的原因。

API Server后端数据丢失:

  • API Server不能再启动。

  • 已有的Pod和Service仍然能够正常工作,除非该Pod或Service需要调用ACK的接口,例如Kubernetes Dashboard。

  • 需要恢复或重建API Server的数据才能启动API Server

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

个别节点关机,即该节点上的所有Pod不再运行。

使用Deployment、StatefulSet、DaemonSet等工作负载创建Pod,而不是直接创建Pod,避免Pod无法调度到其他正常节点。

kubelet组件故障:

  • 不能在异常kubelet节点上创建Pod。

  • kubelet可能错误地删除了某些Pod。

  • 节点被标记为unhealthy

  • Deployment或Replication Controller在其他节点创建了新的Pod。

  • 若您创建了快照,在出现问题时,可以通过快照恢复正常的数据。若没有创建快照,请联系我们反馈问题。问题解决后,周期性地为kubelet软件所使用的数据卷创建快照。详细信息,请参见使用云盘存储快照

  • 使用Deployment、StatefulSet、DaemonSet等工作负载创建Pod,而不是直接创建Pod,避免Pod无法调度到其他正常节点。

人为配置或其他问题。

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

如何创建包年包月的节点,但使用按量计费的API Server CLB实例?

当您选择集群的付费类型为包年包月时,节点池中的节点(即ECS实例)和API Server的CLB实例均会创建为包年包月的实例。如果您希望使用包年包月的节点,但API Server的CLB为按量计费,您可以参照以下流程实现:

  1. 创建集群,且满足以下配置项。关于创建集群的配置项详细说明,请参见创建ACK托管集群

    • 付费类型:选择按量付费,此时将为API Server创建一个私网CLB实例,默认为按使用量计费。

    • 期望节点数:设置为0,表示暂无需创建节点。

  2. 准备包年包月的ECS实例。如需创建,请参见一键购买包年包月实例

  3. 将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的访问控制策略