答案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 30
在Service
部分中添加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