PV

  1. apiversion: v1
  2. kind: PersistenVolume
  3. metadata:
  4. name: jenkins-pv
  5. labels:
  6. env: devops
  7. spec:
  8. storageClassName: jenkins-storage
  9. accessMode:
  10. - ReadWriteOnce
  11. capacity:
  12. storage: 10Gi
  13. persistentVolumeReclaimPolicy: Recycle
  14. nfs:
  15. path: /data/k8s
  16. server: 192.168.50.104

参数说明:
(1)accessMode:访问模式,有ReadWriteOnce,ReadOnlyMany,ReadWriteMany。其中:

  • ReadWriteOnce:表示具有读写权限,但是只能被一个node挂载一次
  • ReadOnlyMany:表示具有只读权限,可以被多个node多次挂载
  • ReadWriteMany:表示具有读写权限,可以被多个node多次挂载

(2)capacity:持久卷资源和容量的描述,存储大小是唯一可设置或请求的资源。
(3)persistentVolumeReclaimPolicy: 回收策略,也就是释放持久化卷时的策略,其有以下几种:

  • Retain:保留数据,如果要清理需要手动清理数据,默认的策略;
  • Delete:删除,将从Kubernetes中删除PV对象,以及外部基础设施中相关的存储资产,比如AWS EBS, GCE PD, Azure Disk, 或Cinder volume;
  • Recycle:回收,清楚PV中的所有数据,相当于执行rm -rf /pv-volume/*;

    (4)PV 跟 PVC 之间的绑定通过 storageClassName 进行绑定

PVC

  1. apiversion: app/v1
  2. kind: PersistenVolumeClaim
  3. metadata:
  4. name: jenkins-pvc
  5. namespace: devops
  6. labels:
  7. env: devops
  8. spec:
  9. storageClassName: jenkins-storage
  10. accessModes:
  11. ReadWriteOnce
  12. resources:
  13. requests:
  14. storage: 3Gi

注意 PVC 需要指定 namespace

操作

  1. # 查看 pv
  2. kubectl get pv
  3. # 查看 pvc
  4. kubectl get pvc
  5. # 应用
  6. kubectl apply -f pv.yaml
  7. kubectl apply -f pvc.yaml
  8. # 删除
  9. kubectl delete -f pv.yaml

注意

(1)、如果我们的PVC需求的容量大于PV的可用容量,绑定是不会成功的;
(2)、如果我们的PVC需求的容量小于PV的可用容量,绑定的容量是PV的可用容量;