我们正在编写使用 terraform(在 AWS 上)执行以下操作的代码:
- 使用我们提供的 cloud-config yaml 文件创建一个 core-os 实例 (1)
- 从该实例创建 AMI
到目前为止,该过程运行良好。
当我们通过 AWS 控制台从该 AMI 启动实例 (2) 时。新启动的实例不使用 cloud-config 文件。
它 (2) 具有通过 cloud-config yaml 文件在实例 (1) 中创建的服务/系统单元。但是这些服务已经死了。如果我们明确地使用它们启动它们,它们工作得很好systemctl
我们如何确保从该 AMI 创建的任何实例都应该在启动时启动这些服务/系统单元,或者应该加载该云配置文件?
(我们也将 cloud-config yaml 保存在机器内部的某个位置,如果我们通过 手动运行 cloud-config 文件coreos-cloudinit --from-file=path/to/file/cloud-config.yaml
,一切正常。但我们希望它在启动时无需任何手动步骤即可工作)
这是我们的云配置文件
#cloud-config
coreos:
etcd2:
# generate a new token for each unique cluster from https://discovery.etcd.io/new?size=3
# specify the initial size of your cluster with ?size=X
discovery: https://discovery.etcd.io/2cb27f1fecb57e14837016e04547aa32
# multi-region and multi-cloud deployments need to use $public_ipv4
advertise-client-urls: http://0.0.0.0:2379,http://0.0.0.0:4001
initial-advertise-peer-urls: http://127.0.0.1:2380
# listen on both the official ports and the legacy ports
# legacy ports can be omitted if your application doesn't depend on them
listen-client-urls: http://0.0.0.0:2379,http://0.0.0.0:4001
listen-peer-urls: http://0.0.0.0:2380,http://0.0.0.0:7001
units:
- name: etcd2.service
command: start
- name: fleet.service
command: start
- name: hello.service
command: start
content: |
[Unit]
Description=hello_docker
After=docker.service
Requires=docker.service
[Service]
TimeoutStartSec=0
ExecStartPre=-/usr/bin/docker rm busybox1
ExecStartPre=/usr/bin/docker pull busybox
ExecStart=/usr/bin/docker run --rm --name busybox1 busybox /bin/sh -c "while true; do echo Hello Docker; sleep 1; done"
ExecStop=/usr/bin/docker stop busybox1
您不需要制作自己的 CoreOS AMI,只需使用官方的 CoreOS AMI。将相同的 cloud-config 文件传递给您要创建的每个框,单元将启动。这使您的基础架构比您必须对内容进行快照更不可变。
我缺少的是,第一个实例 (1) 使用脚本作为用户数据,然后通过 cloud-init 命令运行 cloud-config。
相反,我必须将我的云配置复制到 /usr/share/oem/ 中,以便 AMI 创建的实例默认也使用该云配置。
此外,以下内容可能会帮助面临类似问题的人,但如前所述,它不会在第一次启动时启动。
您需要启用服务(确保它们具有安装部分)。
此服务不会在第一次启动时启动(因为该单元在 systemd 实现 multi-user.target 后启用)但它将在后续启动时运行。
此外,在拍摄快照时,请确保您之前删除了 /etc/machine-id。否则,所有机器都将具有相同的 ID。
参考:链接