我正在尝试启用多集群 CockroachDB,生成 3 个与 Cilium Cluster Mesh 连接的 k8s 集群。 cockroachlabs.com - 1、2 描述了拥有多集群 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.discovery 和 service.public
然而,尽管存在纤毛注释
io.cilium/global-service: 'true'
service.cilium.io/affinity: "remote"
服务看起来绑定到 local k8s 集群,导致 CockroachDB 由 3 个而不是 6 个节点组成。 (A 组中 3 个 + B 组中 3 个)
我在
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 个。
有什么想法吗?
显然由于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 部署下。