前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Kubernetes引入对Windows CSI的alpha支持

Kubernetes引入对Windows CSI的alpha支持

作者头像
CNCF
发布2020-04-14 15:07:03
8550
发布2020-04-14 15:07:03
举报
文章被收录于专栏:CNCF

作者:Deep Debroy [Docker],Jing Xu[谷歌],Krishnakumar R(KK)[微软]

Windows CSI代理(CSI Proxy)的alpha版本与Kubernetes 1.18一起发布。通过允许Windows中的容器执行特权存储操作,CSI代理允许CSI驱动程序(CSI Driver)在Windows上运行。

https://github.com/kubernetes-csi/csi-proxy

背景

在Kubernetes 1.13版本,Kubernetes容器存储接口(Container Storage Interface,CSI)达到GA。CSI已经成为将块和文件存储暴露给容器编制系统(Container Orchestration,CO,如Kubernetes)上的容器工作负载的标准。它允许第三方存储提供商编写和部署插件,而不需要修改Kubernetes的核心代码库。所有新的存储特性都将利用CSI,因此让CSI驱动程序在Windows上工作是很重要的。

Kubernetes中的CSI驱动程序有两个主要组件:控制器插件(controller plugin)和节点插件(node plugin)。控制器插件通常不需要直接访问主机,可以通过Kubernetes API和外部控制平面服务(例如云存储服务)执行所有操作。然而,节点插件需要直接访问主机,以使块设备和/或文件系统对Kubernetes kubelet可用。这在以前对于Windows上的容器是不可能的。随着CSIProxy的发布,CSI驱动程序现在可以在节点上执行存储操作。这使得容器化的CSI驱动程序可以在Windows上运行。

CSI对Windows集群的支持

建议将CSI驱动程序(例如AzureDisk、GCE PD等)部署为容器。CSI驱动程序的节点插件通常在集群中的每个工作节点上运行(作为DaemonSet)。节点插件容器需要以提升的权限运行,以执行与存储相关的操作。但是,Windows目前不支持特权容器。为了解决这个问题,CSIProxy使节点插件现在可以部署为无特权的pod,然后使用代理在节点上执行特权存储操作。

节点插件与CSIProxy的交互

这个KEP说明了CSI代理的设计。下图描述了与CSI节点插件和CSI代理之间的交互。

https://github.com/kubernetes/enhancements/blob/master/keps/sig-windows/20190714-windows-csi-support.md

CSI代理作为一个进程直接在每个windows节点的主机上运行--非常类似于kubelet。kubelet中的CSI代码与节点驱动注册器(node driver registrar)组件和CSI节点插件交互。节点驱动注册器是一个社区维护的CSI项目,负责注册特定于供应商的节点插件。kubelet在节点插件上发起CSI gRPC调用,比如NodeStageVolume/NodePublishVolume,如图所示。节点插件与CSIProxy进程接口,执行本地主机OS存储相关操作,如创建/枚举卷、挂载/卸载等。

https://kubernetes-csi.github.io/docs/node-driver-registrar.html

CSI代理架构和实现

在alpha版本中,CSIProxy支持以下API组:Filesystem、Disk、Volume、SMB。

CSI代理通过Windows命名管道(named pipe)暴露每个API组。通信是通过这些管道上以gRPC来执行的。CSI代理的客户端库使用这些管道与CSI代理API进行交互。例如,filesystem API是通过像\.\pipe\csi-proxy-filesystem-v1alpha1管道暴露,volume API通过\.\pipe\csi-proxy-volume-v1alpha1,等等。

从每个API组服务中,调用被路由到host API层。Host API通过Powershell或Go标准库调用来调用主机Windows OS。例如,当filesystem API Rmdir被调用时,API组服务将解码grpc结构RmdirRequest,并找到要删除的目录并调用到Host API层。这将导致对os.Remove的调用(一个Go标准库调用),来执行删除操作。

控制流的细节

下图以CSI调用NodeStageVolume为例,解释了kubelet、CSI插件和CSI代理之间的交互,以提供一个新的卷。在节点插件接收到CSI RPC调用后,它相应地对CSIproxy进行一些调用。作为NodeStageVolume调用的结果,首先使用两个Disk API调用之一确定所需的磁盘:ListDiskLocations(在AzureDisk驱动程序中)或GetDiskNumberByName(在GCE PD驱动程序中)。如果磁盘没有分区,则调用PartitionDisk(Disk API组)。随后,调用诸如ListVolumesOnDisk、FormatVolume和MountVolume等Volume API调用来执行所需的其余操作。类似的操作在NodeUnstageVolume、NodePublishVolume、NodeUnpublishedVolume等情况下执行。

目前的支持

CSI代理现在是alpha。你可以在CSIProxy GitHub仓库中找到更多详细信息。目前有两家云提供商为Windows上的CSI驱动程序提供alpha支持:Azure和GCE。

未来的计划

Beta版的一个重点领域将是基于Windows的构建和CI/CD设置,以提高代码库的稳定性和质量。另一个领域是直接使用基于Go的调用来代替Powershell命令集来提高性能。增强可调试性和增加更多的测试是团队将要研究的其他领域。

如何参与?

这个项目和Kubernetes的所有项目一样,是来自不同背景的许多贡献者共同努力的结果。那些有兴趣参与CSI代理的设计和开发,或Kubernetes存储系统的任何部分,可以加入Kubernetes存储特别兴趣组(SIG)。我们正在快速成长,欢迎新的贡献者。

https://github.com/kubernetes/community/tree/master/sig-storage

对更多细节感兴趣的人来说,CSIProxy GitHub仓库是一个很好的起点。另外,kubernetes slack上的#csi-windows频道也可用于专门针对Windows上的CSI的讨论。

https://github.com/kubernetes-csi/csi-proxy

https://kubernetes.slack.com/messages/csi-windows

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-04-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 CNCF 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档