定位:跨平台、多发行版的云实例初始化标准。

  1. 工作在启动云实例和连接到云实例之间
    1. 即保证云实例启动后能同云平台建立通信
  2. 不仅仅是云实例,还有裸金属、计算机(只要能联网)
  3. 配置内容
    1. 主机名、网络配置
    2. SSH 私钥
    3. 自定义脚本
    4. 挂载临时内容
    5. 用户配置
      1. 默认区域(locale)

工作原理

cloud-init 可以简单区分两个阶段(实际是五个):

  1. 早期本地阶段(local stage / early boot):连网之前
  2. 后期启动阶段(late boot stage):网络配置后

详细五阶段:

  1. Detect
  2. Local
    1. cloud-init-local.service
    2. 本地阶段:发现数据源、获取配置数据、应用网络配置
    3. 确定数据源:检查硬件配置,据此确定应该使用的数据源
      1. 数据源:提供所有配置数据
    4. 网络配置来源
      • datasource
      1. fallback:兜底配置:eth0 上配置 DHCP
      2. none/etc/cloud/cloud.cfg 上禁用:network: {config: disabled}
  3. Network
    1. cloud-init-network.service
    2. 配置内容:SSH
  4. Config
    1. cloud-config.service
  5. Final
    1. cloud-final.service
  6. 获取配置
    1. Metadata:机器 id、主机名、网络配置
    2. Vendor Data:云厂商数据
      1. 特定云平台集成
      2. 硬件优化
    3. user data:用户数据
      1. ssh 密钥
      2. 自定义脚本
  7. 写入网络配置

第二阶段:此阶段内容就与元数据不相干了

  1. 配置管理:与 Puppet、Ansible 交互
  2. 安装软件
  3. 用户账户
  4. 执行用户脚本

References

  1. cloud-init 24.3.1 documentation
  2. Boot stages - cloud-init 24.3.1 documentation