Docker¶
TPAは、Dockerコンテナーを作成し、クラスターをそれらにデプロイできます。現時点では、コンテナをセットアップしてsystemdやその他のサービスを通常のVMのように実行します。
dockerコンテナへのデプロイは、さまざまなクラスター構成をテストする簡単な方法です。実稼働での使用を意図したものではありません。
概要¶
構成時にプラットフォームを選択するだけです。
[tpa]$ tpaexec configure clustername --platform docker […]
[tpa]$ tpaexec provision clustername
[tpa]$ tpaexec deploy clustername
オペレーティングシステムの選択¶
標準の--os Debian/Ubuntu/RedHat/SLES
構成オプションを使用して、コンテナに使用するディストリビューションを選択します。
TPAは、このディストリビューション用に独自のsystemd対応イメージをビルドします。これらの画像には、tpa/
プレフィックスが付いた名前が付けられます(例、tpa/redhat:8 )。
--os-image some/image:name
を使用して、代わりに既存のsystemd対応イメージを指定します。たとえば、
イメージ(CentOS 7ベース)はこの方法で使用できます。
TPAは、DockerコンテナのDebian 8(jessie)またはUbuntu 16.04(xenial)をサポートしていません。これらのディストリビューションに同梱されている古いバージョンのsystemdにバグがあるためです。
Dockerのインストール¶
最新の安定したDocker-CEパッケージでTPAをテストします。
このドキュメントでは、Dockerが正常にインストールされており、イメージのプルやコンテナーの作成などの基本的な操作に精通していることを前提としています。
install Docker および get started に関するヘルプが必要な場合は、 Docker documentation にご相談ください。
MacOS Xでは、アプリケーションメニューから install “Docker Desktop for Mac” とDockerを起動できます。
CgroupVersion¶
CgroupVersion 2のサポートは、ansibleおよび関連するツールのdocker sdkに対してまだ完全には焼き付けられていません。そのため、最新バージョンのdockerを使用することをお勧めしますが。バージョン2が完全にサポートされるまで、 CgroupVersion 1に依存しています。以下の手順は、プラットフォームがデフォルトでCgroupVersion 2を使用している場合、 CgroupVersion 1に切り替えるための変更を提案します。
Linuxの場合:
$ echo GRUB_CMDLINE_LINUX=systemd.unified_cgroup_hierarchy=false > \
/etc/default/grub.d/cgroup.cfg
$ update-grub
$ reboot
MacOSの場合:
~/ ライブラリー/Group\ Containers/group.com.docker/settings.jsonを編集し、次の置き換えを行います
"deprecatedCgroupv1": false→"deprecatedCgroupv1": true
2.Dockerデスクトップアプリを再起動します
権限¶
TPAは、実行しているユーザーがDockerデーモンにアクセスする権限を持っていることを想定しています(通常、
/var/run/docker.sock を所有するdocker
グループのメンバーであることによる)。次のようなコマンドを実行して、アクセスできるかどうかを確認します。
[tpa]$ docker version --format {{.Server.Version}}
19.03.12
警告 :ユーザーにDockerデーモンと話す機能を与えると、ユーザーは簡単にDockerホストでrootを取得できます。信頼できるユーザーのみがDockerデーモンにアクセスできるようにする必要があります。
Dockerコンテナの権限¶
特権コンテナ¶
デフォルトでは、TPAは非特権モードでDockerコンテナをプロビジョニングし、Linux機能フラグは追加されません。このようなコンテナは、ホストファイアウォールルール、ファイルシステム、ブロックデバイス、またはホストでの真のroot権限を必要とするその他のほとんどのタスクを管理できません。
コンテナを特権モードで実行する必要がある場合は、それを必要とするインスタンスにprivileged
ブール変数を設定するか、instance_defaults
でグローバルに設定します。例:
instance_defaults:
privileged: true
警告 :特権モードでコンテナを実行すると、 rootユーザーまたはrootを取得できるプロセスは、カーネルモジュールのロード、ホストファイアウォールルールの変更、コンテナ名前空間のエスケープ、またはその他の方法で実際のホスト「root」ユーザーと同じように動作できます。本当に必要な場合を除き、コンテナーを特権モードで実行しないでください。
Linuxケーパビリティフラグの詳細については、 man capabilities
を参照してください。
security_opts およびno-new-privileges フラグ¶
tpaexecは、プロセスが特権を増やすことができない制限モードでdockerコンテナーを起動できます。
setuidバイナリは制限されているなど。 tpaexecでinstance_defaults
またはコンテナごとの変数docker_security_opts
を使用してこれを有効にします。
instance_defaults:
docker_security_opts:
- no-new-privileges
docker run の--security-opts への他の引数も受け入れられます。
SELinuxユーザーとロール。
Linux機能フラグ¶
tpaexecは、コンテナごとまたはinstance_defaults
で設定できるdocker_cap_add
リスト変数を使用して、Linux機能フラグに対するDockerの制御を公開します。機能フラグの詳細については、
man capabilities 、docker run ドキュメント、およびAnsible
docker_containers モジュールのドキュメントを参照してください。
Dockerの--cap-drop は、 docker_cap_drop
リストを介してサポートされています。
たとえば、コンテナを非特権として実行し、システムクロックを変更できるようにするには、次のように記述します。
instance_defaults:
privileged: false
docker_cap_add:
- sys_time
docker_cap_drop:
- all
Dockerストレージ構成¶
注意 :多くのホストのデフォルトのDocker構成は lvm-loop
ブロックストレージを使用し、実稼働展開には適していません。
docker info
を実行して、使用しているストレージドライバーを確認します。ループバックスキームを使用している場合、次のように表示されます。
Storage Driver: devicemapper
…
Data file: /dev/loop0
ストレージ構成の詳細については、Dockerのドキュメントを参照してください。
Dockerコンテナ管理¶
start-containers およびstop-containers
コマンドを使用して、クラスター内のすべてのdockerコンテナーを一緒に起動および停止できます。
[tpa]$ tpaexec start-containers clustername
[tpa]$ tpaexec stop-containers clustername
これらのコマンドは、コンテナーをプロビジョニングまたはプロビジョニング解除したり、接続したりしません。これらは、将来の使用に備えて利用可能な状態にしておく必要があるdockerクラスターを一時的に使用していないときに、リソースを節約することを目的としています。
クラスター内のプロビジョニングされたdockerコンテナーの概要については、起動または停止にかかわらず、
list-containers コマンドを使用します。
[tpa]$ tpaexec list-containers clustername