Show Table of Contents
このページには機械翻訳が使用されている場合があります (詳細はこちら)。
9.5. Docker コンテナーの Pacemaker サポート (テクノロジープレビュー)
重要
Docker コンテナーの Pacemaker サポートは、テクノロジープレビュー目的でのみ実現されています。「テクノロジープレビュー」の意味については、テクノロジプレビュー機能のサポート範囲 を参照してください。
テクノロジープレビューであるこの機能には 1 つの例外があります。Red Hat Enterprise Linux 7.4 以降、Red Hat は、Red Hat Openstack Platform (RHOSP) デプロイメントで Pacemaker バンドルの使用を完全にサポートします。
Pacemaker は、必要なインフラストラクチャで Docker コンテナーを起動するための特殊構文 (bundle) に対応しています。Pacemaker バンドルを作成すれば、バンドルがカプセル化を行う Pacemaker リソースを作成できます。
- 「Pacemaker バンドルリソースの設定」 では、Pacemaker バンドルを作成するコマンドについて説明し、各バンドルパラメーターに定義できるパラメーターについてまとめた表が記載されています。
- 「バンドルでの Pacemaker リソースの設定」 では、 Pacemaker バンドルに含まれているリソースの設定について説明しています。
- 「Pacemaker バンドルの制限」 では、Pacemaker バンドルの制限について説明しています。
- 「Pacemaker バンドル設定の例」 は、Pacemaker バンドルの設定例を説明しています。
9.5.1. Pacemaker バンドルリソースの設定
Docker コンテナーの Pacemaker バンドルを作成するコマンド構文は以下の通りです。このコマンドを使用すると、その他のリソースをカプセル化しないバンドルが作成されます。バンドルでクラスターリソースを作成する説明は、「バンドルでの Pacemaker リソースの設定」を参照してください。
pcs resource bundle create bundle_id container docker [container_options] [network network_options] [port-map port_options]... [storage-map storage_options]... [meta meta_options] [--disabled] [--wait[=n]]
必要な bundle_id パラメーターは、バンドルに対する一意の名前にする必要があります。
--disabled
オプションを指定すると、バンドルは自動的に起動しません。--wait
オプションを指定すると、Pacemaker はバンドル開始まで最大 n
秒待ち、成功すれば 0 を、失敗すれば 1 を返します。n
を指定しないと、デフォルトで 60 分に指定されます。
以下のセクションでは、Pacemaker バンドルの各要素に設定できるパラメーターを説明します。
9.5.1.1. Docker パラメーター
表9.6「Docker コンテナーのパラメーター」 は、バンドルに設定できる
docker
コンテナーオプションを説明します。
注記
Pacemaker で
docker
バンドルを設定する前に、Docker をインストールし、バンドルの実行が許可されている各ノード上に完全に設定した Docker イメージを展開します。
表9.6 Docker コンテナーのパラメーター
フィールド | デフォルト | 説明 |
---|---|---|
image
|
Docker イメージタグ (必須)
| |
replicas
|
正であれば
promoted-max の値。それ以外は 1。
|
起動するコンテナーインスタンスの数を指定する正の整数
|
replicas-per-host
|
1
|
単一ノードで起動できるコンテナーインスタンスの数を指定する正の整数
|
promoted-max
|
0
|
正であれば、非負の整数は、マスターロールにおいてサービスを実行できる多くのレプリカとともに、コンテナー化されたサービスが複数のサービスとして扱われる必要があることを示しています。
|
network
| |
これが指定されると、Docker コンテナーのネットワーク設定として
docker run コマンドに渡されます。
|
run-command
| /usr/sbin/pacemaker_remoted バンドルがリソースを含む場合、それ以外はなし
|
このコマンドは、起動する際にコンテナー内で実行されます (”PID 1”)。バンドルにリソースが含まれる場合、このコマンドは
pacemaker_remoted デーモンを起動する必要があります (ただし、その他のタスクも実行するスクリプトでも問題ありません)。
|
options
| | docker run コマンドに渡す、その他のコマンドラインオプション
|
9.5.1.2. (バンドルネットワークパラメーター
表9.7「バンドルリソースネットワークパラメーター」 では、バンドルに設定できる
network
オプションを説明します。
表9.7 バンドルリソースネットワークパラメーター
フィールド | デフォルト | 説明 |
---|---|---|
add-host
|
TRUE
|
TRUE で
ip-range-start が使用される場合は、Pacemaker により自動的に、コンテナー内の /etc/hosts ファイルに、各レプリカ名と割り当てられている IP のエントリーが指定されるようにします。
|
ip-range-start
| |
これが指定されると、Pacemaker は、各コンテナーインスタンスに対して暗黙的な
ocf:heartbeat:IPaddr2 リソースを作成します。これは、この IP アドレスで始まり、Docker 要素の replicas として指定されている限りのシーケンシャルアドレスとして使用します。これらのアドレスは、ホストのネットワークから使用して、コンテナー内のサービスに到達できます。ただし、コンテナー自身の中では表示されません。現在サポートされているアドレスは、IPv4 のみです。
|
host-netmask
|
32
| ip-range-start が指定されると、IP アドレスがこの CIDR ネットマスクで (多数のビットとして) 作成されます。
|
host-interface
| | ip-range-start が指定されていると、IP アドレスがこのホストインターフェイスで作成されます (デフォルトでは、IP アドレスから決まります)。
|
control-port
|
3121
|
バンドルに Pacemaker リソースが含まれる場合、クラスターは、コンテナー内の Pacemaker Remote との通信に、この整数 の TCP ポートを使用します。コンテナーがデフォルトポートでリッスンできない場合は、このポートを変更すると便利です。このような状況は、コンテナーが
ip-range-start ではなく、ホストのネットワークを使用すると起こることがあります (この場合、replicas-per-host は 1 に設定されている必要があります)。あるいは、バンドルが、デフォルトのポートで既にリッスンしている Pacemaker Remote ノードで実行している場合も考えられます。ホストやコンテナーで設定されている PCMK_remote_port 環境変数は、バンドル接続に対しては無視されます。
Pacemaker バンドル設定が
control-port パラメーターを使用するときに、バンドルに独自の IP アドレスがある場合には、corosync を実行しているすべてのクラスターノード上およびそのクラスターノードから、その IP アドレスでポートを開く必要があります。あるいは、バンドルが network="host" コンテナーパラメーターを設定している場合には、すべてのクラスターノードから、それぞれのクラスターノードの IP アドレスでポートを開く必要があります。
|
注記
レプリカは、バンドル ID とダッシュそしてゼロから始まる整数カウンターで名前が付けられます。
httpd-bundle
というバンドル名により replicas=2
が設定されれば、 そのコンテナーの名前は httpd-bundle-0
と httpd-bundle-1
になります。
ネットワークパラメーターに加え、バンドルに
port-map
パラメーターを任意で指定できます。表9.8「バンドルリソースポートマップパラメーター」 では、これらの port-map
パラメーターを説明しています。
表9.8 バンドルリソースポートマップパラメーター
フィールド | デフォルト | 説明 |
---|---|---|
id
| |
ポートマッピングの一意の名前 (必須)
|
port
| |
これが指定されると、ホストネットワーク上 ((
ip-range-start が指定されていル場合は、コンテナーの、割り当てられた IP アドレス上)) のこの TCP ポート番号に対する接続 がコンテナーネットワークに転送されます。port または range のいずれ 1 つがポートマッピングで指定される必要があります。
|
internal-port
| port の値
| port と internal-port が指定されている場合は、ホストネットワーク上の port に対する接続が、コンテナーネットワーク上のこのポートに転送されます。
|
range
| | range が指定されると、ホストネットワーク上 ((ip-range-start が指定されている場合は、コンテナーの、割り当てられた IP アドレス上)) のこれらの TCP ポート番号 (first_port-last_port) に対する接続 が、コンテナーネットワークの同じポートに転送されます。port または range のいずれ 1 つがポートマッピングで指定される必要があります。
|
注記
バンドルにソースが含まれる場合、Pacemaker は自動的に
control-port
をマッピングします。そのため、ポートマッピングでは、そのポートを指定する必要はありません。
9.5.1.3. バンドルストレージパラメーター
必要に応じて、バンドルに
storage-map
パラメーターを設定することができます。表9.9「バンドルリソースストレージマッピングパラメーター」 では、これらのパラメーターを説明しています。
表9.9 バンドルリソースストレージマッピングパラメーター
フィールド | デフォルト | 説明 |
---|---|---|
id
| |
ストレージマッピングの一意の名前 (必須)
|
source-dir
| |
コンテナーにマッピングされるホストファイルシステム上の絶対パス。
storage-map パラメーターを設定する際には、source-dir と source-dir-root のいずれかを指定する必要があります。
|
source-dir-root
| |
各コンテナーインスタンスのホスト上で異なるサブディレクトリーを使用した、コンテナーにマッピングされるホストのファイルシステム上のパスの開始。このサブディレクトリーには、バンドル名と同じ名前が付けられ、ダッシュと 0 から始まる整数カウンターも加えられます。
storage-map パラメーターを設定するときには、source-dir と source-dir-root のいずれかを完全に指定する必要があります。
|
target-dir
| |
ホストストレージがマッピングされるコンテナー内のパス名 (必須)
|
options
| |
ストレージをマッピングする際に使用するファイルシステムマウントオプション
|
ホスト上のサブディレクトリーが
source-dir-root
パラメーターで名前が付けられる仕組みの例として、source-dir-root=/path/to/my/directory
、target-dir=/srv/appdata
、バンドルに replicas=2
で mybundle
という名前が指定されている場合、クラスターは、mybundle-0
と mybundle-1
というホスト名で 2 つのコンテナーインスタンスを作成します。また、コンテナーを実行しているホスト上で 2 つのディレクトリー (/path/to/my/directory/mybundle-0
と /path/to/my/directory/mybundle-1
) を作成します。各コンテナーには、いずれかのディレクトリーが与えられ、そのコンテナー内で実行しているアプリケーションには、/srv/appdata
というディレクトリが表示されます。
注記
Pacemaker は、ソースディレクトリが既にホストに存在しない場合の動作を定義しません。ただし、コンテナーテクノロジーまたはそのリソースエージェントがソースディレクトリーを作成します。
注記
バンドルに Pacemaker リソースが含まれる場合、Pacemaker は自動的に
source-dir=/etc/pacemaker/authkey
target-dir=/etc/pacemaker/authkey
と source-dir-root=/var/log/pacemaker/bundles
target-dir=/var/log
と同等のものをコンテナーにマッピングします。そのため、storage-map
パラメーターを設定する際には、これらのパスを指定する必要はありません。
重要
PCMK_authkey_location
環境変数は、クラスターのノード上の /etc/pacemaker/authkey
のデフォルト以外に設定することはできません。
9.5.2. バンドルでの Pacemaker リソースの設定
バンドルは必要に応じて、1 つの Pacemaker クラスターリソースを含めることができます。バンドルに含まれていないリソースと同様に、クラスターリソースには、操作、インスタンス属性、メタデータ属性を定義することができます。バンドルにリソースが含まれる場合、コンテナーイメージは Pacemaker Remote デーモンを含む必要があります。また、
ip-range-start
または control-port
はバンドルで設定する必要があります。Pacemaker は、接続に対して暗黙的な ocf:pacemaker:remote
リソースを作成し、コンテナー内で Peacemaker Remote を起動して、Pacemaker Remote でリソースを監視・管理します。バンドルに 2 つ以上のコンテナーインスタンス (レプリカ) がある場合、Pacemaker リソースは暗黙的なクローンとして機能します。バンドルが promoted-max
オプションを、0 を超えるように設定した場合、これは多状態クローンになります。
pcs resource create
コマンドで Pacemaker バンドルでリソースを作成します。これは、コマンドに bundle
を指定し、リソースを含むバンドル ID を指定して行います。リソースを含む Pacemaker バンドルの作成例は、「Pacemaker バンドル設定の例」 を参照してください。
重要
リソースを含むバンドルのコンテナーにはアクセス可能なネットワーク環境が必要です。これにより、クラスターノードの Pacemaker はコンテナー内の Pacemaker Remote に問い合わせることができます。例えば、
docker
オプションの --net=none
は、リソースとは使うべきではありません。デフォルト (コンテナー内の一意なネットワークスペースを使用して) ip-range-start
とともに動作します。docker
オプションの --net=host
が使用されている場合 (コンテナーにホストのネットワークスペースを共有させて)、一意な control-port
パラメーターを各バンドルに指定する必要があります。ファイアウォールでは、control-port
にアクセスできるように設定を行う必要があります。
9.5.2.1. ノード属性とバンドルリソース
バンドルにクラスターリソースが含まれる場合、リソースエージェントはマスタースコアなどのノード属性を設定する可能性があります。ただし、コンテナーでは、ノードが属性を取得するべきかどうかはっきりしません。
コンテナーがホストされているノードに関係なく、コンテナーが同じ共有ストレージを使用している場合は、バンドルノード自体でマスタースコアを使用することが適切です。一方、コンテナーが、基礎となるホストからエクスポートされたストレージを使用する場合は、基礎となるホストでマスタースコアを使用することがより適切です。これは特定の状況に依存するため、
container-attribute-target
リソースメタデータ属性では、ユーザーは使用するアプローチを指定することができます。host
に設定されると、ユーザー定義型のノード属性は、基礎となるホストでチェックされます。その他の場合は、ローカルノード (この場合はバンドルノード) が使用されます。この動作は、ユーザー定義属性にのみ適用されます。クラスターは、#uname
などのクラスター定義型の属性に対してローカルノードを常にチェックします。
container-attribute-target
が host
に設定されると、クラスターは、追加の環境変数をリソースエージェノに渡します。これにより、ノード属性を正しく設定できるようになります。
9.5.2.2. メタデータ属性とバンドルリソース
バンドルで設定されているメタデータ属性は、バンドルに含まれるリソースや、バンドルに対して Pacemaker によって作成されたリソースによって継承されます。これには、
priority
、target-role
、is-managed
などのオプションが含まれます。
9.5.3. Pacemaker バンドルの制限
Pacemaker バンドルは以下の制限で動作します。
- バンドルはグループに含まれていないことや、
pcs
コマンドで明示的にクローン化されていないことがあります。これには、バンドルが含むリソースや、バンドルに対して Pacemaker によって明示的に作成されたリソースが含まれます。ただし、バンドルのreplicas
の値が 1 未満で設定されると、バンドルはクローンであるかのように動作することに注意してください。 - バンドルが管理されていない場合や、クラスターがメンテナンスモードの際に Pacemaker を再起動すると、バンドルが不具合を起こすことがあります。
- バンドルには、インスタンス属性、使用率属性、または操作がありません。しかし、バンドルに含まれるリソースには、これらがあります。
- リソースを含むバンドルは、バンドルが、一意な異なる
control-port
を使用する場合にのみ、Pacemaker Remote ノードで実行できます。
9.5.4. Pacemaker バンドル設定の例
以下の例では、
httpd-bundle
というバンドル ID で Pacemaker bundle
を作成します。これには、httpd
というリソース ID を持つ ocf:heartbeat:apache
が含まれます。
この手順には、以下の前提設定が必要です。
- Docker が、クラスターの各ノードでインストールされ有効化されている。
pcmktest:http
という既存の Docker イメージが存在する。- コンテナーイメージに、Pacemaker Remote デーモンが含まれている。
- コンテナーイメージに、設定済みの Apache Web サーバーが含まれている。
- クラスターの各ノードに、
/var/local/containers/httpd-bundle-0
、/var/local/containers/httpd-bundle-1
、/var/local/containers/httpd-bundle-2
というディレクトリがあり、Web サーバーの root にindex.html
ファイルが含まれている。稼働中は、単一の共有ドキュメント root が対象となるが、この例では、この設定により、各ホスト上のindex.html
ファイルを別のものにすることが可能。そのため、Web サーバーに接続して、サービスされるindex.html
ファイルを確認することが可能。
この手順により、Pacemaker バンドルに以下のパラメーターが設定されます。
- バンドル ID は
httpd-bundle
です。 - 以前設定した Docker コンテナーイメージは
pcmktest:http
です。 - この例は、3 コンテナーインスタンスを起動します。
- この例では、コマンドラインオプション
--log-driver=journald
をdocker run
コマンドに渡します。このパラメーターは必要ではありませんが、その他のオプションをdocker
コマンドに渡す方法を示すために追加しています。--log-driver=journald
の値は、コンテナー内のシステムログが、基礎となるホストのsystemd
ジャーナルに記録されます。 - Pacemaker は、3 つの連続した暗黙的な
ocf:heartbeat:IPaddr2
リソースを作成します。これは、各コンテナに対して1 つ作成され、IP アドレス 192.168.122.131 で始まります。 - IP アドレスは、ホストインターフェイス eth0 で作成されます。
- IP アドレスは、CIDR ネットマスクが 24 で作成されます。
- この例では、
http-port
というポートマップ ID を作成します。コンテナーに割り当てられている IP アドレスのポート 80 に対する接続がコンテナーネットワークに転送されます。 - この例では、
httpd-root
というストレージマップ ID を作成します。このストレージマッピングについて以下で説明します。source-dir-root
の値は/var/local/containers
です。これは各コンテナーインスタンスに対して、ホスト上の異なるサブディレクトリーを使用し、コンテナーにマッピングされるホストのファイルシステム上のパスの開始を指定します。target-dir
の値は/var/www/html
で、ホストストレージがマッピングされるコンテナー内のパス名を指定します。- このファイルシステム
rw
マウントオプションは、ストレージのマッピングの際に使用されます。 - この例のコンテナーはリソースを含むため、Pacemaker は自動的に、コンテナーに
source-dir=/etc/pacemaker/authkey
と同等のものをマッピングします。このコンテナーでは、ストレージマッピングにそのパスを指定する必要はありません。
この例では、既存のクラスター設定が、
temp-cib.xml
という名前の一時ファイルに配置され、temp-cib.xml.deltasrc
にコピーされます。クラスター設定に対する設定のすべては、tmp-cib.xml
ファイルに対して行われます。更新が完了すると、pcs cluster cib-push
の diff-against
オプションを使用するため、設定ファイルに対する更新のみがアクティブな設定ファイルに対して行われます。
#pcs cluster cib tmp-cib.xml
#cp tmp-cib.xml tmp-cib.xml.deltasrc
#pcs -f tmp.cib.xml resource bundle create httpd-bundle
\container docker image=pcmktest:http replicas=3
\options=--log-driver=journald
\network ip-range-start=192.168.122.131 host-interface=eth0
\host-netmask=24 port-map id=httpd-port port=80
\storage-map id=httpd-root source-dir-root=/var/local/containers
\target-dir=/var/www/html options=rw
\ #pcs -f tmp-cib.xml resource create httpd ocf:heartbeat:apache
\statusurl=http://localhost/server-status bundle httpd-bundle
#pcs cluster cib-push tmp-cib.xml diff-against=tmp-cib.xml.deltasrc
このページには機械翻訳が使用されている場合があります (詳細はこちら)。