容器存储接口(CSI)是用于将任意块和文件存储系统暴露给诸如Kubernetes之类的容器编排系统(CO)上的容器化工作负载的标准。使用CSI的第三方存储提供商可以编写和部署在Kubernetes中公开新存储系统的插件,而无需接触核心的Kubernetes代码。

具体来说,Kubernetes针对CSI规定了以下内容:

  • Kubelet到CSI驱动程序的通信

    • Kubelet通过Unix域套接字直接向CSI驱动程序发起CSI调用(例如NodeStageVolumeNodePublishVolume等),以挂载和卸载卷。

    • Kubelet通过kubelet插件注册机制发现CSI驱动程序(以及用于与CSI驱动程序进行交互的Unix域套接字)。

    • 因此,部署在Kubernetes上的所有CSI驱动程序必须在每个受支持的节点上使用kubelet插件注册机制进行注册。

  • Master到CSI驱动程序的通信

    • Kubernetes master组件不会直接(通过Unix域套接字或其他方式)与CSI驱动程序通信。

    • Kubernetes master组件仅与Kubernetes API交互。

    • 因此,需要依赖于Kubernetes API的操作的CSI驱动程序(例如卷创建,卷attach,卷快照等)必须监听Kubernetes API并针对它触发适当的CSI操作(例如下面的一系列的external组件)。

组件

CSI调用说明

CSI实现中的组件分为两部分:

  • 由k8s官方维护的一系列external组件负责注册CSI driver 或监听k8s对象资源,从而发起csi driver调用,比如(node-driver-registrar,external-attacher,external-provisioner,external-resizer,external-snapshotter,livenessprobe)

  • 各云厂商or开发者自行开发的组件(需要实现CSI Identity,CSI Controller,CSI Node 接口)

RPC接口(开发商实现)

Identity Service

service Identity {//返回driver的信息,比如名字,版本rpc GetPluginInfo(GetPluginInfoRequest)returns (GetPluginInfoResponse) {}//返回driver提供的能力,比如是否提供Controller Service,volume 访问能能力rpc GetPluginCapabilities(GetPluginCapabilitiesRequest)returns (GetPluginCapabilitiesResponse) {}//探针rpc Probe (ProbeRequest)returns (ProbeResponse) {}
}

Controller service

service Controller {//创建卷rpc CreateVolume (CreateVolumeRequest)returns (CreateVolumeResponse) {}//删除卷rpc DeleteVolume (DeleteVolumeRequest)returns (DeleteVolumeResponse) {}//attach 卷rpc ControllerPublishVolume (ControllerPublishVolumeRequest)returns (ControllerPublishVolumeResponse) {}//unattach卷rpc ControllerUnpublishVolume (ControllerUnpublishVolumeRequest)returns (ControllerUnpublishVolumeResponse) {}//返回存储卷的功能点,如是否支持挂载到多个节点上,是否支持多个节点同时读写rpc ValidateVolumeCapabilities (ValidateVolumeCapabilitiesRequest)returns (ValidateVolumeCapabilitiesResponse) {}//列出所有卷rpc ListVolumes (ListVolumesRequest)returns (ListVolumesResponse) {}//返回存储资源池的可用空间大小rpc GetCapacity (GetCapacityRequest)returns (GetCapacityResponse) {}//返回controller插件的功能点,如是否支持GetCapacity接口,是否支持snapshot功能等rpc ControllerGetCapabilities (ControllerGetCapabilitiesRequest)returns (ControllerGetCapabilitiesResponse) {}//创建快照rpc CreateSnapshot (CreateSnapshotRequest)returns (CreateSnapshotResponse) {}//删除快照rpc DeleteSnapshot (DeleteSnapshotRequest)returns (DeleteSnapshotResponse) {}//列出快照rpc ListSnapshots (ListSnapshotsRequest)returns (ListSnapshotsResponse) {}//扩容rpc ControllerExpandVolume (ControllerExpandVolumeRequest)returns (ControllerExpandVolumeResponse) {}//获得卷rpc ControllerGetVolume (ControllerGetVolumeRequest)returns (ControllerGetVolumeResponse) {option (alpha_method) = true;}
}

Node Service

service Node {//如果存储卷没有格式化,首先要格式化。然后把存储卷mount到一个临时的目录(这个目录通常是节点上的一个全局目录)。再通过NodePublishVolume将存储卷mount到pod的目录中。mount过程分为2步,原因是为了支持多个pod共享同一个volume(如NFS)。rpc NodeStageVolume (NodeStageVolumeRequest)returns (NodeStageVolumeResponse) {}//NodeStageVolume的逆操作,将一个存储卷从临时目录umount掉rpc NodeUnstageVolume (NodeUnstageVolumeRequest)returns (NodeUnstageVolumeResponse) {}//将存储卷从临时目录mount到目标目录(pod目录)rpc NodePublishVolume (NodePublishVolumeRequest)returns (NodePublishVolumeResponse) {}//将存储卷从pod目录umount掉rpc NodeUnpublishVolume (NodeUnpublishVolumeRequest)returns (NodeUnpublishVolumeResponse) {}//返回可用于该卷的卷容量统计信息。rpc NodeGetVolumeStats (NodeGetVolumeStatsRequest)returns (NodeGetVolumeStatsResponse) {}//noe上执行卷扩容rpc NodeExpandVolume(NodeExpandVolumeRequest)returns (NodeExpandVolumeResponse) {}//返回Node插件的功能点,如是否支持stage/unstage功能rpc NodeGetCapabilities (NodeGetCapabilitiesRequest)returns (NodeGetCapabilitiesResponse) {}//返回节点信息rpc NodeGetInfo (NodeGetInfoRequest)returns (NodeGetInfoResponse) {}
}

###External 组件(k8s Team)

这部分组件是由k8s官方提供的,作为k8s api跟csi driver的桥梁:

  • node-driver-registrar

    CSI node-driver-registrar是一个sidecar容器,可从CSI driver获取驱动程序信息(使用NodeGetInfo),并使用kubelet插件注册机制在该节点上的kubelet中对其进行注册。

  • external-attacher

    它是一个sidecar容器,用于监视Kubernetes VolumeAttachment对象并针对驱动程序端点触发CSI ControllerPublish和ControllerUnpublish操作

  • external-provisioner

    它是一个sidecar容器,用于监视Kubernetes PersistentVolumeClaim对象并针对驱动程序端点触发CSI CreateVolume和DeleteVolume操作。external-attacher还支持快照数据源。如果将快照CRD资源指定为PVC对象上的数据源,则此sidecar容器通过获取SnapshotContent对象获取有关快照的信息,并填充数据源字段,该字段向存储系统指示应使用指定的快照填充新卷 。

  • external-resizer

    它是一个sidecar容器,用于监视Kubernetes API服务器上的PersistentVolumeClaim对象的改动,如果用户请求在PersistentVolumeClaim对象上请求更多存储,则会针对CSI端点触发ControllerExpandVolume操作。

  • external-snapshotter

    它是一个sidecar容器,用于监视Kubernetes API服务器上的VolumeSnapshot和VolumeSnapshotContent CRD对象。创建新的VolumeSnapshot对象(引用与此驱动程序对应的SnapshotClass CRD对象)将导致sidecar容器提供新的快照。该Sidecar侦听指示成功创建VolumeSnapshot的服务,并立即创建VolumeSnapshotContent资源。

  • livenessprobe

    它是一个sidecar容器,用于监视CSI驱动程序的运行状况,并通过Liveness Probe机制将其报告给Kubernetes。这使Kubernetes能够自动检测驱动程序问题并重新启动Pod以尝试解决问题。

参考

  • https://kubernetes-csi.github.io/docs/introduction.html

  • https://draveness.me/kubernetes-volume/

  • https://www.dazhuanlan.com/2020/01/31/5e33a33ba05d1/

Kubernetes CSI(一):介绍相关推荐

  1. kubernetes CSI(下)

    前面几篇文章分别介绍了dynamic provisioning.CSI接口定义和CSI插件的注册等内容,这篇文章基于这些内容,尝试实现一个NFS的CSI,这个CSI主要包含注册.dynamic pro ...

  2. 阿里云Kubernetes CSI实践—NAS动态存储卷使用

    1. 前言 NAS存储盘能将nfs(网络文件系统)挂载到你的Pod中,阿里云Kubernetes CSI支持静态存储卷挂载和动态存储卷挂载2种方式, 在静态存储卷挂载的方式中,通常需要手动编辑和创建一 ...

  3. Kubernetes中StatefulSet介绍

    原文链接:Kubernetes中StatefulSet介绍 StatefulSet 是Kubernetes1.9版本中稳定的特性,本文使用的环境为 Kubernetes 1.11.如何搭建环境可以参考 ...

  4. Kubernetes(K8s)Events介绍(上)

    Kubernetes Events虽不常被提起,却意义非凡.它存储在Etcd里,记录了集群运行所遇到的各种大事件.本系列文章将一步一步地揭开Kubernetes Events的神秘面纱. 师出有名 前 ...

  5. Kubernetes 探针使用介绍

    Kubernetes 探针使用介绍 一.基本介绍 二.K8s 探针使用介绍 一.基本介绍 当我们在 K8s 上运行应用时,应用是否运行正常这是我们比较关心的,但是如果我们只是通过查看应用的运行状态,这 ...

  6. kubernetes各组件介绍

    文章目录 一. kubernetes 是什么 1. 基础架构图 2. kubernetes 各组件介绍 2.1 master 组件 :one: Kubernetes API Server(kube-a ...

  7. kubernetes CSI(中)

    在<kubernetes CSI(上)>一文中,我们对kubernetes存储的发展有了简单的了解,并且在文中提到了CSI中负责注册的组件node-driver-registrar,本文我 ...

  8. CMOS Image Sensor的MIPI CSI接口介绍及波形实测

    CMOS Image Sensor的MIPI CSI接口介绍及波形实测 原创 电子小白菜 硬核电子 2020-05-30 14:30 在上一篇文章中CMOS Image Sensor的DVP接口硬件设 ...

  9. Kubernetes CSI 介绍及使用

    CSI 介绍及使用 和 Flexvolume 类似,CSI 也是为第三方存储提供数据卷实现的抽象接口. 有了 Flexvolume,为何还要 CSI 呢? Flexvolume 只是给 kuberne ...

最新文章

  1. J2EE(一)——开发简单WEB服务器
  2. scanf_s()函数 (是Microsoft公司VS开发工具提供的一个功能相同的安全标准输入函数)
  3. 2108889队2021年数学建模美赛C题花絮视频!
  4. 阿里P8架构师谈:阿里双11秒杀系统如何设计?
  5. springCloud - 第5篇 - 断路器 Hystrix ( Feign 、Ribbon )
  6. 汽车电气化竞争:获胜的途径
  7. [Bzoj]5343: [Ctsc2018]混合果汁
  8. Flink – WindowedStream
  9. Centos7安装jdk1.8
  10. 企业到底需要何种数据分析挖掘工具?
  11. wps软件打不开共享超链接_wps excel 超链接 打不开 怎么解决?
  12. Iproxy USB连接手机
  13. 《如何阅读一本书》读后感
  14. conda install报错 ValueError: check_hostname requires server_hostname
  15. Python小课们是如何赚钱的
  16. HTML+CSS css3电子杂志画册3D翻页切换动画特效
  17. javaW2D3-File
  18. 把计算机固定在桌面,怎么把计算机图标放到桌面 - 卡饭网
  19. Schlumberger.PIPESIM.2017.1.932.Win64 1DVD
  20. 【机器学习】粗糙集(Rough Set Approach)

热门文章

  1. Echarts的折线图堆叠示例,去掉线上小圆圈;多条折现可重叠。
  2. 生产企业原材料订购与运输的研究-数据处理课程设计
  3. 最小二乘法直线拟合及其Matlab实现
  4. 【ACO三维路径规划】蚁群算法无人机三维路径规划【含Matlab源码 1278期】
  5. 【16.10更新】神器再现!百度云网盘批量高速下载 Chrome插件+IDM
  6. linux将gif合并成视频,如何将动图转化为视频?多张GIF图片合并成视频的方法
  7. [QNX_firewall]PF防火墙最详细教程(下)
  8. 对一个8位(一字节)数的倒序处理
  9. 我参加NVIDIA Sky Hackathon(语音识别模型训练)
  10. 使用Amazon FreeRTOS快速和安全地连接设计到云