ACK集群节点初始化流程介绍

ACK提供稳定、高效、可预测的节点管理能力。无论是创建新节点还是对已有节点池进行扩容,ACK都遵循一套标准化的初始化流程,按照节点池的配置完成软件安装和配置,加入到Kubernetes集群中。

适用范围

集群版本为1.20及以上的ACK托管集群ACK专有集群中的ECS节点池和EGS节点池。

流程概览

image

步骤一:创建节点

收到扩容或自动添加节点的请求后,ACK将根据节点池配置(如实例规格、镜像、磁盘等)创建云服务器实例(ECSEGS),并由操作系统完成基础的初始化工作,如配置网络、挂载系统盘等。

接下来,Cloud-init工具将执行User Data脚本。该脚本由实例预自定义数据、ACK初始化脚本以及实例自定义数据组成。

步骤二:执行预自定义脚本

Cloud-init会先执行实例预自定义数据中的预自定义数据。该数据通常用于安装特定的系统依赖包或监控Agent、执行前置的环境检查或配置。

步骤三:执行ACK初始化脚本

本阶段包含多个子步骤,并提供了灵活的跳过机制以满足不同场景的需求。

3.1 准备基础环境

此阶段为节点配置Kubernetes运行所需的基础环境。

执行流程

  • 启动chronyd服务:确保节点与NTP服务器时间同步。

  • 设置Node IDHostname:

    • Node ID:计算并设置一个 Kubernetes 集群中的节点 ID。

    • Hostname:节点池配置了自定义节点名称时,还会将该名称设置为节点的 Hostname。

  • 数据盘初始化:如果节点池配置了数据盘,系统默认会按照字典序查找最后一块数据盘(优先使用NVMe),进行格式化并挂载,用于存放容器运行时环境(如containerd的工作目录/var/lib/containerd)。

跳过机制

  • 如需手动管理数据盘分区和文件系统,或使用已包含数据的存量数据盘,可在预自定义数据中创建文件 /var/.skip-auto-fdisk 以跳过自动格式化。

  • 若不跳过自动格式化,希望保留并迁移原运行时目录下的数据(如镜像缓存),可创建文件 /var/.keep-container-data。系统会在挂载数据盘后,将旧数据拷贝至新目录,避免镜像的重复拉取。

3.2 安装 Kubernetes 组件

此阶段安装运行Kubernetes所需的核心组件。

3.3 按需安装组件

根据节点池的配置,ACK 会按需安装相应组件。

  • 安装异构硬件驱动和device-plugin:如节点为GPUNPU等异构计算实例,系统会自动安装相应的驱动程序和Kubernetes设备插件NVIDIA Device Plugin,使集群能够识别和调度这些资源。

  • 安装镜像加速软件:若启用了使用按需加载容器镜像加速容器启动等功能,系统会安装相关加速软件并相应地修改容器运行时配置,以提升容器启动速度。

  • 安装SGX相关软件:若启用了ACK-TEE机密计算,系统会安装SGX驱动和相关依赖,为运行机密容器提供可信执行环境。

3.4 加入集群

完成核心组件安装后,kubelet 启动并向集群 API Server 进行注册。注册后,节点被正式加入到集群中,其初始状态被标记为 NotReady

3.5 额外安装基础软件

为保证节点的稳定和安全,ACK会默认安装一些额外的基础软件包并进行安全更新。

执行流程

  • 安装基础工具包:安装pigzcontainer-selinuxzlib等常用工具,以支持存储、网络等高级功能。

  • 安全更新(仅针对Alibaba Cloud Linux):

    • 按需升级systemd:为保证稳定性和功能,可能会升级systemd版本。

    • 执行minimal安全漏洞修复:通过yum update-minimal --exclude kernel* --security -y自动执行CVE安全漏洞修复。

跳过机制

  • 创建 /var/.skip-yum 文件可完全跳过此步骤(包括 CVE 修复),适用于离线环境或需要严格版本控制的场景。

  • 创建 /var/.skip-security-fix 文件可仅跳过 CVE 漏洞修复,但仍会安装基础工具包。

3.6 应用节点池OS配置

在所有软件安装和更新完成后,系统会再次应用节点池的OS配置,以确保所有设置在最终环境中依然生效。配置详情请参见管理节点池OS参数

3.7 按需执行安全加固

根据节点池配置的安全加固能力(阿里云OS加固、等保加固),系统会执行相应的安全加固脚本,例如固化内核参数、收敛系统权限等,以满足企业安全规范。具体加固策略,请参见Alibaba Cloud Linux等保2.0三级版镜像检查规则说明

步骤四:执行自定义脚本

此时开始执行实例自定义数据。该脚本通常用于执行应用层面的初始化操作,例如初始化应用数据目录、启动非容器化的辅助服务等。

并行执行流程

状态变更( NotReady 变为 Ready

节点加入集群并处于 NotReady 状态后,节点的kubelet会与控制面持续通信。当节点上的关键组件准备就绪,且节点通过所有健康检查后,其状态会自动更新为 Ready,被Kubernetes调度器视为可用资源,开始接收并运行Pod。

并行机制说明

节点状态变更与实例自定义数据的执行为并行任务。

  • 互不阻塞:实例自定义数据的执行与节点变为Ready状态的过程相互独立,即此脚本的执行结果(成功、失败或耗时)不会阻塞节点状态变为 Ready

  • 执行时序:两者并行执行,不能假定实例自定义数据执行完成时,节点上已经有应用Pod在运行;反之亦然。

  • 日志追踪:如需确认自定义脚本的执行情况,可登录节点,通过 cat /var/log/cloud-init-output.log 来查看其执行日志和最终状态。