Neg*_*ioN 19 apache-kafka docker google-cloud-platform kubernetes apache-zookeeper
所以我的目标是以分布式方式建立一个由几个kafka经纪人组成的集群.但我看不出让经纪人了解对方的方法.
据我所知,每个代理在其配置中需要一个单独的ID,如果我从kubernetes启动容器,我无法保证或配置?
他们还需要有相同的advertised_host?
是否有任何我需要更改的参数需要更改才能让节点相互发现?
使用脚本在Dockerfile的末尾进行这样的配置是否可行?和/或共享卷?
我目前正在尝试使用spotify/kafka-image进行此操作,该图像具有预先配置的zookeeper + kafka组合,在vanilla Kubernetes上.
MrE*_*MrE 12
我的解决方案是使用IP作为ID:修剪点并获得一个唯一的ID,该ID也可以在容器外部提供给其他容器.
通过服务,您可以访问多个容器的IP(请参阅我的答案,如何执行此操作: 让kubenetes pod相互通信的最佳方式是什么?
因此,如果您使用IP作为唯一ID,也可以获取其ID.唯一的问题是ID不是连续的或从0开始,但是zookeeper/kafka似乎并不介意.
编辑1:
后续问题涉及配置Zookeeper:
每个ZK节点都需要知道其他节点.是一个内节点的Kubernetes发现服务的已知,服务这样的想法是启动服务与ZK节点.
需要在创建Zookeeper pod的ReplicationController(RC)之前启动此服务.
然后,ZK容器的启动脚本需要:
KUBERNETES_SERVICE_HOST
环境变量是在每个容器中提供.然后是查找服务描述的端点URL="http(s)://$USERNAME:$PASSWORD@${KUBERNETES_SERVICE_HOST/api/v1/namespaces/${NAMESPACE}/endpoints/${SERVICE_NAME}"
这里NAMESPACE
是default
除非你改变它,SERVICE_NAME
将是饲养员,如果你命名你的服务饲养员.
在那里你得到了形成服务的容器的描述,他们的ip在"ip"字段中.你可以做:
curl -s $URL | grep '\"ip\"' | awk '{print $2}' | awk -F\" '{print $2}'
Run Code Online (Sandbox Code Playgroud)
获取服务中的IP列表.然后,使用上面定义的ID在节点上填充zoo.cfg
您可能需要USERNAME和PASSWORD才能访问google容器引擎等服务上的端点.这些需要放在一个秘密卷中(参见doc:http://kubernetes.io/v1.0/docs/user-guide/secrets.html)
您还需要curl -s --insecure
在Google容器引擎上使用,除非您在向容器中添加CA证书时遇到麻烦
基本上将卷添加到容器中,并从文件中查找值.(与文档所说的相反,当base64编码时,不要将\n放在用户名或密码的末尾:它只会让你的生活在阅读时变得更复杂)
编辑2:
您需要在Kafka节点上执行的另一件事是获取IP和主机名,并将它们放在/ etc/hosts文件中.Kafka似乎需要通过主机名知道节点,默认情况下这些节点不在服务节点中设置
编辑3:
经过多次尝试和使用IP作为ID的想法可能不是那么好:它取决于您如何配置存储.对于像zookeeper,kafka,mongo,hdfs这样的任何类型的分布式服务,你可能想要使用emptyDir类型的存储,因此它只是在那个节点上(挂载远程存储类型会破坏分发这些服务的目的!)emptyDir将与同一节点上的数据进行重新关联,因此使用NODE ID(节点IP)作为ID似乎更合乎逻辑,因为在同一节点上重新启动的pod将具有该数据.这样可以避免数据的潜在损坏(如果新节点开始在同一个dir中写入,实际上不是空的,谁知道会发生什么),还有Kafka,如果代理ID更改,主题被分配了broker.id, zookeeper不会更新主题代理.
到目前为止,我还没有找到如何获取节点IP,但我认为可以通过查找服务pod名称然后查找部署它们的节点来查找API.
编辑4
要获取节点IP,您可以从端点API/api/v1/namespaces/default/endpoints /获取pod hostname == name,如上所述.那么您可以使用/ api/v1/namespaces/default/pods /从pod名称获取节点IP
PS:这是受Kubernetes repo中的示例启发的(rethinkdb示例:https://github.com/kubernetes/kubernetes/tree/master/examples/rethinkdb
归档时间: |
|
查看次数: |
10194 次 |
最近记录: |