k8s安装kafka kafka-ui

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-svcheadless暴露至外部

参考:将 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
Licensed under CC BY-NC-SA 4.0
Built with Hugo
主题 StackJimmy 设计