首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Openshift中的JCS集群

Openshift中的JCS集群
EN

Stack Overflow用户
提问于 2020-08-18 21:30:43
回答 1查看 89关注 0票数 1

我正在尝试设置部署在Openshift集群上的JCS分布式缓存(根据FT的最佳实践,有3个节点)。这3个缓存实例中的任何一个都可以接收一个事件,并且通过TCP连接将该事件分发给其他实例(以同步状态)。JCS的配置如下(假设集群中有3个节点A、B、C)

  • jcs.auxiliary.attributes.TcpListenerPort=Node-A-Host:2001 ( TcpListenerPort -> )是Node-A中接收缓存事件的本地端口。相应的配置将出现在其他节点中,如,

- jcs.auxiliary.attributes.TcpListenerPort=Node-B-Host:2002 - jcs.auxiliary.attributes.TcpListenerPort=Node-C-Host:2003

)

  • jcs.auxiliary.attributes.TcpServers=Node-B-Host:2002,Node:2003 (TcpServers ->是接收实例将缓存事件分发给

的列表)

我现在面临的问题是,

  • 当我们在Openshift中部署应用程序时,我们不知道豆荚(缓存实例)将在哪个节点上。这使我无法为缓存实例配置TCP参数.

只是想知道在Openshift/K8s平台上是否有可靠的方法来解决这个问题。谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-08-19 22:56:46

你在找StatefulSet

现在无法设置tcpServers列表的原因是Pods主机名是不可预测的,当DeploymentsReplicaSets、.

考虑以下示例:

代码语言:javascript
复制
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: openldap-kube
  namespace: ci
spec:
  podManagementPolicy: OrderedReady
  replicas: 3
  selector:
    matchLabels:
      name: openldap-kube
  serviceName: openldap-kube
  template:
    metadata:
      labels:
        name: openldap-kube
    spec:
      affinity:
        podAntiAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
          - labelSelector:
              matchExpressions:
              - key: name
                operator: In
                values:
                - openldap-kube
            topologyKey: kubernetes.io/hostname
      containers:
      [ ... ]
        volumeMounts:
        - mountPath: /etc/ldap
          name: data
          subPath: config
        - mountPath: /var/lib/ldap
          name: data
          subPath: db
        - mountPath: /run
          name: run
      volumes:
      - emptyDir: {}
        name: run
  updateStrategy:
    type: RollingUpdate
  volumeClaimTemplates:
  - apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: data
    spec:
      accessModes:
      - ReadWriteOnce
      resources:
        requests:
          storage: 8Gi
---
apiVersion: v1
kind: Service
metadata:
  name: openldap-kube
  namespace: ci
spec:
  clusterIP: None
  ports:
  - name: tcp-1389
    port: 1389
  - name: tcp-1636
    port: 1636
  selector:
    name: openldap-kube
  type: ClusterIP

在这种情况下(StatefulSet,带有spec.serviceNameServicespec.type=ClusterIPspec.clusterIP=None),每个Pod都会有自己的DNS记录。命名了我的服务openldap-kube,命名空间ci后,可以在SDN中获得以下DNS记录:

代码语言:javascript
复制
$ getent hosts openldap-kube-0.openldap-kube.ci.svc.cluster.local
10.233.99.125   openldap-kube-0.openldap-kube.ci.svc.cluster.local
$ getent hosts openldap-kube-1.openldap-kube.ci.svc.cluster.local
10.233.114.206  openldap-kube-1.openldap-kube.ci.svc.cluster.local openldap-kube-1
$ getent hosts openldap-kube.ci.svc.cluster.local
10.233.114.206  openldap-kube.ci.svc.cluster.local
10.233.99.125   openldap-kube.ci.svc.cluster.local
$ getent hosts openldap-kube                     
10.233.114.206  openldap-kube.ci.svc.cluster.local
10.233.99.125   openldap-kube.ci.svc.cluster.local
$ getent hosts openldap-kube-1.openldap-kube
10.233.114.206  openldap-kube-1.openldap-kube.ci.svc.cluster.local

关于一些详尽无遗的样本,请参见:

https://gitlab.com/synacksynack/opsperator/docker-openldap/-/tree/master/deploy/kubernetes https://gitlab.com/synacksynack/opsperator/docker-percona/-/tree/master/deploy/kubernetes https://gitlab.com/synacksynack/opsperator/docker-mongodb/-/tree/master/deploy/kubernetes

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63476903

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档