pvc:资源需要指定:
1.accessMode:访问模型;对象列表:
ReadWriteOnce – the volume can be mounted as read-write by a single node: RWO - ReadWriteOnce一人读写
ReadOnlyMany – the volume can be mounted read-only by many nodes: ROX - ReadOnlyMany 多人只读
ReadWriteMany – the volume can be mounted as read-write by many nodes: RWX - ReadWriteMany多人读写
2.resource:资源限制(比如:定义5GB空间,我们期望对应的存储空间至少5GB。)
3.selector:标签选择器。不加标签,就会在所有PV找最佳匹配。
4.storageClassName:存储类名称:
5.volumeMode:指后端存储卷的模式。可以用于做类型限制,哪种类型的PV可以被当前claim所使用。
6.volumeName:卷名称,指定后端PVC(相当于绑定)
PV和PVC是一一对应关系,当有PV被某个PVC所占用时,会显示banding,其它PVC不能再使用绑定过的PV。
PVC一旦绑定PV,就相当于是一个存储卷,此时PVC可以被多个Pod所使用。(PVC支不支持被多个Pod访问,取决于访问模型accessMode的定义)。
PVC若没有找到合适的PV时,则会处于pending状态。
PV是属于集群级别的,不能定义在名称空间中。
PVC时属于名称空间级别的。
PV的reclaim policy选项:
默认是Retain保留,保留生成的数据。
可以改为recycle回收,删除生成的数据,回收pv
delete,删除,pvc解除绑定后,pv也就自动删除。
例:在nfs服务器上,使用nfs创建多个数据卷,在k8s集群中定义PV/PVC,让pod关联PVC
1.在/data/volumes/创建多个目录:v1,v2,v3,v4,v5,修改/etc/exports文件,使数据卷单独输出。
1 /data/volumes/v1 192.168.1.0/24(rw,no_root_squash) 2 /data/volumes/v2 192.168.1.0/24(rw,no_root_squash) 3 /data/volumes/v3 192.168.1.0/24(rw,no_root_squash) 4 /data/volumes/v4 192.168.1.0/24(rw,no_root_squash) 5 /data/volumes/v5 192.168.1.0/24(rw,no_root_squash)
exportfs -arv:显示nfs当前输出的可以挂载的数据卷。
showmount -e :显示nfs导出的数据卷
2.在k8s集群中定义pv:
1 vim pv-demo.yaml 2 apiVersion: v1 3 kind: PersistentVolume 4 metadata: 5 name: pv001 6 labels: 7 name: pv001 8 spec: 9 nfs: 10 path: /data/volumes/v1 11 server: k8s-node2 12 accessModes: ["ReadWriteMany","ReadWriteOnce","ReadOnlyMany"] 13 capacity: 14 storage: 2Gi 15 --- 16 ...pv002 17 --- 18 ...pv003 19 ...创建5个以上内容,修改name和path等参数
应用:kubectl apply -f pv-demo.yaml
查看:kubectl get pv
1 NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE 2 pv001 2Gi RWO,ROX,RWX Retain Available 56m 3 pv002 5Gi RWO,ROX Retain Available 56m 4 pv003 3Gi ROX,RWX Retain Available 56m 5 pv004 10Gi RWO Retain Available 56m 6 pv005 15Gi ROX Retain Available 56m
3.创建PVC和pod
1 vim pod-pvc.yaml 2 apiVersion: v1 3 kind: PersistentVolumeClaim 4 metadata: 5 name: mypvc 6 namespace: default 7 spec: 8 accessModes: ["ReadWriteOnce"] ##注:这个访问模型必须是PV中存在的访问模型的子集,否则会找不到合适的PV,会一直Pending。 9 resources: 10 requests: 11 storage: 6Gi 12 --- 13 apiVersion: v1 14 kind: Pod 15 metadata: 16 name: myapp-pv 17 namespace: default 18 spec: 19 containers: 20 - name: myapp 21 image: ikubernetes/myapp:v1 22 imagePullPolicy: IfNotPresent 23 ports: 24 - name: html 25 containerPort: 80 26 volumeMounts: 27 - name: nfs 28 mountPath: "/usr/share/nginx/html" 29 volumes: 30 - name: nfs 31 persistentVolumeClaim: 32 claimName: mypvc
应用:kubectl apply -f pod-pvc.yaml
1 查看pvc:kubectl get pvc 2 NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE 3 mypvc Bound pv004 10Gi RWO 4s 4 查看pv:kubectl get pv 5 NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE 6 pv001 2Gi RWO,ROX,RWX Retain Available 56m 7 pv002 5Gi RWO,ROX Retain Available 56m 8 pv003 3Gi ROX,RWX Retain Available 56m 9 pv004 10Gi RWO Retain Bound default/mypvc 56m 10 pv005 15Gi ROX Retain Available 56m 、
如此pvc就绑定在合适的pv上了。绑定的pv是pv004,说明pod的/usr/share/nginx/html挂载在nfs服务器/data/volumes/v4目录下。
4.查看pod:kubectl get pods -owide
1 NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES 2 myapp-pv 1/1 Running 0 24s 10.244.1.141 k8s-node2 <none> <none>
5.在nfs服务器上,找到/data/volumes/v4目录,写个测试文件:
1 vi /data/volumes/v4/index.html 2 <h1>Smbands</h1>
测试:访问podIP
1 curl 10.244.1.141 2 <h1>Smbands</h1>
所有评论(0)