关注分享主机优惠活动
国内外VPS云服务器

Kubernetes的容器存储接口(CSI)是GA(kubernetes storageclass)

总结:作者高级软件工程师实现的容器存储接口已更新。 功能受弃用策略保护。 容器存储接口的采用使得卷层真正具有可扩展性。 2018年中国论坛提案征集现已开始。 论坛将用户开发人员和从业者聚集在一起,进行面对面的交流和协作。

作者:Saad Ali,Google 高级软件工程师

Kubernetes 实现的容器存储接口(CSI)于 2019 年升级为 GA Kubernetes v1 版本 .13。 CSI 支持在 Kubernetes v1.9 中作为 alpha 引入,并在 Kubernetes v1.10 中升级到 beta。

GA 里程碑表明 Kubernetes 用户可以利用此功能及其 API,而不必担心未来的回归导致向后不兼容的更改。 GA 功能受 Kubernetes 弃用策略的保护。

为什么选择 CSI

Kubernetes 在 CSI 之前提供了强大的卷插件系统,但 Kubernetes 现在有了新的卷插件支持。 卷插件是“树内”(“in-tree”)。 该代码是核心 Kubernetes 代码的一部分,二进制文件随核心 Kubernetes 一起提供。 希望向 Kubernetes 添加存储系统支持(或修复现有卷插件中的错误)的供应商应与 Kubernetes 发布流程保持一致。 此外,代码的第三方存储给核心 Kubernetes 二进制文件带来了可靠性和安全性问题,并且通常使 Kubernetes 维护人员很难(在某些情况下不可能)测试和维护代码。

CSI 是作为一种标准而开发的,用于将任意块和文件存储系统暴露给 Kubernetes 等容器编排系统 (CO) 上的容器化工作负载。 容器存储接口的采用使得Kubernetes卷层真正具有可扩展性。 CSI,使用第三方存储存储供应商可以创建和部署在 Kubernetes 中公开新存储系统的插件,而无需触及核心 Kubernetes 代码。 这为 Kubernetes 用户提供了更多的存储选择,并使他们的系统更加安全可靠。

有什么新的变化吗?

随着升级到通用版本,Kubernetes 对 CSI 实现进行了以下更改:

Kubernetes 兼容符合 CSI 规范 v1.0 和 v0.3(而不是 CSI 规范 v0.2)。

虽然 CSI 规范 v0.3 和 v1.0 之间存在重大变化,但两个版本都与 Kubernetes v1.13 兼容,因为 Kubernetes v1.13 支持这两个版本。

请注意,随着 CSI 1.0 API 的发布,使用 0.3 之前的 CSI API 的 CSI 驱动程序将被弃用,并将在 Kubernetes v1.15 中删除。

CSI 规范 v0.2 和 v0.3 之间没有重大变化,因此 v0.2 驱动程序也应该适用于 Kubernetes v1.10.0 及更高版本。

由于 CSI 规范 v0.1 和 v0.2 之间的重大更改,您必须在使用 Kubernetes v1.10.0+ 之前更新非常旧的 CSI 0.1 驱动程序实现,并且必须至少与 0.2 兼容。

Kubernetes VolumeAttachment 对象(在 v1.9 中在 storage v1alpha1 组中引入,在 v1.10 中添加到 v1beta1 组中)在 v1.13 中添加到了 storage v1 组中。做过。

Kubernetes CSIPersistentVolumeSource 卷类型已升级为 GA。

Kubelet 设备插件注册机制(kubelet 如何发现新的 CSI 驱动程序)已在 Kubernetes v1.13 中提升为 GA。

如果如何部署 CSI 驱动程序?

对如何在 Kubernetes 上部署或管理现有 CSI 驱动程序感兴趣的 Kubernetes 用户应参阅 CSI 驱动程序作者提供的文档,需要查看。

如何使用 CSI 卷

假设 CSI 存储插件部署在 Kubernetes 集群上,您可以使用熟悉的 Kubernetes 存储 API 对象(Persistent VolumeClaims、Persistent ) CSI 卷(通过卷、存储类)。 可以在此处找到文档。

CSI 的 Kubernetes 实现是 Kubernetes v1.13 中的一项 GA 功能,但可能需要以下标志:

API 服务器二进制文件和 kubelet 二进制文件:

>

--allow-privileged=true

大多数 CSI 插件需要双向挂载传播,并且只能在特权 Pod 上启用。 仅在该标志设置为 true 的集群中才允许使用特权 Pod。 这是某些环境(例如 GCE、GKE 和 kubeadm)的默认设置。

动态配置

可以启用通过创建指向 CSI 插件的 StorageClass 来支持动态配置的 CSI 存储插件自动创建/删除卷。 (创建/删除)。

例如,以下 StorageClass 通过名为“csi-driver.example.com”的 CSI 卷插件动态创建“fast-storage”卷。

类型:StorageClassapi版本:storage.k8s.io/v1metadata:名称:fast-storagep配置程序:csi-driver.example.comparameters:类型:pd-ssd csi.storage.k8s.io/provisioner-secret-名称:mysecret csi.storage.k8s.io/provisioner- Secret-命名空间:mynamespace

CSI external-provisioner 外部配置器(v1.0.1+)是 GA 的新功能,前缀为 csi.storage.k8s.io/ 保留参数密钥。 。 如果该键不对应于一组已知的键,则该值将被忽略(不会传递给 CSI 驱动程序)。 CSI 外部配置器 v1.0.1 还支持较旧的秘密参数密钥(csiProvisionerSecretName、csiProvisionerSecretNamespace 等),这些密钥已被弃用,并且可能会在未来版本的 CSI 外部配置器中删除。

动态配置是通过创建 PersistentVolumeClaim 对象来触发的。 例如,以下 PersistentVolumeClaim 使用上面的 StorageClass 触发动态配置。

apiVersion:v1kind:持久VolumeClaimmetadata:名称:my-request-for-storagespec:accessModes:-ReadWriteOnce资源:请求:存储:5Gi storageClassName:fast-storage 

调用卷配置时,参数类型:pd-ssd,通过CreateVolum传递secrete 调用被传递到 CSI 插件 csi-driver.example.com。 作为响应,外部卷插件提供一个新卷并自动创建一个 PersistentVolume 对象来表示新卷。 然后,Kubernetes 将新的 PersistentVolume 对象绑定到 Persistent VolumeClaim 并使其可供使用。

快速存储(fast-storage) 如果StorageClass被标记为“default”,则不需要在Persistent VolumeClaim中包含storageClassName,默认情况下会使用它。

预配置卷

您可以通过手动创建一个 PersistentVolume 对象来表示现有卷来公开 Kubernetes 中的现有卷。 例如,以下 PersistentVolume 公开了一个名为“existingVolumeName”的卷,该卷属于名为“csi-driver.example.com”的 CSI 存储插件。

apiVersion:v1kind:持久卷元数据:名称:my-手动-创建-pvspec:容量:存储:5Gi accessModes:- ReadWriteOncepersistentVolumeReclaimPolicy:保留csi:驱动程序:csi[k4 ]driver.example.comvolumeHandle:existingVolumeNamereadOnly:falsefsType:ext4volumeAttributes:foo:barcontrollerPublishSecretRef: name: mysecret1 命名空间: mynamespace nodeStageSecretRef: name: mysecret2 命名空间: mynamespace nodePublishSecretRef name: mysecret3 命名空间: mynamespace

附加和挂载

您可以随时执行此操作。 CSI 卷的路径在 Pod 或 Pod 模板中引用。

kind: PodapiVersion: v1metadata: name: my-podspec:containers: - name: my-frontend image: nginx volumeMounts: - mountPath: "/var/www/html " 名称:my-csi-volume 卷:- 名称:my-csi-volumepersistentVolumeClaim:claimName: my-request-for-storage

当引用CSI卷的Pod被调度时,Kubernetes会触发对外部CSI插件(例如ControllerPublish Volume、NodeStageVolume和NodePublish Volume)的相应操作,以确保指定的卷已附加,确保已挂载。 由 pod 内的容器使用。

点击此处了解更多信息。请参阅 CSI 实现设计文档和文档。

如何编写 CSI 驱动程序?

kubernetes-csi 网站提供了有关如何在 Kubernetes 上开发、部署和测试 CSI 驱动程序的详细信息。它。 一般来说,CSI 驱动程序必须在 Kubernetes 中部署以下 sidecar/helper 容器:

external-attacher

观察 Kubernetes VolumeAttachment 对象并触发 ControllerPublish 和 ControllerUnpublish 操作。 对于 CSI 端点。

external-provisioner

观察 Kubernetes PersistentVolumeClaim 对象并触发 CSI 端点上的创建卷和删除卷操作。

node-driver-registrar

使用kubelet通过Kubelet设备插件机制注册CSI驱动程序。

cluster-driver-registrar (alpha)

创建 CSIDriver 对象以向 Kubernetes 集群注册 CSI 驱动程序。 驱动程序可以自定义 Kubernetes 与其交互的方式。

外部 - 快照(Alpha)

监视 Kubernetes VolumeSnapshot CRD 对象并触发 CSI 端点的 CreateSnapshot 和 DeleteSnapshot 操作。

livenessprobe

可以包含在 CSI 插件 pod 中以启用 Kubernetes LiveneSS 探针机制。

存储供应商可以使用这些组件来构建其插件的 Kubernetes 部署,而不需要 CSI 驱动程序了解 Kubernetes。

CSI 驱动程序列表

CSI 驱动程序由第三方开发和维护。 可以在此处找到 CSI 驱动程序列表。

树内(in-tree)卷插件怎么样?

计划将大多数持久性远程树内卷插件迁移到 CSI 。 请参阅设计文档以获取更多信息。

GA 限制

CSI 的 GA 实现具有以下限制:

临时本地卷必须创建 PVC(角色中不支持 pod 内联引用 CSI)。

下一步?

我们正在努力将 Kubernetes CSI alpha 功能转移到 beta 版:

原始块卷

拓扑意识。 Kubernetes 能够理解和影响 CSI 卷的配置位置(区域可用区、区域等)。

取决于 CSI CRD 功能(例如“跳过附加”和“挂载上的 Pod 信息”)。

卷快照

我们正在努力完成对本地临时卷的支持。

将远程持久化树内卷插件迁移到CSI。

如何参与?

Slack 通道 wg-csi 和 Google 讨论板 kubernetes-sig-storage-wg-csi 以及标准 SIG Storage 通信通道均可通过 SIG 访问存储团队的绝佳媒体。

与 Kubernetes 一样,这个项目是来自不同背景的许多贡献者协作的结果。 我们非常感谢我们的新贡献者,他们主动帮助我们在本季度向公众推出该项目。

萨阿德·阿里 (saad-ali)

米歇尔·欧 (msau42)

谢尔盖·贝兹贝 (Sergei Bezbe)rkhi (sbezverk)

Masaki Kimura (mkimurom)

Patrick Ohly (pohly)

Luis Pabón (lpabon)

Jan Šafránek ( jsafrane)

弗拉基米尔·维维安(vladimirvivien)

程星(verult)

星阳(xing-yang)

David朱(davidz627)

如果您有兴趣参与CSI或Kubernetes存储系统某些部分的设计和开发,请加入Kubernetes存储特别兴趣组(SIG)。 我们正在快速发展,并始终欢迎新的贡献者。


2019 KubeCon + CloudNativeCon 中国论坛提案征集(CFP)现已开放

KubeCon + CloudNativeCon 论坛邀请用户、开发者、人员聚集在一起进行面对面的沟通和协作。 与会者将包括来自 Kubernetes、Prometheus 和其他云原生计算基金会 (CNCF) 赞助项目的领导者,共同讨论云原生生态系统的发展方向。

2019中国开源峰会提案征集(CFP)现已开放

中国开源峰会将使参与者能够协作和分享信息。 了解最新、最有趣的开源技术,包括 Linux、容器、云技术、网络、微服务等。 获取有关如何驾驭和领导开源社区的信息。

会议日期:

征集提案截止日期:太平洋标准时间 2 月 15 日星期五晚上 11:59

电话会议通知日期提案提案:2019 年 4 月 1 日

会议议程演示日期:2019 年 4 月 3 日

幻灯片提交截止日期:6 月 17 日星期一

会议活动日期:2019 年 6 月 24 日至 26 日

p>

2019 KubeCon + CloudNativeCon +开源峰会中国赞助计划发布

未经允许不得转载:主机频道 » Kubernetes的容器存储接口(CSI)是GA(kubernetes storageclass)

评论 抢沙发

评论前必须登录!