【发布时间】:2021-05-15 15:11:25
【问题描述】:
作为我的 cloud-init 的一部分,我需要下载一个大文件(即 6GB 工具链/SDK)。这一步通过runcmd执行,耗时3-5分钟,大约是初始化过程的一半时间。
是否可以至少提前在后台开始下载(即作为bootcmd 的一部分)并继续进行其余的初始化(即apt-get install ...)?
【问题讨论】:
标签: cloud-init
作为我的 cloud-init 的一部分,我需要下载一个大文件(即 6GB 工具链/SDK)。这一步通过runcmd执行,耗时3-5分钟,大约是初始化过程的一半时间。
是否可以至少提前在后台开始下载(即作为bootcmd 的一部分)并继续进行其余的初始化(即apt-get install ...)?
【问题讨论】:
标签: cloud-init
是的,这当然是可能的。例如,给定以下云配置:
#cloud-config
bootcmd:
- echo 'Starting foreground sleep' >> /var/tmp/log
- date +%s >> /var/tmp/log
- sleep 5
- date +%s >> /var/tmp/log
- echo 'Starting background sleep' >> /var/tmp/log
- date +%s >> /var/tmp/log
- sleep 10 &
- date +%s >> /var/tmp/log
我得到这样的结果:
cat /var/tmp/log
Starting foreground sleep
1613538543
1613538548
Starting background sleep
1613538548
1613538548
增加后台睡眠对 cloud-init 完成所需的时间没有影响。背景wget 应该类似地工作。
也就是说,这并不是bootcmd 的真正用途。如果您检查cloud-init docs,它指定bootcmd should only be used for things that could not be done later in the boot process。在bootcmd 运行之后,一些相当大的设置任务(包括磁盘设置)仍然可能发生,因此在启动早期开始一些大型下载可能不是一个明智的选择。
runcmd 模块应该在任何 apt 安装之前运行。您可以在您的云实例上使用cloud-init analyze show 进行验证。除非你有充分的理由使用bootcmd,否则你应该坚持使用runcmd。
【讨论】: