我可以使用cloud-init启动单元,以便之后可以通过fleet管理它们吗?
看起来,只有正常的系统服务可以由云计算单元启动,但是没有它们可以在舰队控制之下。这是对的吗?
在群集引导后自动启动特定服务的可能解决方案是什么?
解决:
#cloud-config
write_files:
- path: /home/core/foo.service
owner: core:core
permissions: 0644
content: |
[Unit]
Description=Foo
Requires=docker.service
After=docker.service
[Service]
User=core
TimeoutStartSec=0
KillMode=none
EnvironmentFile=/etc/environment
ExecStartPre=-/usr/bin/docker kill foo
ExecStartPre=-/usr/bin/docker rm foo
ExecStartPre=/usr/bin/docker pull registry.example.com/foo
ExecStart=/usr/bin/docker run --name foo registry.example.com/foo
ExecStop=/usr/bin/docker stop foo
coreos:
etcd:
discovery: https://discovery.etcd.io/<token>
addr: $private_ipv4:4001
peer-addr: $private_ipv4:7001
units:
- name: etcd.service
command: start
- name: fleet.service
command: start
- name: auto-start-foo.service
command: start
content: |
[Unit]
Description=Autostarts foo-service
Requires=docker.service
After=docker.service
[Service]
WorkingDirectory=/home/core/
ExecStart=/usr/bin/fleetctl start foo.service
Type=oneshot
答案 0 :(得分:0)
几个星期前,我想知道同样的事情。 OP提出的方法使用了fleetctl来启动该过程。我认为能够做出fleetctl列表单位的影响,并且已启动的流程将由车队列出和管理。
您可以将来自write_files的内容放在units:部分中,并删除write_files部分,如下所示:
#cloud-config
coreos:
etcd:
discovery: https://discovery.etcd.io/<token>
addr: $private_ipv4:4001
peer-addr: $private_ipv4:7001
units:
- name: etcd.service
command: start
- name: fleet.service
command: start
- name: foo.service
command: start
content: |
[Unit]
Description=Foo
Requires=docker.service
After=docker.service
[Service]
User=core
TimeoutStartSec=0
KillMode=none
EnvironmentFile=/etc/environment
ExecStartPre=-/usr/bin/docker kill foo
ExecStartPre=-/usr/bin/docker rm foo
ExecStartPre=/usr/bin/docker pull registry.example.com/foo
ExecStart=/usr/bin/docker run --name foo registry.example.com/foo
ExecStop=/usr/bin/docker stop foo
但是,这确实意味着:
感谢您提出的问题和答案:@mbo: - )