本文发表时间已超过一年。较旧的文章可能包含过时的内容。请检查页面中的信息自发布以来是否已变得不正确。
Kubernetes 1.25:Kubernetes 内置到 CSI 卷迁移状态更新
Kubernetes 内置存储插件到 容器存储接口 (CSI) 迁移基础设施自 v1.17 版本以来已经处于 beta 阶段。CSI 迁移作为 alpha 版本在 Kubernetes v1.14 中引入。此后,SIG Storage 和其他 Kubernetes 特殊兴趣小组正在努力确保功能稳定性和兼容性,为 CSI 迁移功能进入 GA 做准备。
SIG Storage 很高兴地宣布,核心 CSI 迁移功能在 Kubernetes v1.25 版本中正式可用!
SIG Storage 在 v1.23 版本中发布了一篇博客文章,CSI 迁移状态更新,其中讨论了每个存储驱动程序的 CSI 迁移状态。现在已经过去一段时间了,本文旨在提供 Kubernetes v1.25 中每个存储驱动程序的 CSI 迁移状态的最新更新。
快速回顾:什么是 CSI 迁移,为什么要迁移?
容器存储接口(CSI)旨在帮助 Kubernetes 替换其现有的、内置的存储驱动程序机制,特别是特定于供应商的插件。Kubernetes 对 容器存储接口 的支持自 Kubernetes v1.13 以来已普遍可用。引入对使用 CSI 驱动程序的支持是为了更容易地添加和维护 Kubernetes 与存储后端技术之间的新集成。使用 CSI 驱动程序可以提高可维护性(驱动程序作者可以定义自己的发布周期和支持生命周期),并减少漏洞的可能性(随着内置代码的减少,犯错的风险降低,并且集群操作员可以选择集群所需的存储驱动程序)。
随着越来越多的 CSI 驱动程序被创建并达到生产就绪状态,SIG Storage 希望所有 Kubernetes 用户都能从 CSI 模型中受益。但是,由于 k8s 架构约定,我们无法破坏与现有存储 API 类型的 API 兼容性。我们提出的解决方案是 CSI 迁移:一个将内置 API 转换为等效的 CSI API 并将操作委托给替换 CSI 驱动程序的功能。
CSI 迁移工作使得可以使用相应的存储后端的 CSI 驱动程序 来替换现有的内置存储插件,例如 kubernetes.io/gce-pd
或 kubernetes.io/aws-ebs
。如果 CSI 迁移工作正常,Kubernetes 最终用户不应该注意到任何差异。现有的 StorageClass
、PersistentVolume
和 PersistentVolumeClaim
对象应继续工作。当 Kubernetes 集群管理员更新集群以启用 CSI 迁移时,利用由内置存储插件支持的 PVC 的现有工作负载将继续像往常一样运行。但是,在后台,Kubernetes 将所有存储管理操作的控制权(以前针对内置驱动程序)移交给 CSI 驱动程序。
例如,假设您是 kubernetes.io/gce-pd
用户;在 CSI 迁移之后,您仍然可以使用 kubernetes.io/gce-pd
来配置新卷、挂载现有的 GCE-PD 卷或删除现有卷。所有现有的 API 和接口都将继续正常工作。但是,底层函数调用都通过 GCE PD CSI 驱动程序 而不是内置的 Kubernetes 函数。
这为最终用户实现了平稳过渡。此外,作为存储插件开发人员,我们可以减少维护内置存储插件的负担,并最终将其从核心 Kubernetes 二进制文件中删除。
时间表/状态是什么?
下表显示了每个驱动程序的当前和目标发布版本
驱动程序 | Alpha | Beta (内置已弃用) | Beta (默认启用) | GA | 目标“内置插件”移除 |
---|---|---|---|---|---|
AWS EBS | 1.14 | 1.17 | 1.23 | 1.25 | 1.27 (目标) |
Azure 磁盘 | 1.15 | 1.19 | 1.23 | 1.24 | 1.26 (目标) |
Azure 文件 | 1.15 | 1.21 | 1.24 | 1.26 (目标) | 1.28 (目标) |
Ceph FS | 1.26 (目标) | ||||
Ceph RBD | 1.23 | 1.26 (目标) | 1.27 (目标) | 1.28 (目标) | 1.30 (目标) |
GCE PD | 1.14 | 1.17 | 1.23 | 1.25 | 1.27 (目标) |
OpenStack Cinder | 1.14 | 1.18 | 1.21 | 1.24 | 1.26 (目标) |
Portworx | 1.23 | 1.25 | 1.26 (目标) | 1.27 (目标) | 1.29 (目标) |
vSphere | 1.18 | 1.19 | 1.25 | 1.26 (目标) | 1.28 (目标) |
以下存储驱动程序将不提供 CSI 迁移支持。scaleio
、flocker
、quobyte
和 storageos
驱动程序已被删除;其他驱动程序已弃用,将在即将发布的版本中从核心 Kubernetes 中删除。
驱动程序 | 已弃用 | 代码移除 |
---|---|---|
Flocker | 1.22 | 1.25 |
GlusterFS | 1.25 | 1.26 (目标) |
Quobyte | 1.22 | 1.25 |
ScaleIO | 1.16 | 1.22 |
StorageOS | 1.22 | 1.25 |
核心 CSI 迁移功能达到 GA 意味着什么?
核心 CSI 迁移达到 GA 意味着 CSI 迁移的通用框架、核心库和 API 对于 Kubernetes v1.25 是稳定的,并且也将成为未来 Kubernetes 版本的一部分。
- 如果您是 Kubernetes 发行版维护者,这意味着如果您之前禁用了
CSIMigration
功能门,则您不再允许这样做,因为该功能门已被锁定。 - 如果您是 Kubernetes 存储驱动程序开发人员,这意味着您可以预期 CSI 迁移库中不会有向后不兼容的更改。
- 如果您是 Kubernetes 维护者,则您的日常开发流程不会发生任何变化。
- 如果您是 Kubernetes 用户,则您的日常使用流程不会发生任何变化。如果您遇到任何与存储相关的问题,请联系操作您集群的人员(如果您是操作者,请联系您的 Kubernetes 发行版的提供商,或从社区获得帮助)。
存储驱动程序 CSI 迁移达到 GA 意味着什么?
存储驱动程序 CSI 迁移达到 GA 意味着特定的存储驱动程序支持 CSI 迁移。预期内置插件与 CSI 驱动程序之间具有功能对等性。
- 如果您是 Kubernetes 发行版维护者,请确保在发行版上安装相应的 CSI 驱动程序。并确保您没有禁用特定的
CSIMigration{provider}
标志,因为它们已被锁定。 - 如果您是 Kubernetes 存储驱动程序维护者,请确保 CSI 驱动程序可以确保在支持 CSI 迁移的情况下具有功能对等性。
- 如果您是 Kubernetes 维护者/开发人员,则您的日常开发流程不会发生任何变化。
- 如果您是 Kubernetes 用户,CSI 迁移功能对您来说应该是完全透明的,唯一的要求是安装相应的 CSI 驱动程序。
下一步是什么?
我们预计云提供商的内置存储插件代码将在 Kubernetes 的 v1.26 和 v1.27 版本中开始移除。越来越多的支持 CSI 迁移的驱动程序将在即将发布的版本中达到 GA。
如何参与?
Kubernetes Slack 频道 #csi-migration 以及任何标准的 SIG Storage 通信频道 都是联系 SIG Storage 和迁移工作组团队的绝佳途径。
像所有 Kubernetes 项目一样,该项目是来自不同背景的许多贡献者共同努力的结果。我们非常感谢这些季度以来为帮助推动项目前进的贡献者。
- Xing Yang (xing-yang)
- Hemant Kumar (gnufied)
特别感谢以下人员对 CSI 迁移功能提供的富有洞察力的审查、周全的考虑和宝贵贡献
- Andy Zhang (andyzhangz)
- Divyen Patel (divyenpatel)
- Deep Debroy (ddebroy)
- Humble Devassy Chirammal (humblec)
- Ismail Alidzhikov (ialidzhikov)
- Jordan Liggitt (liggitt)
- Matthew Cary (mattcary)
- Matthew Wong (wongma7)
- Neha Arora (nearora-msft)
- Oksana Naumov (trierra)
- Saad Ali (saad-ali)
- Michelle Au (msau42)
那些有兴趣参与 CSI 或 Kubernetes 存储系统的任何部分的设计和开发的人员,请加入 Kubernetes 存储特别兴趣小组 (SIG)。我们正在快速发展,并始终欢迎新的贡献者。