创建和管理灵骏节点池

更新时间:
复制 MD 格式

本文介绍灵骏节点池的常见操作流程,包括创建节点池、添加和移除节点、升级kubelet等,以及常见运维场景的处理方式。

适用范围

  • 灵骏集群类型:基础灵骏集群服务(Lite)。

  • ACK 集群类型:ACK托管集群Pro 1.31及以上版本。如需升级,详见手动升级集群

  • ACK 集群灵骏节点池:

    • OS kernel 版本:5.10 及以上。

    • OS cgroup 版本:Kubernetes 社区自 1.26 版本起支持 cgroup v2,自 1.35 版本起废弃对 cgroup v1 的支持。若集群版本为 1.35 及以上,节点需为使用 cgroup v2 的操作系统镜像,使用cgroup v1操作系统的节点将无法添加到ACK集群中。

      1.35以下版本的ACK集群升级至1.35及以上版本时,需使用cgroup v2的操作系统,否则将无法进行集群升级。详见将节点迁移至 cgroup v2

  • ACK 集群网络:

    • 仅支持 IPv4 单栈集群,不支持 IPv6 双栈集群。

    • 仅支持 Terway 独占 ENI 模式。

      • 不同灵骏机型的底层网络存在差异,低版本 Terway 可能不兼容。建议新建灵骏节点池前,将Terway(terway-controlplaneterway-eniip)升级至最新版本。

      • 需确保 ACK 集群灵骏节点池使用的Pod 交换机包含灵骏集群所在的可用区。

        ACK 集群的Pod 交换机支持在创建集群时配置。创建ACK集群后,添加灵骏节点前,也支持通过修改terway-eniip 参数PodVswitchId来配置。操作流程,请参见修改Pod虚拟交换机
  • ACK 集群组件版本:

    新建ACK托管集群Pro时默认使用最新组件版本。在存量集群中创建灵骏节点池时,如果已使用以下组件,请升级组件至指定版本。

    组件最低版本要求

    组件名称

    最低版本要求

    Kube Scheduler

    v1.31

    terway-eniip

    v1.16.8

    不同灵骏机型和镜像的底层物理网络功能存在差异,低版本 Terway 可能不兼容。建议新建灵骏节点池前,将Terway(terway-controlplaneterway-eniip)升级至最新版本。

    CoreDNS

    v1.11.3.5-5321daf49-aliyun

    Nginx Ingress Controller

    v1.11.4-aliyun.2

    ack-pod-identity-webhook

    v0.2.1

    security-inspector

    v0.16.1.0-gea4d02f-aliyun

    alicloud-monitor-controller

    v1.8.4

    ack-arms-prometheus

    v1.1.31

    logtail-ds

    v2.1.6

    csi-provisioner

    v1.32.2

    csi-plugin

    v1.32.2

    aliyun-acr-acceleration-suite

    v0.2.10

    ack-ai-installer

    v1.12.2

准备工作

  1. 创建灵骏集群。选择基础灵骏集群服务,并在灵骏节点分组中添加节点。

  2. 创建ACK托管集群。选择Pro,需与灵骏集群处在相同地域和相同VPC下。

  3. 创建ECS节点池。可在创建ACK托管集群时配置,建议保有 3 个及以上ECS节点,用于部署部分ACK管控组件,以保证高可用。

  4. 安装ACK集群组件。

    1. 通过组件管理页面安装ack-rdma-device-plugin组件。

    2. 若灵骏节点使用灵骏连接,则需单独申请ACK VPD CNI组件白名单,在创建灵骏节点池前,通过组件管理页面安装ACK VPD CNI组件。

      重要

      创建包含灵骏连接节点的节点池时,ACK 将自动完成两项操作:在集群安全组中添加灵骏分组的网段,并允许入方向访问;为节点池添加标签 alibabacloud.com/lingjun-network-type: vpd,请勿删除。

创建灵骏节点池

可在控制台完成节点池配置,包括基本配置、网络配置、存储配置等。部分配置项(尤其是节点池可用性相关和网络相关的配置)创建后不支持修改,请重点关注。创建节点池不影响已有节点池内的节点和业务。

创建前请注意

  • 灵骏节点池默认将容器运行时数据存储到系统盘,请确保为容器运行时目录预留充足可用空间,若磁盘空间不足将导致 Pod 驱逐或节点异常。

  • 新建灵骏节点池的 VPC 网络通信仅支持使用Terway独占ENI模式,请确认单节点Pod数限额满足业务需求。

  • 灵骏节点池中的节点默认携带污点(Taint)node-role.alibabacloud.com/lingjun: NoSchedule,避免系统组件(非 DaemonSet)调度到灵骏节点上占用资源。若 Pod 需调度到灵骏节点,可为 Pod 添加对该Taint的容忍,实现仅特定工作负载调度到灵骏节点的效果。也可以根据业务需求,换为自定义Taint,实现相同效果。

    可在组件满足最低版本要求后删除 Taint,但删除Taint后,系统组件或者其他工作负载可能调度到灵骏节点,占用昂贵的 GPU 节点资源。
  • 节点池默认携带的完整标签列表,请参见节点标签(Labels)配置项说明。请勿删除默认 Label。

操作步骤

  1. ACK集群列表页面,单击目标集群名称,在集群详情页左侧导航栏,选择节点管理 > 节点池

  2. 单击... > 创建灵骏节点池,按照页面提示完成灵骏节点池的创建。

    节点池创建后,部分配置项可通过编辑节点池修改。下表中,是否支持修改代表节点池创建后对应的配置项是否支持修改。

    • 基础配置

      配置项

      说明

      是否支持修改

      节点池名称

      自定义的节点池名称。

      地域

      默认选择当前集群所在地域,不可更改。

      托管配置

      白名单功能

      启用托管节点池,使用ACK提供的自动化运维能力。

      容器运行时

      仅支持containerd。

    • 灵骏资源

      配置项

      说明

      是否支持修改

      灵骏集群

      可选择与ACK集群位于相同VPCLite类型的灵骏集群。

      灵骏分组

      可选择与灵骏节点池位于相同VPC且未关联灵骏节点池的灵骏分组。

    • 存储

      自定义数据盘配置为白名单功能,可使用本功能将容器运行时目录挂载到本地数据盘。如需开通,请通过客户服务经理(PDSA)联系容器服务团队。
      重要
      • 节点池升级期间,若节点存储配置不一致,将按各节点的实际配置分别初始化。

      • 为保障稳定性,请确保为容器运行时目录预留充足可用空间,本地存储有丢失数据的风险,强烈建议使用云盘系统盘挂载容器运行时目录。

      配置项

      说明

      是否支持修改

      系统盘

      当前灵骏分组下节点的云盘系统盘配置。使用本地系统盘时,此处不展示具体配置。
      若未勾选配置本地盘挂载容器运行时目录,容器运行时目录默认挂载到系统盘(本地系统盘或云盘系统盘)。

      重要

      当容器运行时数据存储在系统盘时,若磁盘空间不足将导致 Pod 驱逐或节点异常。为保障稳定性,请确保系统盘预留充足可用空间,或者配置独立数据盘用于容器运行时。请参见节点磁盘空间不足-DiskPressure了解节点磁盘空间不足的解决方案。

      不涉及

      数据盘

      灵骏节点使用的本地数据盘。勾选配置本地盘挂载容器运行时目录后,将随机使用一块本地数据盘将挂载为容器运行时占用目录,包括 /var/lib/container/var/lib/containerd/var/lib/kubelet 以及 /var/log/pods 等目录。

      可配置初始化设置:选择文件系统格式化方式(ext4 或 xfs)。仅对未格式化的本地盘生效。

      重要
      • 挂载目录须为空。非空目录挂载后,原有文件将无法访问。

      • 灵骏节点池仅支持挂载容器运行时目录到本地数据盘,不支持挂载到云盘数据盘。本地存储有丢失数据的风险,将容器运行时目录挂载到本地盘后,灵骏节点在下线维修(备机替换)时,不保留本地盘数据,可能会导致kubelet、containerd等容器运行时信息被清除,节点状态异常。维修完成后,需手动将其从节点池移除,并通过添加已有节点重新加入灵骏节点池。若您不希望手动操作,请选择挂载到云盘系统盘中。

      • 启用本功能时,请勿同时通过 ACK 实例预自定义数据或灵骏自定义数据(UserData)功能配置容器运行时目录,否则可能引发异常。

    • 高级选项(选填)

      展开查看

      配置项

      说明

      是否支持修改

      污点 (Taints)

      为节点添加键值对污点。有效污点键包含前缀(可选)和名称。如果有前缀,用正斜线(/)分隔。

      展开查看详细说明

      • :名称长度为1~63个字符,必须以字母、数字或字符[a-z0-9A-Z]开头和结尾,中间可包含字母、数字、短划线(-)、下划线(_)、英文半角句号(.)。

        如果指定前缀,必须为DNS子域,即一系列由英文半角句号(.)分隔的DNS标签,不超过253个字符,并以正斜线(/)结尾。

      • :污点值可以为空,不超过63个字符,必须以字母、数字或字符[a-z0-9A-Z]开头和结尾,可包含字母、数字、短划线(-)、下划线(_)、英文半角句号(.)。

      • Effect

        • NoSchedule:不接受任何新的、不容忍此污点的Pod被调度到该节点,但已在运行的Pod不受影响。

        • NoExecute:不仅不接受任何新的、不容忍此污点的Pod被调度到该节点,还会驱逐节点上任何已在运行的、不容忍此污点的Pod。

        • PreferNoSchedule:ACK会尽量避免将Pod调度到存在其不能容忍污点的节点上,但不会强制执行。

      节点标签(Labels)

      重要

      创建灵骏节点池时,ACK将自动为节点池添加标签以启用独占ENI模式,创建后请勿删除。

      不允许删除灵骏节点池默认添加的Label:

      • service.alibabacloud.com/exclude-node

      • alibabacloud.com/lingjun-worker

      • alibabacloud.com/lingjun-hpnzone

      • alibabacloud.com/lingjun-zoneid

      • alibabacloud.com/lingjun-network-type: vpd

      • alibabacloud.com/lingjun-machine-type

      • k8s.aliyun.com/exclusive-mode-eni-type: eniOnly

      为节点添加键值对标签。有效Key包含前缀(可选)和名称。如有前缀,前缀和名称之间用正斜线(/)分隔。

      展开查看详细说明

      • Key:名称长度为1~63个字符,必须以字母数字字符[a-z0-9A-Z]开头和结尾,中间可包含字母、数字、短划线(-)、下划线(_)、英文半角句号(.)。

        如果指定前缀,必须为DNS子域,即一系列由英文半角句号(.)分隔的DNS标签,不超过253个字符,以正斜线(/)结尾。

        以下前缀由Kubernetes核心组件保留,不支持指定

        • kubernetes.io/

        • k8s.io/

        • kubernetes.io/k8s.io/结尾的前缀。例如test.kubernetes.io/

          以下除外:

          • kubelet.kubernetes.io/

          • node.kubernetes.io

          • kubelet.kubernetes.io/结尾的前缀。

          • node.kubernetes.io结尾的前缀。

      • Value:可以为空,不超过63个字符,必须以字母数字字符[a-z0-9A-Z]开头和结尾,可包含字母、数字、短划线(-)、下划线(_)和英文半角句号(.)。

      容器镜像加速

      仅支持版本为1.6.34及以上的containerd运行时。

      新添加的节点将自动识别容器镜像是否支持按需加载功能,若支持则默认通过按需加载加速容器启动,以缩短应用启动时间,详情请参见使用按需加载容器镜像加速容器启动

      自定义节点名称

      白名单功能,不适用于非灵骏节点池
      • 说明:将灵骏节点的 Hostname 直接同步为节点的 NodeName。

      • 示例: 实例 Hostname 为 test,则节点 NodeName 为 test

      实例预自定义数据

      节点加入集群前,将运行指定的实例预自定义User-Data脚本

      例如,指定预自定义数据为 touch /tmp/pre-script,则节点上组合后的脚本执行顺序如下。

      #!/bin/bash
      # 输入的实例预自定义数据在此处执行
      touch /tmp/pre-script
      
      # ACK节点初始化脚本在此处执行

      实例自定义数据

      节点加入集群后,将运行指定的实例自定义User-Data脚本

      例如,指定实例自定义数据为 touch /tmp/post-script,则节点上组合后的脚本执行顺序如下。

      #!/bin/bash
      # ACK节点初始化脚本在此处执行
      
      # 输入的实例自定义数据在此处执行
      touch /tmp/post-script
      创建集群或扩容节点成功不代表实例自定义脚本执行成功。可登录节点执行grep cloud-init /var/log/messages查看执行日志。

Terway独占ENI模式说明

灵骏节点池仅支持 Terway 独占 ENI 模式(Terway 自 v1.14.4 起支持)。为兼容不同灵骏机型和镜像的底层网络差异,建议将 Terway 升级至 v1.16.8 及以上,请参见最低版本要求升级terway-eniip。

创建灵骏节点池时,ACK将自动为节点池添加标签k8s.aliyun.com/exclusive-mode-eni-type: eniOnly,以启用独占ENI模式,创建后请勿删除。详见为节点池配置独占ENI网络模式

如果灵骏节点池未添加该标签,则表明该节点池使用了共享ENI网络模式。
重要

在灵骏节点通过共享ENI模式使用VPC网络通信时,部分灵骏旧版本镜像存在偶发Pod网络不通的风险,可通过重建Pod临时恢复业务运行。如需彻底解决该问题,建议在业务空闲期升级Terway组件至最新版本,通过重新创建独占ENI模式的灵骏节点池来添加灵骏节点。

添加已有灵骏节点

如需将灵骏分组中的灵骏节点添加到ACK集群中作为Worker节点,或将移除的Worker节点重新加入灵骏节点池,可在容器服务管理控制台,将灵骏节点池关联的分组中的灵骏节点,批量添加到灵骏节点池中。添加后,可在节点池维度进行统一管理。

添加灵骏节点不替换节点原有的操作系统、系统盘和数据盘,存储数据仍然保留。

适用范围

  • 待添加的节点实例须已在本节点池关联的灵骏分组中,且未加入其他节点池。

  • 灵骏节点的(OperatingState)状态为使用中(Using)状态。

操作步骤

  1. ACK集群列表页面,单击目标集群名称,在集群详情页左侧导航栏,选择节点管理 > 节点池

  2. 节点池页面,单击⋮ > 添加已有节点,按照页面提示完成以下配置:

    • 添加已有灵骏节点实例:在实例列表选择待添加的实例。勾选显示不可用的实例可查看当前不可用的实例。

    • 数据盘挂载:选择数据盘的挂载方式。

      仅在已开通自定义数据盘配置白名单时开放
      • 按节点池配置:使用节点池预设的数据盘配置初始化并挂载数据盘。

        若节点池未预设数据盘配置,则保留节点原有配置。
      • 不初始化:不对数据盘进行初始化操作,保留节点原有数据盘配置。

        重要
        • 若各节点的存储配置不同,节点池升级期间,系统将按各节点的实际存储配置分别初始化数据盘,而非使用统一配置。

        • 使用按节点池配置时,挂载目录须为空。非空目录挂载后,原有文件将无法访问。

    添加完成后,ACK会自动在灵骏节点实例上添加以下标签,可在智能计算灵骏控制台查看:

    • ack.aliyun.com:纳管该节点的ACK托管集群ProID。

    • ack.alibabacloud.com/nodepool-id:纳管该节点的灵骏节点池ID。

移除灵骏节点

当不再需要某节点继续工作时,可将该节点从节点池中移除。移除操作可能影响业务,建议在业务低峰期进行。

注意事项

  • 排空节点:

    • 节点上存在 Pod 时,请勾选自动排空节点(drain),并确保集群资源充足,Pod 将自动迁移到其他节点。

    • 若应用配置了PDB,可能导致排空失败,进而导致移除失败。建议提前手动处理。

    • 排空后,若应用在其他节点上无法正常启动,移除任务将忽略此情况并继续执行。

    • 移除异常状态的节点时,请勿勾选自动排空节点(drain),否则可能导致移除失败。

  • 移除后的节点状态:

    移除灵骏节点仅将节点从灵骏节点池移出,不会将节点从灵骏分组中移出,也不会自动释放或退订节点。

    添加到节点池的灵骏节点实例不会随 ACK 集群或灵骏节点池的删除而释放,也不会从灵骏分组中自动缩容。请关注灵骏节点的计费状态,避免产生额外费用。

    如需进行更多节点与分组的管理操作,请前往智能计算灵骏控制台操作。

    移除为异步操作,请在节点列表中查看移除进度。

操作步骤

  1. ACK集群列表页面,单击目标集群名称,在集群详情页左侧导航栏,选择节点管理 > 节点池

  2. 单击目标灵骏节点池名称,在节点管理页面移除节点。

    • 单个节点移除:定位目标节点,在该节点右侧操作列,选择更多 > 移除

    • 批量节点移除:选中目标节点,单击页面下方的批量移除

  3. 选择是否需要自动排空节点(drain),仔细阅读页面注意事项后按照页面提示完成操作。

升级 kubelet 版本

灵骏节点池支持升级 kubelet 及容器运行时的版本。升级前请提前执行前置检查,暴露可能影响升级的风险。在发起升级后系统会自动执行前置检查,对检查不通过的节点跳过升级。

  • kubelet升级:将节点池内节点的kubelet升级到与控制面相同的版本。

  • 容器运行时升级:升级节点的容器运行时至最新版本。

重要

仅支持包含节点的灵骏节点池执行升级操作。

  1. ACK集群列表页面,单击目标集群名称,在集群详情页左侧导航栏,选择节点管理 > 节点池

  2. 在目标灵骏节点池的操作列,选择image > Kubelet 升级,按照页面提示完成以下配置:

    • 基础信息

      配置项

      说明

      kubelet 和运行时升级信息

      展示 kubelet和容器运行时当前版本和可升级版本。

      升级节点

      指定待升级节点(所有节点或部分节点)。

      升级方式

      原地升级时,将直接在原节点上更新替换所需的组件,不会替换系统盘,也不会重新初始化节点,原节点的数据不受影响。

      忽略警告级别检查项

      前置检查结果中存在节点池级别的警告项(如节点池中存在 Pod 使用了指向系统盘的 HostPath)时,是否忽略该项继续升级。

    • 批量升级策略

      配置项

      说明

      每批次执行最多节点数

      升级过程会根据设置的最大并行数依次对节点进行升级。

      自动暂停策略

      在节点升级过程中的暂停策略。

      每批次间隔时间

      自动暂停策略为不暂停时,可选择每个升级批次之间是否需要时间间隔或间隔的时长。可选范围为5~120分钟。

  3. 单击前置检查。若检查未通过,请参见页面提供的解决方案排查问题,通过后再继续。

  4. 单击开始升级,按照页面提示完成升级。

    升级时,您可以根据页面提示进行如下操作。

    • 暂停:集群暂停状态为节点池升级的中间状态,建议您不要在此期间对集群进行操作,并尽快完成升级过程。处于中间状态的集群会在7日之后关闭升级过程,并清理一切升级相关的事件和日志信息。

      暂停后,已完成升级的节点的kubelet和容器运行时不支持版本回退。

    • 取消:取消升级。单击取消后,已完成升级的节点的kubelet和容器运行时不支持版本回退。

灵骏节点常见运维场景

以下介绍灵骏节点在各运维场景中,对应的ACK侧操作流程。

场景

说明

灵骏节点更换分组

  1. ACK: 从ACK集群中移除灵骏节点

    可根据业务需求,自行选择移除节点时是否同时自动排空节点(drain)。排水成功依赖集群中存在可以容纳被驱逐Pod的目标节点,请在排水前确认资源充足。

  2. 灵骏: 将节点从原分组缩容新建分组后将节点扩容至新分组。

  3. ACK: 创建新灵骏节点池时关联新分组。对灵骏侧完成扩容的节点(灵骏控制台节点状态变为使用中),通过添加已有灵骏节点重新加入灵骏节点池。

灵骏节点重启

  1. 灵骏: 重启节点

  2. ACK: 无需操作。重启期间节点将短暂离线,重启完成后(灵骏控制台节点状态变为使用中),ACK集群的节点状态自动变为Ready(就绪)状态。

灵骏节点重装

  1. ACK: 从ACK集群中移除灵骏节点

    可根据业务需求,自行选择移除节点时是否同时自动排空节点(drain)。排水成功依赖集群中存在可以容纳被驱逐Pod的目标节点,请在排水前确认资源充足。

  2. 灵骏: 重装节点

  3. ACK: 待灵骏侧重装完成后(灵骏控制台节点状态变为使用中),通过添加已有节点重新加入灵骏节点池。

灵骏下线维修(备机替换)

  1. 灵骏: 在CMS运维事件(灵骏审批运维操作能力)中完成授权,同意执行维修操作。

  2. ACK:

    • 若容器运行时数据目录挂载到云盘,ACK侧无需操作,灵骏节点维修完成后(灵骏控制台节点状态变为使用中),ACK集群的节点状态自动变为Ready(就绪)状态。

    • 若容器运行时数据目录挂载到本地盘,由于灵骏节点下线维修期间将进行换机操作,不会保留本地盘数据,将导致kubelet、containerd等容器运行时信息被清除,节点状态异常。灵骏节点维修完成后(灵骏控制台节点状态变为使用中),需手动将其从节点池移除,并通过添加已有节点重新加入灵骏节点池。

更多操作

使用RDMA功能

为启用Pod在灵骏节点的RDMA网络通信,请先在组件管理页面手动安装ack-rdma-device-plugin组件。具体使用方式请参见Pod在灵骏节点使用RDMA网络

FAQ

为什么维修后节点仍是未就绪(Not Ready)状态?

  • 现象:灵骏节点由于硬件问题进行了下线维修,但维修完成后,ACK集群中节点状态仍然是未就绪(Not Ready)状态。

  • 原因:灵骏节点下线维修期间将进行换机操作,不保留本地盘数据,可能会导致kubelet、containerd等容器运行时信息被清除,节点状态异常。

  • 解决方案:维修完成后,需手动将其从节点池移除,并通过添加已有节点重新加入灵骏节点池。