3.4. クラスタリング
3.4.1. JGroups 検出メカニズムの設定
OpenShift でのクラスタリングは、Kubernetes
または DNS の
2 つの検出メカニズムのいずれかによって実現されます。以下を設定できます。
-
<kubernetes.KUBE_PING/>
または<dns.DNS_PING/>
要素を使用して、standalone-openshift.xml
設定ファイル内で JGroups プロトコルスタックを直接設定することにより、 -
または、
dns.DNS_PING
またはkubernetes.KUBE_PING
に設定できるJGROUPS_PING_PROTOCOL
環境変数を指定します。
OpenShift 4.x テンプレート は、デフォルトでデュアルスタック設定のクラスターを有効にするために、spec.ipFamilyPolicy
フィールドを PreferDualStack
に設定してdns.DNS_PING
メカニズムを使用するように設定されています。ただし、JGROUPS_PING_PROTOCOL
環境変数に値が指定されていない場合、kubernetes.KUBE_PING
がイメージで使用されるデフォルトのオプションです。
3.4.1.1. single-stack 設定のクラスターでの DNS_PING の設定
DNS_PING
が IPv4 or IPv6
の シングルスタッククラスター で機能するには、次の手順を実行する必要があります。
-
OPENSHIFT_DNS_PING_SERVICE_NAME
環境変数を、クラスターの ping サービスの名前に設定する必要があります。設定していない場合には、サーバーは単一ノードのクラスター (ノードが 1 つのクラスター) のように機能します。 -
OPENSHIFT_DNS_PING_SERVICE_PORT
環境変数を、ping サービスが公開されるポート番号に設定する必要があります。DNS_PING
プロトコルは SRV レコードからポートを識別しようとしますが、ポートを識別できない場合、この変数はデフォルトで 8888 になります。 ping ポートを公開する ping サービスは定義する必要があります。このサービスはヘッドレス (ClusterIP=None) で、以下の条件を満たす必要があります。
- ポートは、ポート検出が機能するように、名前を指定する必要があります。
-
このサービスの
spec.publishNotReadyAddresses
フィールドは"true"
に設定する必要があります。このブール値の設定を省略すると、各ノードは起動時に独自の 1 つのクラスターを形成し、起動後にそのクラスターを他のノードのクラスターにマージします (他のノードは起動するまで検出されないため)。
single-stack (IPv4 または IPv6) クラスター上の DNS_PING で使用する ping サービスの定義例
kind: Service apiVersion: v1 spec: clusterIP: None ipFamilyPolicy: SingleStack ports: - name: ping port: 8888 publishNotReadyAddresses: true selector: deploymentConfig: sso metadata: name: sso-ping annotations: description: "The JGroups ping port for clustering."
3.4.1.2. dual-stack 設定のクラスターでの DNS_PING の設定
さらに、IPv4 と IPv6 の両方のアドレスファミリーをサポートする デュアルネットワーククラスター でも DNS_PING
が機能するには、クラスターの ping サービスの spec.ipFamilyPolicy
フィールドを PreferDualStack
または RequireDualStack
に設定する必要があります。この設定により、コントロールプレーンは、dual-stack が設定されているクラスター上の ping サービスに IPv4 と IPv6 の両方のクラスター IP アドレスを割り当て、IPv4 と IPv6 の両方の IP アドレスの逆引き DNS ルックアップが適切に機能するようにし、対応する DNS SRV レコードを作成します。以下に示すように、ヘッドレスサービスに ping を実行します。
PreferDualStack
と一致する spec.ipFamilyPolicy
を使用した dual-stack configured クラスター上の ping サービス DNS SRV レコードの例
$ host -t SRV "${OPENSHIFT_DNS_PING_SERVICE_NAME}" sso-ping.dual-stack-demo.svc.cluster.local has SRV record 0 50 8888 10-128-0-239.sso-ping.dual-stack-demo.svc.cluster.local. sso-ping.dual-stack-demo.svc.cluster.local has SRV record 0 50 8888 fd01-0-0-1--b8.sso-ping.dual-stack-demo.svc.cluster.local.
dual-stack (IPv4 および IPv6) クラスター上の DNS_PING で使用する ping サービスの定義例
kind: Service apiVersion: v1 spec: clusterIP: None ipFamilyPolicy: PreferDualStack ports: - name: ping port: 8888 publishNotReadyAddresses: true selector: deploymentConfig: sso metadata: name: sso-ping annotations: description: "The JGroups ping port for clustering."
3.4.1.3. KUBE_PING の設定
KUBE_PING
を機能させるには以下の手順を実行する必要があります。
-
KUBERNETES_NAMESPACE
環境変数を設定する必要があります。設定していない場合には、サーバーは単一ノードのクラスター (ノードが 1 つのクラスター) のように機能します。 -
KUBERNETES_LABELS
環境変数を設定する必要があります。設定されていない場合、アプリケーションの外部の Pod は (名前空間内にある場合でも) 参加しようとします。 - Kubernetes の REST API にアクセスできるようにするには、Pod が実行されているサービスアカウントに対して承認を行う必要があります。コマンドラインで認可を付与します。次のポリシーコマンドの例を参照してください。
例3.1 policy コマンド
myproject
の namespace における default
のサービスアカウントの使用:
oc policy add-role-to-user view system:serviceaccount:myproject:default -n myproject
myproject
の namespace における eap-service-account
の使用:
oc policy add-role-to-user view system:serviceaccount:myproject:sso-service-account -n myproject
kubernetes.KUBE_PING
検出メカニズムはクラスターに追加の ping サービスを必要としないため、シングルスタック設定クラスターとデュアルスタック設定クラスターの両方で前述の手順を使用して機能します。
以下については、JBoss EAP for OpenShift ドキュメントの専用セクションを参照してください。