bitnami/kafka 提供的 helm 包用起來非常穩定,公司生產環境有兩個 kafka 集羣,已經使用兩年了,沒有出過任何故障,穩如老狗!下面介紹安裝方式。
環境依賴
- helm 工具
- k8s 集羣(已經安裝好並且配置好了 storageClass)
生產環境
不用 zookeeper 使用內置的 kraft,節點選舉更快,更輕量。
新建 kafka-values.yaml 文件,填入下面內容:
controller:
replicaCount: 3
# nodeSelector:
# nodegroup-type: kafka
persistence:
size: 32Gi
listeners:
client:
protocol: PLAINTEXT # 關閉客户端身份認證(內網不需要認證)
replicaCount 表示 kafka 集羣節點數量,生產至少 3 個以上,推薦奇數。nodeSelector 調度至特定節點,生產推薦為 kafka 各個節點使用獨立節點。最後不啓用身份認證。可以通過 artifacthub 查看更多配置參數。
部署命令:
helm upgrade -f kafka-values.yaml --install kafka bitnami/kafka --version 26.11.4 --create-namespace --namespace kafka
上面命令表示在 kafka 命名空間下安裝 kafka 集羣,默認以 controller 模式運行,安裝 helm chart 包版本為 26.11.4 對應的 kafka 版本為 3.6.1。
測試環境
新建 kafka-values.yaml 文件,填入下面內容:
controller:
replicaCount: 1
persistence:
size: 20Gi
extraConfig: |
offsets.topic.replication.factor=1
transaction.state.log.replication.factor=1
listeners:
client:
protocol: PLAINTEXT # 關閉客户端身份認證(內網不需要認證)
測試環境只啓用 1 個節點,節省資源。
管理 ui
最後附上用於管理 kafka 的 ui 清單。
apiVersion: apps/v1
kind: Deployment
metadata:
name: kafka-ui
namespace: kafka
labels:
app: kafka-ui
spec:
replicas: 1
selector:
matchLabels:
app: kafka-ui
template:
metadata:
labels:
app: kafka-ui
spec:
containers:
- name: kafka-ui
image: provectuslabs/kafka-ui
ports:
- containerPort: 8080
env:
- name: DYNAMIC_CONFIG_ENABLED
value: 'true'
- name: AUTH_TYPE
value: 'LOGIN_FORM'
- name: 'SPRING_SECURITY_USER_NAME'
value: 'kafka-admin'
- name: 'SPRING_SECURITY_USER_PASSWORD'
value: '123456'
- name: KAFKA_CLUSTERS_0_BOOTSTRAPSERVERS
value: "kafka.kafka.svc.cluster.local:9092"
resources:
limits:
memory: "512Mi"
requests:
memory: "256Mi"
---
apiVersion: v1
kind: Service
metadata:
name: kafka-ui
namespace: kafka
spec:
selector:
app: kafka-ui
ports:
- protocol: TCP
port: 8080
targetPort: 8080
type: ClusterIP
---
apiVersion: apisix.apache.org/v2
kind: ApisixRoute
metadata:
name: kafka-ui-route
namespace: kafka
annotations:
k8s.apisix.apache.org/upstream-scheme: http
spec:
http:
- name: bene-kafka-ui
match:
paths:
- /*
hosts:
- kafka.exmpale.com
backends:
- serviceName: kafka-ui
servicePort: 8080
plugins:
- name: redirect
enable: true
config:
http_to_https: true
這裏使用了 apisix 暴露公網訪問,ui 啓用了身份認證,具體可配置參數。