全部产品
Search
文档中心

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

更新时间:Feb 21, 2024

本文主要为您介绍集群管理的常见问题。

Alibaba Cloud Linux操作系统的集群兼容CentOS的容器镜像吗?

兼容。更多信息,请参见使用操作系统Alibaba Cloud Linux 3

创建集群选择了containerd容器运行时,是否可以改为Docker?

集群创建后,容器运行时不支持切换。您可以创建不同类型运行时的节点池,节点池与节点池的运行时可以不同。更多信息,请参见节点池概述。如需将节点容器运行时从Docker迁移到containerd。具体操作,请参见将节点容器运行时从Docker迁移到containerd

容器运行时containerd、Docker、安全沙箱有什么区别?

容器服务 Kubernetes 版支持containerd、Docker、安全沙箱三种运行时。推荐您使用containerd运行时。Docker运行时仅支持v1.22版本及以下的集群;安全沙箱运行时仅支持v1.24版本及以下的集群。更多运行时的对比信息,请参见如何选择Docker运行时、Containerd运行时、或者安全沙箱运行时?。将ACK集群升级至v1.24及更高版本时,需将节点容器运行时从Docker迁移到containerd。具体操作,请参见将节点容器运行时从Docker迁移到containerd

容器服务ACK通过等保三级认证了吗?

容器服务ACK已同阿里云整体一起通过了等保三级认证。以下为阿里云厂商和您各自负责的云服务安全项。

  • 阿里云厂商负责的云服务安全项

    • 阿里云服务自身基础设施的安全性。

    • 集群控制面节点和etcd数据库的安全性。

    • 集群控制面组件的安全合规性,并接受第三方合规审核人员的定期验收。

  • 您负责的云服务安全项

    • 数据平面的安全配置,包括VPC的安全组配置等。

    • 节点和容器应用自身配置。

    • 节点操作系统(包括更新和安全补丁)。

    • 其他关联的应用程序软件。

    • 设备和管理网络侧的访问控制,例如防火墙规则。

    • 使用RAM或其他服务管理平台级身份和访问控制。

    • 敏感数据的安全合规保护。

误删了专有版集群的一个Master节点后,还能升级集群吗?

不能。删除专有版集群的Master节点后,无法添加Master节点,也无法进行集群的K8s版本升级。您可以重新创建Kubernetes专有版集群

如何访问Master节点?

  • ACK专有集群: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

    • 如果所有的Node节点都存在并且状态是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组件是SLB,您可以排查SLB停止的原因。

API Server后端数据丢失:

  • API Server不能再启动。

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

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

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

个别节点关机,即该节点上的所有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软件所使用的数据卷创建快照。详细信息,请参见使用云盘存储快照