kubernetes - 如何使用多个 Google Kubernetes Engine (GKE) 集群制作多区域 Kafka/Zookeeper 集群?

标签 kubernetes google-cloud-platform google-kubernetes-engine apache-zookeeper kafka-cluster

我有 3 个 GKE 集群,位于 Google Cloud Platform 的 3 个不同区域。 我想创建一个 Kafka 集群,每个区域(每个 GKE 集群)都有一个 Zookeeper 和一个 Kafka 节点(代理)。

这种设置是为了在区域故障中幸存下来(我知道整个 GCP 区域出现故障是罕见的,而且极不可能)。

我正在尝试使用此设置 Helm Chart由孵化器提供。

我在 this guide 之后的 3 个 GCP VM 上手动尝试了此设置我能够毫无问题地做到这一点。

然而,在 Kubernetes 上设置 Kafka 集群似乎很复杂。

正如我们所知,我们必须在每个 zookeeper 配置文件中提供所有 zookeeper 服务器的 IP,如下所示:

...
# list of servers
server.1=0.0.0.0:2888:3888
server.2=<Ip of second server>:2888:3888
server.3=<ip of third server>:2888:3888
...

正如我在 Helm 图表中看到的那样 config-script.yaml文件有一个脚本,可以为每个部署创建 Zookeeper 配置文件。

回显 zookeeper 服务器的脚本部分如下所示:

...
for (( i=1; i<=$ZK_REPLICAS; i++ ))
do
   echo "server.$i=$NAME-$((i-1)).$DOMAIN:$ZK_SERVER_PORT:$ZK_ELECTION_PORT" >> $ZK_CONFIG_FILE
done
...

截至目前,此 Helm 图表创建的配置在具有一个副本的配置中具有以下 Zookeeper 服务器(副本 此处表示 Kubernetes Pods 副本)。

...
# "release-name" is the name of the Helm release
server.1=release-name-zookeeper-0.release-name-zookeeper-headless.default.svc.cluster.local:2888:3888
...

至此,我一头雾水,不知如何是好,让所有的Zookeeper服务器都包含在配置文件中?

我该如何修改脚本?

最佳答案

我看到您正在尝试在 3 个不同的 GKE 集群之上创建 3 节点 zookeeper 集群。

这不是一件容易的事,我相信有多种方法可以实现它 但我会向您展示一种实现方法,我相信它应该可以解决您的问题。

您需要做的第一件事是为每个 zookeeper 实例创建一个 LoadBalancer 服务。 创建 LoadBalancer 后,记下分配的 ip 地址 (请记住,默认情况下这些 IP 地址是临时的,因此您可能希望稍后将它们更改为静态地址)。

接下来要做的是创建一个 private DNS zone 在 GCP 上并为每个 zookeeper LoadBalancer 端点创建 A 记录,例如:

release-name-zookeeper-1.zookeeper.internal.
release-name-zookeeper-2.zookeeper.internal.
release-name-zookeeper-3.zookeeper.internal.

在 GCP 中它看起来像这样:

dns

完成后修改this line即可:

...
DOMAIN=`hostname -d'
...

像这样:

...
DOMAIN={{ .Values.domain }}
...

并记住将 Values 文件中的 domain 变量设置为 zookeeper.internal

所以最后它应该是这样的:

DOMAIN=zookeeper.internal

它应该生成以下配置:

...
server.1=release-name-zookeeper-1.zookeeper.internal:2888:3888
server.2=release-name-zookeeper-2.zookeeper.internal:2888:3888
server.3=release-name-zookeeper-3.zookeeper.internal:2888:3888
...

如果有帮助请告诉我

关于kubernetes - 如何使用多个 Google Kubernetes Engine (GKE) 集群制作多区域 Kafka/Zookeeper 集群?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58631777/

相关文章:

spring-boot - docker 存储库名称组件必须匹配

kubernetes - 存储桶中的GCP堆栈驱动程序日志记录日志格式已从每个容器的文件夹更改为stdout\stderr

kubernetes - 如何查找 Pod 崩溃的原因?

android - 如何使用 Google Play 自定义应用 API 上传 apk

python - 是什么导致 Google BigQuery 查询的开销如此之大?

python - 错误 403 : Your client does not have permission to get URL in python google cloud module

docker - 您如何将源代码放入 Kubernetes?

kubernetes - GKE持久卷大小调整:文件系统大小调整未完成

linux - Docker 卷安装为空

docker - 无法从群集内通过Pod IP访问Pod,从而导致事件/就绪探针失败