CoreOS:是否可以使用云初始化启动一个单元,该单元可由车队管理



我可以使用 cloud-init 启动单位,以便以后由舰队管理它们吗?

似乎只有正常的系统服务才能由云单元启动,但不能将它们置于队列控制之下。这是对的吗?

引导集群后自动启动特定服务的可能解决方案是什么?

解决:

#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

几周前,我也在想同样的事情。 OP提出的方法使用fleetctl来启动该过程。 我认为这会影响能够进行 fleetctl 列表单位,并且启动的过程将由 舰队 列出和管理。

您可以将write_files中的内容放在单元中:部分并删除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 列表时,您不会看到该单位 - 单位,它正在由底层系统进行管理。
  • 如果设备由于此主机故障而发生故障,则不会迁移到另一台主机舰队主机。

感谢您的精彩提问和回答@mbo:-)

相关内容

最新更新