5.2.2.4.3. クラスタリング

OpenShift EAP では、Kubernetes または DNS の検出メカニズム 2 つの内 1 つを使用してクラスタリングを実現できます。これには、standalone-openshift.xml で <openshift.KUBE_PING/> 要素または <openshift.DNS_PING/> 要素のいずれかを指定して JGroups プロトコルスタックを設定します。テンプレートは、DNS_PING を使用するように設定しますが、イメージで使用するデフォルトは `KUBE_PING` となっています。

使用される検出メカニズムは、JGROUPS_PING_PROTOCOL 環境変数によって指定されます。これは openshift.DNS_PING またはopenshift.KUBE_PING のいずれかに設定できます。OpenShift.KUBE_PING は、JGROUPS_PING_PROTOCOL に値が指定されていない場合は、イメージによって使用されるデフォルトです。

DNS_PING を機能させるには、以下の手順を実行する必要があります。

  1. OPENSHIFT_DNS_PING_SERVICE_NAME 環境変数は、クラスターの ping サービス名に設定する必要があります (上記の表を参照)。設定していない場合には、サーバーは単一ノードのクラスター (ノードが 1 つのクラスター) のように機能します。
  2. OPENSHIFT_DNS_PING_SERVICE_PORT 環境変数は、ping サービスを公開するポート番号に設定する必要があります (上記の表を参照)。DNS_PING プロトコルは可能な場合には SRV レコードからのポートを識別しようとします。デフォルト値は 8888 です。
  3. ping ポートを公開する ping サービスは定義する必要があります。このサービスは「ヘッドレス」(ClusterIP=None) で、以下の条件を満たす必要があります。

    1. ポートは、ポート検出が機能するように、名前を指定する必要があります。
    2. service.alpha.kubernetes.io/tolerate-unready-endpoints"true" に指定してアノテーションを設定する必要があります。このアノテーションを省略すると、起動時にノードごとに独自の「単一ノードのクラスター」が形成され、(起動後でないと他のノードが検出されないので) 起動後にこのクラスターが他のノードのクラスターにマージされます。

DNS_PING で使用する ping サービスの例

kind: Service
apiVersion: v1
spec:
    clusterIP: None
    ports:
    - name: ping
      port: 8888
    selector:
        deploymentConfig: eap-app
metadata:
    name: eap-app-ping
    annotations:
        service.alpha.kubernetes.io/tolerate-unready-endpoints: "true"
        description: "The JGroups ping port for clustering."

KUBE_PING を機能させるには、以下の手順を実行する必要があります。

  1. OPENSHIFT_KUBE_PING_NAMESPACE 環境変数を設定する必要があります (上記の表を参照)。設定していない場合には、サーバーは単一ノードのクラスター (ノードが 1 つのクラスター) のように機能します。
  2. OPENSHIFT_KUBE_PING_LABELS 環境変数を設定する必要があります (上記の表を参照)。設定されていない場合には、アプリケーション外の Pod (namespace に関係なく) が参加しようとします。
  3. Kubernetes の REST API にアクセスできるようにするには、Pod が実行されているサービスアカウントに対して承認を行う必要があります。これはコマンドラインで行います。

例5.1 policy コマンド

myproject の namespace におけるデフォルトのサービスアカウントの使用:

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:eap-service-account -n myproject