容器存储接口 CSI学习

本文介绍了Kubernetes中Container Storage Interface (CSI)的背景、核心流程,包括Volume的创建、附着、挂载、卸载、分离和删除,并详细阐述了涉及的组件如External Provisioner、External Attacher以及Node Driver Registrar的作用。此外,还提到了云存储厂商如何通过实现CSI接口与K8s集成。
摘要由CSDN通过智能技术生成

一 CSI 概述

K8s持久化存储经历了从 in-tree Volume 到CSI Plugin(out-of-tree)的迁移,一方面是为了将k8s的核心主干代码与Volume相关代码解耦,便于更好的维护;另一方面则是为了方便各大云厂商实现统一的接口,提供个性化的云存储能力。

Container Storage Interface是由来自Kubernetes、Mesos、Docker等社区member联合制定的一个行业标准接口规范,旨在将任意存储系统暴露给容器化应用程序。

CSI规范定义了存储提供商实现CSI兼容的Volume Plugin的最小操作集和部署建议。CSI规范的主要焦点是声明Volume Plugin必须实现的接口

二 CSI 核心流程介绍

K8s的pod在挂载存储卷时会经历三个阶段:Create/Delete(创建/删除)、Attach/Detach(附着/分离)和Mount/Unmount(挂载/卸载),其三个阶段使用CSI流程如下:

  1. Create Volumes

1.1集群管理员创建 StorageClass 资源,该 StorageClass 中包含 CSI 插件名称以及存储类必须的参数

1.2 用户创建 PersistentVolumeClaim 资源,PVC 指定存储大小及 StorageClass。

1.3 卷控制器(PersistentVolumeController)观察到集群中新创建的 PVC 没有与之匹配的 PV,且其使用的存储类型为 out-of-tree,于是为 PVC 打 annotation:volume.beta.kubernetes.io/storage-provisioner=[out-of-tree CSI 插件名称]

1.4 External Provisioner 组件观察到 PVC 的 annotation 中包含 “volume.beta.kubernetes.io/storage-provisioner” 且其 value 是自己,于是开始创盘流程。首先获取相关 StorageClass 资源并从中获取参数,用于后面 CSI 函数调用,其次通过 unix domain socket 调用外部 CSI 插件的CreateVolume 函数。

1.5 外部 CSI 插件返回成功后表示盘创建完成,此时External Provisioner 组件会在集群创建一个 PersistentVolume 资源。

1.6 卷控制器会将 PV 与 PVC 进行绑定。

2. Attaching Volumes

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值