k8s教程(Volume篇)-总结

01 引言

至此,volume的相关知识已经讲解完了,下面是相关文章的详情总结:

02 内容整理

先贴上整理的脑图:
在这里插入图片描述

2.1 概念

详情参考: 《k8s教程(Volume篇)-k8s存储机制概述》

容器内部存储的生命周期是短暂的,会随着容器环境的销毁而销毁,具有不稳定性。如果多个容器希望共享同一份存储,则仅仅依赖容器本身是很难实现的。在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 ServerIP地址和路径),同时设置了挂载选项 (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

详情参考:《k8s教程(Volume篇)-StorageClass详解》

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

示例:定义了一个StorageClass,名称为standardprovisioneraws-ebstypegp2,回收策略为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

详情参考: 《k8s教程(Volume篇)-CSI存储机制详解》

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

CSI的核心组件和部署架构如下:
在这里插入图片描述

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

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

03 文末

本文主要是对k8s的volume做一个简单的笔记整理,便于后续的回顾,谢谢大家的阅读,本文完!

猜你喜欢

转载自blog.csdn.net/qq_20042935/article/details/130965038