搜索

3.4. 集群

download PDF

3.4.1. 配置 JGroups 发现机制

OpenShift 中的集群是通过以下两种发现机制之一来实现的: KubernetesDNS。可以设置它们:

  • 通过使用 < kubernetes.KUBE_PING/> 或 < dns.DNS_PING /> 元素直接在 standalone-openshift. xml 配置文件中配置 JGroups 协议堆栈,
  • 或者,通过指定 JGROUPS_PING_PROTOCOL 环境变量,它可以设置为 dns.DNS_PINGkubernetes.KUBE_PING

OpenShift 4.x 模板配置为使用 dns.DNS_PING 机制,并将 spec.ipFamilyPolicy 字段设置为 PreferDualStack,以启用双栈配置的集群。但是,如果没有为 JGROUPS_PING_PROTOCOL 环境变量指定值,则 kubernetes.KUBE_PING 是镜像使用的默认选项。

3.4.1.1. 在 单堆栈 配置的集群中配置 DNS_PING

要使 DNS_PINGIPv4 或 IPv6 单堆栈集群中 工作,必须执行以下步骤:

  1. OPENSHIFT_DNS_PING_SERVICE_NAME 环境变量必须设置为集群的 ping 服务名称。如果没有设置,服务器将充当单一节点集群(一个"集群")。
  2. OPENSHIFT_DNS_PING_SERVICE_PORT 环境变量应设置为公开 ping 服务的端口号。DNS_PING 协议会尝试从 SRV 记录中识别端口(如果它无法识别端口),则此变量将默认为 8888。
  3. 必须定义公开 ping 端口的 ping 服务。这个服务应该是 "headless" (ClusterIP=None),且必须具有以下内容:

    1. 必须命名端口,才能使端口发现正常工作。
    2. 此服务的 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 字段必须设置为 PreferDualStackRequireDualStack。此设置可确保 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 正常工作,必须执行以下步骤:

  1. 必须设置 KUBERNETES_NAMESPACE 环境变量。如果没有设置,服务器将充当单一节点集群(一个"集群")。
  2. 应设置 KUBERNETES_LABELS 环境变量。如果没有设置,则应用程序外的 pod (即使位于命名空间中)会尝试加入它们。
  3. 必须向运行 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 的专用部分:

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.