问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

Kubernetes CSI 简介:工作流程和原理

创作时间:
作者:
@小白创作中心

Kubernetes CSI 简介:工作流程和原理

引用
1
来源
1.
https://rifewang.github.io/k8s-csi/

Kubernetes CSI(容器存储接口)是Kubernetes中用于管理存储资源的重要组件。本文将以NFS为例,详细介绍CSI驱动的工作流程和原理,帮助读者理解CSI如何实现存储资源的管理和使用。

CSI 概述

CSI驱动通常分为两个部分:

  • Controller plugin:负责存储资源的管理,如卷的创建、删除、扩容、快照等。
  • Node plugin:处理节点级别的存储操作,负责在具体的节点上执行卷的挂载和卸载等任务。

CSI与Kubernetes组件的交互:

  • Controller plugin与kube-api-server交互,监听存储资源的变更并执行相应操作。
  • Node plugin向kubelet注册自己,而后kubelet会向其发起调用。

为了简化CSI驱动程序的开发,社区提供了很多CSI Sidecar Containers,包括:

  • external-provisioner:用于卷的动态配置。监听PVC对象,向CSI驱动程序发起CreateVolume或DeleteVolume调用。
  • node-driver-registrar:负责将CSI驱动注册到kubelet,以便后续的调用。
  • external-attacher:用于卷的attach/detach hooks集成。
  • external-resizer:用于卷的扩容。
  • external-snapshotter:处理卷的快照。
  • livenessprobe:监控CSI驱动程序的健康状况。

CSI 使用过程

1. CSI 驱动准备阶段

确保集群中已正确安装CSI驱动,通常:

  • Controller plugin以Deployment或StatefulSet的方式部署。
  • Node plugin由于是节点级别的操作,所以部署为DaemonSet,每个节点运行一个Pod。

安装完成后,Controller plugin会向kube-api-server监听相关的资源对象,Node plugin则会向kubelet注册自己。

2. 卷的动态配置

集群管理员创建StorageClass对象来声明存储类型。用户创建PVC对象并指定StorageClass,此时Controller plugin中的:

  • provisioner监听到PVC创建后,向nfs-driver发起gRPC CreateVolume调用。
  • nfs-driver向NFS server准备好共享存储目录。
  • 最后,provisioner创建PV。至此,PVC与PV完成了绑定。

3. 创建 Pod 并使用卷

用户创建Pod并使用卷。kube-api-server接受到请求,kube-scheduler将Pod调度到节点上。该节点上的kubelet向Node plugin发起gRPC NodePublishVolume调用,由Node plugin中的nfs-driver(具体的CSI驱动程序)完成文件目录的挂载。至此,Pod中的应用程序便可以使用挂载好的文件目录了,就像使用本地文件系统一样。

然而,Pod中的应用程序实际操作的却是NFS远程共享目录,这又是怎么做到的?

Linux VFS

Linux在实际的文件系统之上,其实还有一层VFS(virtual filesystem)虚拟文件系统。

VFS是一个抽象层,它允许应用程序通过统一的系统调用来操作不同类型的文件系统。无论是本地文件系统还是远程文件系统(如NFS),操作都经过VFS中转。对于挂载了NFS目录的系统,VFS会将相应的系统调用转交给NFS客户端,NFS客户端则使用RPC网络通信与NFS服务器进行交互。

总结

除了NFS之外,CephFS等其他分布式存储系统也采用了类似的工作原理和流程。CSI定义了标准化的gRPC协议,以及CSI驱动的交互过程和架构,使得各种存储系统可以通过统一的接口集成到Kubernetes中。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号