14.7. systemd를 사용하여 Pod 자동 시작
systemd
서비스로 여러 컨테이너를 시작할 수 있습니다. systemctl
명령은 Pod에서만 사용해야 하며 내부 infra-container와 함께 pod 서비스에서 관리하므로 systemctl
을 통해 컨테이너를 개별적으로 시작하거나 중지해서는 안 됩니다.
Podman v4.6부터 일반 systemd
장치 파일과 유사한 형식으로 컨테이너를 실행하는 방법을 설명하고 systemd
에서 실행 중인 컨테이너의 복잡성을 숨길 수 있습니다.
사전 요구 사항
-
container-tools
meta-package가 설치되어 있습니다.
절차
비어 있는 Pod를 생성합니다(예:
systemd-pod
).$ podman pod create --name systemd-pod 11d4646ba41b1fffa51c108cbdf97cfab3213f7bd9b3e1ca52fe81b90fed5577
선택 사항: 모든 Pod를 나열합니다.
$ podman pod ps POD ID NAME STATUS CREATED # OF CONTAINERS INFRA ID 11d4646ba41b systemd-pod Created 40 seconds ago 1 8a428b257111 11d4646ba41b1fffa51c108cbdf97cfab3213f7bd9b3e1ca52fe81b90fed5577
빈 포드에 두 개의 컨테이너를 생성합니다. 예를 들어
systemd-pod
에서container0
및container1
을 생성하려면 다음을 실행합니다.$ podman create --pod systemd-pod --name container0 registry.access.redhat.com/ubi9 top $ podman create --pod systemd-pod --name container1 registry.access.redhat.com/ubi9 top
선택 사항: 연결된 모든 Pod 및 컨테이너를 나열합니다.
$ podman ps -a --pod CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES POD ID PODNAME 24666f47d9b2 registry.access.redhat.com/ubi9: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/ubi9:latest top 3 seconds ago Created container1 3130f724e229 systemd-pod
새 Pod의
systemd
장치 파일을 생성합니다.$ podman generate systemd --files --name systemd-pod /home/user1/pod-systemd-pod.service /home/user1/container-container0.service /home/user1/container-container1.service
systemd
장치 파일 세 개,systemd-pod
Pod용 하나,container0
및container1
용 두 개의 파일이 생성됩니다.pod-systemd-pod.service
장치 파일을 표시합니다.$ cat pod-systemd-pod.service # pod-systemd-pod.service # autogenerated by Podman 3.3.1 # Wed Sep 8 20:49:17 CEST 2021 [Unit] Description=Podman pod-systemd-pod.service Documentation=man:podman-generate-systemd(1) Wants=network-online.target After=network-online.target RequiresMountsFor= Requires=container-container0.service container-container1.service Before=container-container0.service container-container1.service [Service] Environment=PODMAN_SYSTEMD_UNIT=%n Restart=on-failure TimeoutStopSec=70 ExecStart=/usr/bin/podman start bcb128965b8e-infra ExecStop=/usr/bin/podman stop -t 10 bcb128965b8e-infra ExecStopPost=/usr/bin/podman stop -t 10 bcb128965b8e-infra PIDFile=/run/user/1000/containers/overlay-containers/1dfdcf20e35043939ea3f80f002c65c00d560e47223685dbc3230e26fe001b29/userdata/conmon.pid Type=forking [Install] WantedBy=multi-user.target default.target
-
[Unit]
섹션의Requires
행은container-container0.service
및container-container1.service
장치 파일에 대한 종속성을 정의합니다. 두 개의 유닛 파일이 모두 활성화됩니다. -
[Service]
섹션의ExecStart
및ExecStop
행은 각각 infra-container를 시작하고 중지합니다.
-
container-container0.service
장치 파일을 표시합니다.$ cat container-container0.service # container-container0.service # autogenerated by Podman 3.3.1 # Wed Sep 8 20:49:17 CEST 2021 [Unit] Description=Podman container-container0.service Documentation=man:podman-generate-systemd(1) Wants=network-online.target After=network-online.target RequiresMountsFor=/run/user/1000/containers BindsTo=pod-systemd-pod.service After=pod-systemd-pod.service [Service] Environment=PODMAN_SYSTEMD_UNIT=%n Restart=on-failure TimeoutStopSec=70 ExecStart=/usr/bin/podman start container0 ExecStop=/usr/bin/podman stop -t 10 container0 ExecStopPost=/usr/bin/podman stop -t 10 container0 PIDFile=/run/user/1000/containers/overlay-containers/4bccd7c8616ae5909b05317df4066fa90a64a067375af5996fdef9152f6d51f5/userdata/conmon.pid Type=forking [Install] WantedBy=multi-user.target default.target
-
[Unit]
섹션의BindsTo
line 행은pod-systemd-pod.service
유닛 파일에 대한 종속성을 정의합니다. -
[Service]
섹션의ExecStart
및ExecStop
행은 각각container0
을 시작하고 중지합니다.
-
container-container1.service
장치 파일을 표시합니다.$ cat container-container1.service
루트가 아닌 사용자로 설치하기 위해 생성된 모든 파일을
$HOME/.config/systemd/user
에 복사합니다.$ cp pod-systemd-pod.service container-container0.service container-container1.service $HOME/.config/systemd/user
서비스를 활성화하고 사용자 로그인 시 시작합니다.
$ 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. 이 서비스는 사용자가 로그아웃할 때 중지됩니다.
검증
서비스가 활성화되었는지 확인합니다.
$ systemctl is-enabled pod-systemd-pod.service enabled
추가 리소스
-
시스템의
podman-create
,podman-generate-systemd
및systemctl
도움말 페이지 - Podman을 사용하여 컨테이너 실행 및 공유 가능한 systemd 서비스
- 부팅 시 시스템 서비스가 시작되도록 활성화