31 | 容器存储实践: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
《深入剖析 Kubernetes》,新⼈⾸单¥68
立即购买
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
登录 后留言
全部留言(36)
- 最新
- 精选
- DJH大师,请教一个问题:"将Staging目录,绑定挂载到Volume对应的宿主机目录上"这个绑定挂载是指mount -bind吗? 为什么要挂载到一个临时目录,再绑定挂载Volume对应的宿主机目录上,而不是一步挂载到目标目录上?另外Staging目录具体是哪个目录? 谢谢!
作者回复: 预处理完成前volume并不是可用的,直接挂载目的目录上显然太早了。
2018-11-0259 - 车小勺的男神请教一下 能用对象存储来作为持久化存储么
作者回复: 可以啊 你搜下S3的Kubernetes 存储插件
2018-11-133 - 虎虎❤️请问在上一节里提到 “ CSI 的 api 不会直接使用 Kubernetes 定义的 PV 类型, 而是会自己定义一个单独的 volume 类型。 这个在digitalocean csi 里具体体现是什么?是一个cdr吗,我好像没找到。
作者回复: csi自己有一套types.go,这跟kubernetes已经没关系了
2018-11-0322 - 虎虎❤️DJH 竟然和我的问题一模一样,握手! 为什么不直接把设备挂载到 volume宿主机目录?在pv/pvc到底讲什么那么一节里就是这么讲的。 在这里有什么特殊的考虑吗?
作者回复: 块存储设备不经过预处理就能直接挂载使用的情况,我还真想不出来。
2018-11-0332 - JZY请问哪里有完整的示例呢,我看文中有部分是...省略的
作者回复: 文中已经给出了啊
2019-01-16 - 每日都想上班有个问题:service后挂载多个pod,service的调度是轮询的还是怎么样的呢
作者回复: 见service部分。
2018-11-03 - 开心哥果然是云原生技术,听的云里雾里。2020-07-20839
- djfhchdhflexVolume插件只负责attach和mount,使用简单。而CSI插件包括了一部分原来kubernetes中存储管理的功能,实现、部署起来比较复杂。所以,如果场景简单,不需要Dynamic Provisioning,则可以使用flexVolume;如果场景复杂,需要支持Dynamic Provisioning,则用CSI插件。2019-11-1533
- 拉欧老师对k8s的理解真心让人敬佩2019-11-1613
- 初学者一般来说一个块存储在被宿主机使用之前,需要先将该块存储load 到宿主机的/dev 下成为linux 的设备文件,然后format还设备文件,然后挂载到一个目录下就可以使用了,我觉得nodestagevolume这步挂载操作更像是为了同一台宿主机上的pod 可以共享一块盘2018-11-0713
收起评论