对于有状态类型来说,数据存储是必然之需。
Kubernetes 支持丰富的存储卷类型,包括本地存储和网络存储系统中的诸多存储机制,甚至还支持
Secret
ConfigMap
这样的特殊存储资源PV 是Kubernetes 集群的存储资源,而PVC则代表着资源的需求。创建PVC时对PV发起的使用申请,即为“绑定”
存储卷
临时存储卷
emptyDir 存储卷的声明周期与其所属的Pod对象相同
volumes:
- name: html
emptyDir: {}
gitRepo存储卷
基于Git 的卷
volumes:
- name: html
gitRepo:
repository: http://xxxxx.git
directory:
revision: "master"
节点存储卷
hostPath 类型的存储卷是指将工作节点上某文件系统的目录或文件挂载与Pod中的一种存储卷,他可独立Pod资源声明周期
volumes:
- name: sock
hostPath:
path: /var/run/docker.sock
网络存储卷
网络存储包括:NAS、SAN 、NFS、iSCIS、FC 分布式存储:GlusterFS 、RBD 云厂商:对象存储、AzureDisk 等 以上具体配置根据参考厂商,分布式存储参考存储提供商
volumes:
- name: nfs
nfs:
server: 192.168.0.6
path: /
readOnly: false
downwardAPI存储卷
容器通过环境变量或downwardAPI访问yaml 文件信息
# 环境变量
env:
- name: nfs
valueFrom:
resourceFieldRef:
resource: requests.memory
divisor: 1Mi
# 挂载卷
volumes:
- name: nfs
downwardAPI:
items:
- fielRef:
fieldPath: metadata.namespace
path: pod_namespace
- resourceFielRef:
containerName: volume-test-container
resource: limits.cpu
devisor: "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: v1
kind: PersistentVolume
metadata:
labels:
alicloud-pvname: d-uf644qvfo34g4jurz1ue
name: d-uf644qvfo34g4jurz1ue
spec:
accessModes:
- ReadWriteOnce
capacity:
storage: 40Gi
claimRef:
apiVersion: v1
kind: PersistentVolumeClaim
name: rabbitmq-pvc
namespace: base
csi:
driver: diskplugin.csi.alibabacloud.com
fsType: ext4
volumeHandle: d-uf644qvfo34g4jurz1ue
nodeAffinity:
required:
nodeSelectorTerms:
- matchExpressions:
- key: topology.diskplugin.csi.alibabacloud.com/zone
operator: In
values:
- cn-shanghai-g
persistentVolumeReclaimPolicy: Retain
storageClassName: disk
volumeMode: Filesystem
status:
phase: Bound
PVC 存储声明
PersistentVolumeClaim 是存储类型的资源,它通过申请占用某个PersistentVolume而创建。
- AccessMode;当前PVC的访问模式
- Resources;当前PVC存储卷需要占用的资源最小值
- Selector;绑定时对PV应用的标签选择器或条件表达式
- StorageClassName;所依赖的存储类名称
- VolumeModel;卷模型,用于指定此卷可被用作文件系统还是裸格式的设备;默认FileSystem
PS:PVC 在绑定PV时不受命名空间影响,但是POD应该PVC受命名空间,则只能属于同一名称命名空间
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: rabbitmq-pvc
namespace: base
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 40Gi
selector:
matchLabels:
alicloud-pvname: d-uf644qvfo34g4jurz1ue
storageClassName: disk
volumeMode: Filesystem
volumeName: d-uf644qvfo34g4jurz1ue
status:
accessModes:
- ReadWriteOnce
capacity:
storage: 40Gi
phase: Bound
存储类
存储类是Kubernetes 资源类型的一种,它是由管理员为管理PV之便而按需创建的列表(逻辑组)。
- 存储类的好处之一便是支持PV的动态创建
主要由云厂商提供,存储类服务
- provisioner 供给方:即提供了储存资源的存储系统
- parameters 参数:存储类使用参数描述要关联到的存储卷
- reclaimPolicy:为当前存储类动态创建PV指定回收策略
- volumeBindingModel :定义如何为PVC完成供给和绑定
- mountOptions:由当前类动态创建PV挂载选项列表
allowVolumeExpansion: true
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: alicloud-disk-available
parameters:
type: available
provisioner: diskplugin.csi.alibabacloud.com
reclaimPolicy: Delete
volumeBindingMode: Immediate