3.4. 集群
3.4.1. 配置 JGroups 发现机制
OpenShift 中的集群是通过以下两种发现机制之一来实现的: Kubernetes
或 DNS
。可以设置它们:
-
通过使用 <
kubernetes.KUBE_PING/> 或 <
配置文件中配置 JGroups 协议堆栈,dns.DNS_PING
/> 元素直接在standalone-openshift.
xml -
或者,通过指定
JGROUPS_PING_PROTOCOL
环境变量,它可以设置为dns.DNS_PING
或kubernetes.KUBE_PING
。
OpenShift 4.x 模板配置为使用 dns.DNS_PING
机制,并将 spec.ipFamilyPolicy
字段设置为 PreferDualStack
,以启用双栈配置的集群。但是,如果没有为 JGROUPS_PING_PROTOCOL
环境变量指定值,则 kubernetes.KUBE_PING
是镜像使用的默认选项。
3.4.1.1. 在 单堆栈 配置的集群中配置 DNS_PING
要使 DNS_PING
在 IPv4 或 IPv6
单堆栈集群中 工作,必须执行以下步骤:
-
OPENSHIFT_DNS_PING_SERVICE_NAME
环境变量必须设置为集群的 ping 服务名称。如果没有设置,服务器将充当单一节点集群(一个"集群")。 -
OPENSHIFT_DNS_PING_SERVICE_PORT
环境变量应设置为公开 ping 服务的端口号。DNS_PING
协议会尝试从 SRV 记录中识别端口(如果它无法识别端口),则此变量将默认为 8888。 必须定义公开 ping 端口的 ping 服务。这个服务应该是 "headless" (ClusterIP=None),且必须具有以下内容:
- 必须命名端口,才能使端口发现正常工作。
-
此服务的
spec.publishNotReadyAddresses
字段必须设置为"true
"。省略此布尔值的设置将导致每个节点在启动过程中组成其自身"集群",然后在启动后将其集群合并到其他节点的集群中(因为其他节点在启动后才会检测到)。
在 单堆栈 (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. 在 双栈 配置集群中配置 DNS_PING
此外,为了使 DNS_PING
在支持 IPv4 和 IPv6 地址系列的双网络集群中 工作,集群 ping 服务的 spec.ipFamilyPolicy
字段必须设置为 PreferDualStack
或 RequireDualStack
。此设置可确保 control plane 为配置了双栈的集群中的 ping 服务分配 IPv4 和 IPv6 集群 IP 地址,为 IPv4 和 IPv6 IP 地址启用反向 DNS 查找正常工作,并为 ping 无头服务创建对应的 DNS SRV 记录,如下所示:
使用与 PreferDualStack
匹配 spec.ipFamilyPolicy
的 双栈 集群中的 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.
用于 双栈 (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
环境变量。如果没有设置,服务器将充当单一节点集群(一个"集群")。 -
应设置
KUBERNETES_LABELS
环境变量。如果没有设置,则应用程序外的 pod (即使位于命名空间中)会尝试加入它们。 - 必须向运行 Pod 的服务帐户授予授权,以允许访问 Kubernetes 的 REST api。您在命令行中授予授权。请参阅以下策略命令示例:
例 3.1. 策略命令
在 myproject
命名空间中使用 default
服务帐户:
oc policy add-role-to-user view system:serviceaccount:myproject:default -n myproject
在 myproject
命名空间中使用 sso-service-account
:
oc policy add-role-to-user view system:serviceaccount:myproject:sso-service-account -n myproject
因为 kubernetes.KUBE_PING
发现机制不需要集群的额外 ping 服务,所以它使用单堆栈和双堆栈配置的集群上上述步骤进行操作。
如需 OpenShift 文档,请参阅 JBoss EAP 的专用部分: