定位:跨平台、多发行版的云实例初始化标准。
- 工作在启动云实例和连接到云实例之间
- 即保证云实例启动后能同云平台建立通信
- 不仅仅是云实例,还有裸金属、计算机(只要能联网)
- 配置内容
- 主机名、网络配置
- SSH 私钥
- 自定义脚本
- 挂载临时内容
- 用户配置
- 默认区域(locale)
工作原理
cloud-init 可以简单区分两个阶段(实际是五个):
- 早期本地阶段(local stage / early boot):连网之前
- 后期启动阶段(late boot stage):网络配置后
详细五阶段:
- Detect
- Local
cloud-init-local.service- 本地阶段:发现数据源、获取配置数据、应用网络配置
- 确定数据源:检查硬件配置,据此确定应该使用的数据源
- 数据源:提供所有配置数据
- 网络配置来源
datasource
fallback:兜底配置:eth0上配置 DHCPnone:/etc/cloud/cloud.cfg上禁用:network: {config: disabled}
- Network
cloud-init-network.service- 配置内容:SSH
- Config
cloud-config.service
- Final
cloud-final.service
- 获取配置
- Metadata:机器 id、主机名、网络配置
- Vendor Data:云厂商数据
- 特定云平台集成
- 硬件优化
- user data:用户数据
- ssh 密钥
- 自定义脚本
- 写入网络配置
第二阶段:此阶段内容就与元数据不相干了
- 配置管理:与 Puppet、Ansible 交互
- 安装软件
- 用户账户
- 执行用户脚本