CoreOS:是否可以使用cloud-init启动一个可由机队管理的单元?

时间:2015-03-13 13:41:34

标签: coreos cloud-init

我可以使用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

1 个答案:

答案 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

但是,这确实意味着:

  • 当您执行fleetctl列表单元时,您将看不到该单元 由底层systemd管理。
  • 如果单元因主机发生故障而失败,则不会迁移到另一台主机 舰队主持人。

感谢您提出的问题和答案:@mbo: - )