11.7. 使用 systemd 自动启动 pod
您可以将多个容器作为 systemd
服务启动。请注意,system
ctl 命令应该只用于 pod,不应通过 systemctl
单独启动或停止容器,因为它们由 pod 服务与内部 infra-container 一起管理。
从 Podman v4.6 开始,您可以使用描述如何以类似于常规 systemd
单元文件的格式运行容器的 Quadlets,并在 systemd
下隐藏运行容器的复杂性。
先决条件
-
container-tools
元数据包已安装。
流程
创建一个空 pod,如
systemd-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 中创建两个容器。例如,要在
systemd-pod
中创建container0
和container1
:*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 请注意,生成了三个
systemd
单元文件,一个用于systemd-pod
pod,另两个用于容器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
行定义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