运行 cloud-init 时无法找到系统网卡

运行 cloud-init 时无法找到系统网卡

cloud-init我刚刚在使用配置ubuntu18.04的网络时遇到了一个问题。

我只能向您展示 BMC 控制台的屏幕截图。

从该屏幕截图中,您可以看到cloud-init找到了所有 MAC 地址(包括正确的 MAC 地址),但仍然引发异常“无法找到系统 NIC...”

该系统从 qcow2 映像文件传输到 HDD,我们使用 openstack 的 network_data 类型,如屏幕截图所示。

cloud-init 输出日志

网络

答案1

该问题是由于 cloud-init 本地阶段开始得太早或网络接口识别太晚造成的。延迟 cloud-init 本地阶段的开始将会有所帮助。

Cloud-init 在启动过程中有五个阶段。(cloud-init 启动阶段)而且你遇到的问题是局部阶段的。

在本地阶段,cloud-init 生成网络配置(本例中为 netplan 配置文件)。必须在操作系统识别网络接口后执行。因为 cloud-init 应该知道接口的名称才能配置 netplan。

我不知道这种情况发生的原因是什么:Cloud-init 本地阶段开始得太早或网络接口识别太晚。我找到了这个问题,/var/log/syslog并通过延迟 cloud-init 本地阶段的开始来解决它。

Cloud-init 由几个 systemd 服务组成。本地阶段的一个服务是cloud-init-local.service(位于/lib/systemd/system/cloud-init-local.service。)我使用 guestfish 运行 qcow2 映像,并ExecStartPre=sleep 30Service部分中添加cloud-init-local.service。(systemd.service

在我的系统中,finalcloud-init-local.service是,

[Unit]
Description=Initial cloud-init job (pre-networking)
DefaultDependencies=no
Wants=network-pre.target
After=hv_kvp_daemon.service
After=systemd-remount-fs.service
Before=NetworkManager.service
Before=network-pre.target
Before=shutdown.target
Before=sysinit.target
Conflicts=shutdown.target
RequiresMountsFor=/var/lib/cloud

[Service]
Type=oneshot
ExecStartPre=sleep 30
ExecStart=/usr/bin/cloud-init init --local
RemainAfterExit=yes
TimeoutSec=0

# Output needs to appear in instance console output
StandardOutput=journal+console

[Install]
WantedBy=cloud-init.target

相关内容