8.7. 集群
8.7.1. 配置 JGroups 发现机制
要在 OpenShift 上启用 JBoss EAP 集群,请在 JBoss EAP 配置中配置 JGroups 协议堆栈,以使用 kubernetes.KUBE_PING
或 dns.DNS_PING
发现机制。
虽然您可以使用自定义 standalone-openshift.xml
配置文件,但 建议您使用环境变量 在镜像构建中配置 JGroups。
以下说明使用环境变量来配置 JBoss EAP 用于 OpenShift 镜像的发现机制。
如果您使用其中一个可用的应用模板在 JBoss EAP for OpenShift 镜像基础上部署应用,则默认发现机制为 dns.DNS_PING
。
dns.DNS_PING
和 kubernetes.KUBE_PING
发现机制彼此不兼容。无法从两个独立的子集群组成一个超级集群,一个使用 dns.DNS_PING 机制进行
发现,另一个使用 kubernetes.KUBE_PING
机制。同样,在执行滚动升级时,对源和目标集群的发现机制需要相同。
8.7.1.1. 配置 KUBE_PING
使用 KUBE_PING
JGroups 发现机制:
JGroups 协议堆栈必须配置为使用
KUBE_PING
作为发现机制。您可以通过将
JGROUPS_PING_PROTOCOL
环境变量设置为kubernetes.KUBE_PING 来做到这一点
:JGROUPS_PING_PROTOCOL=kubernetes.KUBE_PING
KUBERNETES_NAMESPACE
环境变量必须设置为您的 OpenShift 项目名称。如果没有设置,服务器会作为单节点集群("一个群集")的行为。例如:KUBERNETES_NAMESPACE=PROJECT_NAME
应设置
KUBERNETES_LABELS
环境变量。这应该与在服务级别设置的标签匹配。如果没有设置,则应用程序之外的 pod(您的命名空间中的某个 pod)将尝试加入。例如:KUBERNETES_LABELS=application=APP_NAME
必须将授权授予 Pod 在 下运行的服务帐户,以允许访问 Kubernetes 的 REST API。这通过 OpenShift CLI 完成。以下示例在当前项目命名空间中使用
default
服务帐户:oc policy add-role-to-user view system:serviceaccount:$(oc project -q):default -n $(oc project -q)
在项目命名空间中使用
eap-service-account
:oc policy add-role-to-user view system:serviceaccount:$(oc project -q):eap-service-account -n $(oc project -q)
注意
8.7.1.2. 配置 DNS_PING
使用 DNS_PING
JGroups 发现机制:
JGroups 协议堆栈必须配置为使用
DNS_PING
作为发现机制。您可以通过将
JGROUPS_PING_PROTOCOL
环境变量设置为dns.DNS_PING 来做到这一点
:JGROUPS_PING_PROTOCOL=dns.DNS_PING
OPENSHIFT_DNS_PING_SERVICE_NAME
环境变量必须设置为集群的 ping 服务的名称。OPENSHIFT_DNS_PING_SERVICE_NAME=PING_SERVICE_NAME
OPENSHIFT_DNS_PING_SERVICE_PORT
环境变量应设置为公开 ping 服务的端口号。DNS_PING
协议尝试从 SRV 记录辨别端口,否则默认为8888
。OPENSHIFT_DNS_PING_SERVICE_PORT=PING_PORT
必须定义公开 ping 端口的 ping 服务。这个服务应该是无头的(ClusterIP=None),且必须具有以下内容:
- 端口必须命名为。
该服务必须使用 service.
alpha.kubernetes.io/tolerate-unready-endpoints
和publishNotReadyAddresses
属性进行注解,两者都设置为true
。注意-
使用
service.alpha.kubernetes.io/tolerate-unready-endpoints
和publishNotReadyAddresses
属性来确保 ping 服务在较旧和较新的 OpenShift 版本中正常工作。 - 省略这些注解会导致每个节点在启动过程中形成自己的"集群"。然后,每个节点在启动后将其集群合并到其他节点的集群中,因为其他节点在启动后才会检测到。
kind: Service apiVersion: v1 spec: publishNotReadyAddresses: true 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."
-
使用
DNS_PING
不需要对服务帐户进行任何修改,并使用默认权限。