对于有状态类型来说,数据存储是必然之需。

Kubernetes 支持丰富的存储卷类型,包括本地存储和网络存储系统中的诸多存储机制,甚至还支持 Secret ConfigMap这样的特殊存储资源

PV 是Kubernetes 集群的存储资源,而PVC则代表着资源的需求。创建PVC时对PV发起的使用申请,即为“绑定”

存储卷

临时存储卷

emptyDir 存储卷的声明周期与其所属的Pod对象相同

  1. volumes:
  2. - name: html
  3. emptyDir: {}

gitRepo存储卷

基于Git 的卷

  1. volumes:
  2. - name: html
  3. gitRepo:
  4. repository: http://xxxxx.git
  5. directory:
  6. revision: "master"

节点存储卷

hostPath 类型的存储卷是指将工作节点上某文件系统的目录或文件挂载与Pod中的一种存储卷,他可独立Pod资源声明周期

  1. volumes:
  2. - name: sock
  3. hostPath:
  4. path: /var/run/docker.sock

网络存储卷

网络存储包括:NAS、SAN 、NFS、iSCIS、FC 分布式存储:GlusterFS 、RBD 云厂商:对象存储、AzureDisk 等 以上具体配置根据参考厂商,分布式存储参考存储提供商

  1. volumes:
  2. - name: nfs
  3. nfs:
  4. server: 192.168.0.6
  5. path: /
  6. readOnly: false


downwardAPI存储卷

容器通过环境变量或downwardAPI访问yaml 文件信息

  1. # 环境变量
  2. env:
  3. - name: nfs
  4. valueFrom:
  5. resourceFieldRef:
  6. resource: requests.memory
  7. divisor: 1Mi
  8. # 挂载卷
  9. volumes:
  10. - name: nfs
  11. downwardAPI:
  12. items:
  13. - fielRef:
  14. fieldPath: metadata.namespace
  15. path: pod_namespace
  16. - resourceFielRef:
  17. containerName: volume-test-container
  18. resource: limits.cpu
  19. devisor: "1Mi"
  20. path: "cpu_limit"

PV 存储卷

  • Capacity;当前PV的容量
  • 访问模式

1)ReadWriteOnce 单个节单读写;RWO 2)ReadOnlyMany 可被多个节点同时只读 ;ROX 3)ReadWriteMany 可被多个节点读写挂载;RWX

  • 释放时处理机制

1)Retain 保持不动 2)Recycle 空间回收,删除存储卷目录下的文件 3)Delete 删除卷,仅部分云端存储系统支持

  • VolumeModel;卷模型用于指定卷可被作为文件系统还是裸格式的块设备;默认FileSystem
  • StorageClassName;当前PV所属的StorageClass (存储类) 名称
  • MountOptions;挂载选项组成的列表,如 Ro、Soft、Hard

存储卷对应的状态

  • Available ;可用状态的自有类型
  • Bound;已经绑定至某pvc
  • Released;绑定PVC已经删除,但资源没有被回收
  • Failed 因自动回收资源失败处于的故障状态
  1. apiVersion: v1
  2. kind: PersistentVolume
  3. metadata:
  4. labels:
  5. alicloud-pvname: d-uf644qvfo34g4jurz1ue
  6. name: d-uf644qvfo34g4jurz1ue
  7. spec:
  8. accessModes:
  9. - ReadWriteOnce
  10. capacity:
  11. storage: 40Gi
  12. claimRef:
  13. apiVersion: v1
  14. kind: PersistentVolumeClaim
  15. name: rabbitmq-pvc
  16. namespace: base
  17. csi:
  18. driver: diskplugin.csi.alibabacloud.com
  19. fsType: ext4
  20. volumeHandle: d-uf644qvfo34g4jurz1ue
  21. nodeAffinity:
  22. required:
  23. nodeSelectorTerms:
  24. - matchExpressions:
  25. - key: topology.diskplugin.csi.alibabacloud.com/zone
  26. operator: In
  27. values:
  28. - cn-shanghai-g
  29. persistentVolumeReclaimPolicy: Retain
  30. storageClassName: disk
  31. volumeMode: Filesystem
  32. status:
  33. phase: Bound

PVC 存储声明

PersistentVolumeClaim 是存储类型的资源,它通过申请占用某个PersistentVolume而创建。

  • AccessMode;当前PVC的访问模式
  • Resources;当前PVC存储卷需要占用的资源最小值
  • Selector;绑定时对PV应用的标签选择器或条件表达式
  • StorageClassName;所依赖的存储类名称
  • VolumeModel;卷模型,用于指定此卷可被用作文件系统还是裸格式的设备;默认FileSystem

PS:PVC 在绑定PV时不受命名空间影响,但是POD应该PVC受命名空间,则只能属于同一名称命名空间

  1. apiVersion: v1
  2. kind: PersistentVolumeClaim
  3. metadata:
  4. name: rabbitmq-pvc
  5. namespace: base
  6. spec:
  7. accessModes:
  8. - ReadWriteOnce
  9. resources:
  10. requests:
  11. storage: 40Gi
  12. selector:
  13. matchLabels:
  14. alicloud-pvname: d-uf644qvfo34g4jurz1ue
  15. storageClassName: disk
  16. volumeMode: Filesystem
  17. volumeName: d-uf644qvfo34g4jurz1ue
  18. status:
  19. accessModes:
  20. - ReadWriteOnce
  21. capacity:
  22. storage: 40Gi
  23. phase: Bound

存储类

存储类是Kubernetes 资源类型的一种,它是由管理员为管理PV之便而按需创建的列表(逻辑组)。

  • 存储类的好处之一便是支持PV的动态创建

主要由云厂商提供,存储类服务

  • provisioner 供给方:即提供了储存资源的存储系统
  • parameters 参数:存储类使用参数描述要关联到的存储卷
  • reclaimPolicy:为当前存储类动态创建PV指定回收策略
  • volumeBindingModel :定义如何为PVC完成供给和绑定
  • mountOptions:由当前类动态创建PV挂载选项列表
  1. allowVolumeExpansion: true
  2. apiVersion: storage.k8s.io/v1
  3. kind: StorageClass
  4. metadata:
  5. name: alicloud-disk-available
  6. parameters:
  7. type: available
  8. provisioner: diskplugin.csi.alibabacloud.com
  9. reclaimPolicy: Delete
  10. volumeBindingMode: Immediate