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 ドキュメントの専用セクションを参照してください。