11.7. systemd を使用した Pod の自動起動
複数のコンテナーを systemd
サービスとして起動できます。systemctl
コマンドは、Pod でだけ使用するようにしてください。コンテナーは Pod サービスと内部の infra-container で管理されているので systemctl
を使用して個別にコンテナーを開始または停止しないでください。
podman v4.6 以降では、Quadlets を使用できるようになりました。Quadlets を使用すると、通常の systemd
ユニットファイルと同様の形式でコンテナーを実行する方法を記述でき、systemd
でコンテナーを実行する際の複雑さを意識せずに済みます。
前提条件
-
container-tools
メタパッケージがインストールされている。
手順
たとえば、
systemd-pod
などの空の Pod を作成します。podman pod create --name systemd-pod
$ podman pod create --name systemd-pod 11d4646ba41b1fffa51c108cbdf97cfab3213f7bd9b3e1ca52fe81b90fed5577
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 必要に応じて、すべての Pod をリスト表示します。
podman pod ps
$ podman pod ps POD ID NAME STATUS CREATED # OF CONTAINERS INFRA ID 11d4646ba41b systemd-pod Created 40 seconds ago 1 8a428b257111 11d4646ba41b1fffa51c108cbdf97cfab3213f7bd9b3e1ca52fe81b90fed5577
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 空の Pod に 2 つのコンテナーを作成します。たとえば、
container0
とcontainer1
をsystemd-pod
に作成するには、以下を実行します。*podman create --pod systemd-pod --name container0 registry.access.redhat.com/ubi*10 top *podman create --pod systemd-pod --name container1 registry.access.redhat.com/ubi*10 top
$ *podman create --pod systemd-pod --name container0 registry.access.redhat.com/ubi*10 top $ *podman create --pod systemd-pod --name container1 registry.access.redhat.com/ubi*10 top
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 必要に応じて、関連付けられている全 Pod およびコンテナーをリスト表示します。
podman ps -a --pod
$ podman ps -a --pod CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES POD ID PODNAME 24666f47d9b2 registry.access.redhat.com/ubi10:latest top 3 minutes ago Created container0 3130f724e229 systemd-pod 56eb1bf0cdfe k8s.gcr.io/pause:3.2 4 minutes ago Created 3130f724e229-infra 3130f724e229 systemd-pod 62118d170e43 registry.access.redhat.com/ubi10:latest top 3 seconds ago Created container1 3130f724e229 systemd-pod
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 新しい Pod の
systemd
ユニットファイルを生成します。podman generate systemd --files --name systemd-pod
$ podman generate systemd --files --name systemd-pod /home/user1/pod-systemd-pod.service /home/user1/container-container0.service /home/user1/container-container1.service
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 3 つの
systemd
ユニットファイルが生成されることに注意してください。1 つはsystemd-pod
Pod 用、2 つはコンテナーcontainer0
およびcontainer1
用です。pod-systemd-pod.service
ユニットファイルを表示します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
[Unit]
セクションのRequires
行は、container-container0.service
とcontainer-container1.service
ユニットファイルの依存関係を定義します。両方のユニットファイルがアクティベートされます。 -
[Service]
セクションのExecStart
行およびExecStop
行はそれぞれ infra-container を開始して停止します。
-
container-container0.service
ユニットファイルを表示します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
[Unit]
セクションのBindsTo
l 行は、pod-systemd-pod.service
ユニットファイルの依存関係を定義します。 -
[Service]
セクションのExecStart
行およびExecStop
行では、それぞれcontainer0
を起動および停止します。
-
container-container1.service
ユニットファイルを表示します。cat container-container1.service
$ cat container-container1.service
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 生成されたファイルをすべて
$HOME/.config/systemd/user
にコピーして、root 以外のユーザーとしてインストールします。cp pod-systemd-pod.service container-container0.service container-container1.service $HOME/.config/systemd/user
$ cp pod-systemd-pod.service container-container0.service container-container1.service $HOME/.config/systemd/user
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ユーザーのログイン時に、サービスを有効にして開始します。
systemctl enable --user pod-systemd-pod.service
$ systemctl enable --user pod-systemd-pod.service Created symlink /home/user1/.config/systemd/user/multi-user.target.wants/pod-systemd-pod.service
/home/user1/.config/systemd/user/pod-systemd-pod.service. Created symlink /home/user1/.config/systemd/user/default.target.wants/pod-systemd-pod.service /home/user1/.config/systemd/user/pod-systemd-pod.service. Copy to Clipboard Copied! Toggle word wrap Toggle overflow サービスは、ユーザーのログアウト時に停止される点に注意してください。
検証
サービスが有効になっているかどうかを確認します。
systemctl is-enabled pod-systemd-pod.service
$ systemctl is-enabled pod-systemd-pod.service enabled
Copy to Clipboard Copied! Toggle word wrap Toggle overflow