gpt4 book ai didi

apache-kafka - 如何在 kubernetes 上为 Kafka 多代理设置指定广告监听器并对外公开集群?

转载 作者:行者123 更新时间:2023-12-04 04:18:14 24 4
gpt4 key购买 nike

我正在尝试在 Azure 中托管的 kubernetes 集群上设置多代理 kafka。我有一个单一的经纪人设置工作。对于多代理设置,目前我有一组管理 kafka 服务的 zookeeper 节点(3)。我将 kafka 集群部署为复制因子为 3 的复制 Controller 。即 3 个代理。如何向 Zookeeper 注册三个代理,以便它们向 Zookeeper 注册不同的 IP 地址?

我在部署服务后启动我的复制 Controller ,并在我的复制 Controller yaml 文件中使用集群 IP 来指定两个 adsed.listeners,一个用于 SSL,另一个用于 PLAINTEXT。但是,在这种情况下,所有代理都使用相同的 IP 注册并且写入副本失败。我不想将每个代理部署为单独的复制 Controller /pod 和服务,因为扩展成为一个问题。我真的很感激对此的任何想法/想法。

编辑1:

我还尝试将集群暴露给云中的另一个 VPC。我必须为我正在使用广告的客户端公开 SSL 和 PLAINTEXT 端口。如果我使用复制因子为 3 的 statefulset 并让 kubernetes 将 pod 的规范主机名公开为主机名,则这些无法从外部客户端解析。我得到这个工作的唯一方法是使用/公开与每个代理相对应的外部服务。然而,这并不能扩展。

最佳答案

Kubernetes 有 Statefulsets 的概念来解决这些问题。 statefulset 的每个实例都有自己的 DNS 名称,因此您可以通过 dns 名称引用每个实例。

这个概念描述here更详细。你也可以看看这个complete example :

apiVersion: v1
kind: Service
metadata:
name: zk-headless
labels:
app: zk-headless
spec:
ports:
- port: 2888
name: server
- port: 3888
name: leader-election
clusterIP: None
selector:
app: zk
---
apiVersion: v1
kind: ConfigMap
metadata:
name: zk-config
data:
ensemble: "zk-0;zk-1;zk-2"
jvm.heap: "2G"
tick: "2000"
init: "10"
sync: "5"
client.cnxns: "60"
snap.retain: "3"
purge.interval: "1"
---
apiVersion: policy/v1beta1
kind: PodDisruptionBudget
metadata:
name: zk-budget
spec:
selector:
matchLabels:
app: zk
minAvailable: 2
---
apiVersion: apps/v1beta1
kind: StatefulSet
metadata:
name: zk
spec:
serviceName: zk-headless
replicas: 3
template:
metadata:
labels:
app: zk
annotations:
pod.alpha.kubernetes.io/initialized: "true"

spec:
affinity:
podAntiAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
- labelSelector:
matchExpressions:
- key: "app"
operator: In
values:
- zk-headless
topologyKey: "kubernetes.io/hostname"
containers:
- name: k8szk
imagePullPolicy: Always
image: gcr.io/google_samples/k8szk:v1
resources:
requests:
memory: "4Gi"
cpu: "1"
ports:
- containerPort: 2181
name: client
- containerPort: 2888
name: server
- containerPort: 3888
name: leader-election
env:
- name : ZK_ENSEMBLE
valueFrom:
configMapKeyRef:
name: zk-config
key: ensemble
- name : ZK_HEAP_SIZE
valueFrom:
configMapKeyRef:
name: zk-config
key: jvm.heap
- name : ZK_TICK_TIME
valueFrom:
configMapKeyRef:
name: zk-config
key: tick
- name : ZK_INIT_LIMIT
valueFrom:
configMapKeyRef:
name: zk-config
key: init
- name : ZK_SYNC_LIMIT
valueFrom:
configMapKeyRef:
name: zk-config
key: tick
- name : ZK_MAX_CLIENT_CNXNS
valueFrom:
configMapKeyRef:
name: zk-config
key: client.cnxns
- name: ZK_SNAP_RETAIN_COUNT
valueFrom:
configMapKeyRef:
name: zk-config
key: snap.retain
- name: ZK_PURGE_INTERVAL
valueFrom:
configMapKeyRef:
name: zk-config
key: purge.interval
- name: ZK_CLIENT_PORT
value: "2181"
- name: ZK_SERVER_PORT
value: "2888"
- name: ZK_ELECTION_PORT
value: "3888"
command:
- sh
- -c
- zkGenConfig.sh && zkServer.sh start-foreground
readinessProbe:
exec:
command:
- "zkOk.sh"
initialDelaySeconds: 15
timeoutSeconds: 5
livenessProbe:
exec:
command:
- "zkOk.sh"
initialDelaySeconds: 15
timeoutSeconds: 5
volumeMounts:
- name: datadir
mountPath: /var/lib/zookeeper
securityContext:
runAsUser: 1000
fsGroup: 1000
volumeClaimTemplates:
- metadata:
name: datadir
spec:
accessModes: [ "ReadWriteOnce" ]
resources:
requests:
storage: 20Gi

关于apache-kafka - 如何在 kubernetes 上为 Kafka 多代理设置指定广告监听器并对外公开集群?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45448533/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com