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