第21章 RHEL システムロールを使用したコンテナーの管理
podman
RHEL システムロールを使用すると、Podman 設定、コンテナー、および Podman コンテナーを実行する systemd
サービスを管理できます。
21.1. podman
RHEL システムロールを使用したバインドマウントによるルートレスコンテナーの作成
podman
RHEL システムロールを使用すると、Ansible Playbook を実行してバインドマウントによりルートレスコンテナーを作成し、アプリケーション設定を管理できます。
サンプルの Ansible Playbook は、データベース用と Web アプリケーション用の 2 つの Kubernetes Pod を起動します。データベース Pod の設定は Playbook で指定します。Web アプリケーション Pod は外部 YAML ファイルで定義します。
前提条件
- コントロールノードと管理対象ノードの準備が完了している。
- 管理対象ノードで Playbook を実行できるユーザーとしてコントロールノードにログインしている。
-
管理対象ノードへの接続に使用するアカウントに、そのノードに対する
sudo
権限がある。 -
ユーザーとグループ
webapp
が存在し、ホスト上の/etc/subuid
および/etc/subgid
ファイルにリストされている。
手順
次の内容を含む Playbook ファイル (例:
~/playbook.yml
) を作成します。- name: Configure Podman hosts: managed-node-01.example.com tasks: - name: Create a web application and a database ansible.builtin.include_role: name: rhel-system-roles.podman 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/linux-system-roles/mysql:5.6 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
サンプル Playbook で指定されている設定は次のとおりです。
run_as_user
とrun_as_group
- コンテナーがルートレスであることを指定します。
kube_file_content
db
という名前の 1 つ目コンテナーを定義する Kubernetes YAML ファイルが含まれています。Kubernetes YAML ファイルは、podman kube generate
コマンドを使用して生成できます。-
db
コンテナーは、quay.io/db/db:stable
コンテナーイメージに基づいています。 -
db
バインドマウントは、ホスト上の/var/lib/db
ディレクトリーをコンテナー内の/var/lib/db
ディレクトリーにマップします。Z
フラグはコンテンツにプライベート非共有ラベルを付けるため、db
コンテナーのみがコンテンツにアクセスできます。
-
kube_file_src: <path>
-
2 つ目のコンテナーを定義します。コントローラーノードの
/path/to/webapp.yml
ファイルの内容は、マネージドノードのkube_file
フィールドにコピーされます。 volumes: <list>
-
1 つ以上のコンテナーで提供するデータのソースを定義する YAML リスト。たとえば、ホスト上のローカルディスク (
hostPath
) またはその他のディスクデバイスなどです。 volumeMounts: <list>
- 個々のコンテナーが特定のボリュームをマウントするマウント先を定義する YAML リスト。
podman_create_host_directories: true
-
ホスト上にディレクトリーを作成します。これにより、
hostPath
ボリュームの kube 仕様を確認し、ホスト上にそれらのディレクトリーを作成するようにロールに指示します。所有権と権限をさらに細かく制御する必要がある場合は、podman_host_directories
を使用します。
Playbook で使用されるすべての変数の詳細は、コントロールノードの
/usr/share/ansible/roles/rhel-system-roles.podman/README.md
ファイルを参照してください。Playbook の構文を検証します。
$ ansible-playbook --syntax-check --ask-vault-pass ~/playbook.yml
このコマンドは構文を検証するだけであり、有効だが不適切な設定から保護するものではないことに注意してください。
Playbook を実行します。
$ ansible-playbook --ask-vault-pass ~/playbook.yml
関連情報
-
/usr/share/ansible/roles/rhel-system-roles.podman/README.md
ファイル -
/usr/share/doc/rhel-system-roles/podman/
ディレクトリー