CSI 系统介绍

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
简介: CSI 基础CSI只支持PV、PVC方式,不支持Volume方式;官方资料: https://kubernetes-csi.github.io/docs/How to Write CSI Plugin: https://arslan.

CSI 基础

CSI只支持PV、PVC方式,不支持Volume方式;

官方资料: https://kubernetes-csi.github.io/docs/

How to Write CSI Plugin: https://arslan.io/2018/06/21/how-to-write-a-container-storage-interface-csi-plugin/

目前版本信息:

Kubernetes CSI Version CSI Status
v1.9 v0.1 Alpha
v1.10 v0.2 Beta
v1.11 v0.3 Beta
v1.12 v0.3 Beta
v1.13 v1.0.0 GA

CSI基础架构:

下图是典型的数据卷生命周期流程图,一般块存储都是按照这个流程执行;
image

PV-Controller

Controller Manager的一部分,主要做卷的provision/delete,pv、pvc绑定;

PV Controller通过监听API Server中的PV,PVC,SC三类资源更新,当监听到这些资源的创建、删除、修改时,PV Controller做创建、删除、绑定、回收。

PV Controller 会调用注册的Provisioner完成存储卷的创建,然后创建PV对象,并与PVC进行绑定;

AD-Controller

Controller Manager的一部分,主要从事块设备的attach/detach(例如:rbd,ebs块设备需要在mount之前先attach 到主机上)

非必选: attach/detach可以通过kubelet的volume manager驱动,Controller Manager提供配置可以禁用。

通过在kubelet中--enable-controller-attach-detach,设置是否通过AD Controller来管理分配到本节点的pod volume AD;
--enable-controller-attach-detach=true:通过AD-Controller做AD,kubelet禁用;
--enable-controller-attach-detach=false:通过kubelet做AD,AD-Controller对本节点禁用;

作用:当API Server中pod(配置了pvc)与node间的关系发生变化时,通过调用存储插件将这个pod关联的PV Attach/Detach到对应node上. 完成后通知其它关联组件(kubelet)。

Volume Manager

运行在kubelet里,主要完成attach/detach/mount/unmount;

mount/unmount操作是可选的,通过kubelet配置的enable-controller-attach-detach参数确定;

当pod调度到这个node上后才会有卷的相应操作,所以它的触发端是:kubelet根据Pod Manager里pod spec里的存储配置来触发卷的挂载操作;

Kubelet会监听到调度到该节点上的pod,把pod缓存到Pod Manager中;

VolumeManager通过Pod Manager获取PV/PVC的状态,并分析出具体的attach/detach、mount/umount操作,然后调用plugin进行相应的业务处理;

External-Provisioner

监听 Kubernetes PVC 对象,并触发对 CSI Plugin的 CreateVolume 和DeleteVolume 操作;
CreateVolume成功后,创建PV对象;

External-Attacher

监听 VolumeAttachment 对象,触发 ControllerPublish 和 ControllerUnPublish 操作,通过 CSI endpoint 触发;

Driver-Register

向 Kubelet注册 CSI Plugin 程序,并将 NodeId 添加到 Kubernetes Node 对象的 annotation 里面。

Volume Plugin

存储提供的扩展接口, 包含了各类存储提供者的plugin实现;
会调用CSI Plugin的NodeStageVolume、NodePublishVolume接口实现格式化、挂载等功能。

相关实践学习
巧用云服务器ECS制作节日贺卡
本场景带您体验如何在一台CentOS 7操作系统的ECS实例上,通过搭建web服务器,上传源码到web容器,制作节日贺卡网页。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
目录
相关文章
|
存储 Kubernetes 数据可视化
|
3月前
|
存储 Kubernetes 容器
在k8S中,CSI模型是什么?
在k8S中,CSI模型是什么?
|
存储 Kubernetes 负载均衡
【Kubernetes的Service Mesh发展历程及Istio架构、存储供应使用NFS flexvolume CSI接口】
【Kubernetes的Service Mesh发展历程及Istio架构、存储供应使用NFS flexvolume CSI接口】
217 0
|
存储 Kubernetes 监控
k8s csi存储机制
k8s csi存储机制详解
529 0
|
存储 Kubernetes Unix
浅析 CSI 工作原理
CSI 的 cloud providers 有两种类型,一种为 in-tree 类型,一种为 out-of-tree 类型。前者是指运行在 k8s 核心组件内部的存储插件;后者是指独立在 k8s 组件之外运行的存储插件。本文主要介绍 out-of-tree 类型的插件。
1038 0
|
Kubernetes 容器 Perl
ACK 1.18集群升级 - CSI Block Volume升级说明
ACK1.16集群升级到1.18版本时,CSI Block Volume出现一个不兼容的问题需要处理;
1218 0
|
存储 Kubernetes 应用服务中间件
阿里云Kubernetes CSI实践—CPFS存储卷使用
1. 前言 CPFS(Cloud Paralleled File System)是一种并行文件系统。CPFS 的数据存储在集群中的多个数据节点,并可由多个客户端同时访问,从而能够为大型高性能计算机集群提供高 IOPS、高吞吐、低时延的数据存储服务。
4661 0
阿里云Kubernetes CSI实践—CPFS存储卷使用
|
文件存储 存储 Perl
阿里云Kubernetes CSI实践—NAS动态存储卷使用
1. 前言 NAS存储盘能将nfs(网络文件系统)挂载到你的Pod中,阿里云Kubernetes CSI支持静态存储卷挂载和动态存储卷挂载2种方式, 在静态存储卷挂载的方式中,通常需要手动编辑和创建一个pv/pvc进行挂载,当需要的pv/pvc数量很大的时候,手动创建就显得非常繁琐了,这时动态存储卷挂载的功能可以满足您的需求。
6435 0
|
存储 Unix 容器
CSI 协议规范
CSI 规范 官方文档:https://github.com/container-storage-interface/spec/blob/master/spec.md CSI目标 定义API: 自动化创建/删除数据卷; 从一个节点挂载/卸载数据卷; 在一个节点上Mount/Umount一个卷设备; 使用可挂载/块 数据卷; 本地存储供应者 - LVM 创建、删除快照; 从一个快照恢复数据卷; 推荐细节: 容器部署意见:CAP_SYS_ADMIN,mnt命名空间; CSI介绍 CSI聚焦的中心是容器编排系统(CO)和Plugin之间的协议;插件应该是可以跨CO运行的。
4238 0
|
应用服务中间件 文件存储 nginx
阿里云Kubernetes CSI实践 - 部署详解
本文以阿里云ACK环境为例介绍如何在Kubernetes系统中部署CSI插件; CSI部署拓扑: 分为CSI Provisioner和CSI Plugin两部分: Provisioner:目前只支持云盘,提供云盘数据卷动态创建的功能; Plugin:云盘、NAS、OSS均需实现plugin;云盘...
18527 0