Kubernetes集群管理员通过提供不同的存储类,可以满足用户不同的服务质量级别、备份策略和任意策略要求的存储需求。动态存储卷供应使用StorageClass进行实现,其允许存储卷按需被创建。如果没有动态存储供应,Kubernetes集群的管理员将不得不通过手工的方式类创建新的存储卷。通过动态存储卷,Kubernetes将能够按照用户的需要,自动创建其需要的存储。
比如,我们可能会在kubernetes集群中安装一些带持久化数据功能的服务,例如redis、mysql、mq、es等。因此,当有这类需求时,我们必须给整个集群给定一个特定的存储方案。本章我们是NFS的网络存储方案。
(存储类在k8s集群中的作用:按用户需求自动创建pv,并绑定pvc)
1、搭建NFS 服务端(192.168.11.24)
我们可以在k8s集群外的一台主机上搭建一个nfs server。
yum install rpcbind nfs-utils -y
mkdir /nfs_data
chmod +w /nfs_data
chmod +x /nfs_data
vi /etc/exports,内容如下:
/nfs_data 192.168.11.0/24(rw,no_root_squash)
启动nfs服务
service nfs start #启动nfs服务
service rpcbind start #启动rpc服务
showmount -e 192.168.11.24 #查看共享盘 ok
2、安装nfs-client(存储类)
git clone https://github.com/helm/charts.git
cd charts/
#实例化一个Release ,指定Release名称为mynfs-client,并设置为默认的存储类
helm install stable/nfs-client-provisioner \
--set nfs.server=192.168.11.24 --set nfs.path=/nfs_data \
--set storageClass.defaultClass=true \
--name mynfs-client
3、使用helm运行一个redis pod测试
helm install --name myredis --namespace default --set redisPassword=123456asd . (指定chart包所在目录,如当前目录就是点(.) ,注意最后有个点)
kubectl get pod ,发现出来了一个"myredis"开头的pod,说明redis的chart运行成功了。
myredis-redis-589d594ff9-f672b 1/1 Running 0 19m
kubectl exec -it myredis-redis-589d594ff9-f672b sh #进入pod容器内部,set一些数据进去
redis-cli
auth 123456asd
set a hello
set b world
kubectl get pod,发现出来一个以"mynfs"开头的pod,说明nfs-client安装成功了。
mynfs-client-nfs-client-provisioner-76ddc68dcf-7m2fl 1/1 Running 0 27m
在nfsserver 主机上,
cd /nfs_data
ls ,发现nfs-client存储类确实帮我们创建了pv ,并与pod中的pvc相绑定了。