近期发布的 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 内的所有容器生命周期一致。

基础介绍

一些名词解释

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 即可。

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

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

动态配置

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

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

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 的工作机制如下图所示:

  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。

Sidecar 模式

组件

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

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

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

工作原理

工作机制如下图所示:

  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 客户端,应用的挂载点相互隔离。

这种模式下,对环境的要求是可以使用 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 环境。

Sidecar-详解 JuiceFS CSI Driver 新模式的更多相关文章

  1. CSI 工作原理与JuiceFS CSI Driver 的架构设计详解

    容器存储接口(Container Storage Interface)简称 CSI,CSI 建立了行业标准接口的规范,借助 CSI 容器编排系统(CO)可以将任意存储系统暴露给自己的容器工作负载.Ju ...

  2. JuiceFS CSI Driver 的最佳实践

    文章根据 Juicedata 工程师朱唯唯,在云原生 Meetup 杭州站所作主题演讲<JuiceFS CSI Driver 的最佳实践>整理而成. 大家好,我是来自 Juicedata ...

  3. LVS原理详解(3种工作模式及8种调度算法)

    2017年1月12日, 星期四 LVS原理详解(3种工作模式及8种调度算法)   LVS原理详解及部署之二:LVS原理详解(3种工作方式8种调度算法) 作者:woshiliwentong  发布日期: ...

  4. 详解Java8特性之新的日期时间 API

    详解Java8特性之新的日期时间 API http://blog.csdn.net/timheath/article/details/71326329 Java8中时间日期库的20个常用使用示例 ht ...

  5. JuiceFS CSI Driver 常见问题排查指南

    Kubernetes 作为资源调度和应用编排的开源系统,正在成为云计算和现代 IT 基础架构的通用平台.JuiceFS CSI Driver 实现了容器编排系统的存储接口,使得用户可以在 Kubern ...

  6. 图文详解AO打印(标准模式)

    一.概述   AO打印是英文Active-Online Print的简称,也称主动在线打印.打印前支持AO通讯协议的AO打印机(购买地址>>)首先通过普通网络与C-Lodop服务保持在线链 ...

  7. Java8初体验(二)Stream语法详解---符合人的思维模式,数据源--》stream-->干什么事(具体怎么做,就交给Stream)--》聚合

    Function.identity()是什么? // 将Stream转换成容器或Map Stream<String> stream = Stream.of("I", & ...

  8. 详解Vue的slot新用法

    摘要: 理解Vue插槽. 作者:前端小智 原文:vue 2.6 中 slot 的新用法 Fundebug经授权转载,版权归原作者所有. 为了保证的可读性,本文采用意译而非直译. 最近发布不久的Vue ...

  9. 详解 Seata Golang 客户端 AT 模式及其使用

    源码seata-golang 概述   我们知道 Seata Java Client 的 AT 模式,通过代理数据源,实现了对业务代码无侵入的分布式事务协调机制,将与 Transaction Coor ...

  10. android中的LaunchMode详解----四种加载模式

    Activity有四种加载模式: standard singleTop singleTask singleInstance 配置加载模式的位置在AndroidManifest.xml文件中activi ...

随机推荐

  1. Qt对象跨线程出现的问题记录,以及解决方案

    Qt在跨线程开发的时候可能会出现不少问题,在这里记录一下 Qt目前用下来还是非常强大的,虽然只是用在桌面端程序开发上,但是其强大的桌面开发库真的挺好用的(Layout除外,你妈死了). Qt除了UI, ...

  2. RuntimeError: setuptools >= 41 required to build

    使用命令python setup.py install 安装第三方库报RuntimeError: setuptools >= 41 required to build 原因setuptools版 ...

  3. JavaScript:立即执行函数

    想象一下,如果我希望某个代码块,只执行一次,就不再执行,应该怎么办? 代码块肯定是用函数来表示,执行肯定是调用函数,但是确保只执行一次,该怎么办? 我们为什么可以多次调用函数,因为函数名指向了函数的内 ...

  4. JavaScript:严格模式"use strict"

    因为历史遗留问题,JS其实存在很多feature,以及兼容性问题: 所以JS在ES5之后,新增了一个严格模式,以区别于普通模式,用来激活新的特性,使得某些代码的执行准确无误: 如何开启严格模式? 在J ...

  5. 使用 sp_executesql 动态执行sql

    参考: https://docs.microsoft.com/zh-cn/sql/relational-databases/system-stored-procedures/sp-executesql ...

  6. Nodejs报错记录

    ◉ digital envelope routines::unsupported D:\workspace\vuedemo> npm run dev ... error:0308010C:dig ...

  7. Web初级——模块和Bom

    模块导入 导出声明 定义时声明 在定义声明函数.类时不用加分号 // 导出数组 export let months = ['Jan', 'Feb', 'Mar','Apr', 'Aug', 'Sep' ...

  8. 如何在现有的Vue项目中嵌入 Blazor项目?

    目前官方只提供了angular和react俩种示例,所以本教程将来讲解如何在Vue的现有项目中使用,上期已经做好了react的教材! 准备流程 Vue 项目创建流程 使用Vue创建一个Demo项目 全 ...

  9. 1.MAC获取文件路径;2.MAC使用SSH连接远程服务器,实现文件上传下载

    首先来说一下如何获取文件路径 ····打开terminal,把文件拖进terminal 窗口,自动显示路径. 接下来说一下使用SSH连接远程服务器,实现文件上传下载 1.  上传本地文件到服务器 sc ...

  10. Lspatch使用

    前言 xp模块可以使用户获得应用原本所没有的功能. 使用模块需要修改应用.对于Root用户来说,使用Lsposed是个不错的选择,也方便. 但是大多数用户没有将手机Root. 所以Lsposed的开发 ...