csi接口(树莓派csi接口定义)

导读:在《一文了解K8s持久化存储过程》一文中,我们重点介绍了K8s的内部存储过程以及PV、PVC、StorageClass、Kubelet等之间的调用关系。接

csi接口(树莓派csi接口定义)插图

导读:在《一文了解K8s持久化存储过程》一文中,我们重点介绍了K8s的内部存储过程以及PV、PVC、StorageClass、Kubelet等之间的调用关系。接下来,本文将重点介绍CSI(容器存储接口)容器存储接口,并探讨CSI是什么及其内部工作原理。

背景

K8s原生支持一些存储类型的PV,如iSCSI、NFS、CephFS等。(详见链接),而这些树内存储代码放在Kubernetes代码仓库中。这里的问题是K8s代码与三个存储供应商的代码紧密耦合:

更改 in-tree 类型的存储代码,用户必须更新 K8s 组件,成本较高in-tree 存储代码中的 bug 会引发 K8s 组件不稳定K8s 社区需要负责维护及测试 in-tree 类型的存储功能in-tree 存储插件享有与 K8s 核心组件同等的特权,存在安全隐患三方存储开发者必须遵循 K8s 社区的规则开发 in-tree 类型存储代码

CSI容器存储接口标准的出现解决了上述问题,将三方存储代码与K8s代码解耦,使得三方存储厂商的R&D人员只需要实现CSI接口(无需关注容器平台是K8s还是Swarm等。).

CSI 核心流程介绍

在详细介绍CSI组件及其接口之前,我们先介绍一下K8s中的CSI存储过程。“了解K8s持久存储过程”一文介绍了K8s中的Pod在挂载存储卷时必须经历三个阶段:配置/删除、附加/分离和挂载/卸载。这里用图文并茂的方式说明了这三个阶段K8s使用CSI的过程。

1.调配卷

csi接口(树莓派csi接口定义)插图(1)

1.集群管理员创建一个StorageClass资源,其中包含CSI插件名称(provisioner:Pangu . CSI . Alibaba cloud.com)和StorageClass的必要参数(parameters: type=cloud_ssd)。Sc.yaml文件如下:

csi接口(树莓派csi接口定义)插图(2)

2.用户创建PersistentVolumeClaim资源,PVC指定存储大小和StorageClass(如上)。pvc.yaml文件如下所示:

csi接口(树莓派csi接口定义)插图(3)

3.PersistentVolumeController观察到集群中新创建的PVC没有匹配的PV,并且其存储类型是树外的。所以注释PVC:volume.beta.kubernetes.io/storage-provisioner =[out-of-tree CSI插件名](本例中provisioner:Pangu . CSI . Alibaba cloud . com)。

4.四号。外部Provisioner组件观察到PVC的注释包含& # 34;volume.beta.kubernetes.io/storage-provisioner"和它的价值本身,所以创造过程开始了。

获取相关 StorageClass 资源并从中获取参数(本例中 parameters 为 type=cloud_ssd),用于后面 CSI 函数调用。通过 unix domain socket 调用外部 CSI 插件的CreateVolume 函数。

5.外部CSI插件成功返回后,磁盘创建就完成了。此时,外部Provisioner组件将在集群中创建一个PersistentVolume资源。

6.音量控制器将PV绑定到PVC。

csi接口(树莓派csi接口定义)插图(4)

2.附加卷

csi接口(树莓派csi接口定义)插图(5)

1.ad控制器(AttachDetachController)观察到使用CSI类型PV的Pod被调度到某个节点,然后AD控制器会调用内部in-tree CSI插件(csiAttacher)的Attach函数。

2.内部树内CSI插件(csiAttacher)将在集群中创建一个卷附件对象。

3.外部附加器观察VolumeAttachment对象,并调用外部CSI插件的ControllerPublish函数将卷附加到相应的节点。CSI插件成功安装后,外部附加器将更新。状态。将相关VolumeAttachment对象的Attached设置为true。

csi接口(树莓派csi接口定义)插图(6)

4.AD控制器的树内CSI插件(csiAttacher)观察到。状态。VolumeAttachment对象的Attached设置为true,因此它更新AD控制器的内部状态(ActualStateOfWorld ),该状态将显示在。状态。附加到节点资源的卷。

csi接口(树莓派csi接口定义)插图(7)

3.安装卷

csi接口(树莓派csi接口定义)插图(8)

1.1号。卷管理器(Kubelet组件)观察到一个具有CSI类型PV的新Pod被分派到该节点,因此它调用内部树内CSI插件(csiAttacher)的WaitForAttach函数。

2.内部树内CSI插件(csiAttacher)等待状态。状态。集群中的卷附件对象的Attached将变为true。

3.in-tree CSI插件(csiAttacher)调用MountDevice函数,通过unix域socket内部调用外部CSI插件的NodeStageVolume函数;之后,插件(csiAttacher)调用内部in-tree CSI插件(csiMountMgr)的SetUp函数,该函数通过unix域socket内部调用外部CSI插件的NodePublishVolume函数。

4.卸载卷

csi接口(树莓派csi接口定义)插图(9)

1.用户删除相关的Pod。

2.2号。卷管理器(Kubelet组件)观察到包含CSI存储卷的Pod被删除,于是调用内部树内CSI插件(csiMountMgr)的TearDown函数,该函数通过unix域socket内部调用外部CSI插件的NodeUnpublishVolume函数。

3.三号。卷管理器(Kubelet组件)调用内部in-tree CSI插件(csiAttacher)的UnmountDevice函数,该函数通过unix域套接字在内部调用外部CSI插件的NodeUnpublishVolume函数。

5.分离卷

csi接口(树莓派csi接口定义)插图(10)

1.当1。AD控制器观察到包含CSI存储卷的Pod被删除,它将调用内部树内CSI插件(csiAttacher)的分离函数。

2.csiAttacher将删除群集中相关的VolumeAttachment对象(但由于finalizer的存在,va对象不会立即被删除)。

3.三号。外部附加器观察到集群中VolumeAttachment对象的DeletionTimestamp不是空,于是调用外部CSI插件的ControllerUnpublish函数从相应的节点中删除该卷。CSI插件成功移除后,外部附加器将移除相关VolumeAttachment对象的finalizer字段,然后VolumeAttachment对象将被完全删除。

4.AD控制器内部in-tree中的csiAttacher观察到VolumeAttachment对象已被删除,因此更新AD控制器的内部状态;同时,AD控制器更新节点资源。目前,上没有相关的附件信息。状态。附加到节点资源的卷。

6.删除卷

csi接口(树莓派csi接口定义)插图(11)

1.用户删除相关的PVC。

2.2号。外部供应器组件观察PVC删除事件,并根据PVC回收策略执行不同的操作:

Delete:调用外部 CSI 插件的DeleteVolume 函数以删除卷;一旦卷成功删除,Provisioner会删除集群中对应 PV 对象。Retain:Provisioner不执行卷删除操作。CSI Sidecar 组件介绍

为了使K8s适应CSI标准,社区将K8s相关的存储过程逻辑放在CSI Sidecar组件中。

1.节点驱动程序注册器

1)功能

Node-Driver-Registrar组件会将外部CSI插件注册到Kubelet,这样Kubelet就可以通过特定的Unix域套接字调用外部CSI插件函数(Kubelet会调用外部CSI插件的函数如NodeGetInfo、NodeStageVolume、NodePublishVolume、NodeGetVolumeStats等。).

2)原则

节点-驱动程序-注册器组件通过Kubelet外部插件注册机制进行注册。成功注册后:

Kubelet为本节点 Node 资源打 annotation:Kubelet调用外部 CSI 插件的NodeGetInfo 函数,其返回值 [nodeID]、[driverName] 将作为值用于 "csi.volume.kubernetes.io/nodeid" 键。Kubelet更新 Node Label:将NodeGetInfo 函数返回的 [AccessibleTopology] 值用于节点的 Label。Kubelet更新 Node Status:将NodeGetInfo 函数返回的 maxAttachLimit(节点最大可挂载卷数量)更新到 Node 资源的 Status.Allocatable:attachable-volumes-csi-[driverName]=[maxAttachLimit]。

csi接口(树莓派csi接口定义)插图(12)

Kubelet更新 CSINode 资源(没有则创建):将 [driverName]、[nodeID]、[maxAttachLimit]、[AccessibleTopology] 更新到 Spec 中(拓扑仅保留 Key 值)。

2.外部供应方

1)功能

创建/删除实际存储卷和代表存储卷的PV资源。

2)原则

外部置备程序需要在启动时指定参数-Provisioner,该参数指定置备程序名称,该名称对应于StorageClass中的置备程序字段。

外部置备程序将在集群启动后监视集群中的PVC和PV资源。

对于集群中的PVC资源:

判断 PVC 是否需要动态创建存储卷,标准如下:PVC 的 annotation 中是否包含 "volume.beta.kubernetes.io/storage-provisioner" 键(由卷控制器创建),并且其值是否与 Provisioner 名称相等。PVC 对应 StorageClass 的 VolumeBindingMode 字段若为 WaitForFirstConsumer,则 PVC 的 annotation 中必须包含 "volume.kubernetes.io/selected-node" 键(详见调度器如何处理 WaitForFirstConsumer),且其值不为空;若为 Immediate 则表示需要 Provisioner 立即提供动态存储卷。通过特定的 Unix Domain Socket 调用外部 CSI 插件的 CreateVolume 函数。创建 PV 资源,PV 名称为 [Provisioner 指定的 PV 前缀] - [PVC uuid]。

对于集群中的光伏资源:

判断 PV 是否需要删除,标准如下:判断其 .Status.Phase 是否为 Release。判断其 .Spec.PersistentVolumeReclaimPolicy 是否为 Delete。判断其是否包含 annotation(pv.kubernetes.io/provisioned-by),且其值是否为自己。通过特定的 Unix Domain Socket 调用外部 CSI 插件的 DeleteVolume 接口。删除集群中的 PV 资源。

3.外部附件

1)功能

安装/删除存储卷。

2)原则

外部连接将始终监视集群中的卷连接资源和持久卷资源。

对于卷附件资源:

从 VolumeAttachment 资源中获得 PV 的所有信息,如 volume ID、node ID、挂载 Secret 等。判断 VolumeAttachment 的 DeletionTimestamp 字段是否为空来判断其为卷挂接或卷摘除:若为卷挂接则通过特定的 Unix Domain Socket 调用外部 CSI 插件的ControllerPublishVolume 接口;若为卷摘除则通过特定的 Unix Domain Socket 调用外部 CSI 插件的ControllerUnpublishVolume 接口。

对于持久卷资源:

在挂接时为相关 PV 打上 Finalizer:external-attacher/[driver 名称]。当 PV 处于删除状态时(DeletionTimestamp 非空),删除 Finalizer:external-attacher/[driver 名称]。

4.外部尺寸调整器

1)功能

扩展存储卷。

2)原则

External-Resizer在内部监视集群中的PersistentVolumeClaim资源。

对于PersistentVolumeClaim资源:

判断 PersistentVolumeClaim 资源是否需要扩容:PVC 状态需要是 Bound 且 .Status.Capacity 与 .Spec.Resources.Requests 不等。更新 PVC 的 .Status.Conditions,表明此时处于 Resizing 状态。通过特定的 Unix Domain Socket 调用外部 CSI 插件的 ControllerExpandVolume 接口。更新 PV 的 .Spec.Capacity。若 CSI 支持文件系统在线扩容,ControllerExpandVolume 接口返回值中 NodeExpansionRequired 字段为 true,External-Resizer更新 PVC 的 .Status.Conditions 为 FileSystemResizePending 状态;若不支持则扩容成功,External-Resizer更新 PVC 的 .Status.Conditions 为空,且更新 PVC 的 .Status.Capacity。

管理器(kubelet组件)观察到存储卷需要在线扩展,于是通过特定的Unix域套接字调用外部CSI插件的NodeExpandVolume接口来扩展文件系统。

5.活性探针

1)功能

检查CSI插件是否正常。

2)原则

通过对外公开一个/healthz的HTTP端口来服务kubelet的Probe探针,内部就是通过特定的Unix域套接字来调用外部CSI插件的探针接口。

CSI 接口介绍

三家存储厂商需要实现CSI插件的三个接口:IdentityServer、ControllerServer和NodeServer。

1.身份服务器

IdentityServer主要用于认证CSI插件的身份信息。

//Identity Server是身份服务的服务器API。type Identity Server Interface {//获取CSI插件的信息,如名称、版本号GetPluginInfo(context。Context,* GetPluginInfoRequest)(* GetPluginInfoResponse,error)//获取CSI插件提供的能力,比如是否提供ControllerService能力GetPluginCapabilities(context.context,* GetPluginCapabilities Request)(* GetPluginCapabilities Response,error)//获取CSI插件健康探测(context . context,* probe request) (* probe response,error)} 2。控制器服务器

服务器主要负责创建/删除、装载/移除存储卷和快照。

//控制器服务器是控制器服务的服务器API,类型控制器服务器接口{//创建存储卷CreateVolume(context。Context,* CreateVolumeRequest)(* CreateVolumeResponse,Error) //删除存储卷删除卷(context.context,* deleteVolumeRequest)(* deleteVolumeResponse,Error) //将存储卷挂载到特定的节点ControllerPublishVolume(context,* ControllerPublishVolumeRequest)(* ControllerPublishVolumeResponse,Error) //从特定的节点删除存储卷ControllerUnpublishVolume(context,* ControllerUnpublishVolumeRequest)(* controllerumresponse,Error)//验证存储卷的能力Context,* listvolumesRequest)(* listvolumesResponse,Error) //获取可用存储资源池之间的大小空Get capacity(context . context,* getCapacity Request)(* getCapacity Response,Error)//获取ControllerServer支持的功能点,比如快照功能ControllerGetCapabilities(context . context,* ControllerGetCapabilities Request)(* controllergetcapacities Response,Error)//创建快照创建快照(context。Context,* CreateSnapShotRequest)(* CreateSnapShotResponse,Error) //删除快照删除快照(context.context,* DeleteSnapShotRequest)(* DeleteSnapShotResponse,Error) //获取所有快照信息列表快照(context.context,* listsnapshotsrequest)(* listsnapshotsresponse,Error)//扩展存储卷ControllerExpandVolume(context . context,* ControllerExpandVolumeRequest)(* ControllerExpandVolumeResponse,error)} 3 .节点服务器

NodeServer主要负责装载/卸载存储卷。

//nodeserver是nodeservice.type nodeserver接口的服务器API {//格式化并挂载存储卷到临时全局目录nodestageVolume(context . context,* nodestageVolumeRequest)(* nodestageVolume response,error)//从临时全局目录卸载存储卷,nodeunstageVolume (context,* nodestageVolumeRequest)(* node unstagevolumeresponse,error)//将存储卷从临时目录bind-mount移动到目标目录NodePublishVolumeRequest,* nodepublisvolumerequest)(* nodeplish error)//获取存储卷nodegetVolumeStats的容量信息(context.context,* NodeGetVolumeStatsRequest)(* NodeGetVolumeStatsResponse,error)//存储卷扩展NodeXpandVolume(context . context,* NodeXpandVolumeRequest)(* NodeXpandVolumeResponse,error)//获取NodeServer支持的功能点,如是否支持获取存储卷容量信息NodeGetCapabilities (context,* NodeGetCapabilities Request)(* NodeGetCapabilities Response,error)//获取CSI节点信息,如支持的最大卷数nodegettegite Context,* NodeGinforQuest)(* NodeGinforResponse,error)} K8s CSI API对象K8s支持CSI标准,包括以下API对象:

CSINodeCSIDriverVolumeAttachment

1.CSINode

API version:storage.k8s.io/ v1 beta 1 kind:CSI node metadata:name:node-10 . 212 . 101 . 210 spec:drivers:-name:yodaplugin.csi.alibabacloud.com nodeID:node-10 . 212 . 101 . 210拓扑关键字:-kubernetes . io/hostname-name:pangu.csi.alibabacloud.com nodeID:a 5441 FD 9013042 e 8104 a 674 e4a 9666 a拓扑关键字:-topology . Pangu . CSI . alibabacloud . com/zone角色:

判断外部 CSI 插件是否注册成功。在 Node Driver Registrar 组件向 Kubelet 注册完毕后,Kubelet 会创建该资源,故不需要显式创建 CSINode 资源。将 Kubernetes 中 Node 资源名称与三方存储系统中节点名称(nodeID)一一对应。此处Kubelet会调用外部 CSI 插件NodeServer 的 GetNodeInfo 函数获取 nodeID。显示卷拓扑信息。CSINode 中 topologyKeys 用来表示存储节点的拓扑信息,卷拓扑信息会使得Scheduler在 Pod 调度时选择合适的存储节点。

2.CSIDriver

版本:storage.k8s.io/v1beta1kind: csirivermetadata:名称:Pangu . CSI . Alibaba cloud.com规格:#插件支持卷附吗?attach required:true # CSI插件在装载阶段是否需要Pod信息podInfoOnMount: true #指定CSI卷生命周期模型支持的卷模式:-持久角色:

简化外部 CSI 插件的发现。由集群管理员创建,通过 kubectl get csidriver 即可得知环境上有哪些 CSI 插件。自定 义Kubernetes 行为,如一些外部 CSI 插件不需要执行卷挂接(VolumeAttach)操作,则可以设置 .spec.attachRequired 为 false。

3.卷附件

API version:storage.k8s.io/v1kind: VolumeAttachmentmetadata:批注:csi.alpha.kubernetes.io/ node-id:21481 AE 252 a 2457 f 9 abcb 86 a 3d 02 ba 05终结器:-external-attach er/Pangu-CSI-alibabacloud-com名称:CSI-0996 e5e 9459 E1 cc C1 B3 a 7 ABA 07 df 4 ef 7301 c8 e 283d 99 eabc 1 b 69626 b 119 ce 750 spec:attach er:pangu.csi.alibabacloud.com nodeNa Me:node-10.211

支持特性

1.拓扑支持

StorageClass中有一个AllowedTopologies字段:

API version:storage.k8s.io/ v1 kind:StorageClassmetadata:name:csi-panguprovisioner:Pangu . CSI . alibabacloud . comparate ms:type:cloud _ ssdvolumeBindingMode:ImmediateallowedTopol O gies:-matchlabelexpressions:-key:topology.pangu.csi.alibabacloud.com/zone值:-zone-1-zone-2部署外部CSI插件后,每个节点都会被标记,标记的内容将是NodeGetInfo函数返回的[AccessibleTopology]值(详见节点驱动注册器部分)。

在调用CSI插件CreateVolume接口之前,外部置备程序将在请求参数中设置AccessibilityRequirements:

对于 WaitForFirstConsumer当 PVC 的 anno 中包含 "volume.kubernetes.io/selected-node" 且不为空,则先获取对应节点 CSINode 的 TopologyKeys,然后根据该 TopologyKeys 键从 Node 资源的 Label 获取 Values 值,最后拿该 Values 值与 StorageClass 的 AllowedTopologies 比对,判断其是否包含于其中;若不包含则报错。对于 Immediately将 StorageClass 的 AllowedTopologies 的值填进来,若 StorageClass 没有设置 AllowedTopologies 则将所有包含 TopologyKeys 键的节点 Value 添进来。

Scheduler如何使用存储卷处理调度?

基于社区的1.18版调度程序

调度器的调度过程主要包括以下三个步骤:

预选(Filter):筛选满足 Pod 调度要求的节点列表。优选(Score):通过内部的优选算法为节点打分,获得最高分数的节点即为选中的节点。绑定(Bind):调度器将调度结果通知给 kube-apiserver,更新 Pod 的 .spec.nodeName 字段。

调度器预选阶段:处理Pod的PVC/PV绑定关系并动态预配PV,使调度器在调度时考虑Pod使用的PV的节点亲和度。详细的调度流程如下:

Pod 不包含 PVC 直接跳过。FindPodVolumes获取 Pod 的 boundClaims、claimsToBind 以及 unboundClaimsImmediate。boundClaims:已 Bound 的 PVCclaimsToBind:PVC 对应 StorageClass 的 VolumeBindingMode 为 VolumeBindingWaitForFirstConsumerunboundClaimsImmediate:PVC 对应 StorageClass 的 VolumeBindingMode 为 VolumeBindingImmediate若 len(unboundClaimsImmediate) 不为空,表示这种 PVC 需要立即绑定 PV(即存 PVC 创建后,立刻动态创建 PV 并将其绑定到 PVC,该过程不走调度),若 PVC 处于 unbound 阶段则报错。若 len(boundClaims) 不为空,则检查 PVC 对应 PV 的节点亲和性与当前节点的 Label 是否冲突,若冲突则报错(可检查 Immediate 类型的 PV 拓扑)。若 len(claimsToBind) 不为空先检查环境中已有的 PV 能否与该 PVC 匹配(findMatchingVolumes),将能够匹配 PVC 的 PV 记录在调度器的 cache 中。未匹配到 PV 的 PVC 走动态调度流程,动态调度主要通过 StorageClass 的 AllowedTopologies 字段判断当前调度节点是否满足拓扑要求(针对 WaitForFirstConsumer 类型的 PVC)。

没有讨论调度程序优化阶段。

调度程序假设阶段

调度程序将首先假定PV/PVC,然后假定Pod。

将当前待调度的 Pod 进行深拷贝。AssumePodVolumes(针对 WaitForFirstConsumer 类型的 PVC)更改调度器 cache 中已经 Match 的 PV 信息:设置 annotation:pv.kubernetes.io/bound-by-controller="yes"。更改调度器 cache 中未匹配到 PV 的 PVC,设置 annotation:volume.kubernetes.io/selected-node=【所选节点】。Assume Pod 完毕更改调度器 cache 中 Pod 的 .Spec.NodeName 为【所选节点】。

调度程序绑定阶段

绑定卷:

调用 Kubernetes 的 API 更新集群中 PV/PVC 资源,使其与调度器 Cache 中的 PV/PVC 一致。检查 PV/PVC 状态:检查所有 PVC 是否已处于 Bound 状态。检查所有 PV 的 NodeAffinity 是否与节点 Label 冲突。调度器执行 Bind 操作:调用 Kubernetes 的 API 更新 Pod 的 .Spec.NodeName 字段。

2.存储容量扩展

体积扩展部分在外部Resizer部分已经提到,这里不再赘述。用户只需要编辑。PVC的spec . resources . requests . storage字段。注意只能扩大不能缩小。

如果PV扩展失败,PVC无法将spec字段的存储重新编辑为原来的值(只能扩展不能收缩)。

3.单节点卷的数量限制

卷限制在节点驱动注册器一节已经提到,这里不再赘述。

4.存储容量监控

存储提供者需要实现CSI插件的NodeGetVolumeStats接口,Kubelet将调用这个函数并在它的指标上反映它:

kubelet_volume_stats_capacity_bytes:存储卷容量kubelet_volume_stats_used_bytes:存储卷已使用容量kubelet_volume_stats_available_bytes:存储卷可使用容量kubelet_volume_stats_inodes:存储卷 inode 总量kubelet_volume_stats_inodes_used:存储卷 inode 使用量kubelet_volume_stats_inodes_free:存储卷 inode 剩余量

5.秘密

CSI存储卷支持传入机密,以处理不同进程中所需的私有数据。目前,StorageClass支持以下参数:

csi.storage.k8s.io/provisioner-secret-namecsi.storage.k8s.io/provisioner-secret-namespacecsi.storage.k8s.io/controller-publish-secret-namecsi.storage.k8s.io/controller-publish-secret-namespacecsi.storage.k8s.io/node-stage-secret-namecsi.storage.k8s.io/node-stage-secret-namespacecsi.storage.k8s.io/node-publish-secret-namecsi.storage.k8s.io/node-publish-secret-namespacecsi.storage.k8s.io/controller-expand-secret-namecsi.storage.k8s.io/controller-expand-secret-namespace

Secret将包含在相应CSI接口的参数中,如CreateVolumeRequest。CreateVolume接口的秘密。

6.闭塞设备

API version:apps/v1 kind:StatefulSetmetadata:name:nginx-example spec:selector:match labels:app:nginx service name:& # 34;nginx & # 34volumeClaimTemplates:-metadata:name:html spec:access modes:-read write once volume mode:Block storage class name:CSI-Pangu resources:requests:storage:40Gi template:metadata:labels:app:nginx spec:containers:-name:nginx image:nginx volume devices:-device path:& # 34;/dev/vdb & # 34;名称:html html三方存储厂商需要实现NodePublishVolume接口。Kubernetes为块设备(& # 34;k8s.io/kubernetes/pkg/util/mount"),可以在NodePublishVolume阶段调用这个工具的EnsureBlock和MountBlock函数。

7.卷快照/卷克隆功能

鉴于本文篇幅较长,这里就不介绍太多原理了。读者有兴趣看官方介绍:卷快照和卷克隆。

总结

本文首先对CSI核心进程进行了总体介绍,并结合CSI Sidecar组件、CSI接口和API对象对CSI标准进行了深入分析。在K8s上,任何CSI存储卷的使用都离不开上述过程,环境中的容器存储问题必然是问题之一。本文对这一过程进行了梳理,以便于考察成(元)的环境问题。

作者|慧智

本文为阿里云原创内容,未经允许不得转载。

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。

作者:美站资讯,如若转载,请注明出处:https://www.meizw.com/n/106720.html

发表回复

登录后才能评论