如何使用 cloud-init 重新加载网络配置?

int*_*ect 24 cloud networking cloud-init netplan 18.04

我已经安装了 Ubuntu Server 18.04,而不是旧的/etc/network/interfaces,我的网络配置现在似乎存在于一系列 YAML 文件中/etc/netplan,其中我实际拥有的唯一一个是/etc/netplan/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}
network:
    ethernets:
        ens3:
            addresses: []
            dhcp4: true
            dhcp6: true
            nameservers: {}
            optional: true
        ens4:
            addresses: []
            dhcp4: true
            dhcp6: true
            nameservers: {}
            optional: true
    version: 2
Run Code Online (Sandbox Code Playgroud)

这似乎是由cloud-init, from生成的/etc/cloud/cloud.cfg.d/50-curtin-networking.cfg

network:
  ethernets:
    ens3:
      addresses: []
      dhcp4: true
      dhcp6: true
      nameservers: {}
      optional: true
    ens4:
      addresses: []
      dhcp4: true
      dhcp6: true
      nameservers: {}
      optional: true
  version: 2
Run Code Online (Sandbox Code Playgroud)

编辑此配置并将更改应用于跑步机的正确方法是什么?Netplan 文件中的注释向我建议它是短暂的并且在重启时生成cloud-init,所以我应该编辑cloud-init的配置。但是即使在编辑它并重新启动之后,我也没有看到 Netplan 文件有任何更改,而且我绝对不知道如何cloud-init手动应用配置更改。再次阅读评论时,现在在我看来,它谈论的是在机器的破坏和娱乐中不会持续存在的变化,这似乎是不言而喻的。很明显我误解了一些东西。

所以我的问题是:

  1. 应该在新的cloud-init/netplan系统中的哪个位置进行手动网络配置?

  2. 如何应用我所做的更改/etc/netplan

  3. 如何应用我所做的更改/etc/cloud/cloud.cfg.d

Mas*_*mes 7

从 cfg 生成 yaml 的技巧似乎是......

cloud-init clean -r
Run Code Online (Sandbox Code Playgroud)

下一个问题是如何从 seed.iso 或 nocloud-net 元数据中获取该 cfg 集

r 标志与任何重新启动相同 shutdown -r now

如果您运行cloud-init init(不重新启动),则 /etc/netplan/50-cloud-init.yaml 没有可见的更改

所以仍然不清楚如何在不重启的情况下触发它?我试过了cloud-init init然后systemctl restart cloud-init

我也曾尝试cloud-init -d modules --mode configcloud-init -d modules --mode final

好吧,等等,我想我找到了……

systemctl restart cloud-init-local.service
Run Code Online (Sandbox Code Playgroud)

它似乎在您cloud-init clean运行后从云 cfg 重建 netplan yamlcloud-init init不这样做。[Ubuntu 19.04 云初始化 19]

[此设计中的活动部件过多]

注意:我发现了一个改进,它使这两个命令都达到了预期的结果。

cloud-init clean --logs
cloud-init init --local
Run Code Online (Sandbox Code Playgroud)

  • 这太可怕了。 (3认同)
  • 您可能想提前提及,`cloud-init clean -r` 会重新启动服务器并更改服务器主机密钥。这两件事对我来说都是惊喜。 (3认同)
  • BjornW 以什么方式?您是否像我一样对 cloud-init 本身不满意,我展示了发现的路径(展示了哪些有效,哪些无效),或者您不了解什么。这可能很糟糕,但它不仅仅是“很糟糕”,因为它还展示了如何实际做到这一点。无论如何,如果您的批评具有建设性,也许我可以解决您的疑虑。 (2认同)
  • 确切地说,我只是对 cloud init (和 netplan ..)感到恼火,对你的答案本身没有批评:)我最终只是简单地 apt-get remove cloud-init .. (2认同)

hey*_*ema 1

首先,将当前/etc/netplan/*.yaml文件备份到类似/etc/netplan/*.yaml.BAK.

然后您可以进行任何您想要的更改/etc/netplan/*.yaml。创建/编辑 .yaml 文件时,缩进和间距以及无制表符非常重要。

仅供参考:您现有的 .yaml 文件应以以下内容开头:

network:
  version: 2
  renderer: networkd
Run Code Online (Sandbox Code Playgroud)

然后:

sudo netplan --debug generate# 生成配置文件

sudo netplan apply# 应用于当前系统

reboot# 确认操作正确

有关更多示例和配置指南,请参阅https://netplan.io/examples

  • 这仅回答了问题的第一部分,其中 netplan --debug apply 就足够了(不需要生成),但 cloud-init 文件 /etc/cloud/cloud.cfg.d/50-curtin-networking.cfg 如果您更改它它永远不会自动生成 netplan 文件,并且该文件应该来自 nocloud (seed.iso 或 nocloud-net 元数据)? (4认同)