这是K8S CSI系统体系结构
CSI是一个简短的(容器存储接口)。
CSI的目的是定义行业标准“容器存储接口”,以便存储供应商可以开发符合CSI标准并使其在多个容器布置系统中工作的插头。
CSI组件通常使用容器化部署,从而降低了环境依赖性。
资本级别的资源,持久的存储卷是由集群管理员或外部配置者创建的。
PV的生命周期独立于PV POD,PV保留了存储设备的详细信息。
回收策略
包括状态:
长时间的存储卷语句,名称空间级别是由用户或statefulset Controller创建的(基于PolumEakLaimTemplate)。
PVC类似于POD,POD消耗节点资源,PVC消耗PV资源。POD可以请求特定的资源(CPU和内存),PVC可以请求特定的存储量和访问模式(访问模式)的大小(访问模式)
包括状态:
StorageClass是一个集群级别的资源,是由集群管理员创建的。为创建PV的模板信息定义用于PV的动态创建。
记录了PV的相关安装信息,例如安装了哪个节点节点,该节点已安装。
创建一个,并根据其状态属性观察存储的安装和卸载操作。
CSINODE记录的信息(例如Nodeid,Drivername,拓扑信息等)。
当Node驱动程序注册表注册CSI插件到Kubelet时,它将创建(或更新)CSIDE对象以记录CSI插件的相关信息
扩展各种存储类型的管理功能,以实现第三方存储的各种操作功能与K8S存储系统的组合。
调用第三方存储的接口或命令,以提供数据量创建/删除,附加/分离,安装/umount的特定操作实现,可以将其视为第三 - 零件存储的代理。上一个分析组件中的数据量,附件/分离,安装/UMOUNT操作,所有呼叫量插件要完成。
根据源代码的位置,将其分为树间和开头
在K8S源代码中实现,使用K8释放和管理,并缓慢更新且灵活性差。
该代码独立于K8,由存储制造商实施。CSI和Flexvolume有两个实现。
CSI插件
外部插件
外部插件包括外部置换器,外部辅助器,外部换设备,外部 - 扣子照片等以及外部插件辅助CSI插件组件,以完成相关的操作。External插件负责手表PVC,体积计算,其他对象和其他对象以及其他对象以及其他对象以及其他对象。然后致电量插件以完成与存储相关的操作。
PV控制器负责PV和PVC的绑定和生命周期管理(例如创建/删除基础存储,创建/删除PV对象以及PV和PVC对象状态的更改)。
创建/删除基础存储,创建/删除PV对象,然后通过PV Controller完成音量插件(IN-TREE)。
AD ControllerAd cotrolllller附件/分离控制器的全名,它主要负责创建和删除体积量对象,以及用于存储设备的附件/分离操作的调用卷插件(将数据滚动安装到特定节点/从特定的节点节点/crand),然后更新node.status.volumesattach。
不同的音量插件的附件/分离操作逻辑不同。例如,使用通过外树卷插件的存储插件,然后将附加/分离操作修改为体积对象的状态,并且它不会真正将数据滚动挂载到节点上。//从节点上删除了安装座。实际节点存储和安装/抬起安装操作由Kubelet的音量管理器调用。
音量管理器主要是附件/分离的管理(与广告控制器相同,该组件由Kubelet控制参数以执行此操作),安装/UMOUNT和其他操作。
5.1.1及时
[1]用户创建PVC
[2] PV控制器手表创建PVC,找到合适的PV
[3,4]当您找不到正确的PV时,您将调用音量插件以创建音量并创建PV对象。在那之后
[5]用户创建了安装PVC的PODS
[6] Kube-Scheduler手表到创建POD,为其找到合适的节点调度
[7,8] POD调度完成后,POD语句的AD控制器/音量管理器的音量不执行附件操作。
[9]音量插件执行附件操作,将音量安装到POD所在的节点节点,并成为设备的设备
[10,11]附件操作完成后,音量管理器手表不执行音量的安装操作,该操作将调用用于安装操作的音量插件。
[12]音量插件执行安装操作,并在节点节点上通过步骤[9]获得的/dev/vdb设备安装到指定目录
5.1.2退出时间
[1]用户创建PVC
[2]将PV控制器手表创建到PVC,找到合适的PV来绑定它。当找不到合适的PV时,将更新PVC对象,添加它,然后让外部proviseer组件开始创建创建存储和PV对象的操作
[3]外部提供程序组件手表到PVC创建以确定宣传的值:volume.beta.kubernetes.io/storage-proviseer,也就是说,要确定它是否负责创建操作,然后致电CSI-Plugin Controllervercreatestore并创建PV对象
[4] PV控制器手表到PVC,找到正确的PV(在上一步中创建)并使用它绑定
[5]用户创建了安装PVC的PODS
[6] Kube-Scheduler手表到创建POD,为其找到合适的节点调度
[7,8] POD计划完成后,AD控制器/音量管理器手表不会从POD语句声明的卷中执行附件操作。它将致电CSi Attacher进行附件操作。实际上,它只是为了创建体积对象。
[9]外部辅助组件手表以新创建的体积对象的新创建,致电CSi-Plugin进行操作
[10] CSi-Plugin控制器对吊舱所在的节点节点进行安装卷的附件操作,并变成一个设备,例如/dev/vdb
[11,12]附件操作完成后,音量管理器手表不会执行POD声明的卷的安装操作,并且会拨打CSI-Mounter进行安装操作。
[13] CSI-mounter调用CSI-Plugin Nodeserver进行安装操作,并在节点节点上通过步骤(10)获得的/DEV/VDB设备安装到指定的目录
当将pod计划安排到主机时,创建空dir类型卷时,同一pod中的容器可以读取和写入emptydir中的同一文件。一旦此pod离开此主机,emptydir中的数据将是永久的删除。
因此,当前的空dir量主要用于临时空间,例如:
使用步骤如下:
首先,您需要在POD中声明名称
那么您可以在容器中挂在此卷中
测试:
创建上述配置文件后,您可以在主机上的目录中找到名称的新生成目录。
如果登录到由POD创建的容器,则还可以看到命名的目录。该目录与主机上的目录相同。
主机卷是主机上主机上的目录或文件,因此容器可以使用主机的高速文件系统进行存储。
缺点是,在K8S中,POD在每个节点节点上动态安排。存储在上一个节点上。
apiversion:应用程序/v1
类型:部署
元数据:
名称:test-dp
规格:
复制品:1
选择器:
MatchLabels:
应用:Test-DP
模板:
元数据:
标签:
应用:Test-DP
规格:
容器:
- 名称:nginx
图片:nginx:1.19.5
数量:
-mountpath:/var/www/html
名称:nginxdata
卷:
- 名称:nginxdata
主持人:
路径: /数据