首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >多经纪人卡夫卡谈库伯奈特斯如何设置KAFKA_ADVERTISED_HOST_NAME

多经纪人卡夫卡谈库伯奈特斯如何设置KAFKA_ADVERTISED_HOST_NAME
EN

Stack Overflow用户
提问于 2017-11-27 17:11:19
回答 2查看 4.1K关注 0票数 6

我目前使用3个Kafka代理的Kafka部署文件如下所示:

代码语言:javascript
运行
复制
apiVersion: apps/v1beta1
kind: StatefulSet
metadata:
  name: kafka
spec:
  selector:
    matchLabels:
      app: kafka
  serviceName: kafka-headless
  replicas: 3
  updateStrategy:
    type: RollingUpdate
  podManagementPolicy: Parallel
  template:
    metadata:
      labels:
        app: kafka
    spec:
      containers:
      - name: kafka-instance
        image: wurstmeister/kafka
        ports:
        - containerPort: 9092
        env:
        - name: KAFKA_ADVERTISED_PORT
          value: "9092"
        - name: KAFKA_ADVERTISED_HOST_NAME
          valueFrom:
              fieldRef:
                fieldPath: metadata.name
        - name: KAFKA_ZOOKEEPER_CONNECT
          value: "zookeeper-0.zookeeper-headless.default.svc.cluster.local:2181,\
                  zookeeper-1.zookeeper-headless.default.svc.cluster.local:2181,\
                  zookeeper-2.zookeeper-headless.default.svc.cluster.local:2181"
        - name: BROKER_ID_COMMAND
          value: "hostname | awk -F '-' '{print $2}'"
        - name: KAFKA_CREATE_TOPICS
          value: hello:2:1
        volumeMounts:
        - name: data
          mountPath: /var/lib/kafka/data
  volumeClaimTemplates:
  - metadata:
      name: data
    spec:
      accessModes: [ "ReadWriteOnce" ]
      resources:
        requests:
          storage: 50Gi

这将创建3个Kafka代理作为一个状态集,并使用使用FQDN (完全限定域名)的Kubedns服务连接到Zoo门将集群,例如:

代码语言:javascript
运行
复制
zookeeper-0.zookeeper-headless.default.svc.cluster.local:2181

代理ID是根据pod名称生成的:

代码语言:javascript
运行
复制
- name: BROKER_ID_COMMAND
          value: "hostname | awk -F '-' '{print $2}'"

结果:

代码语言:javascript
运行
复制
kafka-0 = 0
kafka-1 = 1
kafka-2 = 2

然而,为了用库伯顿人的名字来称呼卡夫卡经纪人:

代码语言:javascript
运行
复制
kafka-0.kafka-headless.default.svc.cluster.local:9092
kafka-1.kafka-headless.default.svc.cluster.local:9092
kafka-2.kafka-headless.default.svc.cluster.local:9092

我需要能够根据pod的名称将KAFKA_ADVERTISED_HOST_NAME变量设置为上面的FQDN值。

目前,我将变量设置为荚的名称:

代码语言:javascript
运行
复制
- name: KAFKA_ADVERTISED_HOST_NAME
   valueFrom:
      fieldRef:
        fieldPath: metadata.name

结果:

代码语言:javascript
运行
复制
KAFKA_ADVERTISED_HOST_NAME=kafka-0
KAFKA_ADVERTISED_HOST_NAME=kafka-1
KAFKA_ADVERTISED_HOST_NAME=kafka-2

但不知何故,我需要追加DNS名称的其余部分。

有什么方法可以直接设置DNS值吗?

就像这样:

代码语言:javascript
运行
复制
- name: KAFKA_ADVERTISED_HOST_NAME
       valueFrom:
          fieldRef:
            fieldPath: kubedns.name
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-11-28 00:00:58

我设法解决了这个问题,在pod定义中有一个命令字段:

代码语言:javascript
运行
复制
    command:
    - sh
    - -c
    - "export KAFKA_ADVERTISED_HOST_NAME=$(hostname).kafka-headless.default.svc.cluster.local &&
       start-kafka.sh"

这将运行一个shell命令,该命令根据hostname值导出公告的主机名环境变量。

票数 4
EN

Stack Overflow用户

发布于 2018-09-05 23:24:53

代码语言:javascript
运行
复制
- name: MY_POD_NAME
  valueFrom:
    fieldRef:
      fieldPath: metadata.name 
- name: KAFKA_ZOOKEEPER_CONNECT
  value: zook-zookeeper.zook.svc.cluster.local:2181
- name: KAFKA_PORT_NUMBER
  value: "9092"
- name: KAFKA_LISTENERS
  value: SASL_SSL://:$(KAFKA_PORT_NUMBER)
- name: KAFKA_ADVERTISED_LISTENERS
  value: SASL_SSL://$(MY_POD_NAME).kafka-kafka-headless.kafka.svc.cluster.local:$(KAFKA_PORT_NUMBER)

上面的配置将创建FQDN。当Kafka服务器启动时,您应该能够在您的Kafka日志中看到这些名称。

注意: Kubernetes允许您使用语法$(VARIABLE)引用环境变量。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47516355

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档