我在 Amazon EC2 上运行 CoreOS 服务器。我想在启动时提供服务器的用户数据太长,我的启动配置无法处理。我将如何解决这个问题?
我要走的路径是将 cloud-config yaml 文件发送到 S3,使用有权访问 S3 上的对象的 IAM-Role 启动服务器,下载、验证并安装它。然而,“安装它”部分被证明是棘手的。
我试图引用 S3 上的配置的精简云配置:
#cloud-config
coreos:
update:
reboot-strategy: off
units:
- name: extra-cloudinit.service
command: start
content: |
[Unit]
Description=Gets S3 cloud-config and runs it.
[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=-/bin/mkdir /cloud-init
ExecStart=/bin/docker run --rm -v /cloud-init/:/data/ pebbletech/docker-aws-cli aws s3 cp s3://my-deployment/cloud-config/cloud-init-v1.yaml /data/
ExecStart=/bin/bash -c 'cd /cloud-init/; echo "efc158573d28193f63887c911ac5b01af287d2dd cloud-init-v1.yaml" | sha1sum -c -'
ExecStart=/usr/bin/coreos-cloudinit --from-file=/cloud-init/cloud-init-v1.yaml
ExecStart=/usr/bin/systemctl restart docker
我在托管在 S3 上的 cloud-config 中为 docker 添加了一个插件,因此我需要重新启动它。问题是脚本永远不会重新启动 docker。运行ExecStart=/usr/bin/systemctl daemon-reload
似乎杀死了整个事情并重新启动它并且 systemd 陷入了一个循环。
我错过了什么?这似乎是一个很常见的用例?这是反模式吗?作为一种解决方法,我可以将一些东西移动到用户数据云配置中,但是我在 2 个地方有主配置,这看起来很奇怪。我只想在 S3 中将该对象引用为用户数据。