Red Hat Training

A Red Hat training course is available for RHEL 8

第15章 Ansible Playbook を使用したコンテナーの管理

Podman 4.2 以降では、Podman RHEL システムロールを使用して、Podman 設定、コンテナー、および Podman コンテナーを実行する systemd サービスを管理できます。

RHEL システムロールは、複数の RHEL システムをリモートで管理するための設定インターフェイスを提供します。このインターフェイスを使用すると、RHEL の複数のバージョンにわたるシステム設定を管理したり、新しいメジャーリリースを導入したりできます。詳細は、RHEL System Roles を使用したシステム管理の自動化 を参照してください。

15.1. バインドマウントを使用したルートレスコンテナーの作成

Podman システムロールを使用すると、Ansible Playbook を実行してバインドマウントによりルートレスコンテナーを作成し、アプリケーション設定を管理できます。

前提条件

  • コントロールノード (このシステムから Red Hat Ansible Engine は他のシステムを設定) へのアクセスおよびパーミッション。
  • コントロールノードでは、

    • rhel-system-roles パッケージがインストールされている。
    • マネージドのホストと適用するその他のパラメーターをリストした Ansible インベントリーファイル。
注記

ansible-playbook コマンドは、rhel-system-roles パッケージの依存関係として自動的にインストールされる ansible-core パッケージによって提供されます。

手順

  1. 以下のコンテンツを含む新しい playbook.yml ファイルを作成します。

    - hosts: all
      vars:
        podman_create_host_directories: true
        podman_firewall:
          - port: 8080-8081/tcp
            state: enabled
          - port: 12340/tcp
            state: enabled
        podman_selinux_ports:
          - ports: 8080-8081
            setype: http_port_t
        podman_kube_specs:
          - state: started
            run_as_user: dbuser
            run_as_group: dbgroup
            kube_file_content:
              apiVersion: v1
              kind: Pod
              metadata:
                name: db
              spec:
                containers:
                  - name: db
                    image: quay.io/db/db:stable
                    ports:
                      - containerPort: 1234
                        hostPort: 12340
                    volumeMounts:
                      - mountPath: /var/lib/db:Z
                        name: db
                volumes:
                  - name: db
                    hostPath:
                      path: /var/lib/db
          - state: started
            run_as_user: webapp
            run_as_group: webapp
            kube_file_src: /path/to/webapp.yml
      roles:
        - linux-system-roles.podman

    この手順では、2 つのコンテナーを持つ Pod を作成します。podman_kube_specs ロール変数は Pod を記述します。

    • run_as_user フィールドと run_as_group フィールドは、コンテナーがルートレスであることを指定します。
    • Kubernetes YAML ファイルを含む kube_file_content フィールドは、db という名前の最初のコンテナーを定義します。podman generate systemd コマンドを使用して、Kubernetes YAML ファイルを生成できます。

      • db コンテナーは、quay.io/db/db:stable コンテナーイメージに基づいています。
      • db バインドマウントは、ホスト上の /var/lib/db ディレクトリーをコンテナー内の /var/lib/db ディレクトリーにマップします。Z フラグはコンテンツにプライベート非共有ラベルを付けるため、db コンテナーのみがコンテンツにアクセスできます。
    • kube_file_src フィールドは 2 番目のコンテナーを定義します。コントローラーノードの /path/to/webapp.yml ファイルの内容は、マネージドノードの kube_file フィールドにコピーされます。
    • ホスト上にディレクトリーを作成するには、podman_create_host_directories: true を設定します。これにより、hostPath ボリュームの kube 仕様を確認し、ホスト上にそれらのディレクトリーを作成するようにロールに指示します。所有権と権限をさらに細かく制御する必要がある場合は、podman_host_directories を使用します。
  2. オプション: Playbook の構文を確認します。

    # ansible-playbook --syntax-check playbook.yml -i inventory_file
  3. インベントリーファイルで Playbook を実行します。

    # ansible-playbook -i inventory_file playbook.yml

関連情報