Kubernetes I';我很难在gke上设置卡夫卡,想知道设置卡夫卡的最佳方式吗?
我试图使用StatefolSet在gke的集群中部署zookeeper和Kafka服务器,但Kafka和zookeeper之间的通信失败,日志中出现错误消息。我想知道在库伯内特斯设置卡夫卡最简单的方法是什么 我尝试了以下配置,我发现卡夫卡无法与zookeeper通信,但我不知道为什么?我知道我可能需要一个无头服务,因为通讯是由卡夫卡和动物园管理员自己处理的 适用于动物园管理员Kubernetes I';我很难在gke上设置卡夫卡,想知道设置卡夫卡的最佳方式吗?,kubernetes,apache-kafka,google-kubernetes-engine,Kubernetes,Apache Kafka,Google Kubernetes Engine,我试图使用StatefolSet在gke的集群中部署zookeeper和Kafka服务器,但Kafka和zookeeper之间的通信失败,日志中出现错误消息。我想知道在库伯内特斯设置卡夫卡最简单的方法是什么 我尝试了以下配置,我发现卡夫卡无法与zookeeper通信,但我不知道为什么?我知道我可能需要一个无头服务,因为通讯是由卡夫卡和动物园管理员自己处理的 适用于动物园管理员 apiVersion: v1 kind: Service metadata: name: zookeeper spe
apiVersion: v1
kind: Service
metadata:
name: zookeeper
spec:
type: LoadBalancer
selector:
app: zookeeper
ports:
- port: 2181
targetPort: client
name: zk-port
- port: 2888
targetPort: leader
name: zk-leader
- port: 3888
targetPort: election
name: zk-election
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: zookeeper
spec:
replicas: 3
selector:
matchLabels:
app: zookeeper
serviceName: zookeeper
podManagementPolicy: Parallel
template:
metadata:
labels:
app: zookeeper
spec:
containers:
- name: zk-pod
image: zookeeper:latest
imagePullPolicy: Always
ports:
- name: client
containerPort: 2181
- name: leader
containerPort: 2888
- name: election
containerPort: 3888
env:
- name: ZOO_MY_ID
valueFrom:
fieldRef:
fieldPath: metadata.name
- name: ZOO_TICK_TIME
value: "2000"
- name: ZOO_INIT_LIMIT
value: "5"
- name: ZOO_SYNC_LIMIT
value: "2"
- name: ZOO_SERVERS
value: zookeeper:2888:3888
对于卡夫卡
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: kafka
spec:
replicas: 3
selector:
matchLabels:
app: kafka
serviceName: kafka-svc
podManagementPolicy: Parallel
template:
metadata:
labels:
app: kafka
spec:
containers:
- name: kafka
image: confluentinc/cp-kafka:latest
ports:
- containerPort: 9092
name: client
env:
- name: KAFKA_ZOOKEEPER_CONNECT
value: zookeeper:2181
- name: KAFKA_ADVERTISED_LISTENERS
value: kafka.default.svc.cluster.local:9092
---
apiVersion: v1
kind: Service
metadata:
name: kafka-svc
spec:
type: LoadBalancer
selector:
app: kafka
ports:
- port: 9092
targetPort: client
name: kfk-port
---
apiVersion: policy/v1beta1
kind: PodDisruptionBudget
metadata:
name: kafka-pdb
spec:
selector:
matchLabels:
app: kafka
minAvailable: 2
我希望能够发送消息到一个主题,并能够阅读回来。我一直在使用来测试连接。这是中指定的限制之一,即
- 状态集目前需要一个无头服务来负责POD的网络标识。您负责创建此服务
apiVersion: v1
kind: Service
metadata:
name: zookeeper
labels:
app: zookeeper
spec:
ports:
- port: 2181
name: someport
clusterIP: None
selector:
app: zookeeper
希望有帮助 这是中规定的限制之一
- 状态集目前需要一个无头服务来负责POD的网络标识。您负责创建此服务
apiVersion: v1
kind: Service
metadata:
name: zookeeper
labels:
app: zookeeper
spec:
ports:
- port: 2181
name: someport
clusterIP: None
selector:
app: zookeeper
希望有帮助 我如何与服务沟通?无头服务不定义集群IP或外部IP。带选择器的无头服务修改DNS配置,以返回直接指向支持服务的POD的记录(地址)。因此,您需要指定要通信的服务名称。还应检查端点是否通过
kubectl get ep
创建。看看这个,我已经添加了无头服务,但是我仍然无法从一个吊舱内访问其他吊舱。我可以看到正在创建的端点,但无法访问pod。当我尝试使用telnet zookeeper-2.zookeeper-service.kafka-ns.svc.cluster.local 2181对其他容器进行telnet时,它只会说bad address“zookeeper-2.zookeeper-service.kafka-ns.svc.cluster.local”
如果您想为每个pod使用单独的DNS名称,您必须创建子域服务,并在pods模板上使用它。检查此项我如何与服务进行通信?无头服务不定义集群IP或外部IP。带选择器的无头服务修改DNS配置,以返回直接指向支持服务的POD的记录(地址)。因此,您需要指定要通信的服务名称。还应检查端点是否通过kubectl get ep
创建。看看这个,我已经添加了无头服务,但是我仍然无法从一个吊舱内访问其他吊舱。我可以看到正在创建的端点,但无法访问pod。当我尝试使用telnet zookeeper-2.zookeeper-service.kafka-ns.svc.cluster.local 2181对其他容器进行telnet时,它只会说bad address“zookeeper-2.zookeeper-service.kafka-ns.svc.cluster.local”
如果您想为每个pod使用单独的DNS名称,您必须创建子域服务,并在pods模板上使用它。检查这个