k8s volume简单总结 —— 筑梦之路

Kubernetes目前支持的Volume类型包括Kubernetes内部资源对象类型开源共享存储类型存储厂商提供的硬件存储设备公有云提供的存储等。

 

将Kubernetes特定类型的资源对象映射为目录或文件,包括以下类型的资源对象:

类型 描述
ConfigMap 应用配置
Secret 加密数据
DownwardAPI Pod或Container的元数据信息
ServiceAccountToken Service Account中的token数据
Projected Volume 一种特殊的存储卷类型,用于将一个或多个上述资源对象一次性挂载到容器内的同一个目录下

Kubernetes管理的宿主机本地存储类型如下:

类型 描述
EmptyDir 临时存储
HostPath 宿主机目录

持久化存储(PV))和网络共享存储类型如下:

类型 描述
CephFS 一种开源共享存储系统
Cinder 一种开源共享存储系统
CSI 容器存储接口(由存储提供商提供驱动程序和存储管理程序)
FC(Fibre Channel) 光纤存储设备
FlexVolume 一种基于插件式驱动的存储
Flocker 一种基于插件式驱动的存储
Flocker 一种开源共享存储系统
Glusterfs 一种开源共享存储系统
iSCSI iSCSI存储设备
Local 本地持久化存储
NFS 网络文件系统
PersistentVolumeClaim 简称PVC,持久化存储的申请空间
Portworx Volumes Portworx提供的存储服务
Quobyte Volumes Quobyte提供的存储服务
RBD(Ceph Block Device) Ceph块存储

存储厂商提供的存储卷类型如下:

类型 描述
ScalelO Volumes DellEMC的存储设备
StorageOS StorageOS提供的存储服务
VsphereVolume VMWare提供的存储系统

公有云提供的存储卷类型如下:

类型 描述
AWSElasticBlockStore AWS公有云提供的Elastic Block Store
AzureDisk Azure公有云提供的Disk
AzureFile Azure公有云提供的File
GCEPersistentDisk GCE公有云提供的Persistent Disk

PV作为对存储资源的定义,主要涉及存储能力、访问模式、存储类型、回收策略、后端存储类型等关键信息的设置。

PV示例:5GiB存储空间,存储卷模式为 Filesystem,访问模式为ReadWriteOnce,存储类型为slow(要求在系统中己存在名称为“slow”的StorageClass),回收策略为Recycle,并且后端存储类型为nfs (设置了 NFS Server 的IP地址和路径),同时设置了挂载选项 (mountOptions)。

apiVersion: v1kind: PersistentVolumemetadata:    name: pv1spec:    capacity:        Storage: 5Gi    volumeMode: Filesystem     accessModes:        - ReadwriteOnce    persistentVolumeReclaimPolicy: Recycle    storageClassName: slow     mountoptions:        - hard        - nfsvers=4.1    nfs:        path: /tmp        server: 172.17.0.2

PVC作为用户对存储资源的需求申请,主要涉及存储空间请求、访问模式、 PV选择条件和存储类别等信息的设置。

示例:申请8GiB存储空间,访问模式为ReadWriteOnce,PV选择条件为包含release=stable标签并且包含条件为environment In[dev]的标签,存储类别为“slow”(要求在系统中已存在名为slow的StorageClass):​​​​​​​

apiVersion: v1kind: PersistentVolumeclaim metadata:    name: myclaim spec:    accessModes:        - ReadWriteOnce    volumeMode: Filesystem    resources:        requests:            storage: 8Gi    storageClassName: slow     selector:        matchLabels:            release: "stable"        matchExpressions:            - {
    
       key: environment, operator: In, values: [dev]}

StorageClass作为对存储资源的抽象定义,对用户设置的PVC申请屏蔽后端存储的细节,一方面减少了用户对于存储资源细节的关注,另一方面减轻了管理员手工管理PV的工作,由系统自动完成PV的创建和绑定,实现动态的资源供应。基于StorageClass的动态资源供应模式将逐步成为云平台的标准存储管理模式。

示例:定义了一个StorageClass,名称为standard, provisioneraws-ebs, typegp2,回收策略为Retain​​​​​​​

apiVersion: storage.k8s.io/v1 kind: StorageClass metadata:    name: standardprovisioner: kubernetes.io/aws-ebs parameters:    type: gp2reclaimPolicy: RetainallowVolumeExpansion: true mountOptions:    - debugvolumeBindingMode: Immediate

Kubernetes从1.9版本开始引入容器存储接口 Container Storage Interface (CSI)机制,用于在Kubernetes和外部存储系统之间建立一套标准的存储管理接口,通过该接口为容器提供存储服务。

CSI的核心组件和部署架构如下:

CSI Controller:主要功能是 提供存储服务视角对存储资源和存储卷进行管理和操作。在Kubernetes中建议将其部署为单实例Pod,可以使用StatefulSet或 Deployment控制器进行部署,设置副本数量为1,保证一种存储插件只运行一个控制器实例。

CSI Node:主要功能是对主机(Node )上的Volume进行管理和操作,在 Kubernetes中建议将其部署为DaemonSet,在需要提供存储资源的各个Node上都运行一个Pod

猜你喜欢

转载自blog.csdn.net/qq_34777982/article/details/131301148