如何等待完整的云初始化,然后将虚拟机标记为运行



我目前正在配置一个虚拟机作为Azure中的代理(Ubuntu作为映像)。其中,附加配置通过云初始化文件运行。

其中,除其他外,我在bootcmd中有以下'fix',在runcmd中有多个步骤。

然而,机器已经给出了在azure门户中运行的状态,同时仍然运行云配置阶段(cloud_config_modules)。这导致管道看到机器已经准备好使用了,而不是所有的东西都安装/配置好了,然后就中断了。

我尝试了几件没有达到预期效果的事情。之后,我偶然发现了以下文章/bug;

建议的解决方案工作,但是我切换到rhel映像,它停止工作。我注意到这个图像没有使用walinuxagent作为解决方案状态,而是waagent,所以我试图像下面的例子一样替换它,但没有成功。

bootcmd:
- mkdir -p /etc/systemd/system/waagent.service.d
- echo "[Unit]nAfter=cloud-final.service" > /etc/systemd/system/waagent.service.d/override.conf
- sed "s/After=multi-user.target//g" /lib/systemd/system/cloud-final.service > /etc/systemd/system/cloud-final.service
- systemctl daemon-reload

在此之后,还尝试将runcmd步骤设置为bootcmd步骤。这导致开机时间过长并最终冻结。


由于我对rhel和Linux总体上不太熟悉,我想寻求帮助,如果有人可能有一些建议,我可以额外尝试。

(应用一些其他配置来确保在cloud-final上等待。waagent内的服务?)

然而,机器已经运行状态,而仍然运行云配置阶段(cloud_config_modules)。

你能更具体一点吗?你从哪里读取的机器状态?

我问的原因是cloud-init status将报告status: running,直到cloud-init完成运行,此时它将报告status: done

等待cloud-init完成的目的是什么?我不确定到底你期望发生什么,但这里有几件事可能会有所帮助。

如果你想执行一个脚本"在结尾"对于cloud-init初始化,您可以将脚本直接放在runcmd中,如果您想在外部脚本中等待cloud-init,您可以执行cloud-init status --wait,它将打印一个可视指示器,并最终在cloud-init完成后返回。

在不太旧的Azure Linux虚拟机映像上,cloud-init而不是WALinuxAgent充当虚拟机的提供者。在云初始化处理(源)的早期阶段,在任何可配置用户数据的云初始化模块之前,VM被Azure云初始化数据源模块标记为已供应。WALinuxAgent只负责发放Azure虚拟机扩展。如果不修改VM映像并修补cloud-init Azure数据源的源代码,似乎不可能延迟向Azure发送"VM就绪"信号。

最新更新