kubernetes - 在这个例子中,如何捕获zookeeper-service的IP地址,并将其正确设置到需要它的kafka-broker中?

标签 kubernetes apache-kafka apache-zookeeper

我按照此网站 How To Deploy Apache Kafka With Kubernetes (DZone) 的指令部署了 Kafka 代理及其 Zookeeper。 (我只更改了命名空间名称)。

apiVersion: v1
kind: Service
metadata:
  labels:
    app: zookeeper-service
  name: zookeeper-service
  namespace: ecoemploi
spec:
  type: NodePort
  ports:
    - name: zookeeper-port
      port: 2181
      nodePort: 30181
      targetPort: 2181
  selector:
    app: zookeeper
---
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: zookeeper
  name: zookeeper
  namespace: ecoemploi
spec:
  replicas: 1
  selector:
    matchLabels:
      app: zookeeper
  template:
    metadata:
      labels:
        app: zookeeper
    spec:
      containers:
        - image: bitnami/zookeeper:latest
          imagePullPolicy: IfNotPresent
          name: zookeeper
          ports:
            - containerPort: 2181

但为了使其正常工作,该解决方案的作者确实等待集群第一次启动,
然后复制zookeeper-service的IP地址

kubectl get services -n kafka
NAME               TYPE      CLUSTER-IP     EXTERNAL-IP PORT(S)        AGE
zookeeper-service  NodePort  10.100.69.243  <none>      2181:30181/TCP 3m4s

并将其粘贴到 kafka-broker 部署文件中:

[...]
    spec:
      hostname: kafka-broker
      containers:
        - env:
            - name: KAFKA_BROKER_ID
              value: "1"
            - name: KAFKA_ZOOKEEPER_CONNECT
              value: 10.100.69.243:2181
            - name: KAFKA_LISTENERS
              value: PLAINTEXT://:9092
            - name: KAFKA_ADVERTISED_LISTENERS
              value: PLAINTEXT://kafka-broker:9092
[...]

然后重新应用 kafka-broker 即可使其正常工作。

我正在使用这个解决方案,但在 Vagrant 框中它并不方便:每次我重新创建我的 vagrant 时,IP 都会改变......

是否有解决方案可以获取 zookeeper-service 的集群 IP 并自动为 KAFKA_ZOOKEEPER_CONNECT 准备正确的 kafka-broker 环境变量?

最佳答案

您可以指定服务名称,每次 K8s DNS 处理时该名称都是相同的。

- name: KAFKA_ZOOKEEPER_CONNECT
  value: zookeeper-service

K8s以这种方式工作,内部通信通过服务名称进行,如果需要,请使用IP,否则ClusterIP本质上可能会随着服务的新部署或任何变化而改变IP

DNS 解析将由 Kubernetes(coredns、kubedns)负责,因此我们只需提及服务名称

这里是引用示例:https://kubernetes.io/docs/tutorials/stateful-application/mysql-wordpress-persistent-volume/

Wordpess 使用MySQL服务名称wordpress-mysql变量WORDPRESS_DB_HOST连接到MySQL数据库

关于kubernetes - 在这个例子中,如何捕获zookeeper-service的IP地址,并将其正确设置到需要它的kafka-broker中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/76262537/

相关文章:

hadoop - Hbase 区域服务器无法与 HMaster 通信

kubernetes - 错误 “no persistent volumes available for this claim and no storage class is set”

apache-spark - 将Spark结构化流与Confluent Schema Registry集成

apache-kafka - max.in.flight.requests.per.connection kafka生产者配置

docker - 创建主题,但在Kubernetes上使用Python获得Kafka FailedPayloadsError

docker - 在同一台机器的两个docker conatiners中创建kafka代理和zookeeper的利弊是什么

amazon-web-services - 如何在AWS上创建集群期间动态更新kubeconfig?

kubernetes - 在Google Cloud Kubernetes中运行Traefik时,LoadBalancer Healthy失败

kubernetes - Kubernetes上的大三角帆:无法在kubernetes中启动大三角帆容器

java - 卡夫卡流 : Implement a simple KeyValueStore where I can put and get data