带有 Cilium Cluster Mesh 的多集群 CockroachDB

问题描述 投票:0回答:1

我正在尝试启用多集群 CockroachDB,生成 3 个与 Cilium Cluster Mesh 连接的 k8s 集群。 cockroachlabs.com - 12 描述了拥有多集群 CockroachDB 的想法。鉴于该文章要求 更改 CoreDNS ConfigMap,而不是使用 Cilium global-services 感觉不太理想。

因此问题出现了,如何在 Cilium Cluster Mesh 环境中启用多集群 CockroachDB,使用 Cilium 全局服务而不是破解 CoreDNS ConfigMap ?

通过 helm 安装 CockroachDB 后,它会部署一个带有精心设计的 --join 参数的

StatefulSet
。它包含要加入集群的 CockroachDB Pod 的 FQDN。

pod FQDN 来自使用 clusterIP: None

 创建的 
service.discover

(...) 的存在只是为了为 StatefulSet 中的每个 Pod 创建 DNS 条目,以便它们可以解析彼此的 IP 地址。

发现服务会自动为 StatefulSet 内的所有 Pod 注册 DNS 条目,以便可以轻松引用它们

是否可以为在远程集群上运行的 StatefulSet 创建类似的发现服务或替代方案?因此,在启用集群网格的情况下,集群 Β 中的 Pod J、K、L 可以通过 FQDN 从集群 A 中的 Pod X、Y、Z 到达?

按照create-service-per-pod-in-statefulset中的建议,可以创建类似的服务

{{- range $i, $_ := until 3 -}}
---
apiVersion: v1
kind: Service
metadata:
  annotations:
    service.alpha.kubernetes.io/tolerate-unready-endpoints: "true"
    io.cilium/global-service: 'true'
    service.cilium.io/affinity: "remote"
  labels:
    app.kubernetes.io/component: cockroachdb
    app.kubernetes.io/instance: dbs
    app.kubernetes.io/name: cockroachdb
  name: dbs-cockroachdb-remote-{{ $i }}
  namespace: dbs
spec:
  ports:
  - name: grpc
    port: 26257
    protocol: TCP
    targetPort: grpc
  - name: http
    port: 8080
    protocol: TCP
    targetPort: http
  selector:
    app.kubernetes.io/component: cockroachdb
    app.kubernetes.io/instance: dbs
    app.kubernetes.io/name: cockroachdb
    statefulset.kubernetes.io/pod-name: cockroachdb-{{ $i }}
  type: ClusterIP
  clusterIP: None
  publishNotReadyAddresses: true
---
kind: Service
apiVersion: v1
metadata:
  name: dbs-cockroachdb-public-remote-{{ $i }}
  namespace: dbs
  labels:
    app.kubernetes.io/component: cockroachdb
    app.kubernetes.io/instance: dbs
    app.kubernetes.io/name: cockroachdb
  annotations:
    io.cilium/global-service: 'true'
    service.cilium.io/affinity: "remote"
spec:
  ports:
  - name: grpc
    port: 26257
    protocol: TCP
    targetPort: grpc
  - name: http
    port: 8080
    protocol: TCP
    targetPort: http
  selector:
    app.kubernetes.io/component: cockroachdb
    app.kubernetes.io/instance: dbs
    app.kubernetes.io/name: cockroachdb
{{- end -}}

使它们类似于原始的 service.discoveryservice.public

然而,尽管存在纤毛注释

io.cilium/global-service: 'true'
service.cilium.io/affinity: "remote"

服务看起来绑定到 local k8s 集群,导致 CockroachDB 由 3 个而不是 6 个节点组成。 (A 组中 3 个 + B 组中 3 个)

哈勃 CockroachDB

我在

dbs-cockroachdb-public-remote-X
 命令中使用哪种服务(
dbs-cockroachdb-remote-X
--join
)并不重要

    join:
      - dbs-cockroachdb-0.dbs-cockroachdb.dbs:26257
      - dbs-cockroachdb-1.dbs-cockroachdb.dbs:26257
      - dbs-cockroachdb-2.dbs-cockroachdb.dbs:26257
      - dbs-cockroachdb-public-remote-0.dbs:26257
      - dbs-cockroachdb-public-remote-1.dbs:26257
      - dbs-cockroachdb-public-remote-2.dbs:26257

结果是一样的,是 3 个节点而不是 6 个。

有什么想法吗?

kubernetes cluster-computing cockroachdb cilium
1个回答
0
投票

显然由于7070,修补CoreDNS ConfigMap是我们能做的最合理的事情。在该错误的评论中,提到了一篇文章,它提供了额外的上下文。

我对这个故事的看法是,我使用 kubernetes 插件配置更新了配置映射:

apiVersion: v1
data:
  Corefile: |-
    saturn.local {
      log
      errors
      kubernetes saturn.local {
        endpoint https://[ENDPOINT]
        kubeconfig [PATH_TO_KUBECONFIG]
      }
    }

这样我也可以解析其他名称。 在我的设置中,每个集群都有自己的

domain.local
PATH_TO_KUBECONFIG
是一个平面 kubeconfig 文件。通用机密必须在
kube-system
命名空间中创建,并且机密卷必须安装在 coredns 部署下。

© www.soinside.com 2019 - 2024. All rights reserved.