notmycloud.podman_systemd
Ansible Podman_systemd
説明
PodmanのSystemdユニットをシステムユーザーとルートレスユーザー向けに設定します。
インストール
以下のロールも必要です。依存関係として追加すると、実行時に失敗します。
- linuxhq.sysctl
- notmycloud.yaml2ini
- notmycloud.systemd_unit
重要: toml
というPythonパッケージのインストールが必要です。pipを使ってインストールしてください。
使い方
このロールが正しく動作するために、以下の変数を提供してください。
PODMAN_SYSTEMD_INSTALL_COCKPIT
はCockpitをPodmanサポート付きでインストールします。
PODMAN_SYSTEMD_ALLOW_LOWEST_PORT
は、特権のないユーザーがバインドできる最も低いポートを指定します。1024以下の低ポートは「安全」とされ、信頼されたユーザーに制限されるべきだという議論があります。このサーバーがマルチテナントの場合、この変数はスキップすることを推奨します。ただし、このサーバーを完全に管理し、サービスごとにユーザーを設定する場合は、このオプションが役立つことがあります。私の意見では、マルチテナントでないサーバーの場合、0に設定できます。
PODMAN_SYSTEMD_ALLOW_PING
は、特権のないユーザーがpingを実行できるようにします。
PODMAN_SYSTEMD_DEPLOY
には、Podmanの構成の大部分が含まれています。Systemdユニットを設定する各ユーザーのキーを作成してください。
PODMAN_SYSTEMD_DEPLOY:
root:
etc...
user1:
etc...
user2:
etc...
ユーザー設定
ルートはデフォルトの /etc/systemd/system
ディレクトリに設定され、ユーザーは ~/.config/system/user
ディレクトリに設定されます。この例では、特権のないユーザーの設定を行います。
debug_log: bool # タスクとデバッグログを有効にするにはtrueに設定
PODMAN_SYSTEMD_DEPLOY:
myuser:
config:
storage:
storage:
driver: "overlay"
# storage.conf用のINI形式で書き込まれるkey:valueペア。ユーザーまたはルートの場合、適切なディレクトリに配置されます。
# key:valueペアは、notmycloud.yaml2iniロールで指定された形式に従う必要があります。
containers:
engine:
network_cmd_options:
- "allow_host_loopback=true"
- "enable_ipv6=true"
env:
- "TMPDIR=$HOME/.cache/tmp/"
# containers.conf用のTOML形式で書き込まれるkey:valueペア。ユーザーまたはルートの場合、適切なディレクトリに配置されます。
registries:
unqualified-search-registries:
- "docker.io"
# - "quay.io"
# - "registry.access.redhat.com"
registry:
# - prefix: "docker.io"
# location: "127.0.0.1:5000"
# insecure: true
# 2020年11月、Dockerはイメージプルに制限をかけました。これらの制限に達しないように、常にgoogleミラーを使用して、適格および不適格の `docker.io` イメージをテストしてください。
# 参考: https://cloud.google.com/container-registry/docs/pulling-cached-images
registry.mirror:
- location: "https://mirror.gcr.io"
# registries.conf用のTOML形式で書き込まれるkey:valueペア。ユーザーまたはルートの場合、適切なディレクトリに配置されます。
login: # containers.podman.podman_loginモジュールのドキュメントを参照
- registry: registry.mydomain.com
username: registryuser
password: super$3(r37Password
systemd:
enable_socket: # デフォルトはFalse、ユーザーまたはルートの場合、システム全体にPodman APIソケットを有効にします。
containers:
CONTAINERNAME: # このコンテナに希望する名前を置き換えてください。この名前はSystemdユニットファイルにも使用されます。
podman_options:
image:
network: # ネットワーク文字列、デフォルトはslirp4netns:allow_host_loopback=true,enable_ipv6=true
replace: # bool
restart: # "always"|"no"|"on-failure"|"unless-stopped" デフォルトはno
remove: # デフォルトはyes
stop_timeout: # デフォルトは60秒
log_driver: # デフォルトはPassthrough、これによりジャーナル内のログを表示できます。
healthcheck:
cmd:
interval:
retries:
delay:
timeout:
environment: # キーと値のペアの配列
key: "value"
ports: # 0.0.0.0:hostport:containerport
volumes:
- host:
container:
options:
type: # file/directory
labels: # キーと値のペアの配列
key: "value"
other_options: # podman runに渡す他のオプションの文字列または配列
service_options: # notmycloud.systemd_unit変数を参照して、UNIT_NAMEと同等の深さ
pods:
PODNAME: # このポッドに希望する名前を置き換えてください。この名前は関連するコンテナの接頭辞にも使用されます。
pod_service_options: # notmycloud.systemd_unit変数を参照して、UNIT_NAMEと同等の深さ
CONTAINERNAME:
# 上記のPODMAN_SYSTEMD_DEPLOY.USERNAME.systemd.containers.CONTAINERNAMEの構文に従ってください
その他の注意事項
Podmanソケット
ルートのソケットは /run/podman/podman.sock
で有効になります。
ルートレスのソケットは /run/user/$UID/podman/podman.sock
で有効になります。
コンテナ構成ディレクトリ
構成のルートには %E/%N/
を使用することをおすすめします。
これにより構成が ~/.config/{service_name}/
または /etc/{service_name}/
に保存されます。
複数の構成ディレクトリが必要なコンテナには、%E/%N/config1/
、%E/%N/config2/
などを使用します。
推奨その他のオプション
--init
コンテナ内でinitを実行し、シグナルを転送しプロセスを回収します。詳細はcontainers/podman#1670を参照してください。--cap-drop=all
すべての機能をドロップします。コンテナが正常に動作するために機能を追加する必要があることが多いです。--security-opt=no-new-privileges
コンテナプロセスが追加の特権を得ないようにします。詳細はドキュメントを参照してください。--userns=keep-id
コンテナユーザーをホストユーザーIDにマッピングします。
サポート
サポートが必要な場合は、問題を報告し、以下の項目を提供してください。
- 問題を再現するためのサンプルタスク/プレイブック
- 作成された結果ファイル
ansible-galaxy install notmycloud.podman_systemd