对于有状态类型来说,数据存储是必然之需。
Kubernetes 支持丰富的存储卷类型,包括本地存储和网络存储系统中的诸多存储机制,甚至还支持
SecretConfigMap这样的特殊存储资源PV 是Kubernetes 集群的存储资源,而PVC则代表着资源的需求。创建PVC时对PV发起的使用申请,即为“绑定”
存储卷
临时存储卷
emptyDir 存储卷的声明周期与其所属的Pod对象相同
volumes:- name: htmlemptyDir: {}
gitRepo存储卷
基于Git 的卷
volumes:- name: htmlgitRepo:repository: http://xxxxx.gitdirectory:revision: "master"
节点存储卷
hostPath 类型的存储卷是指将工作节点上某文件系统的目录或文件挂载与Pod中的一种存储卷,他可独立Pod资源声明周期
volumes:- name: sockhostPath:path: /var/run/docker.sock
网络存储卷
网络存储包括:NAS、SAN 、NFS、iSCIS、FC 分布式存储:GlusterFS 、RBD 云厂商:对象存储、AzureDisk 等 以上具体配置根据参考厂商,分布式存储参考存储提供商
volumes:- name: nfsnfs:server: 192.168.0.6path: /readOnly: false
downwardAPI存储卷
容器通过环境变量或downwardAPI访问yaml 文件信息
# 环境变量env:- name: nfsvalueFrom:resourceFieldRef:resource: requests.memorydivisor: 1Mi# 挂载卷volumes:- name: nfsdownwardAPI:items:- fielRef:fieldPath: metadata.namespacepath: pod_namespace- resourceFielRef:containerName: volume-test-containerresource: limits.cpudevisor: "1Mi"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 因自动回收资源失败处于的故障状态
apiVersion: v1kind: PersistentVolumemetadata:labels:alicloud-pvname: d-uf644qvfo34g4jurz1uename: d-uf644qvfo34g4jurz1uespec:accessModes:- ReadWriteOncecapacity:storage: 40GiclaimRef:apiVersion: v1kind: PersistentVolumeClaimname: rabbitmq-pvcnamespace: basecsi:driver: diskplugin.csi.alibabacloud.comfsType: ext4volumeHandle: d-uf644qvfo34g4jurz1uenodeAffinity:required:nodeSelectorTerms:- matchExpressions:- key: topology.diskplugin.csi.alibabacloud.com/zoneoperator: Invalues:- cn-shanghai-gpersistentVolumeReclaimPolicy: RetainstorageClassName: diskvolumeMode: Filesystemstatus:phase: Bound
PVC 存储声明
PersistentVolumeClaim 是存储类型的资源,它通过申请占用某个PersistentVolume而创建。
- AccessMode;当前PVC的访问模式
- Resources;当前PVC存储卷需要占用的资源最小值
- Selector;绑定时对PV应用的标签选择器或条件表达式
- StorageClassName;所依赖的存储类名称
- VolumeModel;卷模型,用于指定此卷可被用作文件系统还是裸格式的设备;默认FileSystem
PS:PVC 在绑定PV时不受命名空间影响,但是POD应该PVC受命名空间,则只能属于同一名称命名空间
apiVersion: v1kind: PersistentVolumeClaimmetadata:name: rabbitmq-pvcnamespace: basespec:accessModes:- ReadWriteOnceresources:requests:storage: 40Giselector:matchLabels:alicloud-pvname: d-uf644qvfo34g4jurz1uestorageClassName: diskvolumeMode: FilesystemvolumeName: d-uf644qvfo34g4jurz1uestatus:accessModes:- ReadWriteOncecapacity:storage: 40Giphase: Bound
存储类
存储类是Kubernetes 资源类型的一种,它是由管理员为管理PV之便而按需创建的列表(逻辑组)。
- 存储类的好处之一便是支持PV的动态创建
主要由云厂商提供,存储类服务
- provisioner 供给方:即提供了储存资源的存储系统
- parameters 参数:存储类使用参数描述要关联到的存储卷
- reclaimPolicy:为当前存储类动态创建PV指定回收策略
- volumeBindingModel :定义如何为PVC完成供给和绑定
- mountOptions:由当前类动态创建PV挂载选项列表
allowVolumeExpansion: trueapiVersion: storage.k8s.io/v1kind: StorageClassmetadata:name: alicloud-disk-availableparameters:type: availableprovisioner: diskplugin.csi.alibabacloud.comreclaimPolicy: DeletevolumeBindingMode: Immediate
