2.3. cloud-init 的引导阶段
cloud-init
工具在以下 5 个引导阶段完成虚拟机配置。阶段是控制模块执行顺序的引导阶段的逻辑分组。默认模块在特定阶段执行。
在系统引导过程中,cloud-init
工具在五个 阶段 运行,确定 cloud-init
是否在运行,它在哪里找到其数据源,以及其他任务。每个阶段也属于模块执行 阶段,后者控制运行哪些模块。这些阶段包括:
检测阶段 :通过使用
systemd
服务,此阶段决定是否在引导时运行cloud-init
工具。ds-identify
工具检测在没有有效平台的情况下是否运行cloud-init
。此阶段属于 初始化 阶段,不执行任何模块。相反,它会识别
cloud-init
配置的数据源。本地阶段 :
cloud-init
搜索本地数据源,并应用网络配置,包括基于 DHCP 的回退机制。此阶段属于 初始化 阶段,不执行任何模块。
网络阶段 :
cloud-init
通过运行/etc/cloud/cloud.cfg
文件中cloud_init_modules
下列出的模块来处理用户数据。您可以在cloud_init_modules
部分种添加、删除、启用或禁用模块。此阶段属于 Networking 模块执行阶段。
配置 阶段:
cloud-init
运行/etc/cloud/cloud.cfg
文件中cloud_config_modules
部分下列出的模块。您可以在cloud_config_modules
部分种添加、删除、启用或禁用模块。此阶段属于 Configuration 模块执行阶段。
最后阶段 :
cloud-init
运行/etc/cloud/cloud.cfg
文件的cloud_final_modules
部分中包含的模块和配置。它可以包括特定软件包的安装,以及触发配置管理插件和用户定义的脚本。您可以在cloud_final_modules
部分种添加、删除、启用或禁用模块。这个阶段等同于 Finalization 模块执行阶段。
第一次引导虚拟机时,当 cloud-init
服务启动时,所有配置的模块都在其相应的阶段中执行。在后续引导时,某个模块是否在一个阶段中执行取决于该模块的 模块频率。模块频率在 cloud-init
配置中设置,并决定模块是否在每次 cloud-init
在实例上运行时执行,或者只在第一次运行 cloud-init
时执行,即使实例 ID 发生了变化。
用于唯一标识实例的实例 ID。当实例 ID 发生变化时,cloud-init
将实例视为新实例。详情请参阅 创建模块的场景定义。
可能的模块频率值如下:
-
PER_INSTANCE
表示模块在实例第一次引导时运行。例如,如果您克隆一个实例或从保存的镜像创建了一个新实例,指定为 per instance 的模块会再次运行。 -
ONCE
表示模块只运行一次。例如,如果您克隆实例或从保存的镜像创建新实例,指定为 “Per once” 的实例不会在这些实例上再次运行。 -
PER_ALWAYS
表示模块在每次引导时运行。
您可在配置模块时或使用命令行覆盖模块频率的设置。