🌵
Podman Quadlet で簡単systemd
コンテナをPodman Quadlet でsystemd 管理にする最短方法っぽいものです
QuadletのContainer などがありますが、文法は独自で面倒です。
PodmanではPodが簡単に作れるのでPodを作成してからKube Play unit形式のPodman Quadletにすることで従来のコンテナ作成方法の延長でsystemd 管理が簡単にできるのでおすすめです
Podman 4.4.0以降ぐらいで対応
コンテナ
PostgreSQL例
Podman または Podman Compose でコンテナを作成します。
# podman create --name pgsql docker.io/postgres:latest (いろいろ略)
停止するとコンテナも消えるので永続データの保存にはVOLUMEなどの設定が必要です
Pod変換
コンテナをKubernetes Pod形式の設定ファイルにします。Podとして作らなくても適度に補完してくれます。
# podman generate kube pgsql -f postgres-pod.yaml
設定を吸い取ったコンテナは不要なので削除します
# podman rm pgsql
この状態で使う場合は
起動 # podman kube play postgres-pod.yaml
停止 # podman kube down postgres-pod.yaml
簡単ですね
Kube Play unit
postgres.kube ファイルを作成します
postgres.kube
[Unit]
Description=PostgreSQL Server
Before=local-fs.target
[Kube]
Yaml=/var/pgsql/postgres-pod.yaml
PublishPort=127.0.0.1:5432:5432
[Service]
Restart=always
[Install]
WantedBy=multi-user.target default.target
Yaml をpostgres-pod.yaml ファイルのPathにします
PublishPort で開放するポートを適度に設定します
登録
/etc/containers/systemd にコピー
既存のsystemd管理の名前とかぶらないよう注意
# cp postgres.kube /etc/containers/systemd
エラーがないことだけ確認します
# /usr/lib/systemd/system-generators/podman-system-generator --user --dryrun
リロード
# systemctl daemon-reload
systemctl enable は不要
再起動後に systemd に組み込まれて起動、停止します
# shutdown -r now
再起動なしでも起動することはできます
# systemctl start postgres
podman 系のコマンドでは停止できない設定になっています
コマンド
起動 # systemctl start postgres
停止 # systemctl stop postgres
状態 # systemctl status postgres
削除
Quadlet 用ファイルを削除すれば systemd 管理から外れます
# rm /etc/containers/systemd/postgres.kube
# systemctl daemon-reload
Discussion