12

Sidecar-详解 JuiceFS CSI Driver 新模式 - JuiceFS

 2 years ago
source link: https://www.cnblogs.com/JuiceData/p/17175452.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

Sidecar-详解 JuiceFS CSI Driver 新模式

近期发布的 JuiceFS CSI Driver v0.18 版本中,我们提供了一种全新的方式访问文件系统,即 JuiceFS 客户端以 Sidecar 方式运行于应用 Pod 中,且客户端与应用同生命周期

这个全新的功能将帮助用户在 Serverless Kubernetes 环境中使用 JuiceFS;与传统的 Mount Pod 模式相比,问题排查更方便、客户端管理更简单。

今天在这篇文章中,将为大家介绍 Sidecar 模式的工作原理以及应用场景, 另外在文末还附上了用户关心的问题与解答。

What is a sidecar in cloud?
Sidecar 是一种常见的设计模式,这个概念在容器和微服务的领域中非常流行。回到 sidecar 的字面意思,如下图所示,就是指摩托车边上安装的这个小车,以增加摩托车的承载能力,它非常形象地表达了Sidecar 容器和应用容器的关系。在云环境中,他们成为一体,共享 Kubernetes pod 的环境,并且同一 pod 内的所有容器生命周期一致。

1240

一些名词解释

Pod:可以在 Kubernetes 中创建和管理的、最小的可部署的计算单元
Deployment / DaemonSet / StatefulSet / Job:声明式资源,对 Pod 的不同管理方式
PV(PersistentVolume):集群中的一块存储
PVC(PersistentVolumeClaim):表达的是用户对存储的请求
StorageClass:为管理员提供了描述存储 "类" 的方法
CSI(Container Storage Interface):容器存储接口

存储的管理是一个与计算实例的管理完全不同的问题。PV 表示的是集群中的一块存储,可以由管理员事先创建;或者使用 StorageClass 来动态创建,然后用户在 Pod 中通过指定 PVC 来使用。根据 PV 的创建方式,可以分为静态配置和动态配置两种使用方式,下面一一介绍。

静态配置
由系统管理员创建若干 PV,在 PV 中声明包含了 JuiceFS 系统参数的 Secret,以备用户使用。用户创建 PVC,声明使用具体的 PV,在应用 Pod 中配置使用 PVC 即可。

资源间的关系如下图所示:

1240

静态配置每一个应用使用都需要系统管理员对应创建一个 PV,在简单测试场景或者应用间数据共享时使用比较广泛。

动态配置
由系统管理员创建 StorageClass,在 StorageClass 中声明包含了 JuiceFS 系统参数的 Secret;然后用户创建 PVC,声明使用具体的 StorageClass,PVC 创建之后,Kubernetes 会根据 StorageClass 自动创建出一个 PV 与 PVC 进行绑定,最后用户在应用 Pod 中配置使用 PVC。

资源间的关系如下图所示:

1240

JuiceFS CSI Driver 的工作原理

用户通过在 PV / StorageClass 中指定 JuiceFS 的参数,进而在集群中使用 JuiceFS。JuiceFS CSI Driver 则负责挂载 JuiceFS 文件系统。

JuiceFS CSI Driver 提供了两种方式挂载文件系统,一种是现有的 Mount Pod 模式,另一种则是本次发布的版本中提供的 Sidecar 容器的方式。下面一一介绍两种模式以及二者的对比。

Mount Pod 模式

组件
Mount Pod 模式涉及到的组件包括 CSI Controller Service 和 CSI Node Service,职责分别为:

• Controller Service:以 PV id 为名,在 JuiceFS 文件系统中创建子目录。
• Node Service:创建 Mount Pod(JuiceFS 客户端),并挂载应用 Pod。下文会详细介绍其工作机制。

这种模式对环境的要求:
• 可以使用 FUSE 设备,在容器中体现为需要特权(Privilege);
• 可以运行 DaemonSet ,默认每台机器上都需要运行一个 CSI Node pod。

工作原理
CSI Node Service 的工作机制如下图所示:

1240
  1. 用户创建应用 Pod,Pod 中声明使用 JuiceFS 的 PVC;
  2. CSI Node 负责在应用 Pod 所在节点创建 Mount Pod;
  3. Mount Pod 启动,执行 JuiceFS 客户端挂载,运行 JuiceFS 客户端,挂载路径暴露在宿主机上;
  4. CSI Node 等待 Mount Pod 启动成功后,将 PV 对应的 JuiceFS 子目录 bind 到容器内,路径为其声明的 VolumeMount 路径;
  5. Kubelet 创建应用 Pod。

PVC 与 Mount Pod 的关系
PVC、PV 和 Pod 的关系可以用下图表示,即在同一个节点上,一个 PVC 会对应一个 Mount Pod。

1240

Sidecar 模式

组件
JuiceFS FUSE 客户端以 sidecar 容器的方式与应用容器一起运行在同一个 Pod 中。

CSI Driver 组件只有 CSI Controller Service。其职责为:

  1. 以 PV id 为名在 JuiceFS 文件系统中创建子目录;
  2. 向 ApiServer 注册 webhook,在 pod 中注入 JuiceFS 客户端的 sidecar 容器。

工作原理
工作机制如下图所示:

1240
  1. CSI Controller 启动时向 ApiServer 注册 webhook;
  2. 应用 Pod 指定使用 JuiceFS 的 PVC;
  3. ApiServer 在创建应用 Pod 前调用 CSI Controller 的 webhook 接口;
  4. CSI Controller 向应用 Pod 中注入 JuiceFS 客户端容器(sidecar);
  5. ApiServer 创建 Pod,sidecar 容器启动后执行挂载,并运行 JuiceFS 客户端,客户端则按需访问元数据引擎和对象存储;应用容器启动后可直接访问文件系统。

PVC 与 Sidecar 的关系
PVC、PV 和 Pod 的关系可以用下图表示,即每个应用 pod 单独拥有自己的 JuiceFS 客户端,应用的挂载点相互隔离。

1240

这种模式下,对环境的要求是可以使用 FUSE 设备,在容器中体现为需要特权(Privilege)容器。

Sidecar 容器的资源请求默认为 1 CPU 和 1GiB 内存,资源约束默认为 2 CPU 和 5GiB 内存。当集群资源紧俏时,我们还可以在 PV/StorageClass 中对 Sidecar 容器的使用资源进行配置。

另外,Sidecar 容器和应用容器的挂载点共享是通过 HostPath 实现的,不是直接共享,所以当 Sidecar 容器发生意外重启后,应用容器中的挂载点不会自行恢复,需要整个 Pod 重新创建。

两种模式的优缺点及使用场景

Sidecar 模式:

• 优势:故障排查简单;所有环境都可用;
• 缺点:资源开销大,每个应用 Pod 独享 JuiceFS 客户端;
• 使用场景:Serverless Kubernetes 环境(可以使用 FUSE);应用任务量不大的标准 Kubernetes 环境。

Mount Pod 模式:

• 优势:资源开销小,使用相同 PVC 的所用应用 Pod 共享同一个 JuiceFS 客户端;
• 缺点:故障排查复杂;Serverless 环境不可用。
• 使用场景:应用任务较多、标准的 Kubernetes 环境。


Recommend

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK