Dockerfile 未做其他修改,只是将修改后的 start-kafka.sh 脚本添加到镜像中,并使用 bash 环境来执行脚本(否则会有些命令无法执行):
FROM wurstmeister/kafka:2.13-2.6.0 ADD start-kafka.sh / CMD ["bash","start-kafka.sh"] 3. 打包镜像并上传私服使用如下命令重新打包镜像并修改 tag:
docker build --tag 10.16.12.204/ops/kafka:custom-v2.13-2.6.0 -f Dockerfile .将镜像上传至镜像仓库:
docker push 10.16.12.204/ops/kafka:custom-v2.13-2.6.0 四、创建命名空间整个 Kafka 和 Zookeeper 集群都要在同一个命名空间下,所以使用如下 yaml 文件创建 ns-kafka 命名空间:
--- apiVersion: v1 kind: Namespace metadata: name: ns-kafka labels: name: ns-kafka 五、创建 SecretKubelet 到镜像仓库中拉取镜像需要进行验证,所以创建一个用于验证 Harbor 仓库的 Secret:
kubectl create secret docker-registry harbor-secret --namespace=ns-kafka --docker-server=http://10.16.12.204 --docker-username=admin --docker-password=Harbor12345 六、创建 PV 和 PVC在此次搭建集群的过程中,计划让 Kafka 集群和 Zookeeper 集群使用同一个 PV。在前面定义 Pod 初始化脚本时可以看到,Kafka 和 Zookeeper 中的数据目录以及日志目录,都是在以自己主机名命名的目录下,所以即便使用同一个 PV,也可以对目录进行区分。创建 PV 和 PVC 的 yaml 文件内容如下:
--- apiVersion: v1 kind: PersistentVolume metadata: name: kafka-data-pv spec: accessModes: - ReadWriteMany capacity: storage: 500Gi local: path: /opt/ops_ceph_data/kafka_data nodeAffinity: required: nodeSelectorTerms: - matchExpressions: - key: kafka-cluster operator: In values: - "true" persistentVolumeReclaimPolicy: Retain --- kind: PersistentVolumeClaim apiVersion: v1 metadata: name: kafka-data-pvc namespace: ns-kafka spec: accessModes: - ReadWriteMany resources: requests: storage: 500Gi