40.5.2. Docker CLI でのヘルスチェックの実行
コンテナーで openshift-ansible Playbook を実行し、Docker CLI で ose-ansible イメージを実行できるホストでの Ansible のインストールおよび設定の手間を省くことができます。
以下を、コンテナーを実行する権限を持つ root 以外のユーザーとして実行します。
# docker run -u `id -u` \ 1 -v $HOME/.ssh/id_rsa:/opt/app-root/src/.ssh/id_rsa:Z,ro \ 2 -v /etc/ansible/hosts:/tmp/inventory:ro \ 3 -e INVENTORY_FILE=/tmp/inventory \ -e PLAYBOOK_FILE=playbooks/openshift-checks/health.yml \ 4 -e OPTS="-v -e openshift_check_logging_index_timeout_seconds=45 -e etcd_max_image_data_size_bytes=40000000000" \ 5 openshift3/ose-ansible
- 1
- これらのオプションにより、コンテナーは現行ユーザーと同じ UID で実行されます。 これは SSH キーをコンテナー内で読み取られるようにするようにパーミッションで必要になります (SSH プライベートキーはその所有者によってのみ読み取り可能であることが予想されます)。
- 2
- SSH キーは、コンテナーを非 root ユーザーとして実行するなどの通常の使用では /opt/app-root/src/.ssh の下にマウントします。
- 3
- /etc/ansible/hosts は、異なる場合はクラスターのインベントリーファイルの場所に切り替えます。このファイルは、コンテナーの
INVENTORY_FILE
環境変数に基づいて使用される /tmp/inventory にバインドおよびマウントされます。 - 4
PLAYBOOK_FILE
環境変数は、コンテナー内の /usr/share/ansible/openshift-ansible に関連して health.yml playbook の場所に設定されます。- 5
-e key=value
形式で単一の実行に必要な変数を設定します。
上記のコマンドでは、SSH キーは :Z
オプションを使ってマウントされ、コンテナーが SSH キーを制限付き SELinux コンテキストから読み取れるようにします。このオプションを追加することは、元の SSH キーファイルのラベルが system_u:object_r:container_file_t:s0:c113,c247
などに変更されることを意味しています。:Z
についての詳細は、docker-run(1)
man ページを参照してください。
これらのボリュームマウント仕様に関連して予期しない影響が生じる可能性があります。たとえば、$HOME/.ssh ディレクトリーをマウント (したがってラベルを変更) する場合、sshd はパブリックキーにアクセスしてリモートログインを許可できなくなります。元のファイルラベルの変更を防ぐには、SSH キー (またはディレクトリー) のコピーをマウントします。
.ssh ディレクトリー全体をマウントすることは、以下に役立ちます。
- キーをホストに一致させたり、他の接続パラメーターを変更したりするために SSH 設定を使用することを許可します。
-
ユーザーが known_hosts ファイルを指定し、SSH でホストキーを検証することを許可します。これはデフォルトの設定では無効にされていますが、
-e ANSIBLE_HOST_KEY_CHECKING=True
をdocker
コマンドラインに追加することにより、環境変数を使用してこれを再度有効にできます。