作者:青蛙小白,原文:
https://blog.frognew.com/2019/07/use-helm-install-kafka-on-k8s.html
1.配置helm chart repo
helm repo add incubator http://storage.googleapis.com/kubernetes-charts-incubator
。
helm repo add stable http://mirror.azure.cn/kubernetes/charts
helm repo add incubator http://mirror.azure.cn/kubernetes/charts-incubator
helm repo list
NAME URL
stable http://mirror.azure.cn/kubernetes/charts
local http://127.0.0.1:8879/charts
incubator http://mirror.azure.cn/kubernetes/charts-incubator
2.创建Kafka和Zookeeper的Local PV
2.1 创建Kafka的Local PV
local-storage.yaml
:
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: local-storage
provisioner: kubernetes.io/no-provisioner
volumeBindingMode: WaitForFirstConsumer
reclaimPolicy: Retain
kubectl apply -f local-storage.yaml
storageclass.storage.k8s.io/local-storage created
kafka-local-pv.yaml
:
apiVersion: v1
kind: PersistentVolume
metadata:
name: datadir-kafka-0
spec:
capacity:
storage: 5Gi
accessModes:
ReadWriteOnce
persistentVolumeReclaimPolicy: Retain
storageClassName: local-storage
local:
path: /home/kafka/data-0
nodeAffinity:
required:
nodeSelectorTerms:
matchExpressions:
key: kubernetes.io/hostname
operator: In
values:
node1
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: datadir-kafka-1
spec:
capacity:
storage: 5Gi
accessModes:
ReadWriteOnce
persistentVolumeReclaimPolicy: Retain
storageClassName: local-storage
local:
path: /home/kafka/data-1
nodeAffinity:
required:
nodeSelectorTerms:
matchExpressions:
key: kubernetes.io/hostname
operator: In
values:
node2
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: datadir-kafka-2
spec:
capacity:
storage: 5Gi
accessModes:
ReadWriteOnce
persistentVolumeReclaimPolicy: Retain
storageClassName: local-storage
local:
path: /home/kafka/data-2
nodeAffinity:
required:
nodeSelectorTerms:
matchExpressions:
key: kubernetes.io/hostname
operator: In
values:
node2
kubectl apply -f kafka-local-pv.yaml
/home/kafka/data-0
,在node2上创建目录
/home/kafka/data-1
和
/home/kafka/data-2
。
# node1
mkdir -p /home/kafka/data-0
# node2
mkdir -p /home/kafka/data-1
mkdir -p /home/kafka/data-2
2.2 创建Zookeeper的Local PV
zookeeper-local-pv.yaml
:
apiVersion: v1
kind: PersistentVolume
metadata:
name: data-kafka-zookeeper-0
spec:
capacity:
storage: 5Gi
accessModes:
ReadWriteOnce
persistentVolumeReclaimPolicy: Retain
storageClassName: local-storage
local:
path: /home/kafka/zkdata-0
nodeAffinity:
required:
nodeSelectorTerms:
matchExpressions:
key: kubernetes.io/hostname
operator: In
values:
node1
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: data-kafka-zookeeper-1
spec:
capacity:
storage: 5Gi
accessModes:
ReadWriteOnce
persistentVolumeReclaimPolicy: Retain
storageClassName: local-storage
local:
path: /home/kafka/zkdata-1
nodeAffinity:
required:
nodeSelectorTerms:
matchExpressions:
key: kubernetes.io/hostname
operator: In
values:
node2
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: data-kafka-zookeeper-2
spec:
capacity:
storage: 5Gi
accessModes:
ReadWriteOnce
persistentVolumeReclaimPolicy: Retain
storageClassName: local-storage
local:
path: /home/kafka/zkdata-2
nodeAffinity:
required:
nodeSelectorTerms:
matchExpressions:
key: kubernetes.io/hostname
operator: In
values:
node2
kubectl apply -f zookeeper-local-pv.yaml
/home/kafka/zkdata-0
,在node2上创建目录
/home/kafka/zkdata-1
和
/home/kafka/zkdata-2
。
# node1
mkdir -p /home/kafka/zkdata-0
# node2
mkdir -p /home/kafka/zkdata-1
mkdir -p /home/kafka/zkdata-2
3.部署Kafka
kafka-values.yaml
:
replicas: 3
tolerations:
key: node-role.kubernetes.io/master
operator: Exists
effect: NoSchedule
key: node-role.kubernetes.io/master
operator: Exists
effect: PreferNoSchedule
persistence:
storageClass: local-storage
size: 5Gi
zookeeper:
persistence:
enabled: true
storageClass: local-storage
size: 5Gi
replicaCount: 3
image:
repository: gcr.azk8s.cn/google_samples/k8szk
tolerations:
key: node-role.kubernetes.io/master
operator: Exists
effect: NoSchedule
key: node-role.kubernetes.io/master
operator: Exists
effect: PreferNoSchedule
-
安装过程需要使用到 gcr.io/google_samples/k8szk:v3
等docker镜像,切换成使用azure的GCR Proxy Cache:gcr.azk8s.cn
。
helm install --name kafka --namespace kafka -f kafka-values.yaml incubator/kafka
最后需要确认所有的pod都处于running状态:
kubectl get pod -n kafka -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
kafka-0 1/1 Running 0 12m 10.244.0.61 node1 <none> <none>
kafka-1 1/1 Running 0 6m3s 10.244.1.12 node2 <none> <none>
kafka-2 1/1 Running 0 2m26s 10.244.1.13 node2 <none> <none>
kafka-zookeeper-0 1/1 Running 0 12m 10.244.1.9 node2 <none> <none>
kafka-zookeeper-1 1/1 Running 0 11m 10.244.1.10 node2 <none> <none>
kafka-zookeeper-2 1/1 Running 0 11m 10.244.1.11 node2 <none> <none>
kubectl get statefulset -n kafka
NAME READY AGE
kafka 3/3 22m
kafka-zookeeper 3/3 22m
kubectl get service -n kafka
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kafka ClusterIP 10.102.8.192 <none> 9092/TCP 31m
kafka-headless ClusterIP None <none> 9092/TCP 31m
kafka-zookeeper ClusterIP 10.110.43.203 <none> 2181/TCP 31m
kafka-zookeeper-headless ClusterIP None <none> 2181/TCP,3888/TCP,2888/TCP 31m
kafka-0
调度到node1上,将
kafka-1
和
kafka-2
调度到node2上。
4.安装后的测试
apiVersion: v1
kind: Pod
metadata:
name: testclient
namespace: kafka
spec:
containers:
name: kafka
image: confluentinc/cp-kafka:5.0.1
command:
sh
-c
"exec tail -f /dev/null"
创建并进入testclient容器内:
kubectl apply -f testclient.yaml
kubectl -n kafka exec testclient -it sh
查看kafka相关命令:
ls /usr/bin/ | grep kafka
kafka-acls
kafka-broker-api-versions
kafka-configs
kafka-console-consumer
kafka-console-producer
kafka-consumer-groups
kafka-consumer-perf-test
kafka-delegation-tokens
kafka-delete-records
kafka-dump-log
kafka-log-dirs
kafka-mirror-maker
kafka-preferred-replica-election
kafka-producer-perf-test
kafka-reassign-partitions
kafka-replica-verification
kafka-run-class
kafka-server-start
kafka-server-stop
kafka-streams-application-reset
kafka-topics
kafka-verifiable-consumer
kafka-verifiable-producer
创建一个Topic test1:
kafka-topics --zookeeper kafka-zookeeper:2181 --topic test1 --create --partitions 1 --replication-factor 1
查看的Topic:
kafka-topics --zookeeper kafka-zookeeper:2181 --list
test1
5.总结
incubator/kafka
在k8s上部署的kafka,使用的镜像是
confluentinc/cp-kafka:5.0.1
。 即部署的是Confluent公司提供的kafka版本。Confluent Platform Kafka(简称CP Kafka)提供了一些Apache Kafka没有的高级特性,例如跨数据中心备份、Schema注册中心以及集群监控工具等。CP Kafka目前分为免费版本和企业版两种,免费版除了Apache Kafka的标准组件外还包含Schema注册中心和Rest Proxy。
ls /usr/share/java/kafka | grep kafka
kafka-clients-2.0.1-cp1.jar
kafka-log4j-appender-2.0.1-cp1.jar
kafka-streams-2.0.1-cp1.jar
kafka-streams-examples-2.0.1-cp1.jar
kafka-streams-scala_2.11-2.0.1-cp1.jar
kafka-streams-test-utils-2.0.1-cp1.jar
kafka-tools-2.0.1-cp1.jar
kafka.jar
kafka_2.11-2.0.1-cp1-javadoc.jar
kafka_2.11-2.0.1-cp1-scaladoc.jar
kafka_2.11-2.0.1-cp1-sources.jar
kafka_2.11-2.0.1-cp1-test-sources.jar
kafka_2.11-2.0.1-cp1-test.jar
kafka_2.11-2.0.1-cp1.jar
2.11-2.0.1
,前面
2.11
是Scala编译器的版本,Kafka的服务器端代码是使用Scala语言开发的,后边
2.0.1
是Kafka的版本。 即CP Kafka 5.0.1是基于Apache Kafka 2.0.1的。
参考
-
Zookeeper Helm Chart -
Kafka Helm Chart -
GCR Proxy Cache 帮助 -
Confluent Platform and Apache Kafka Compatibility
--end--
K8S培训推荐
Kubernetes线下实战培训,采用3+1+1新的培训模式(3天线下实战培训,1年内可免费再次参加,每期前10名报名,可免费参加价值3600元的线上直播班;),资深一线讲师,实操环境实践,现场答疑互动,培训内容覆盖:Kubernetes集群搭建、Kubernetes设计、Pod、常用对象操作,Kuberentes调度系统、QoS、Helm、网络、存储、CI/CD、日志监控等。点击查看更多课程信息!成都:8月16-18日
推荐阅读
本文分享自微信公众号 - K8S中文社区(k8schina)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。
来源:oschina
链接:https://my.oschina.net/u/4586894/blog/4583490