我有 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.
完成后修改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/