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