50-cloud-init.yaml 中“对它的更改不会在整个实例中持续存在”实际上是什么意思

agg*_*k02 8 static-ip cloud-init netplan

在最近的 Ubuntu 中,netplan 是配置网络适配器的默认方式。我想要我的一个静态 IP,并且有一些关于如何做到这一点的指南。有人指出您需要编辑50-cloud-init.yaml。但该文件有一个不祥的警告:

# This file is generated from information provided by
# the datasource.  Changes to it will not persist across an instance.
# To disable cloud-init's network configuration capabilities, write a file
# /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg with the following:
# network: {config: disabled}
Run Code Online (Sandbox Code Playgroud)

askubuntu 上的一个答案引用了这一点,并让用户这样做。(注意它的渲染器设置为 networkd。)

哪种方法是正确的?他们都工作吗?

最令人困惑的是,“跨实例持久化”是什么意思?这些设置在重新启动后仍然保持良好。我什么时候会丢失 50-cloud-init.yaml 中的设置?

Lis*_*tro 8

“不跨实例”警告意味着如果您在仍必须执行首次 cloud-init 运行(启动时)的映像中输入对 yaml 文件的更改,则更改将被 cloud-init 覆盖。

Cloud-init 用于在第一次启动时配置东西。为此,它会在第一次(甚至可以选择后续)启动时更改文件。50...yaml 文件就是其中之一。

一旦 cloud-init 第一次在映像上运行,它就不会再次运行这些更改。

因此,警告建议不要更改容器和虚拟机等的原始、未使用的系统映像上的文件。

顺便说一句,“cloud-init clean”命令会将 cloud-init 状态恢复为“以前从未运行过”,因此也会重新生成 50....yaml 文件。