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_usersfalseに設定します。この場合、不足している各ユーザーの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_installtrueに設定すると、ターゲットホストのディストリビューションで利用可能な場合にpodman-composeがインストールされます。

Podman toolbox

podman_toolbox_installtrueに設定すると、ターゲットホストのディストリビューションで利用可能な場合にpodman-toolboxがインストールされます。

Dockerの模倣

$PATH内のDocker

podman_mimic_dockerパラメーターをtrueに設定すると、Dockerを模倣できます。ターゲットのLinuxディストリビューションでpodman-dockerパッケージが利用可能な場合は、インストールされます。他のケースでは、シンボリックリンクが作成されます。

そのため、dockerを呼び出すスクリプトは、ほぼ透明にpodmanを使用します。

デーモンソケット

インストールされたPodmanのバージョンが3.0以上の場合、各podman_usersに対してサービスが有効になり、環境変数DOCKER_BUILDKITDOCKER_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

ライセンス

BSD 3条項ライセンス

プロジェクトについて

Install and configure podman

インストール
ansible-galaxy install gwerlas.podman
ライセンス
bsd-3-clause
ダウンロード
5.4k
所有者
DevOps Engineer