ACK提供稳定、高效、可预测的节点管理能力。无论是创建新节点还是对已有节点池进行扩容,ACK都遵循一套标准化的初始化流程,按照节点池的配置完成软件安装和配置,加入到Kubernetes集群中。
适用范围
集群版本为1.20及以上的ACK托管集群和ACK专有集群中的ECS节点池和EGS节点池。
流程概览
步骤一:创建节点
收到扩容或自动添加节点的请求后,ACK将根据节点池配置(如实例规格、镜像、磁盘等)创建云服务器实例(ECS或EGS),并由操作系统完成基础的初始化工作,如配置网络、挂载系统盘等。
接下来,Cloud-init工具将执行User Data脚本。该脚本由实例预自定义数据、ACK初始化脚本以及实例自定义数据组成。
步骤二:执行预自定义脚本
Cloud-init会先执行实例预自定义数据中的预自定义数据。该数据通常用于安装特定的系统依赖包或监控Agent、执行前置的环境检查或配置。
步骤三:执行ACK初始化脚本
本阶段包含多个子步骤,并提供了灵活的跳过机制以满足不同场景的需求。
3.1 准备基础环境
此阶段为节点配置Kubernetes运行所需的基础环境。
执行流程
启动chronyd服务:确保节点与NTP服务器时间同步。
设置Node ID与Hostname:
Node ID:计算并设置一个 Kubernetes 集群中的节点 ID。
Hostname:节点池配置了自定义节点名称时,还会将该名称设置为节点的 Hostname。
数据盘初始化:如果节点池配置了数据盘,系统默认会按照字典序查找最后一块数据盘(优先使用NVMe),进行格式化并挂载,用于存放容器运行时环境(如containerd的工作目录
/var/lib/containerd
)。
跳过机制
如需手动管理数据盘分区和文件系统,或使用已包含数据的存量数据盘,可在预自定义数据中创建文件
/var/.skip-auto-fdisk
以跳过自动格式化。若不跳过自动格式化,希望保留并迁移原运行时目录下的数据(如镜像缓存),可创建文件
/var/.keep-container-data
。系统会在挂载数据盘后,将旧数据拷贝至新目录,避免镜像的重复拉取。
3.2 安装 Kubernetes 组件
此阶段安装运行Kubernetes所需的核心组件。
安装并配置kubelet,配置详情请参见自定义节点池kubelet配置。
安装运行时:安装并配置容器运行时(如containerd),配置详情请参见自定义节点池containerd配置。
3.3 按需安装组件
根据节点池的配置,ACK 会按需安装相应组件。
安装异构硬件驱动和device-plugin:如节点为GPU或NPU等异构计算实例,系统会自动安装相应的驱动程序和Kubernetes设备插件NVIDIA Device Plugin,使集群能够识别和调度这些资源。
安装镜像加速软件:若启用了使用按需加载容器镜像加速容器启动等功能,系统会安装相关加速软件并相应地修改容器运行时配置,以提升容器启动速度。
安装SGX相关软件:若启用了ACK-TEE机密计算,系统会安装SGX驱动和相关依赖,为运行机密容器提供可信执行环境。
3.4 加入集群
完成核心组件安装后,kubelet 启动并向集群 API Server 进行注册。注册后,节点被正式加入到集群中,其初始状态被标记为 NotReady
。
3.5 额外安装基础软件
为保证节点的稳定和安全,ACK会默认安装一些额外的基础软件包并进行安全更新。
执行流程
安装基础工具包:安装
pigz
、container-selinux
、zlib
等常用工具,以支持存储、网络等高级功能。安全更新(仅针对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
来查看其执行日志和最终状态。