在K8s中部署动态nfs存储provisioner
背景
之前,我已经在一台worker node上安装了local lvm 的provisioner来模拟需要本地高IOPS的数据库等stafeful应用的实现。
为了后续给虚拟机里的K8s集群安装可用的metrics和logs监控系统(metrics和logs的时序数据库需要永久存储),特为K8s 集群提供基于nfs的文件服务器一台,并安装nfs provisioner, 以便实现动态分配nfs volume给pods使用的目的。
实现一套nfs server/client 系统
Step1 nfs server installation
Target :File server
IP: 192.168.80.223
NFS folder:/mnt/nfs_share
# 安装nfs server
25 sudo apt install -y nfs-kernel-server
#创建目录
26 sudo mkdir -p /mnt/nfs_share
27 sudo chmod 777 /mnt/nfs_share
28 sudo vim /etc/exports
#添加一行 /mnt/nfs_share *(rw,sync,no_root_squash,no_subtree_check)
30 sudo exportfs -ra
# 重启nfs服务
33 sudo systemctl restart nfs-server
# 确保开机自启动
34 sudo systemctl enable nfs-server
Step2 nfs-clients installation
Target :K8s worker nodes
NFS folder:/mnt/nfs_client
157 sudo apt install -y nfs-common
158 sudo mkdir -p /mnt/nfs_client
159 sudo mount -t nfs 192.168.80.223:/mnt/nfs_share /mnt/nfs_client
160 vim /etc/fstab
#添加一行 192.168.80.223:/mnt/nfs_share /mnt/nfs_client nfs defaults 0 0
实现nfs provisioner
step1 installing
Target:K8s cp(master) node
#通过Helm 添加nfs provisioner,先添加相应chart的repo
564 helm repo add nfs-subdir-external-provisioner https://kubernetes-sigs.github.io/nfs-subdir-external-provisioner/
565 helm repo update
# 安装nfs provisioner,我忘记将这个nfs provisioner需要的controller等资源单独放一个namespace了。
566 helm install nfs-provisioner nfs-subdir-external-provisioner/nfs-subdir-external-provisioner \
--set nfs.server=192.168.80.223 \
--set nfs.path=/mnt/nfs_share
step2 验证
# sc是cluster wide的资源,所以不用-n 指定namespace
root@master:/opt/k8sconfig$sudo kubectl get sc
NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE
nfs-client cluster.local/nfs-provisioner-nfs-subdir-external-provisioner Delete Immediate true 36m
topolvm-provisioner topolvm.io Delete WaitForFirstConsumer true 5d19h
# 查看controller的pod 是否在运行
root@master:/opt/k8sconfig$sudo kubectl get pods
NAME READY STATUS RESTARTS AGE
nfs-provisioner-nfs-subdir-external-provisioner-5796dc5fcfq6k2c 1/1 Running 0 36m