深入剖析 Kubernetes
张磊
Kubernetes 社区资深成员与项目维护者
116706 人已学习
新⼈⾸单¥68
登录后,你可以任选4讲全文学习
课程目录
已完结/共 57 讲
再谈开源与社区 (1讲)
结束语 (1讲)
深入剖析 Kubernetes
15
15
1.0x
00:00/00:00
登录|注册

31 | 容器存储实践:CSI插件编写指南

NodePublishVolume接口
NodeStageVolume接口
ControllerPublishVolume接口
CreateVolume接口
Probe接口
GetPluginCapabilities接口
GetPluginInfo接口
使用FlexVolume和CSI插件的时机
完整的持久化Volume的创建和挂载流程
Kubernetes持久化存储体系
Pod声明使用PVC
PV和PVC绑定
创建声明使用StorageClass的PVC
通过StatefulSet在任意一个节点上启动CSI插件
通过DaemonSet在每个节点上启动CSI插件
创建DigitalOcean client授权Secret对象
CSI Node服务
CSI Controller服务
CSI Identity服务
CSI体系中Dynamic Provisioning的实现方式
External Provisoner自动创建PV
创建StorageClass对象
在DigitalOcean上的Kubernetes集群使用块存储服务作为容器的持久化存储
在公有云上实践Kubernetes的最佳选择
DigitalOcean的特点
思考题
总结
使用StorageClass和PVC
CSI插件部署
CSI插件的代码结构
StorageClass对象
CSI插件功能
DigitalOcean的块存储服务作为实践对象
CSI插件机制的设计原理
容器存储实践之CSI插件编写指南

该思维导图由 AI 生成,仅供参考

你好,我是张磊。今天我和你分享的主题是:容器存储实践之 CSI 插件编写指南。
在上一篇文章中,我已经为你详细讲解了 CSI 插件机制的设计原理。今天我将继续和你一起实践一个 CSI 插件的编写过程。
为了能够覆盖到 CSI 插件的所有功能,我这一次选择了 DigitalOcean 的块存储(Block Storage)服务,来作为实践对象。
DigitalOcean 是业界知名的“最简”公有云服务,即:它只提供虚拟机、存储、网络等为数不多的几个基础功能,其他功能一概不管。而这,恰恰就使得 DigitalOcean 成了我们在公有云上实践 Kubernetes 的最佳选择。
我们这次编写的 CSI 插件的功能,就是:让我们运行在 DigitalOcean 上的 Kubernetes 集群能够使用它的块存储服务,作为容器的持久化存储。
备注:在 DigitalOcean 上部署一个 Kubernetes 集群的过程,也很简单。你只需要先在 DigitalOcean 上创建几个虚拟机,然后按照我们在第 11 篇文章《从 0 到 1:搭建一个完整的 Kubernetes 集群》中从 0 到 1 的步骤直接部署即可。
而有了 CSI 插件之后,持久化存储的用法就非常简单了,你只需要创建一个如下所示的 StorageClass 对象即可:
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文深入介绍了容器存储实践中CSI插件的编写指南,以DigitalOcean的块存储服务为例。作者详细讲解了CSI插件的设计原理和编写过程,包括CSI Identity服务、CSI Controller服务和CSI Node服务的实现细节。文章重点讨论了CSI插件的核心概念和实现要点,对于想要深入了解容器存储实践和CSI插件编写的读者具有很高的参考价值。 在文章中,作者通过代码示例和逻辑解析,深入浅出地介绍了CSI插件的实现细节,包括注册gRPC Server、处理Provision阶段和Attach阶段的逻辑等。此外,文章还介绍了如何部署CSI插件和External Components,以及创建StorageClass和使用PersistentVolumeClaim来实现持久化存储。读者可以通过本文快速了解容器存储实践中CSI插件的编写流程和部署方法,为实际应用提供了有益的指导和参考。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《深入剖析 Kubernetes》
新⼈⾸单¥68
立即购买
登录 后留言

全部留言(36)

  • 最新
  • 精选
  • DJH
    大师,请教一个问题:"将Staging目录,绑定挂载到Volume对应的宿主机目录上"这个绑定挂载是指mount -bind吗? 为什么要挂载到一个临时目录,再绑定挂载Volume对应的宿主机目录上,而不是一步挂载到目标目录上?另外Staging目录具体是哪个目录? 谢谢!

    作者回复: 预处理完成前volume并不是可用的,直接挂载目的目录上显然太早了。

    2018-11-02
    5
    9
  • 车小勺的男神
    请教一下 能用对象存储来作为持久化存储么

    作者回复: 可以啊 你搜下S3的Kubernetes 存储插件

    2018-11-13
    3
  • 虎虎❤️
    请问在上一节里提到 “ CSI 的 api 不会直接使用 Kubernetes 定义的 PV 类型, 而是会自己定义一个单独的 volume 类型。 这个在digitalocean csi 里具体体现是什么?是一个cdr吗,我好像没找到。

    作者回复: csi自己有一套types.go,这跟kubernetes已经没关系了

    2018-11-03
    2
    2
  • 虎虎❤️
    DJH 竟然和我的问题一模一样,握手! 为什么不直接把设备挂载到 volume宿主机目录?在pv/pvc到底讲什么那么一节里就是这么讲的。 在这里有什么特殊的考虑吗?

    作者回复: 块存储设备不经过预处理就能直接挂载使用的情况,我还真想不出来。

    2018-11-03
    3
    2
  • JZY
    请问哪里有完整的示例呢,我看文中有部分是...省略的

    作者回复: 文中已经给出了啊

    2019-01-16
  • 每日都想上班
    有个问题:service后挂载多个pod,service的调度是轮询的还是怎么样的呢

    作者回复: 见service部分。

    2018-11-03
  • 开心哥
    果然是云原生技术,听的云里雾里。
    2020-07-20
    8
    39
  • djfhchdh
    flexVolume插件只负责attach和mount,使用简单。而CSI插件包括了一部分原来kubernetes中存储管理的功能,实现、部署起来比较复杂。所以,如果场景简单,不需要Dynamic Provisioning,则可以使用flexVolume;如果场景复杂,需要支持Dynamic Provisioning,则用CSI插件。
    2019-11-15
    33
  • 拉欧
    老师对k8s的理解真心让人敬佩
    2019-11-16
    13
  • 初学者
    一般来说一个块存储在被宿主机使用之前,需要先将该块存储load 到宿主机的/dev 下成为linux 的设备文件,然后format还设备文件,然后挂载到一个目录下就可以使用了,我觉得nodestagevolume这步挂载操作更像是为了同一台宿主机上的pod 可以共享一块盘
    2018-11-07
    13
收起评论
显示
设置
留言
36
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部