我目前使用3个Kafka代理的Kafka部署文件如下所示:
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门将集群,例如:
zookeeper-0.zookeeper-headless.default.svc.cluster.local:2181
代理ID是根据pod名称生成的:
- name: BROKER_ID_COMMAND
value: "hostname | awk -F '-' '{print $2}'"
结果:
kafka-0 = 0
kafka-1 = 1
kafka-2 = 2
然而,为了用库伯顿人的名字来称呼卡夫卡经纪人:
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值。
目前,我将变量设置为荚的名称:
- name: KAFKA_ADVERTISED_HOST_NAME
valueFrom:
fieldRef:
fieldPath: metadata.name
结果:
KAFKA_ADVERTISED_HOST_NAME=kafka-0
KAFKA_ADVERTISED_HOST_NAME=kafka-1
KAFKA_ADVERTISED_HOST_NAME=kafka-2
但不知何故,我需要追加DNS名称的其余部分。
有什么方法可以直接设置DNS值吗?
就像这样:
- name: KAFKA_ADVERTISED_HOST_NAME
valueFrom:
fieldRef:
fieldPath: kubedns.name
发布于 2017-11-28 00:00:58
我设法解决了这个问题,在pod定义中有一个命令字段:
command:
- sh
- -c
- "export KAFKA_ADVERTISED_HOST_NAME=$(hostname).kafka-headless.default.svc.cluster.local &&
start-kafka.sh"
这将运行一个shell命令,该命令根据hostname
值导出公告的主机名环境变量。
发布于 2018-09-05 23:24:53
- 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)
引用环境变量。
https://stackoverflow.com/questions/47516355
复制相似问题