pv/pvc挂载配置
-
StorageClass存储类理论StorageClass的作用主要有以下几个方面:
动态存储卷分配:StorageClass可以根据定义的属性动态地创建存储卷,无需手动创建和管理存储卷。
存储卷的属性管理:StorageClass可以定义存储卷的属性,如存储类型、存储容量、访问模式等,从而更好地满足应用程序的存储需求。
存储资源的管理:StorageClass可以将存储资源进行分类管理,方便开发者根据应用程序的需求进行选择。
每个 StorageClass 都有一个供应商(Provisioner),用来决定使用哪个卷插件制备 PV。 该字段必须指定。 -
以NFS为例,要想使用NFS,需要一个nfs-client的自动装载程序,称之为provisioner,它会使用我们已经配置好的NFS服务器自动创建持久卷,也就是自动帮我们创建PV。
NFS服务器配置
-
修改 exports 文件,添加允许访问的客户端
#编辑exports文件 vi /etc/exports #添加允许访问的客户端 (/app/data 服务器上的路径) /app/data 192.168.**.***(rw,sync,no_root_squash) #加载生效 exportfs -r
#重启rpcbind、nfs-server systemctl restart rpcbind systemctl restart nfs-server
NFS客户端配置
-
客户端挂载nfs(做测试用,一般情况下使用其他客户端挂载nfs服务器,例如Redis客户端)
#创建一个路径,将服务端(192.168.**.***)的/app/data 目录挂载到客户端的/test/data 目录上,从而实现文件共享 mkdir -p /test/data mount -t nfs 192.168.**.***:/app/data /test/data
#永久挂载配置 #修改 /etc/fstab 文件 ,末尾添加挂载信息 vim /etc/fstab 192.168.*.***:/app/data /test/data nfs defaults 0 0
搭建NFS供应商(provisioner)
-
第一步:创建运行nfs-provisioner需要使用的SA账号 --------nfs-provisioner.yaml
# nfs-provisioner.yaml apiVersion: v1 kind: ServiceAccount metadata: name: nfs-sun
#运行该yaml文件创建SA账号 kubectl apply -f nfs-provisioner.yaml #查看SA账号 kubectl get sa nfs-sun
-
第二步:对SA账号进行授权
kubectl create clusterrolebinding nfs-sun --clusterrole=cluster-admin --serviceaccount=default:nfs-sun
-
第三步:安装nfs-deployment.yaml程序 ------nfs-deployment.yaml
--- kind: Deployment apiVersion: apps/v1 metadata: name: nfs-sun spec: selector: matchLabels: app: nfs-sun replicas: 3 strategy: # 更新策略 type: Recreate template: metadata: labels: app: nfs-sun spec: serviceAccount: nfs-sun # 指定SA账号 containers: - name: nfs-sun image: registry.cn-beijing.aliyuncs.com/mydlq/nfs-subdir-external-provisioner:v4.0.0 #provisioner的镜像 imagePullPolicy: IfNotPresent volumeMounts: - name: nfs-client-root mountPath: /persistentvolumes env: - name: PROVISIONER_NAME value: example.com/nfs-sun # NFS供应商名称 - name: NFS_SERVER value: 192.168.**.*** # NFS服务端地址 - name: NFS_PATH value: /app/data/ # NFS共享目录 volumes: - name: nfs-client-root nfs: server: 192.168.**.*** # NFS服务端地址 path: /app/data/ # NFS共享目录
-
执行yaml文件&& 查看Pod状态
kubectl apply -f nfs-deployment.yaml deployment.apps/nfs-sun unchanged kubectl get pods NAME READY STATUS RESTARTS AGE nfs-sun-97f96446d-6ng62 1/1 Running 0 3s nfs-sun-97f96446d-9kf6x 1/1 Running 0 3s nfs-sun-97f96446d-cbbz9 1/1 Running 0 3s
-
创建StorageClass存储类--------nfs-storageclass.yaml
#nfs-storageclass.yaml --- kind: StorageClass apiVersion: storage.k8s.io/v1 metadata: name: nfs-sun provisioner: example.com/nfs-sun # 指定NFS供应商名称,和上面对应上
注意:provisioner处写的
example.com/nfs
应该跟安装nfs-deployment.yaml时候的env下的PROVISIONER_NAME的value值保持一致。执行yaml文件 && 查看storageclass状态
kubectl apply -f nfs-storageclass.yaml kubectl get sc nfs-sun NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE nfs-sun example.com/nfs-sun Delete Immediate false 20h
-
创建PVC,通过StorageClass动态生成PV --------- nfs-pvc.yaml
#nfs-pvc.yaml --- kind: PersistentVolumeClaim apiVersion: v1 metadata: name: nfs-sun spec: accessModes: ["ReadWriteMany"] resources: requests: storage: 1Gi storageClassName: nfs-sun # 指定使用storageclass的名称,来自动生产PV
kubectl apply -f nfs-pvc.yaml kubectl get pvc NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE nfs-sun Bound pvc-ea-bb123 1Gi RWX nfs-sun 20h kubectl get pv
-
如果想在创建redis的pod时,挂载pvc,需要将创建pvc的配置,写入到创建pod的yaml文件中。
-
手动创建pv/pvc的yaml文件如下(一般情况下,不会进行手动创建)
#pv.yaml apiVersion: v1 kind: PersistentVolume metadata: name: redis-pv spec: storageClassName: nfs-sun #persistentVolumeReclaimPolicy: Recycle capacity: storage: 1Gi accessModes: - ReadWriteOnce nfs: server: 192.168.**.*** path: "/app/data" #pvc.yaml apiVersion: v1 kind: PersistentVolumeClaim metadata: name: redis-pvc spec: accessModes: - ReadWriteOnce storageClassName: nfs-sun //要与pv的storageClassName对应 resources: requests: storage: 1Gi //要与pv的storage对应
小结:
将目录挂载到客户端上,只不过,pv/pvc的方式繁琐些,NFS如果停止,则在客户端上查不到数据