k8s安装kafka 并开放外部访问
参考文档:
kafka 19.1.3 · bitnami/bitnami (artifacthub.io)
charts/values.yaml at main · bitnami/charts (github.com)
添加 helm repo
1
|
helm bitnami add bitnami https://charts.bitnami.com/bitnami
|
如果使用PV 请提前配置好storageclass
使用以下命令查看
1
|
kubectl get storageclass
|
建议使用values.yaml
进行配置
kafka 默认配置参考:charts/values.yaml at main · bitnami/charts (github.com)
对应的zookeeper默认配置 charts/bitnami/zookeeper at main · bitnami/charts (github.com)
如果使用PV 需要配置权限,不然会出现没有权限的情况
1
2
3
4
5
|
volumePermissions:
enabled: true
zookeeper:
volumePermissions:
enabled: true
|
如需使用外网访问请参考文档charts/bitnami/kafka at main · bitnami/charts (github.com)添加配置
我这里使用nodePort方式:
1
2
3
4
5
6
7
8
9
10
|
externalAccess:
enabled: true
service:
type: "NodePort"
autoDiscovery:
enabled: true
serviceAccount:
create: true
rbac:
create: true
|
注意这里需要创建额外的svc
以我这里为例,三个cluster
需要创建三个svc,kafka-0-external
kafka-1-external
kafka-2-external
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
kind: Service
apiVersion: v1
metadata:
name: kafka-{num}-external
namespace: database
spec:
ports:
- name: port
protocol: TCP
port: 9094
targetPort: 9094
selector:
statefulset.kubernetes.io/pod-name: kafka-{num}
type: NodePort
sessionAffinity: None
externalTrafficPolicy: Cluster
|
这样运行起来,就可以通过nodeip:nodeport
来访问k8s内的kafka服务了
1
2
3
4
|
$> kubectl get svc -n database kafka-0-external
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kafka-0-external NodePort 10.103.255.3 <none> 9094:32402/TCP 19h
|
以上面的这个为例,我们的节点ip是:192.168.1.3
那么在k8s 外部,就可以使用192.168.1.3:32402
以此类推,其他两个cluster
也可以这样访问,不过是nodeport
不一样而已
1
2
3
4
5
|
❯ kubectl get svc -n database
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kafka-0-external NodePort 10.103.255.3 <none> 9094:32402/TCP 19h
kafka-1-external NodePort 10.106.84.112 <none> 9094:31626/TCP 19h
kafka-2-external NodePort 10.100.211.212 <none> 9094:32458/TCP 19h
|
还可以通过统一的NodePort-svc
将headless
暴露至外部
参考:将 headless service 映射到外网 - 简书 (jianshu.com)
1
2
3
4
5
6
|
❯ kubectl expose svc kafka-headless --name=kafka-external --type=LoadBalancer --port=9094 --target-port=9094 -n database
❯ kubectl get svc -n database kafka-external
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kafka-external LoadBalancer 10.105.60.175 192.168.1.244 9094:32002/TCP 19h
|
这样也可以使用192.168.1.3:32002
搭建kafka-ui
文档:provectus/kafka-ui: Open-Source Web UI for Apache Kafka Management (github.com)
先修改一下配置文件,k8s内部的kafka 可以直接使用headless服务地址
kafka-ui-config.yaml
:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
apiVersion: v1
kind: ConfigMap
metadata:
name: kafka-ui-config
namespace: database
data:
config.yml: |-
kafka:
clusters:
- name: k8s
bootstrapServers: kafka-headless.database.svc.cluster.local:9092
auth:
type: disabled
management:
health:
ldap:
enabled: false
|
使用k8s搭建
1
2
3
4
5
|
kubectl apply -f kafka-ui-config.yaml
helm repo add kafka-ui https://provectus.github.io/kafka-ui
helm install my-kafka-ui -n database --set yamlApplicationConfigConfigMap.name="kafka-ui-config",yamlApplicationConfigConfigMap.keyName="config.yml" kafka-ui/kafka-ui --version 0.4.5
|