Chapter 4. Configuring Clustering
The JBoss Data Grid for OpenShift images can use either the Kubernetes or DNS discovery mechanisms for clustering. These discovery mechanisms enable images to automatically join clusters.
By default, DNS is pre-configured in the JBoss Data Grid for OpenShift image templates. If you want to use Kubernetes as the discovery mechanism, or if you plan to build and deploy a custom image, you must configure cluster discovery.
JBoss Data Grid does not support removing images from an active cluster.
4.1. Configuring the Kubernetes Discovery Mechanism
To configure the Kubernetes discovery mechanism for clustering, do the following:
Set
openshift.KUBE_PING
as the value for theJGROUPS_PING_PROTOCOL
environment variable.JGROUPS_PING_PROTOCOL=openshift.KUBE_PING
JGROUPS_PING_PROTOCOL=openshift.KUBE_PING
Copy to Clipboard Copied! Specify the OpenShift project name as the value for the
OPENSHIFT_KUBE_PING_NAMESPACE
environment variable. If you do not set this variable, the server behaves like a single-node cluster.OPENSHIFT_KUBE_PING_NAMESPACE=PROJECT_NAME
OPENSHIFT_KUBE_PING_NAMESPACE=PROJECT_NAME
Copy to Clipboard Copied! Specify the label that is set at the service level as the value for the
OPENSHIFT_KUBE_PING_LABELS
environment variable. If you do not set this variable, pods outside the application but in the same namespace attempt to join.OPENSHIFT_KUBE_PING_LABELS=app=APP_NAME
OPENSHIFT_KUBE_PING_LABELS=app=APP_NAME
Copy to Clipboard Copied! Grant authorization to the service account the pod is running under so that it can access the Kubernetes REST API. You grant this authorization using the OpenShift CLI, as follows:
Granting authorization for the default service account in the myproject namespace:
oc policy add-role-to-user view system:serviceaccount:$(oc project -q):default -n $(oc project -q)
oc policy add-role-to-user view system:serviceaccount:$(oc project -q):default -n $(oc project -q)
Copy to Clipboard Copied! Granting authorization for eap-service-account in the myproject namespace:
oc policy add-role-to-user view system:serviceaccount:$(oc project -q):eap-service-account -n $(oc project -q)
oc policy add-role-to-user view system:serviceaccount:$(oc project -q):eap-service-account -n $(oc project -q)
Copy to Clipboard Copied! Ensure port
8888
is defined as a ping port on the pod container, as follows:ports: - containerPort: 8888 name: ping protocol: TCP
ports: - containerPort: 8888 name: ping protocol: TCP
Copy to Clipboard Copied!
4.2. Configuring the DNS Discovery Mechanism
To configure the DNS discovery mechanism for clustering, do the following:
Set
openshift.DNS_PING
as the value for theJGROUPS_PING_PROTOCOL
environment variable.JGROUPS_PING_PROTOCOL=openshift.DNS_PING
JGROUPS_PING_PROTOCOL=openshift.DNS_PING
Copy to Clipboard Copied! Specify the name of the ping service for the cluster as the value for the
OPENSHIFT_DNS_PING_SERVICE_NAME
environment variable.OPENSHIFT_DNS_PING_SERVICE_NAME=PING_SERVICE_NAME
OPENSHIFT_DNS_PING_SERVICE_NAME=PING_SERVICE_NAME
Copy to Clipboard Copied! Specify the port number where the ping service is exposed as the value for the
OPENSHIFT_DNS_PING_SERVICE_PORT
environment variable. The default value is8888
.OPENSHIFT_DNS_PING_SERVICE_PORT=PING_PORT
OPENSHIFT_DNS_PING_SERVICE_PORT=PING_PORT
Copy to Clipboard Copied! Define a ping service that exposes the ping port, as in the following example:
apiVersion: v1 kind: Service spec: clusterIP: None ports: - name: ping port: 8888 protocol: TCP targetPort: 8888 selector: deploymentConfig=datagrid-app metadata: annotations: description: The JGroups ping port for clustering. service.alpha.kubernetes.io/tolerate-unready-endpoints: 'true'
apiVersion: v1 kind: Service spec: clusterIP: None ports: - name: ping port: 8888 protocol: TCP targetPort: 8888 selector: deploymentConfig=datagrid-app metadata: annotations: description: The JGroups ping port for clustering. service.alpha.kubernetes.io/tolerate-unready-endpoints: 'true'
Copy to Clipboard Copied! ImportantYou should configure
clusterIP: None
so that the service is headless. Likewise, the ping port must be named and include theservice.alpha.kubernetes.io/tolerate-unready-endpoints: 'true'
annotation.