gwerlas.podman
Podman
Podmanをルートレスモードでインストールおよび設定します。
GitLabプロジェクト : yoanncolin/ansible/roles/podman
要件
Linux基本システムが以下のように設定されていること:
- SSH
- Python(Ansible用)
- Sudo
- パッケージマネージャーが使用可能であること
gwerlas.system
ロールが役立つことがあります:
ansible-galaxy install gwerlas.system
- name: 私のプレイブック
hosts: all
roles:
- role: gwerlas.system
- role: gwerlas.podman
ファクト
このロールで定義されたファクト:
podman_version
podman_packages
ノードに変更を加えずにファクトのみを取得することができます:
- name: 私のプレイブック
hosts: all
tasks:
- name: ファクトを取得
ansible.builtin.import_role:
name: gwerlas.podman
tasks_from: facts
- name: 表示
ansible.builtin.debug:
var: podman_packages
タグ
特定のタスクをこのタグを使ってフィルタリングできます:
provision
: リソースのみをプロビジョニング
ロール変数
使用可能な変数は以下の通りで、デフォルト値が示されています(defaults/main.yml
を参照):
podman_compose_install: false
podman_toolbox_install: false
podman_mimic_docker: false
podman_create_missing_users: true
podman_users:
- name: "{{ ansible_user_id }}"
podman_wrappers: []
podman_wrappers_path: /usr/local/bin
Podmanルートレス
Podmanをルートレスモードで使用するユーザーは、podman_users
が以下のようなオブジェクトのリストである必要があります:
podman_users:
- name: jdoe # Unixログイン名(必須)
home: /home/jdoe # 不足している場合はユーザーエントリから取得
uid: 1000 # システム全体に作成されていないユーザーにのみ使用
subuid_starts: 100000 # デフォルトでユーザーIDから生成
subuid_length: 50000 # デフォルトで65536
subgid_starts: 100000 # デフォルトでsubuid_startsと同じ
subgid_length: 50000 # デフォルトでsubuid_lengthと同じ
Podmanはデータをユーザーのホームディレクトリに保存するため、存在しない場合はそれを作成します。
以下のようにrootless
タスクを単独で呼び出すことで、ユーザーを迅速に追加できます:
---
- name: Podmanルートレス使用のためにユーザーを追加
hosts: all
vars:
podman_users:
- name: jdoe
uid: 300
tasks:
- name: ジョン・ドウを追加
ansible.builtin.import_role:
name: gwerlas.podman
tasks_from: rootless
存在しないユーザー
まだ存在しないユーザーは、gwerlas.system
ロールを通じて作成されます。
不足しているユーザーの作成を無効にするには、podman_create_missing_users
をfalse
に設定します。この場合、不足している各ユーザーのuid
プロパティを設定する必要があります。
Podman設定
デフォルトでは、ディストリビューションの設定ファイルは変更されません。
Debian 11のコンテナ設定は、そのままでは動作しません。
カスタマイズされた設定を使用するには、podman_*_config
設定を使用します。
コンテナ
podman_containers_config
辞書を使用して、/etc/containers/containers.conf
ファイルを次のようにpopulateします:
podman_containers_config:
containers:
log_driver: journald
engine:
cgroup_manager: cgroupfs
これにより、以下の/etc/containers/containers.conf
が生成されます:
[containers]
log_drivers = "journald"
[engine]
cgroup_manager = "cgroupfs"
Debian 11の場合のみ、この設定でディストリビューションのデフォルトを上書きします。
レジストリ
注意 旧バージョンの1形式はサポートしていません。
podman_registries_config
辞書を使用して、/etc/containers/registries.conf
ファイルを次のようにpopulateします:
podman_registries_config:
unqualified-search-registries:
- docker.io
registry:
- location: my-insecure-registry:5000
insecure: true
これにより、以下の/etc/containers/registries.conf
が生成されます:
unqualified-search-registries = ['docker.io']
[[registry]]
location = my-insecure-registry:5000
insecure = true
ストレージ
podman_storage_config
辞書を使用して、/etc/containers/storage.conf
ファイルを次のようにpopulateします:
podman_storage_config:
storage:
driver: zfs
options:
zfs:
mountopt: "nodev"
これにより、以下の/etc/containers/storage.conf
が生成されます:
[storage]
driver = "zfs"
[storage.options.zfs]
mountopt = "nodev"
Libpod
podman_libpod_config
辞書を使用して、/etc/containers/libpod.conf
ファイルを次のようにpopulateします:
podman_libpod_config:
cgroup_manager: cgroupfs
これにより、以下の/etc/containers/libpod.conf
が生成されます:
cgroup_manager = "cgroupfs"
Debian 11の場合のみ、この設定でディストリビューションのデフォルトを上書きします。
Podman compose
podman_compose_install
をtrue
に設定すると、ターゲットホストのディストリビューションで利用可能な場合にpodman-compose
がインストールされます。
Podman toolbox
podman_toolbox_install
をtrue
に設定すると、ターゲットホストのディストリビューションで利用可能な場合にpodman-toolbox
がインストールされます。
Dockerの模倣
$PATH内のDocker
podman_mimic_docker
パラメーターをtrue
に設定すると、Dockerを模倣できます。ターゲットのLinuxディストリビューションでpodman-docker
パッケージが利用可能な場合は、インストールされます。他のケースでは、シンボリックリンクが作成されます。
そのため、docker
を呼び出すスクリプトは、ほぼ透明にpodman
を使用します。
デーモンソケット
インストールされたPodmanのバージョンが3.0
以上の場合、各podman_users
に対してサービスが有効になり、環境変数DOCKER_BUILDKIT
とDOCKER_HOST
がそれぞれ0
と$XDG_RUNTIME_DIR/podman/podman.sock
に設定されます。
これにより、Podman内でDockerを実行できるようになります。
ラッパー
コマンドを透過的に呼び出すためのラッパーを追加できます:
例えば、システムにインストールせずにMoleculeを実行する:
podman_wrappers:
- command: molecule
image: gwerlas/molecule
env:
CONTAINER_CONNECTION: docker
MOLECULE_CONTAINERS_BACKEND: podman
interactive: true
network: host
security_opt: label=disable
volume:
- $HOME/.cache/molecule:/root/.cache/molecule
- $HOME/.vagrant.d:/root/.vagrant.d
- /run/libvirt:/run/libvirt
- /var/lib/libvirt:/var/lib/libvirt
- /var/tmp:/var/tmp
wrapper_extras:
env_patterns:
- ANSIBLE_*
- MOLECULE_*
openstack_cli: true
podman_socket: true
same_pwd: true
ssh_auth_sock: true
ほとんどの引数はpodman run
パラメーターと同じで、サポートされているansible podman_container モジュール
の引数のほとんどをそのまま使用できるようにサポートしています(エイリアスやサービス指向の機能を除く)。
サポートされているパラメーターリストを追加(または削除)するには、podman_wrappers_autofill
変数を編集します。デフォルト値を編集するには、podman_wrappers_values
変数を編集します。
依存関係
ユーザー管理のためのgwerlas.system
ロール。
システムにcontainers.podman
がインストールされているか、requirements.yml
に存在することを確認してください。
例プレイブック
Dockerとできるだけ互換性を保つ方法の例:
---
- name: Docker互換
hosts: all
roles:
- name: gwerlas.system
- name: gwerlas.podman
vars:
podman_mimic_docker: true