podman-auto-update
Podmanに標準で付属する、コンテナイメージの自動更新機能。systemd管理下で動くコンテナに対して、新しいイメージが公開されていれば取得・再起動を行う。podman-auto-update.serviceと、それをデフォルトで毎日深夜(ランダム遅延900秒付き)にトリガーするpodman-auto-update.timerのペアで構成される。
有効化の条件
対象にできるのはsystemd管理下のコンテナのみ。以下3条件が必要。
- 完全修飾されたイメージ参照であること(例:
quay.io/podman/stable:latest) - コンテナに
AutoUpdate=registry(または対応するラベルio.containers.autoupdate)を指定すること podman-auto-update.timerを有効化すること(rootlessならsystemctl --user enable --now podman-auto-update.timer)
AutoUpdateポリシー
- registry(image): レジストリに問い合わせ、リモートイメージとローカルのダイジェストを比較。異なれば更新とみなす。
- local: レジストリには問い合わせず、ローカルストレージ内のダイジェスト差分だけで判定する。
Kubernetesマニフェスト形式でコンテナを定義する場合、io.containers.autoupdateラベルは全コンテナに適用され、io.containers.autoupdate/$containerとすれば特定コンテナのみに適用できる。
Quadletでの設定例
Quadlet(systemdユニットファイルの拡張構文でコンテナを定義する仕組み)では、.containerファイルにAutoUpdate=を書くだけでよい。
[Container]
Image=registry.fedoraproject.org/fedora:latest
Exec=sleep infinity
AutoUpdate=registry
~/.config/containers/systemd/(rootless)に配置し、systemctl --user daemon-reloadで反映する。
ロールバック挙動
デフォルト(--rollback)では、イメージ更新後のsystemdユニット再起動が失敗すると前のイメージに戻して再起動する。ただしこれが正しく機能するには、コンテナが--sdnotify=containerで作成され、READYメッセージをsd-notify経由で送る必要がある。そうしないと再起動成功の判定ができず、ロールバック判断が正確にならない。
出典
- podman-auto-update — Podman documentation
- Automatic container updates with Podman quadlets :: Major Hayden
- How to Set Up Automatic podman auto-update with systemd Timer