1

後でフリートで管理できるように、cloud-init でユニットを開始できますか?

通常のsystemdサービスのみをクラウドユニットで開始できるようですが、フリートの制御下に置くことはできません。これは正しいですか?

クラスターがブートストラップされた後に特定のサービスを自動的に開始するための可能な解決策は何ですか?

解決済み:

#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
4

1 に答える 1

0

数週間前、私は同じことを考えていました。OP によって提示されたアプローチでは、frotctl を使用してプロセスを起動しました。私はそれがフリートctlリストユニットを実行できるという影響があり、起動されたプロセスがリストされ、フリートによって管理されると思います。

次のように、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

しかし、それは次のことを意味します。

  • 基盤となる systemd によって管理されているため、fleectl list-units を実行してもユニットは表示されません。
  • このホストが失敗したためにユニットが失敗した場合、別のフリート ホストに移行されません。

素晴らしい質問と回答をありがとう@mbo :-)

于 2015-03-20T13:00:34.963 に答える