名词解释
名词 | 解释 |
---|---|
in-tree | 存在于核心 Kubernetes 存储库中的代码。 |
out-of-tree | 存在于 Kubernetes 核心代码库之外的代码。 |
Volume Plugin | PV Controller、ADController 以及 Volume Manager 对某一 volume 进行 Provision/Delete、Attach/Detach、Mount/Umount 等操作,其实都是通过调用 volume 所对应的 Volume Plugin 实现的 k8s 定义的 VolumePlugin 接口来完成的。Volume Plugin 有多种,包括 NFS Volume Plugin,CSI Volume Plugin 等(Volume Plugin 都是 in-tree 的) |
Container Storage Interface (CSI) | 一个行业标准的接口规范,使容器编排系统(COs)能够将任意存储系统暴露给其容器化工作负载。 |
CSI Volume Driver | 实现了 CSI 的驱动程序。CSI Volume Plugin 将会调用 CSI Volume Driver 实现的 CSI,完成对 volume 的 Provision/Delete、Attach/Detach、Mount/Umount 等操作(CSI Volume Driver 都是 out-of-tree 的) |
背景和动机
由于,Kubernetes所有的Volume Plugin是in-tree的,意味着存储供应商(Storage Provider,SP)向Kubernetes添加新的存储系统需要实现新的Volume Plugin,并将代码检入核心Kubernetes代码仓库中。这样做有很多不好的地方。同时SP也一直在应对如何使他们的存储系统在不同的容器编排系统(COs)中可用。SP必须为同一个存储系统编写和支持多个Volume Plugin以适用于不同的CO或选择不支持某些CO。
容器存储接口(CSI)是一个规范,由来自各种CO(包括Kubernetes、Mesos、Cloud Foundry和Docker)的社区成员合作而产生。 该接口旨在建立标准化机制,这样SP只需要各自维护其符合CSI规范的out-of-tree的CSI Volume Driver,并由各CO来维护各自的in-tree的CSI Volume Plugin,就可以在各种CO中使用其存储系统。
Kubernetes 的存储架构
在Kubernetes上CSI Volume Driver的推荐部署模式
CVD
第三方SP需要实现并创建一个CSI Volume Driver(以下简称CVD)容器,要求其中的bin(例如alibaba-cloud-csi-driver)实现CSI规范中所定义的包括Controller,Node,和Identity服务,并通过Unix域套接字公开gRPC接口。
部署
部署主要包含两个部分:CSI Controller Server 与 CSI Node Server。
- Controller Server(StatefulSet或Deployment)是控制端的功能,主要实现create/delet