chasinglogic.podman
PodmanのためのAnsibleロール
Podmanを使用してサービスとコンテナを管理します
使用方法
デフォルトでは、このロールはpodmanのドキュメントに従ってPodmanをインストールし、サポートされているプラットフォームでインストールを機能させるために必要なその他のセットアップを行います。
重要な注意: これは、Ubuntu/Debianシステムの場合、リポジトリが追加された後に、ドキュメントに従ってapt upgrade
を実行します。このアップグレードは、リポジトリが追加または変更された場合にのみ実行され、以降の実行では実行されません。
さらに、PodmanコンテナをSystemDサービスとしてデプロイおよび構成することもできます。
例プレイブック
- hosts: all
roles:
- role: podman
自動サービスデプロイメント
サービスとして実行されるPodmanコンテナは比較的均質です。これにより、このロールはSystemDサービスとしてコンテナをデプロイおよび構成するために使用できる変数を提供します。複雑なユースケース、たとえば複数のコンテナをポッドとして構成することはまだサポートされていません。この機能をホストで使用するには、次の構造のマップのリストである変数podman_services
を定義します:
podman_services:
## Podman変数
#
# 必須: ダウンロードするイメージ名
- image_name: nginx
# 任意: ダウンロードするタグ。これにより
# バージョンに対応し、デフォルトは'latest'
image_tag: mainline
# 任意: SystemDサービスファイルに追加される説明
description: ウェブホスト
# 任意: 公開するポートのリスト。形式は同じ
# podman CLI、つまり: ホストポート:コンテナポート。これは
# '--publish'フラグに直接パイプされるため、バインディングIPも機能します
# (例: '127.0.0.1:8080:80')。デフォルトはなし。
publish:
- '80:80'
# 任意: --networkフラグとして渡されるネットワーク名の文字列
# ネットワークが存在しない場合は作成されます。これにより
# 複数のサービスが相互にネットワーク接続できるようになります。ネットワーキングについての注意点を参照
network: somenetwork
# 任意: マウントするボリュームのリスト。形式は
# podman CLIのホストディレクトリ:コンテナディレクトリと同様で、以下のように
# マウントオプションが許可されます。
volumes:
- '/tmp:/usr/share/nginx/html:ro'
# 任意: podmanのホスト名フラグのためのホスト名を定義します
# コンテナのホスト名を設定し、デフォルトはなし。
hostname: chasinglogic.io
# 任意: マウントするシークレットのリスト。
# シークレットは自動的には作成されません。
# 使用する場合に必要な唯一のフィールドは名前です。その他の
# 値はpodmanのドキュメントに指定されたデフォルトを持っています
# https://docs.podman.io/en/v4.6.0/markdown/options/secret.html
secrets:
- name: secret
type: mount
target: /run/secrets/secret
uid: 0
gid: 0
mode: 0
# 任意: コンテナに追加する環境変数のリスト。デフォルトはなし。
env_vars:
- SOME_VAR=SOME_VALUE
# 任意: イメージ名の前に追加される任意の引数の文字列
flags:
- '--cap-add=NET_ADMIN'
## SystemD変数
#
# 任意: このサービスの再起動ポリシーを定義します。デフォルトは常時
restart: always
# 任意: このサービスの再起動間隔を秒単位で定義します。デフォルトは30
restart_sec: 30
# 任意: SystemDサービスに使用される名前を定義します
# {{ デフォルトはimage_name + '-podman' }}
service_name: nginx
# 任意: このSystemDサービスが開始すべきターゲット/サービスを定義します
# これはYAMLリストであり、文字列ではありません。
after:
- network.target
# 任意: このSystemDサービスの開始タイムアウトを定義します
# 有効な値は'man systemd.service'を参照してください。デフォルトは
# 5分。
timeout_start_sec: 5m
# 任意: SystemDサービスのインストールセクションを定義します
# 現在はwanted_byのみがサポートされています。詳細は'man
# systemd.unit'を参照してください。デフォルトはなしで
# ほとんどのユーザーはこれを必要としません。
install:
wanted_by:
- multi-user.target
# 任意: サービスファイルのユーザーとグループを定義します
# デフォルトは省略で、ほとんどのシステムでルートと同等です。
user: root
group: root
ネットワーキング
現在のところ、Ansibleはdocker_network
に相当するPodmanネットワーキングモジュールを提供していません。
コンテナのネットワークオプションを使用している場合は、このロール実行前にネットワークが存在することを確認する必要があります。
将来的にPodmanのネットワーキングサポートがAnsibleに追加されると、このロールはそれが作成されるようにします。
開発
開発時は、次のようにconvergeとverifyのステージを使用するのが最良です。
make converge verify