当前位置: 首页 > Linux

K8S实战(六)- 配置 NFS 动态卷提供持久化存储

时间:2023-04-06 04:42:28 Linux

K8S实战(6)|配置NFS动态卷,提供持久化存储,需要多少空间就去申请吧。总体流程是:创建一个NFS服务器。创建服务帐户。用于控制k8s集群中运行的NFSprovisioner的权限。创建一个存储类。负责创建PVC和调用NFSprovisioner进行定时工作,关联PV和PVC。创建NFS供应商。作用有两个,一个是在NFS共享目录下创建一个挂载点(volume),另一个是建立一个PV,并将PV与NFS挂载点相关联。更新历史20200610-初稿-左成礼原文地址-https://blog.zuolinux.com/2020/06/10/nfs-client-provisioner.html配置NFS服务器服务器ip:192.168.10.17[root@work03~]#yuminstallnfs-utilsrpcbind-y[root@work03~]#systemctlstartnfs[root@work03~]#systemctlstartrpcbind[root@work03~]#systemctlenablenfs[root@work03~]#systemctlenablerpcbind[root@work03~]#mkdir-p/data/nfs/[root@work03~]#chmod777/data/nfs/[root@work03~]#cat/etc/exports/data/nfs/192.168.10.0/24(rw,sync,no_root_squash,no_all_squash)[root@work03~]#exportfs-arvexporting192.168.10.0/24:/data/nfs[root@work03~]#showmount-elocalhostExportlistforlocalhost:/data/nfs192.168。10.0/24参数:sync:将数据同步写入内存缓冲区和磁盘,效率较低,但可以保证数据一致性async:先将数据保存在内存缓冲区,必要时再写入磁盘上的所有工作节点安装nfs-utilsrpcbindyum安装nfs-utilsrpcbind-ysystemctlstartnfssystemctlstartrpcbindsystemctlenablenfssystemctlenablerpcbindcreatedynamicvolumeprovidercreateRBACauthorization#wgethttps://raw.githubusercontent.com/kubernetes-incubator/external-storage/master/nfs-client/deploy/rbac.yaml#kubectlapply-frbac.yamlcreateStorageclass#catclass.yamlapiVersion:storage.k8s.io/v1kind:存储类元数据:名称:managed-nfs-storageprovisioner:fuseim.pri/ifs#orchooseanothername,mustmatchdeployment'senvPROVISIONER_NAME'parameters:archiveOnDelete:"false"Createnfs-client-provisionerauto-configurationprogramtoautomaticallycreatepersistentvolume(PV)automaticallycreatedPVwith${namespace}-$的{pvcName}-${pvName}的命名格式是在NFS上创建的。当PV恢复后,会以archived-${namespace}-${pvcName}-${pvName}#catdeployment.yamlapiVersion:apps/v1kind:Deploymentmetadata:name:nfs的命名格式存储在NFS服务器上-client-provisionerlabels:app:nfs-client-provisioner#替换为配置器部署的命名空间namespace:defaultspec:replicas:1strategy:type:Recreateselector:matchLabels:app:nfs-client-provisionertemplate:metadata:labels:应用:nfs-client-provisioner规范:serviceAccountName:nfs-client-provisioner容器:-名称:nfs-client-provisioner图像:quay.io/external_storage/nfs-client-provisioner:最新的volumeMounts:-名称:nfs-client-rootmountPath:/persistentvolumesenv:-名称:PROVISIONER_NAME值:fuseim.pri/ifs-name:NFS_SERVERvalue:192.168.10.17-name:NFS_PATHvalue:/data/nfsvolumes:-name:nfs-client-rootnfs:server:192.168.10.17path:/data/nfs创建一个状态应用#catstatefulset-nfs.yamlapiVersion:v1kind:Servicemetadata:name:nginxlabels:app:nginxspec:ports:-port:80name:webclusterIP:None选择器:app:nginx---apiVersion:apps/v1kind:StatefulSetmetadata:name:nfs-webspec:serviceName:"nginx"replicas:3selector:matchLabels:app:nfs-web#必须匹配.spec.template.metadata.labelstemplate:metadata:labels:应用程序:nfs-web规范:terminationGracePeriodSeconds:10个容器:-名称:nginx图像:nginx:1.7.9端口:-containerPort:80名称:webvolumeMounts:-名称:wwwmountPath:/usr/share/nginx/htmlvolumeClaimTemplates:-元数据:名称:www注释:volume.beta.kubernetes.io/storage-class:managed-nfs-storagespec:accessModes:[“ReadWriteOnce”]resources:requests:storage:1Gi[root@master01~]#kubectlapply-fstatefulset-nfs.yaml查看Pod/PV/PVC[root@master01~]#kubectlgetpodsNAMEREADYSTATUSRESTARTSAGEnfs-client-provisioner-5f5fff65ff-2pmxh1/1Running026mnfs-web-01/1Running02m33snfs-web-11/1运行02m27snfs-web-21/1Running02m21s[root@master01~]#kubectlgetpvcNAMESTATUSVOLUME访问模式STORAGECLASSAGEwww-nfs-web-0Boundpvc-62f4868f-c6f7-459e-a280-26010c3a58491GiRWOmanaged-nfs-storage2nm35s-webwww--1绑定pvc-47b68872-35f2-4d3b-bc70-fc59d3bcdbf91GiRWO托管-nfs-存储2m29swww-nfs-web-2绑定pvc-0af3ac53-56d9-4526-8c60-eb0ce3f281e01GiRWO托管-nfs2sroot[nfs2s3@master01~]#kubectlgetpvNAME容量访问模式回收策略状态声明存储类原因AGEpvc-0af3ac53-56d9-4526-8c60-eb0ce3f281e01GiRWO删除绑定默认值/www-nfs-web-2managed-nfs-storage2m25spvc8-727b35f2-4d3b-bc70-fc59d3bcdbf91GiRWO删除Bounddefault/www-nfs-web-1managed-nfs-storage2m31spvc-62f4868f-c6f7-459e-a280-26010c3a58491GiRWODeleteBounddefault/www-nfs-web-0managed-nfs-storage2m36s查看nfs服务器目录信息,各子目录内容为空[root@work03~]#ls-l/data/nfs/total12default-www-nfs-web-0-pvc-62f4868f-c6f7-459e-a280-26010c3a5849default-www-nfs-web-1-pvc-47b68872-35f2-4d3b-bc70-fc59d3bcdbf9default-www-nfs-web-2-pvc-0af3ac53-56d9-4526-8c60-eb0ce3f281e0破坏性测试将内容写入每个pod[root@master01~]#为我在012;做kubectlexecnfs-web-$i--sh-c'echo$(hostname)>/usr/share/nginx/html/index.html';doneremotenfs各个子目录不再为空,出现内容[root@work03~]#ls/data/nfs/default-www-nfs-web-0-pvc-62f4868f-c6f7-459e-a280-26010c3a5849/index.html[root@work03~]#查看各个容器的内容,都是各自的主机名[root@master01~]#foriin012;执行kubectlexec-itnfs-web-$i--cat/usr/share/nginx/html/index.html;完成nfs-web-0nfs-web-1nfs-web-2删除对应的pod[root@master01~]#kubectlgetpod-lapp=nfs-webNAMEREADYSTATUSRESTARTSAGEnfs-web-01/1Running07m7snfs-web-11/1Running07m3snfs-web-21/1运行07m[root@master01~]#kubectldeletepod-lapp=nfs-webpod“nfs-web-0”deletedpod“nfs-web-1”deletedpod“nfs-web-2”"删除可以看到又自动创建了[root@master01~]#kubectlgetpod-lapp=nfs-webNAMEREADYSTATUSRESTARTSAGEnfs-web-01/1Running015snfs-web-11/1Running011snfs-web-21/1Running08s再次查看每个pod中的内容,可以看到文件内容没有变化[root@master01~]#foriin012;执行kubectlexec-itnfs-web-$i--cat/usr/share/nginx/html/index.html;donenfs-web-0nfs-web-1nfs-web-2结论可以看到,statefulsetcontroller可以通过固定的pod创建顺序保证pod之间的pod拓扑关系一直处于稳定状态。nfs-client-provisioner自动创建一个远程存储卷,与每个pod有固定的对应关系,保证pod重建后数据不会丢失。微信联系我公众号:zuolinux_com