0. 安装准备
1. NFS安装配置
1. 安装NFS
yum install -y nfs-utilsyum -y install rpcbind
2. 配置NFS服务端数据目录
mkdir -p /nfs/k8s/chmod 755 /nfs/k8svim /etc/exports
内容如下:
/nfs/k8s/ *(async,insecure,no_root_squash,no_subtree_check,rw)
3. 启动服务查看状态
# ltsr007systemctl start nfs.servicesystemctl enable nfs.serviceshowmount -e
4. 客户端
# 客户端不需要启动nfs服务# 开机启动sudo systemctl enable rpcbind.service# 启动rpcbind服务sudo systemctl start rpcbind.service# 检查NFS服务器端是否有目录共享showmount -e ltsr007
2. PV配置
这里采用StorageClass动态实现PV的方式,创建好StorageClass对象,只要在helm的values.yaml文件中指定storageClass为StorageClass名称即可动态在NFS上创建PV以及PVC。
1. 创建Provisioner
Provisioner是NFS的自动配置程序,可以使用自动配置好的NFS服务器,来自动创建持久卷,也就是自动创建PV。
mkdir -p ~/k8smkdir ~/k8s/kafka-helmcd ~/k8s/kafka-helmvi nfs-client.yaml
内容如下:
apiVersion: apps/v1kind: Deploymentmetadata:name: nfs-client-provisionerspec:replicas: 1selector:matchLabels:app: nfs-client-provisionerstrategy:type: Recreatetemplate:metadata:labels:app: nfs-client-provisionerspec:serviceAccountName: default-admincontainers:- name: nfs-client-provisionerimage: quay.io/external_storage/nfs-client-provisioner:latestvolumeMounts:- name: nfs-client-rootmountPath: /persistentvolumesenv:- name: PROVISIONER_NAMEvalue: fuseim.pri/ifs- name: NFS_SERVERvalue: 192.168.0.17- name: NFS_PATHvalue: /nfs/k8svolumes:- name: nfs-client-rootnfs:server: 192.168.0.17path: /nfs/k8s
执行yaml:
kubectl create -f nfs-client.yaml
2. 创建ServiceAccount
给Provisioner授权,使得Provisioner拥有对NFS增删改查的权限。
vi nfs-client-sa.yaml
内容如下:
---apiVersion: v1kind: ServiceAccountmetadata:labels:k8s-app: gmoname: default-adminnamespace: default---apiVersion: rbac.authorization.k8s.io/v1beta1kind: ClusterRoleBindingmetadata:name: default-crbroleRef:apiGroup: rbac.authorization.k8s.iokind: ClusterRolename: cluster-adminsubjects:- kind: ServiceAccountname: default-adminnamespace: default
其中的ServiceAccount name需要和nfs-client.yaml中的serviceAccountName一致。
kubectl create -f nfs-client-sa.yaml
3. 创建StorageClass对象
vi nfs-kafka-class.yaml
内容如下:
apiVersion: storage.k8s.io/v1kind: StorageClassmetadata:name: kafka-nfs-storageprovisioner: fuseim.pri/ifs
provisioner需要和nfs-client.yaml中的PROVISIONER_NAME一致。
kubectl create -f nfs-kafka-class.yaml
1. 拉取镜像
1. 创建存放资源的文件夹
mkdir -p ~/k8smkdir ~/k8s/kafka-helmcd ~/k8s/kafka-helm
2. 从官方Helm库拉取镜像
helm search repo kafkahelm fetch incubator/kafka --version 0.11.0
2. 更改配置
1. 修改ZooKeeper配置
vi charts/zookeeper/templates/statefulset.yaml
将- name: zookeeper后面也就是50行image后面的内容修改为:
# 修改前1 apiVersion: apps/v1beta114 terminationGracePeriodSeconds: {{ .Values.terminationGracePeriodSeconds }}50 image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"# 修改后(注意缩进)apiVersion: apps/v1# terminationGracePeriodSeconds: {{ .Values.terminationGracePeriodSeconds }}image: "registry.cn-hangzhou.aliyuncs.com/appstore/k8szk:v2"
2. 配置Kafka持久化存储
vi values.yaml
配置如下:
persistence:enabled: truesize: "1Gi"mountPath: "/opt/kafka/data"storageClass: "kafka-nfs-storage"
3. 配置ZooKeeper持久化存储
vi values.yaml
配置如下:
zookeeper:enabled: trueresources: ~env:ZK_HEAP_SIZE: "1G"persistence:enabled: truesize: "1Gi"storageClass: "kafka-nfs-storage"
4. 配置Kafka其他参数
vi values.yaml
配置如下(新增):
configurationOverrides:"offsets.topic.replication.factor": 3"log.cleaner.enable": true"log.cleanup.policy": delete"delete.topic.enable": true
修复yaml文件:
vi templates/statefulset.yaml
配置如下(新增):
spec:serviceName: {{ include "kafka.fullname" . }}-headlessselector:matchLabels:app: {{ include "kafka.name" . }}release: {{ .Release.Name }}
另外:将“apiVersion: apps/v1beta1”修改为:“apiVersion: apps/v1”。
3. 导入镜像(选做)
- 上传镜像(所有安装节点)。
加载镜像(所有安装节点)。
docker load -i docker-kafka_1.1.1.tardocker load -i docker-zookeeper_3.4.9.tar
4. 启动Chart
helm install kafka --namespace bigdata .kubectl get pods -n bigdata# 参考(动态传参)helm install apphub/kafka --version 7.0.2 --name kafka --set replicaCount=3,metrics.kafka.enabled=true
5. 验证
创建topic。
kubectl -n bigdata exec kafka-0 -- /usr/bin/kafka-topics --zookeeper kafka-zookeeper:2181 --create --replication-factor 3 --partitions 3 --topic testk8s
查看Topic列表。
kubectl -n bigdata exec kafka-0 -- /usr/bin/kafka-topics --zookeeper kafka-zookeeper:2181 --list
查看Topic详情。
kubectl -n bigdata exec kafka-0 -- /usr/bin/kafka-topics --zookeeper kafka-zookeeper:2181 --describe --topic testk8s
消费数据。
kubectl -n bigdata exec -ti kafka-1 -- /usr/bin/kafka-console-consumer --bootstrap-server kafka:9092 --topic testk8s --from-beginning
生产数据。
kubectl -n bigdata exec -ti kafka-2 -- /usr/bin/kafka-console-producer --broker-list kafka:9092 --topic testk8s
6. 卸载
helm uninstall kafka -n bigdata
