本文发表已超过一年。较早的文章可能包含过时内容。请检查页面中的信息自发布以来是否已失效。
Kubernetes 1.22: CSI Windows 支持(含 CSI Proxy)达到 GA
与 Kubernetes 1.22 一同发布的还有适用于 Windows 的 CSI Proxy 稳定版。CSI Proxy 使运行在 Windows 节点上的 CSI Driver 能够执行特权存储操作。
背景
Kubernetes 的 Container Storage Interface (CSI) 在 Kubernetes 1.13 版本中达到 GA。CSI 已成为在 Kubernetes 等容器编排系统 (CO) 上向容器化工作负载暴露块存储和文件存储的标准。它使第三方存储提供商无需修改 Kubernetes 核心代码即可编写和部署插件。旧版 in-tree Driver 已被弃用,新的存储功能在 CSI 中引入,因此让 CSI Driver 在 Windows 上工作非常重要。
Kubernetes 中的 CSI Driver 主要包含两个组件:运行在控制面上的 controller plugin 和运行在每个节点上的 node plugin。
controller plugin 通常不需要直接访问主机,可以通过 Kubernetes API 和外部控制面服务执行其所有操作。
然而,node plugin 需要直接访问主机才能将块设备和/或文件系统提供给 Kubernetes kubelet。由于在 Windows 节点上的容器中运行特权操作的能力缺失,CSI Proxy 在 Kubernetes 1.18 中作为 alpha 版本引入,作为一种使容器能够执行特权存储操作的方式。这使得容器化的 CSI Driver 能够在 Windows 节点上运行。
什么是 CSI Proxy,以及 CSI Driver 如何与之交互?
当调度使用持久卷的工作负载时,它将按照 CSI Spec 中定义的一系列步骤进行。首先,工作负载将被调度到节点上运行。然后,CSI Driver 的控制器组件会将持久卷附加到节点。最后,CSI Driver 的节点组件会将持久卷挂载到节点上。
CSI Driver 的节点组件需要在 Windows 节点上运行以支持 Windows 工作负载。目前还无法从运行在 Windows 节点上的容器化应用中执行扫描磁盘设备、挂载文件系统等各种特权操作 (Windows HostProcess 容器在 Kubernetes 1.22 中作为 alpha 版引入,支持需要主机访问的功能,例如前面提到的操作)。然而,我们可以通过预装在 Windows 节点上的二进制文件 (CSI Proxy) 执行这些操作。CSI Proxy 采用客户端-服务器架构,允许 CSI Driver 通过在 CSI Proxy 启动期间创建的命名管道上暴露的 gRPC 接口发出特权存储操作。
CSI Proxy 达到 GA
CSI Proxy 开发团队与存储厂商密切合作,许多厂商早在 CSI Proxy 设计提案阶段就开始将其集成到自己的 CSI Driver 中并提供反馈。这种合作发现了需要额外 API 的用例,找到了 Bug,并确定了需要改进文档的领域。
CSI Proxy 设计 KEP 已更新,以反映当前的 CSI Proxy 架构。对于有兴趣帮助开发新特性或修复 Bug 的贡献者,还提供了额外的 开发文档。
在达到 GA 之前,我们希望确保 API 简洁且一致。我们对 v1beta API 组进行了广泛的 API 评审,确保 CSI Proxy API 方法和消息与 CSI Spec 中定义的命名约定一致。作为这项工作的一部分,我们将 Disk、Filesystem、SMB 和 Volume API 组提升至 v1。
用于从 Windows 节点获取信息并支持在 Windows 节点上挂载 iSCSI Target 的额外 Windows 系统 API,在 System API 和 iSCSI API 中作为 alpha API 提供。这些 API 将在提升至 v1 之前继续改进。
CSI Proxy v1 与所有先前的 v1betaX 版本兼容。得益于自动生成的转换层,GA 版本的 csi-proxy.exe
二进制文件可以处理来自 v1betaX 客户端的请求,该转换层将任何带版本的客户端请求转换为服务器可以处理的与版本无关的请求。为确保 CSI Proxy 向后兼容,我们为即将升级到 v1 的所有 API 组的所有 API 版本添加了多个集成测试。
CSI Proxy 与与其交互的 CSI Driver 之间的版本漂移也得到了仔细考虑。我们为 CSI Driver 提供了一个连接回退机制,以便在顺利升级到 v1 时处理 CSI Proxy 的多个版本。这使得 CSI Driver,例如 GCE PD CSI Driver,能够识别正在运行的 CSI Proxy 二进制文件的版本,并处理部署在节点上的多个 CSI Proxy 二进制文件版本。
许多 CSI Driver 已在使用 CSI Proxy v1,包括 AWS EBS CSI Driver、Azure Disk CSI Driver、GCE PD CSI Driver 和 SMB CSI Driver。
未来计划
我们对 CSI Proxy 的未来感到非常兴奋。随着即将推出的 Windows HostProcess 容器,我们正在考虑除了当前的客户端/服务器设计外,将 CSI Proxy 转换为一个供 CSI Driver 消费的库。这将使我们能够更快地迭代新功能,因为不再需要 csi-proxy.exe
二进制文件。
如何参与?
像所有 Kubernetes 项目一样,本项目也是来自不同背景的众多贡献者共同努力的结果。有兴趣参与 CSI Proxy 或 Kubernetes 存储系统任何部分的设计和开发的,可以加入 Kubernetes 存储特别兴趣小组 (SIG)。我们正在快速发展,并始终欢迎新的贡献者。
对 Windows 中 CSI 支持感兴趣的,请在 #csi-windows Kubernetes Slack 频道中联系我们。
致谢
CSI-Proxy 得到了 Kubernetes 社区成员的许多贡献。我们感谢所有通过设计评审、Bug 报告、Bug 修复以及持续支持我们达到这一里程碑的人们。