0. 安装准备
1. NFS安装配置
1. 安装NFS
yum install -y nfs-utils
yum -y install rpcbind
2. 配置NFS服务端数据目录
mkdir -p /nfs/k8s/
chmod 755 /nfs/k8s
vim /etc/exports
内容如下:
/nfs/k8s/ *(async,insecure,no_root_squash,no_subtree_check,rw)
3. 启动服务查看状态
# ltsr007
systemctl start nfs.service
systemctl enable nfs.service
showmount -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 ~/k8s
mkdir ~/k8s/kafka-helm
cd ~/k8s/kafka-helm
vi nfs-client.yaml
内容如下:
apiVersion: apps/v1
kind: Deployment
metadata:
name: nfs-client-provisioner
spec:
replicas: 1
selector:
matchLabels:
app: nfs-client-provisioner
strategy:
type: Recreate
template:
metadata:
labels:
app: nfs-client-provisioner
spec:
serviceAccountName: default-admin
containers:
- name: nfs-client-provisioner
image: quay.io/external_storage/nfs-client-provisioner:latest
volumeMounts:
- name: nfs-client-root
mountPath: /persistentvolumes
env:
- name: PROVISIONER_NAME
value: fuseim.pri/ifs
- name: NFS_SERVER
value: 192.168.0.17
- name: NFS_PATH
value: /nfs/k8s
volumes:
- name: nfs-client-root
nfs:
server: 192.168.0.17
path: /nfs/k8s
执行yaml:
kubectl create -f nfs-client.yaml
2. 创建ServiceAccount
给Provisioner授权,使得Provisioner拥有对NFS增删改查的权限。
vi nfs-client-sa.yaml
内容如下:
---
apiVersion: v1
kind: ServiceAccount
metadata:
labels:
k8s-app: gmo
name: default-admin
namespace: default
---
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding
metadata:
name: default-crb
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: cluster-admin
subjects:
- kind: ServiceAccount
name: default-admin
namespace: 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/v1
kind: StorageClass
metadata:
name: kafka-nfs-storage
provisioner: fuseim.pri/ifs
provisioner需要和nfs-client.yaml中的PROVISIONER_NAME一致。
kubectl create -f nfs-kafka-class.yaml
1. 拉取镜像
1. 创建存放资源的文件夹
mkdir -p ~/k8s
mkdir ~/k8s/kafka-helm
cd ~/k8s/kafka-helm
2. 从官方Helm库拉取镜像
helm search repo kafka
helm fetch incubator/kafka --version 0.11.0
2. 更改配置
1. 修改ZooKeeper配置
vi charts/zookeeper/templates/statefulset.yaml
将- name: zookeeper后面也就是50行image后面的内容修改为:
# 修改前
1 apiVersion: apps/v1beta1
14 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: true
size: "1Gi"
mountPath: "/opt/kafka/data"
storageClass: "kafka-nfs-storage"
3. 配置ZooKeeper持久化存储
vi values.yaml
配置如下:
zookeeper:
enabled: true
resources: ~
env:
ZK_HEAP_SIZE: "1G"
persistence:
enabled: true
size: "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" . }}-headless
selector:
matchLabels:
app: {{ include "kafka.name" . }}
release: {{ .Release.Name }}
另外:将“apiVersion: apps/v1beta1”修改为:“apiVersion: apps/v1”。
3. 导入镜像(选做)
- 上传镜像(所有安装节点)。
加载镜像(所有安装节点)。
docker load -i docker-kafka_1.1.1.tar
docker 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