Kubernetes必备知识: kubernetes CSI

简介: csi 是一个标准的容器存储接口,规定了如何实现一个容器的存储接口,CSI 本身的定义是基于 gRPC 的,所以有一套样例库可以使用,这里分析一下 kuberntes 实现 csi 的方式,为了兼容 CSI kubernete 其实搞得挺绕的,目前这个 CSI 还是定制中包括后期的 Snapshot 的接口怎么设计等等还在讨论中。kubernetes CSI 主要基于几个外部组件和内部功能的一些改动。

所属技术领域:

K8s

|名词定义|

csi 是一个标准的容器存储接口,规定了如何实现一个容器的存储接口,CSI 本身的定义是基于 gRPC 的,所以有一套样例库可以使用,这里分析一下 kuberntes 实现 csi 的方式,为了兼容 CSI kubernete 其实搞得挺绕的,目前这个 CSI 还是定制中包括后期的 Snapshot 的接口怎么设计等等还在讨论中。kubernetes CSI 主要基于几个外部组件和内部功能的一些改动。

|技术特点|

 CSI对象
VolumeAttachments:
 描述一个Volume卷挂载、卸载相关的信息。包含:卷的名字、挂载目的节点、使用的插件、当前状态等信息。代表一个挂载操作期望;
 AD Controller在执行挂载一个CSI PV的时候,会调用csi-attacher(in-Tree)创建一个VolumeAttachment;
 External-attacher通过watch VolumeAttachment,发现有需要挂载的数据卷时,调用csi-plugin的ControllerPublishVolume方法,执行attach操作
 VolumeAttachment是由AD Controller调用csi-attacher删除
CSIDriver:
 描述集群中部署的CSI Plugin列表,需要管理员根据插件类型创建;
 定义Kubernetes调用CSI Plugin的行为
-AttachRequired:定义Plugin是否支持Attach功能,如果定义为false,Kubernetes不会调用Attach接口;
-podinfoOnMount:定义Kubernetes调用Mount接口时,是否带上Pod信息;
 已经Beta,Kubernetes API已经默认支持,可以直接创建使用;
 1.13之前版本需要手动打开Feature Gate,并创建CSI Driver

CSINode:
 定义集群中CSI节点信息,node-driver-registrar启动时创建
 CSINode的作用
-每一个新的CSI Plugin注册后,都会在CSINode里添加一个CSINode信息;
-Controller Manager、Scheduler依赖CSINode信息来确定一个节点的CSI驱动是否可用;
-ControllerManager实现了Topoloy-Aware Provsion的时候,通过CSINode信息获取拓扑信息;
 已经Beta,Kubernetes API已经默认支持,可以直接创建使用;
 1.13之前版本需要手动打开Feature Gate,并创建CSINodeinfo;
 CSI组件-Node-Driver-Registrar
负责与Kubelet配合实现CSI插件的注册功能:

  1. Node-Driver-Registrar向CSI Plugin调用GetPluginInfo接口,获得Plugin DriverName;
    2.启动监听服务,监听:/var/lib/kubelet/plugins_registry/diskplugin.csi.alibabacloud.com-reg.sock地址;监听2个接口:

-GetInfo:提供Plugin的相关信息,类型、名字、实际插件socket地址、版本;
-NotifyRegistrationStatus:接收kubelet的Plugin注册结果,注册失败时插件会停止;
3.kubelet向Node-Driver-Registrar调用GetInfo,获取plugin的信息(名字、实际插件的socket地址)(由Watch发现socket文件后触发调用操作)
4.kubelet向真实csi插件发送NodeGetInfo请求,获取:NodeID、节点拓扑等插件信息;将CSI插件加入Plugin列表;
5.调用kubelets API,更新Node信息:
-更新节点:Annotations:添加csi.volume.kubernetes.io/nodeid信息;
-更新节点:Labels:添加拓扑信息,topology.diskplugin.csi.alibabacloud.com/zone=*
-更新节点:status.allocatable和status.capacity字段,添加MaxAttachLimit信息;
-创建(更新)CSINode:添加节点对应的插件信息(nodeid,driverName,拓扑信息等)
6.调用Node-Driver-Registrar的NotifyRegistionStatus接口,通知Plugin已经注册成功(或失败);
图片.png

 CSI组件-Externel-Attacher
调用CSI Plugin接口实现数据卷的挂载、卸载;
通过WatcherVolumeAttachment对象,根据其状态调用ControllerPublishVolume接口;
如果在CSIDriver对象中对一个驱动的attachedRequired参数定义为false,则上述Attach流程不会执行,定义为true时,(AD Controller)才会进行Attach操作;
像文件存储这类存储类型,不需要进行attach、格式化操作存储类型,一般会跳过上述流程;
图片.png

 CSI部署
图片.png

 CSI 使用示例
图片.png

 CSI其他功能
图片.png

 CSI 近期Features
图片.png

|资料来源|

名词定义:https://www.kubernetes.org.cn/4618.html

相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。     相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
存储 Kubernetes 容器
在k8S中,CSI模型是什么?
在k8S中,CSI模型是什么?
|
存储 Kubernetes Unix
k8s教程(Volume篇)-CSI存储机制详解
k8s教程(Volume篇)-CSI存储机制详解
2464 0
k8s教程(Volume篇)-CSI存储机制详解
|
存储 Kubernetes 负载均衡
【Kubernetes的Service Mesh发展历程及Istio架构、存储供应使用NFS flexvolume CSI接口】
【Kubernetes的Service Mesh发展历程及Istio架构、存储供应使用NFS flexvolume CSI接口】
293 0
|
存储 Kubernetes 监控
k8s csi存储机制
k8s csi存储机制详解
644 0
|
存储 弹性计算 运维
自建Kubernetes集群如何使用阿里云CSI存储组件
阿里云容器服务ACK的容器存储功能基于Kubernetes存储系统,深度融合阿里云存储服务并完全兼容Kubernetes原生的存储服务,例如EmptyDir、HostPath、Secret、ConfigMap等存储。ACK基于社区容器存储接口(CSI)通过部署CSI插件实现了阿里云存储服务接入能力。容器服务ACK支持Pod自动绑定阿里云云盘、NAS、 OSS、CPFS、本地卷等存储服务。
1872 1
自建Kubernetes集群如何使用阿里云CSI存储组件
|
Kubernetes 容器 Perl
ACK 1.18集群升级 - CSI Block Volume升级说明
ACK1.16集群升级到1.18版本时,CSI Block Volume出现一个不兼容的问题需要处理;
1330 0
|
canal Kubernetes 负载均衡
Kubernetes必备知识: 主流网络方案
常见的容器网络方案可以从协议栈层级、穿越形态、隔离方式这三种形式进行划分。 协议栈层级: 第一种:协议栈二层。 第二种:协议栈三层(纯路由转发)。 第三种:协议栈二层加三层。
1186 0
Kubernetes必备知识: 主流网络方案
|
Kubernetes 算法 容灾
Kubernetes必备知识: 调度流程
scheduler 是k8s master的一部分,作为插件存在于k8s生态体系。
981 0
Kubernetes必备知识: 调度流程
|
存储 Kubernetes Linux
Kubernetes必备知识: 容器接口CRI
每种容器运行时各有所长,许多用户都希望Kubernetes支持更多的运行时。在Kubernetes 1.5发布版里,我们引入了CRI–一个能让kubelet无需编译就可以支持多种容器运行时的插件接口。CRI包含了一组protocol buffers,gRPC API,相关的库,以及在活跃开发下的额外规范和工具。CRI目前是Alpha版本。 支持可替换的容器运行时在Kubernetes中概念中并非首次。在1.3发布版里,我们介绍了rktnetes项目,它可以让rkt容器引擎作为Docker容器运行时的一个备选。然而,不管是Docker还是Rkt都需要通过内部、不太稳定的接口直接集成到kubele
824 0
Kubernetes必备知识: 容器接口CRI
|
Kubernetes 算法 API
Kubernetes必备知识: 配置调度器
Kubernetes调度程序是一项策略丰富,可感知拓扑,特定于工作负载的功能,会显着显著影响可用性,性能和容量。调度程序需要考虑单个和集体的资源需求,服务质量需求,硬件/软件/策略约束,亲和力和反亲和力规范,数据位置,工作负载间的干扰,期限等。特定于工作负载的需求将在必要时通过API公开。
684 0
Kubernetes必备知识: 配置调度器