01 引言
至此,volume的相关知识已经讲解完了,下面是相关文章的详情总结:
- 《k8s教程(Volume篇)-k8s存储机制概述》
- 《k8s教程(Volume篇)-PV详解》
- 《k8s教程(Volume篇)-PVC详解》
- 《k8s教程(Volume篇)-StorageClass详解》
- 《k8s教程(Volume篇)-CSI存储机制详解》
02 内容整理
先贴上整理的脑图:
2.1 概念
容器内部存储的生命周期是短暂的,会随着容器环境的销毁而销毁,具有不稳定性。如果多个容器希望共享同一份存储,则仅仅依赖容器本身是很难实现的。在Kubernetes
系统中,将对容器应用所需的存储资源抽象为存储卷 (Volume
)概念 来解决这些问题。我们可以将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 | 一种开源共享存储系统 |
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 |
2.2 PV
详情参考: 《k8s教程(Volume篇)-PV详解》
PV作为对存储资源的定义,主要涉及存储能力、访问模式、存储类型、回收策略、后端存储类型等关键信息的设置。
PV示例:5GiB
存储空间,存储卷模式为 Filesystem
,访问模式为ReadWriteOnce
,存储类型为slow
(要求在系统中己存在名称为“slow
”的StorageClass
),回收策略为Recycle
,并且后端存储类型为nfs
(设置了 NFS Server
的IP
地址和路径),同时设置了挂载选项 (mountOptions
)。
apiVersion: v1 kind: PersistentVolume metadata: name: pv1 spec: capacity: Storage: 5Gi volumeMode: Filesystem accessModes: - ReadwriteOnce persistentVolumeReclaimPolicy: Recycle storageClassName: slow mountoptions: - hard - nfsvers=4.1 nfs: path: /tmp server: 172.17.0.2
2.3 PVC
详情参考: 《k8s教程(Volume篇)-PVC详解》
PVC
作为用户对存储资源的需求申请,主要涉及存储空间请求、访问模式、 PV选择条件和存储类别等信息的设置。
示例:申请8GiB存储空间,访问模式为ReadWriteOnce,PV选择条件为包含release=stable标签并且包含条件为environment In[dev]的标签,存储类别为“slow”(要求在系统中已存在名为slow的StorageClass):
apiVersion: v1 kind: 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]}
2.4 StorageClass
StorageClass作为对存储资源的抽象定义,对用户设置的PVC
申请屏蔽后端存储的细节,一方面减少了用户对于存储资源细节的关注,另一方面减轻了管理员手工管理PV的工作,由系统自动完成PV的创建和绑定,实现动态的资源供应。基于StorageClass的动态资源供应模式将逐步成为云平台的标准存储管理模式。
示例:定义了一个StorageClass
,名称为standard
, provisioner
为aws-ebs
, type
为gp2
,回收策略为Retain
apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: standard provisioner: kubernetes.io/aws-ebs parameters: type: gp2 reclaimPolicy: Retain allowVolumeExpansion: true mountOptions: - debug volumeBindingMode: Immediate
2.5 CSI
Kubernetes从1.9版本开始引入容器存储接口 Container Storage Interface (CSI)机制,用于在Kubernetes和外部存储系统之间建立一套标准的存储管理接口,通过该接口为容器提供存储服务。
CSI的核心组件和部署架构如下:
CSI Controller:主要功能是 提供存储服务视角对存储资源和存储卷进行管理和操作。在Kubernetes中建议将其部署为单实例Pod
,可以使用StatefulSet
或 Deployment
控制器进行部署,设置副本数量为1,保证一种存储插件只运行一个控制器实例。
CSI Node:主要功能是对主机(Node )上的Volume进行管理和操作,在 Kubernetes中建议将其部署为DaemonSet,在需要提供存储资源的各个Node上都运行一个Pod。
03 文末
本文主要是对k8s的volume做一个简单的笔记整理,便于后续的回顾,谢谢大家的阅读,本文完!