据我所知,它cloud-init
可以处理实例的早期初始化cloud/VM
。我一直在使用它来帮助构建 KVM VM,效果非常好。
我不明白的一个方面cloud-init
是,一旦完成实例的初始创建,会发生什么。
- 它会自动禁用以便不再运行吗?
它是否可以在特定情况下再次执行(例如,在更改时
/etc/machine-id
)?我很确定我通过运行强制它在某个时候重新运行sudo rm -rf /var/lib/cloud/*
它的设计是否使得我应该
cloud-init
在实例构建并投入生产后卸载,或者cloud-init
即使在实例化之后仍保持安装状态(不执行任何操作)?
答案1
令人尴尬的是,我正在寻找的答案在文档中(我发誓在我问这个问题的时候它不在那里): https://cloudinit.readthedocs.io/en/latest/topics/boot.html#first-boot-determination
cloud-init 必须确定当前启动是否是新实例的首次启动,以便应用适当的配置。在实例的首次启动中,它应该运行所有“每个实例”配置,而在后续启动中,它应该仅运行“每个启动”配置。
因此,我的问题的答案是,cloud-init
根据云/VM 实例是首次启动还是后续启动,其行为可能会有所不同(可能)。
此外,cloud-init
它不会自行禁用(它只是运行不同的步骤),并且在完成初始化/安装阶段(首次启动)后无需将其删除。
默认情况下,cloud-init 会尝试通过检查缓存中的实例 ID 和运行时确定的实例 ID 来确定其运行在哪种情况下。如果它们不匹配,则这是实例的首次启动;否则,这是后续启动。在内部,cloud-init 将此行为称为检查。
因此,更改机器 ID ( /etc/machine-id
) 很可能会导致cloud-init
重新运行初始化阶段。删除缓存 ( sudo rm -rf /var/lib/cloud/*
)也会导致重新运行初始化阶段。