K8s - 使用Strimzi快速搭建Kafka全家桶教程2(集群部署、暴露外部访问端口)
前文演示了如何使用 Strimzi 快速搭建一个单节点的 Kafka 环境,本文接着演示如何搭建多节点的 Kafka 集群环境,以及如何实现从 K8s 集群外部访问 Kafka 服务。首先我们准备一个 K8s 集群,并安装好 strimzi kafka operator,具体操作参考我上篇文章(点击查看)。
三、搭建一个多节点的 Kafka 集群环境
1,开始搭建
(1)首先创建一个 kafka.yaml 文件,内容如下:
注意:高亮部分便是与前文单节点差异的地方,这里搭建的是包含 3 个节点的 Kafka 集群,以及 3 个节点的 Zookeeper 集群。
apiVersion: kafka.strimzi.io/v1beta2 kind: Kafka metadata: name: my-cluster spec: kafka: version: 2.7.0 replicas: 3 listeners: - name: plain port: 9092 type: internal tls: false - name: tls port: 9093 type: internal tls: true config: offsets.topic.replication.factor: 3 transaction.state.log.replication.factor: 3 transaction.state.log.min.isr: 2 log.message.format.version: "2.7" inter.broker.protocol.version: "2.7" storage: type: jbod volumes: - id: 0 type: persistent-claim size: 10Gi deleteClaim: false zookeeper: replicas: 3 storage: type: persistent-claim size: 10Gi deleteClaim: false entityOperator: topicOperator: {} userOperator: {}
(2)然后执行如下命令开始创建:
kubectl apply -f kafka.yaml -n kafka
(3)执行如下命令可以查看是否创建成功:
kubectl get pods -n kafka kubectl get service -n kafka

2,进行测试
(1)首先执行如下命令创建一个生产者,用于往 my-topic 这个主题发送消息:
kubectl -n kafka run kafka-producer -ti --image=quay.io/strimzi/kafka:0.22.1-kafka-2.7.0 --rm=true --restart=Never -- bin/kafka-console-producer.sh --broker-list my-cluster-kafka-bootstrap:9092 --topic my-topic
(2)接着重新再打开一个终端连接服务器,执行如下命令创建一个消费者,用于消费 my-topic 这个主题的消息:
kubectl -n kafka run kafka-consumer -ti --image=quay.io/strimzi/kafka:0.22.1-kafka-2.7.0 --rm=true --restart=Never -- bin/kafka-console-consumer.sh --bootstrap-server my-cluster-kafka-bootstrap:9092 --topic my-topic --from-beginning
(3)注意这两个生产者和消费者其实都是分别创建一个单独的 Pod:

(4)我们在消息生产客户端发送消息,并观察消费者这边对消息的输出来体验 Kafka 对消息的基础处理。

四、从 K8s 集群外部访问 Kafka
1,开始搭建
(1)前面样例搭建的 Kafka 环境只能供 K8s 集群内部的服务使用(通过服务名访问),如果想要从 K8s 集群外部也能访问 Kafka,则需要对 kafka.yaml 文件稍作修改,增加外部访问端口:
apiVersion: kafka.strimzi.io/v1beta2 kind: Kafka metadata: name: my-cluster spec: kafka: version: 2.7.0 replicas: 3 listeners: - name: external port: 9094 type: nodeport tls: false configuration: bootstrap: nodePort: 32410 brokers: - broker: 0 nodePort: 32420 - broker: 1 nodePort: 32421 - broker: 2 nodePort: 32422 - name: plain port: 9092 type: internal tls: false - name: tls port: 9093 type: internal tls: true config: offsets.topic.replication.factor: 3 transaction.state.log.replication.factor: 3 transaction.state.log.min.isr: 2 log.message.format.version: "2.7" inter.broker.protocol.version: "2.7" storage: type: jbod volumes: - id: 0 type: persistent-claim size: 10Gi deleteClaim: false zookeeper: replicas: 3 storage: type: persistent-claim size: 10Gi deleteClaim: false entityOperator: topicOperator: {} userOperator: {}
(2)然后执行如下命令开始创建:
kubectl apply -f kafka.yaml -n kafka
(3)执行如下命令可以查看是否创建成功:
kubectl get pods -n kafka kubectl get service -n kafka

2,开始测试
使用 Kafka 客户端工具(Offset Explorer)连接 Kafka 集群(可以通过 broker 对外暴露的端口访问,也可以通过 bootstrap 外暴露的端口访问),可以连接成功并能查看到数据。