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

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
5月前
|
存储 Kubernetes 容器
在k8S中,CSI模型是什么?
在k8S中,CSI模型是什么?
|
存储 Kubernetes Unix
k8s教程(Volume篇)-CSI存储机制详解
k8s教程(Volume篇)-CSI存储机制详解
1577 0
k8s教程(Volume篇)-CSI存储机制详解
|
存储 Kubernetes 负载均衡
【Kubernetes的Service Mesh发展历程及Istio架构、存储供应使用NFS flexvolume CSI接口】
【Kubernetes的Service Mesh发展历程及Istio架构、存储供应使用NFS flexvolume CSI接口】
240 0
|
存储 Kubernetes 监控
k8s csi存储机制
k8s csi存储机制详解
546 0
|
存储 弹性计算 运维
自建Kubernetes集群如何使用阿里云CSI存储组件
阿里云容器服务ACK的容器存储功能基于Kubernetes存储系统,深度融合阿里云存储服务并完全兼容Kubernetes原生的存储服务,例如EmptyDir、HostPath、Secret、ConfigMap等存储。ACK基于社区容器存储接口(CSI)通过部署CSI插件实现了阿里云存储服务接入能力。容器服务ACK支持Pod自动绑定阿里云云盘、NAS、 OSS、CPFS、本地卷等存储服务。
1735 1
自建Kubernetes集群如何使用阿里云CSI存储组件
|
Kubernetes 容器 Perl
ACK 1.18集群升级 - CSI Block Volume升级说明
ACK1.16集群升级到1.18版本时,CSI Block Volume出现一个不兼容的问题需要处理;
1238 0
|
canal Kubernetes 负载均衡
Kubernetes必备知识: 主流网络方案
常见的容器网络方案可以从协议栈层级、穿越形态、隔离方式这三种形式进行划分。 协议栈层级: 第一种:协议栈二层。 第二种:协议栈三层(纯路由转发)。 第三种:协议栈二层加三层。
1105 0
Kubernetes必备知识: 主流网络方案
|
Kubernetes 算法 容灾
Kubernetes必备知识: 调度流程
scheduler 是k8s master的一部分,作为插件存在于k8s生态体系。
929 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
740 0
Kubernetes必备知识: 容器接口CRI
|
Kubernetes 算法 API
Kubernetes必备知识: 配置调度器
Kubernetes调度程序是一项策略丰富,可感知拓扑,特定于工作负载的功能,会显着显著影响可用性,性能和容量。调度程序需要考虑单个和集体的资源需求,服务质量需求,硬件/软件/策略约束,亲和力和反亲和力规范,数据位置,工作负载间的干扰,期限等。特定于工作负载的需求将在必要时通过API公开。
622 0
Kubernetes必备知识: 配置调度器