cloud-init 26.2 介绍与选型指南
cloud-init 26.2 介绍与选型指南:官方资料溯源的首次启动初始化定位、四阶段执行与数据源架构、user-data/#cloud-config 特性与 NoCloud 快速上手,以及与 Ignition、AutoYaST、Anaconda/kickstart 的量化选型对比(2026-10-19 实查,未做本地安装实测)。
cloud-init 26.2 介绍与选型指南
目标:基于官方公开资料(canonical/cloud-init 官方仓库、GitHub Releases、官方文档站 docs.cloud-init.io)梳理 cloud-init 的定位、架构、功能与选型口径,并与 Ignition、AutoYaST、Anaconda/kickstart 做量化对比。本文仅做官方资料溯源,不做本地安装与运行实测;全部版本号、日期与社区数据于 2026-10-19 联网实查。
一、信息基准
1.1 查询说明
- 查询日期:2026-10-19。
- 信息获取方式:纯官方资料溯源(canonical/cloud-init 官方仓库 LICENSE 与 Releases、docs.cloud-init.io 官方文档),本文不做本地安装与运行实测。
- 版本结论:当前最新稳定版为 26.2(2026-07-29 发布,上游 tag 实查)。任务提示中的「25.x 线」与实查不符——25.x(25.1-25.3)已是上一代版本线,当前活跃线为 26.x,以实查为准。
1.2 版本依据
| 项目 | 实查结果(2026-10-19) | 来源 |
|---|---|---|
| 最新稳定版 | 26.2(2026-07-29) | github.com/canonical/cloud-init/releases(tag 26.2) |
| 上一版本 | 26.1(2026-02-28 发布,API published_at 实查) | 同上 Releases API |
| 发行版内包 | 26.2-0ubuntu2(2026-10-09)、26.2-0ubuntu1_26.04.1/24.04.1(2026-08-20) | Releases Atom 时间线 |
| 26.2 发布说明 | 历时约 5 个月、36 位贡献者、修复 18 个问题;含 NetworkManager route-metric、Jinja 沙箱化加固等 | 26.2 Release notes |
| 代码仓库 | canonical/cloud-init | github.com/canonical/cloud-init |
| 开源许可 | GPLv3 或 Apache-2.0 双许可(仓库 LICENSE 原文:「under the terms of either the GPLv3 or the Apache License, Version 2.0」) | 仓库 LICENSE |
| GitHub stars | 约 3.8k(shields.io 徽章实查) | shields.io(2026-10-19) |
1.3 官方来源清单
| 来源 | 地址 |
|---|---|
| 官方文档站 | https://docs.cloud-init.io/ |
| 源码仓库 | https://github.com/canonical/cloud-init |
| 发行页 | https://github.com/canonical/cloud-init/releases |
| 官网入口 | https://cloud-init.io/ |
二、软件概述
本文介绍的是 cloud-init 26.2(2026-07-29 发布)。
cloud-init 是云实例「首次启动初始化」的事实标准工具:实例第一次开机时,它从元数据服务或本地数据源读取配置,完成用户与 SSH 密钥注入、主机名与网络配置、软件包安装、脚本执行、文件写入等初始化动作。项目由 Canonical 主导维护,被主流公有云(AWS EC2、Azure、GCP、Oracle、CloudStack、OpenStack 等)与主流发行版(Ubuntu、Debian、RHEL 系、Alpine、部分 BSD 系等,26.x 发行说明持续扩展平台支持)预装,是镜像构建与 IaC 链路中最通用的首启抽象层。
以 GPLv3 或 Apache-2.0 双许可发布(仓库 LICENSE 实查),GitHub stars 约 3.8k(2026-10-19 实查)——stars 不高是因为它以「随发行版预装」为主要分发方式而非独立安装的明星项目。
三、核心架构
以下要素转述自官方文档站 docs.cloud-init.io(查询日期 2026-10-19)。
3.1 数据源(datasource)
cloud-init 通过「数据源」抽象获取实例元数据与用户配置:云端走各平台元数据服务(EC2、Azure、GCP、OpenStack、CloudStack、Oracle、Scaleway、Tilaa 等,26.x 发行说明持续增补),私有环境可用 NoCloud(本地 seed 文件/ISO、内核命令行或 SMBIOS 序列化注入)、ConfigDrive 等离线形态。同一套 user-data 逻辑可跨云复用,这是它成为跨云标准的关键。
3.2 四阶段执行模型
systemd 单元按顺序驱动四个阶段(官方文档命名):
| 阶段 | systemd 单元 | 职责 |
|---|---|---|
| init(Generator) | cloud-init.service(network 后) | 探测数据源、合并配置、写入 fstab 等早期动作 |
| init-local | cloud-init-local.service(网络前) | 本地数据源探测与网络配置准备 |
| modules-config | cloud-config.service | 执行 user-data 中的 config 类模块(hostname、users、package 等) |
| modules-final | cloud-final.service | 执行脚本类与最终模块(runcmd、scripts-user 等),上报完成 |
3.3 配置入口
- user-data:以
#cloud-config开头的 YAML 声明式配置(users、ssh_authorized_keys、packages、write_files、runcmd 等模块化键),或 MIME 多部分组合的脚本/云配置; - meta-data:实例标识(instance-id、local-hostname);
- network-config:可选的独立网络配置(v1/v2 两套格式);
- 官方提供 schema 校验(
cloud-init schema --system)与cloud-init status/query等诊断命令。
四、功能特性
4.1 首启初始化能力
- 用户/组创建与 sudo 规则、SSH 授权密钥与证书;
- 主机名、hosts、resolv、网络接口与路由(含 bond/bridge/VLAN,26.1 起 v1 网络状态支持);
- 软件包管理(apt/yum/apk 等发行版自适应)、仓库与 CA 证书注入;
- write_files、runcmd/bootcmd、power_state 等声明式模块与原生 shell 脚本。
4.2 平台与生态
- 云平台数据源覆盖面在同类中最广,26.2 仍在持续扩展(如 AmazonLinux 渲染器、AzureLinux 4.0 修复、OpenBSD meson 构建支持,见发行说明);
- 与 Packer、Terraform、各发行版官方云镜像、私有云(OpenStack/CloudStack)镜像流水线深度耦合,是事实上的「云镜像首启 API」。
4.3 26.2 系列状态
26.2(2026-07-29)为当前稳定线:新增 NetworkManager 路由度量支持、Azure apply_network_config_set_name 开关、Jinja 模板沙箱化安全加固、fstab 特殊字符转义修复等(官方 Release notes 实查)。26.x 与 25.x 的发行版内补丁(如 26.2-0ubuntu2,2026-10-09)持续更新。
4.4 版本演进口径
上游 minor 版本按年递增(25.1→25.3→26.1→26.2),每年约两个 minor;选型时以发行版内打包版本(如 26.2-0ubuntu1~24.04.1)为准,上游版本只决定特性集。
五、快速上手
以下示例转述自官方文档 NoCloud 快速教程(官方地址:https://docs.cloud-init.io/ ,本文不做本地实测)。
5.1 最小 user-data
#cloud-config
users:
- name: devops
groups: sudo
shell: /bin/bash
sudo: 'ALL=(ALL) NOPASSWD:ALL'
ssh_authorized_keys:
- ssh-ed25519 AAAA... user@host
packages:
- nginx
runcmd:
- [ systemctl, enable, --now, nginx ]
5.2 NoCloud seed 注入
将上述文件命名为 user-data 并配一个 meta-data(含 instance-id 与 local-hostname),通过云镜像的 --cloud-init 注入接口(或制作 ISO 标签为 cidata 的种子盘)随实例首启执行;执行后可用 cloud-init status --long 与 cloud-init query userdata 验证。
完整的四阶段执行、MIME 多部分与 ISO 种子实操,本站已实测整理为 《cloud-init 26.1 快速入门与 NoCloud 数据源实战》,字段级说明见 《cloud-init 26.1 配置参数详解》。
六、适用场景与限制
6.1 适用场景
- 公有云/私有云镜像的标准化首启配置(一次编写、多云复用);
- 与 Terraform/Packer 组合的不可变基础设施流水线;
- 本地虚拟化(NoCloud 种子盘)批量初始化测试机;
- 裸金属云(Bare Metal)与 OpenStack IaaS 的租户侧初始化。
6.2 限制与注意事项
- 只管「首次启动」:实例生命周期后段的配置管理应交给 Ansible 等工具,cloud-init 默认不会重复执行(除 per-instance/per-once 语义模块外);
- 各发行版内打包版本滞后于上游,特性核对要以镜像内
cloud-init --version输出为准; - 云数据源探测依赖各平台元数据服务的行为差异,跨云迁移时仍需回归测试;
- 复杂模板渲染历史上有安全通告(26.2 已对 Jinja 渲染做沙箱加固),生产环境应及时跟进发行版内安全补丁。
七、同类选型对比
7.1 候选概览
| 工具 | 定位 | 开源许可 |
|---|---|---|
| cloud-init 26.2 | 跨云通用的云实例首启初始化框架 | GPLv3 或 Apache-2.0 |
| Ignition v2.28.0 | Fedora CoreOS 系的首启磁盘声明式配置 | Apache-2.0 |
| AutoYaST | SUSE 系的安装应答与系统配置体系 | GPL-2.0 |
| Anaconda + kickstart | RHEL/Fedora 系安装器及其应答文件机制 | GPL-2.0 |
7.2 量化对比(2026-10-19 实查)
| 维度 | cloud-init 26.2 | Ignition v2.28.0 | AutoYaST | Anaconda/kickstart |
|---|---|---|---|---|
| 开源许可 | GPLv3 或 Apache-2.0 | Apache-2.0 | GPL-2.0 | GPL-2.0 |
| GitHub stars | 约 3.8k(canonical/cloud-init) | 约 980(coreos/ignition) | 约 26(yast/yast-autoinstallation) | 约 640(rhinstaller/anaconda) |
| 最近发版 | 26.2(2026-07-29;26.1 为 2026-02-28) | v2.28.0(2026-10-15) | 仓库无 GitHub Release(仅历史 tag),随 SUSE 产品发布 | anaconda-46.2(2026-10-13),版本节奏跟随 Fedora/RHEL |
| 版本节奏 | 年约两个 minor + 发行版内补丁 | 跟随 Fedora CoreOS 小步快跑 | 随 SUSE/openSUSE 发行版 | Fedora 月度级、RHEL 跟随大版本 |
| 作用时机 | 安装完成后首次启动及首启网络前/后各阶段 | 系统首启早期(initramfs)改写磁盘与分区 | 安装阶段应答 + 安装后配置 | 安装阶段应答(kickstart)+ 安装后脚本 |
| 配置模型 | #cloud-config YAML + 脚本,模块化渐进 | JSON(经 Butane 由 YAML 转换)声明磁盘/分区/文件,不可变理念 | XML/规则驱动的 AutoYaST profile | kickstart 应答文件(语法驱动安装器) |
| 适用版图 | 各发行版云镜像普遍预装,多云通用 | Fedora CoreOS/RHEL CoreOS、openSUSE MicroOS 等不可变系统 | SLES/openSUSE | RHEL/Fedora/CentOS 系及衍生版 |
(stars 与发版时间取自各项目 GitHub Releases/releases.atom 与 shields.io 实查,查询日期 2026-10-19;许可见各仓库 LICENSE/COPYING。)
7.3 选型建议
- 通用云工作负载、跨云镜像与租户侧首启配置,cloud-init 几乎是唯一同时被各家云与主流发行版预装的选择,生态位不可替代;
- 采用 Fedora CoreOS/RHEL CoreOS 等不可变系统的,首启用 Ignition(其声明式磁盘模型可重建分区),cloud-init 在 CoreOS 上不适用;
- 采购/交付绑定 SUSE 系,用 AutoYaST 与 Agama/安装器原生集成;RHEL/Fedora 系传统裸金属与 ESXi 批量装机,kickstart 仍是标准答案;
- 三类工具常按阶段组合:kickstart/Ignition 负责装机与磁盘,cloud-init 负责实例首启的租户侧注入,二者不是互斥关系。
八、参考链接
- 官方文档站:https://docs.cloud-init.io/
- 官网入口:https://cloud-init.io/
- 源码仓库:https://github.com/canonical/cloud-init
- 发行页:https://github.com/canonical/cloud-init/releases
- Ignition 仓库:https://github.com/coreos/ignition
- AutoYaST 仓库:https://github.com/yast/yast-autoinstallation
- Anaconda 仓库:https://github.com/rhinstaller/anaconda