Docker¶
TPAは、Dockerコンテナーを作成し、クラスターをデプロイできます。現在、コンテナをセットアップして、systemdやその他のサービスを通常のVMのように実行します。
Dockerコンテナへのデプロイは、さまざまなクラスター構成をテストする簡単な方法です。実稼働用ではありません。
概要¶
構成時にプラットフォームを選択するだけです。
[tpa]$ tpaexec configure clustername --platform docker […]
[tpa]$ tpaexec provision clustername
[tpa]$ tpaexec deploy clustername
オペレーティングシステムの選択¶
標準の--os Debian/Ubuntu/RedHat
構成オプションを使用して、コンテナに使用するディストリビューションを選択します。
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を起動できます。
Cgroupバージョン¶
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ホストでルートを取得できます。信頼できるユーザーのみがDockerデーモンにアクセスできるようにする必要があります。
Dockerコンテナの権限¶
特権コンテナ¶
デフォルトでは、TPAは非特権モードでDockerコンテナをプロビジョニングし、Linux機能フラグは追加しません。このようなコンテナは、ホストのファイアウォールルール、ファイルシステム、ブロックデバイス、またはホストでの真のルート権限を必要とする他のほとんどのタスクを管理できません。
コンテナを特権モードで実行する必要がある場合は、必要なインスタンスにprivileged
ブール変数を設定するか、instance_defaults
でグローバルに設定します。
instance_defaults:
privileged: true
警告 :特権モードでコンテナを実行すると、rootユーザーまたはrootを取得できるプロセスは、カーネルモジュールのロード、ホストのファイアウォールルールの変更、コンテナの名前空間のエスケープなど、実際のホスト「root」ユーザーと同じように動作できます。本当に必要な場合を除き、コンテナを特権モードで実行しないでください。
Linuxケーパビリティフラグの詳細については、 man capabilities
を参照してください。
security_opts およびno-new-privileges フラグ¶
tpaexecは、プロセスが特権を増やせない制限モードでdockerコンテナーを起動できます。
setuidバイナリは制限されています。 instance_defaults
またはコンテナごとの変数docker_security_opts
を使用して、tpaexecでこれを有効にします。
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