JuiceFS CSI Driver 常见问题排查指南

news2024/11/26 20:47:46

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

由于 Kubernetes 自身的复杂性,用户反馈在部署和使用 JuiceFS CSI Driver 时,会遇到不少疑难问题。本文将为大家介绍JuiceFS CSI Driver架构、常见问题排查思路。

1. JuiceFS CSI Driver 架构介绍

组件

JuiceFS CSI Driver 的架构如下图,共有两个组件:

Controller Service:以 PV id 为名在 JuiceFS 文件系统中创建子目录。

Node Service:创建 Mount Pod(JuiceFS 客户端),并挂载应用 Pod。

CSI Node 的工作机制如下图,主要将 JuiceFS 客户端放在单独的 pod 中运行,这样做有如下益处:

  • 多个 Pod 共用 PV 时,不会新建 Mount Pod,而是对已有的 Mount Pod 做引用计数,计数归零时删除 Mount Pod。
  • CSI 驱动组件与客户端解耦,方便 CSI 驱动自身的升级。

创建 PV 和使用的流程

动态创建 PV(不使用 StorageClass 的跳过此步骤):

  1. 用户创建 PVC ,使用 JuiceFS 作为 StorageClass;

  2. CSI Controller 负责在 JuiceFS 文件系统中做初始化,默认以 PV ID 为名字创建子目录,同时创建对应的 PV;

  3. Kubernetes (PV Controller 组件) 将上述用户创建的 PVC 与 CSI Controller 创建的 PV 进行绑定,此时 PVC 与 PV 的状态变为「Bound」;
    Pod 中使用 PVC:

  4. 用户创建应用 Pod,Pod 中声明使用先前创建的 PVC;

  5. CSI Node Service 负责在应用 Pod 所在节点创建 Mount Pod;

  6. Mount Pod 启动,执行 JuiceFS 客户端挂载,运行 JuiceFS 客户端,挂载路径暴露在宿主机上,路径为 /var/lib/juicefs/volume/[pv-name]

  7. CSI Node Service 等待 Mount Pod 启动成功后,将 PV 对应的 JuiceFS 子目录 bind 到容器内,路径为其声明的 VolumeMount 路径;

  8. Kubelet 创建应用 Pod。
    PVC - PV - MountPod 的关系可以用下图表示,在同一个节点上,一个 PVC 会对应一个 Mount Pod。

2. 动态配置和静态配置使用示范

创建 Secret:

apiVersion: v1
kind: Secret
metadata:
 name: juicefs-secret
type: Opaque
stringData:
 name: <JUICEFS_NAME>
 metaurl: <META_URL>
 storage: s3
 bucket: https://<BUCKET>.s3.<REGION>.amazonaws.com
 access-key: <ACCESS_KEY>
 secret-key: <SECRET_KEY>

静态配置

在应用 YAML 中申明 PVC,同时 PVC 指定 PV。

动态配置

在应用 YAML 中申明 PVC,同时 PVC 指定 StorageClass,PV 会自动创建。

3. Mount Pod 的管理

CSI Node 负责管理 Mount Pod 的生命周期,有一些特性可以根据业务情况选择使用。

第一,多个应用 pod 使用同一个 PVC时,共用 Mount Pod。主要的做法是:

  1. Mount Pod 的 annotation 中记录了应用的挂载路径,作为引用计数
  2. CSI 在后台检查其记录挂载的应用是否存活,当没有应用引用时,对其进行回收
    第二,Mount Pod 意外退出后,CSI 自动拉起,并恢复容器内的挂载点。该特性需要用户在应用端开启 HostToContainerBidirectional 。并且,在挂载点损坏前打开的文件不能恢复,需要用户侧做好重试。

第三,可以设置 Mount Pod 的资源请求及限制(CPU/Memory requests & limit)。

第四,Mount Pod 延迟退出,所有的应用都退出后,Mount Pod 延后退出。主要的使用场景数大量应用使用同一 PVC,且应用会频繁创建删除。

第五,Mount Pod 退出时清理缓存。默认情况下,Mount Pod 使用的缓存会留在宿主机上,且退出后不会清理;开启这个功能后,CSI 在回收 Mount Pod 时,会启动一个 job,清理宿主机上的缓存。

第六,设置 Mount Pod 所使用的缓存路径。默认情况缓存使用的是本地磁盘;也可以使用独立 PVC 作为缓存路径。

第七,设置 Mount Pod 的镜像。首先,CSI Node 的环境变量设置默认的 Mount 镜像;也可以在 PV/StorageClass 中设置特定的 Mount 镜像。

4. CSI 使用建议

对于 JuiceFS CSI Driver 的使用,有以下几点建议:

  1. 开启 Mount pod 的监控,可以实时查看当前集群的使用负载、缓存、I/O 等情况;
  2. 收集 Mount pod 的日志,利于故障排查;
  3. 开启挂载点自动恢复功能,提高可用性;
  4. 不要在 CSI 环境中使用 writeback 参数,writeback 需要有至少有一个客户端异步将数据上传到对象存储中,Mount Pod 与应用同生命周期,不会一直存在,有丢数据的风险。
    5.问题排错思路

常见错误有两种:一种是 PV 创建失败,属于 CSI Controller 的职责;另一种是应用 Pod 创建失败,属于 CSI Node 和 Mount Pod 的职责。

详细问题排查思路请访问,排查方法文档。

关于更多 JuiceFS CSI Driver 的文档,包括使用方法、运维管理等,可以统一访问 JuiceFS CSI Driver 文档。

一些关于 CSI 的 Q&A

  1. 如何挂载已经存在的 JuicFS 数据?

使用静态挂载,应用声明 PVC,指定 PV;动态配置会保证每个应用使用单独的子目录作为隔离,不能访问已有的数据。

2.同一个 JuiceFS 卷,如何实现挂载不同参数?

声明不同的 PVC 和 PV/StorageClass,在 PV/StorageClass 中指定不同的挂载参数。

  1. 同一个 PVC,多个 pod 如何实现不同子目录挂载?

同一个PVC对应同一个MountPod(juicefs fuse 客户端)的,应用 pod 中可以在 volumeMount 中定义不同的 subPath 实现挂载不同的子目录。

  1. “trash-days”等配置参数如何设置?

juicefs format 的参数,如 trash-days、inodes、capacity 等,在 secret 的 format-options 里设置。

  1. 如何在 CSI 环境中做缓存预热?

使用 kubectl exec 命令进入到 Mount Pod 中, df 命令查看挂载点,再用 juicefs warmup 命令做预热,其中社区版的二进制路径为 /usr/local/bin/juicefs,商业版的二进制路径为 /usr/bin/juicefs。

更多问题排查案例请访问排查案例文档。

如有帮助的话欢迎关注我们项目 Juicedata/JuiceFS 哟! (0ᴗ0✿)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/88805.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

全栈Jmeter接口测试(十一):BeanShell脚本通过BeanShell进行加解密

BeanShell脚本 BeanShell简介&#xff1a; BeanShell是一种完全符合Java语法规范的脚本语言,并且又拥有自己的一些 语法和方法&#xff1b; BeanShell是一种松散类型的脚本语言&#xff1b; BeanShell是用Java写成的&#xff0c;一个小型的、免费的、可以下载、嵌入式的 Ja…

四、Docker 镜像发布阿里云、私有库(详解、实操)第一篇

1、概述 在上一篇中我们讲解到从Docker央仓库pull下来的镜像(centos7),是没有vim、ifconfig等命令的,我们可以以centos7为基础安装vim、ifconfig等需要的命令,然后export为一个tar,然后再import为一个新的增强版本的centos7镜像。那问题来了,这种export、import方式有没…

java计算机毕业设计基于安卓Android的教务的校内人员疫情排查系统设计与实现APP

项目介绍 校内人员疫情排查系统APP管理是校内人员疫情排查系统管理中对学生必不可少的一个部分。在人们校内人员疫情排查系统管理的整个过程中,校内人员疫情排查系统APP管理担负着最重要的角色。为满足如今日益复杂的管理需求,各类校内人员疫情排查系统APP管理程序也在不断改进…

java----类的加载与其初始化

java内存分析&#xff1a; 类加载的过程&#xff1a; 类的加载与ClassLoader的理解&#xff1a; 类的初始化&#xff1a; package Collections; public class text1 { public static void main(String[]args){A anew A();System.out.println(A.m); } } class A{static {System…

语言模型(马尔可夫模型,n元语法)

参考&#xff1a;8.3. 语言模型和数据集 — 动手学深度学习 2.0.0 documentation 假设长度为T的文本序列中的词元依次为x1,x2,…,xT。 于是&#xff0c;xt&#xff08;1≤t≤T&#xff09; 可以被认为是文本序列在时间步t处的观测或标签。 在给定这样的文本序列时&#xff0c;语…

Ubuntu中使用gcc/g++编译C/C++

对于习惯了使用windows进行开发的朋友们&#xff0c;如果想要编译C语言&#xff0c;只要要在windows中安装一个可以编译的IDE即可。或者直接自己加载编译的工具链&#xff0c;使用Cmd命令行也可以完成C语言的编译。 但是如果想要在linux环境中编译C语言&#xff0c;安装编译工具…

【华为上机真题 2022】消消乐游戏

&#x1f388; 作者&#xff1a;Linux猿 &#x1f388; 简介&#xff1a;CSDN博客专家&#x1f3c6;&#xff0c;华为云享专家&#x1f3c6;&#xff0c;Linux、C/C、云计算、物联网、面试、刷题、算法尽管咨询我&#xff0c;关注我&#xff0c;有问题私聊&#xff01; &…

MapReduce案例-TopN(倒序排序)

文章目录MapReduce案例-TopN(倒序排序)一、案例分析1、TopN分析法介绍2、案例需求及分析二、MapReduce 倒序排序代码实现1、准备数据文件(1) 在虚拟机上创建文本文件(2) 上传文件到HDFS指定路径2、map阶段实现(1) 创建前N成绩映射器类3、Reduce阶段实现4、Driver程序主类实现5、…

深入理解React中的虚拟DOM(源码+分析)

文章目录引文一、前端技术的发展历史1.1 前后端不分离1.1.2 静态网站1.1.3 动态网站1.2 前后端分离1.2.1 jQuery时代1.2.2 angularjs时代1.2.3 react与vue1.3 总结二、什么是虚拟dom2.1 概念2.2 react中的虚拟dom三、react虚拟DOM的优势是什么3.1 局部更新DOM的机制3.2 浏览器兼…

shell编程基础

重定向输入和输出 输出重定向 bash shell用大于号(>)来完成这项功能&#xff1a;command > outputfile 如果不想覆盖文件原有内容&#xff0c;而是想要将命令的输出追加到已有文件中&#xff0c;比如你正 在创建一个记录系统上某个操作的日志文件。在这种情况下&#xf…

postgresql备份恢复

一、逻辑备份与恢复 pg_dump -d test >/tmp/test.sql -p 5433 --备份test这个数据库 psql -p 5433 </tmp/test.sql --恢复 pg_dump > /tmp/full.sql -p 5433 --备份整库 psql </tmp/full.sql -p 5433 --恢复 二、物理备份与恢复 1.开启归档 &#xf…

新人小白想做跨境电商,怎么上手比较稳妥一点呢?

近年来&#xff0c;随着互联网的发展&#xff0c;国内外商业贸易越来越顺畅&#xff0c;直播电商的普及也带动了大量相关产业链的发展&#xff0c;其中跨境电商是尤为突出的一个。虽然国内做跨境电商的企业很多&#xff0c;但还是有很多新人争相进入市场。所以今天米贸搜就和大…

Flume

目录1、Flume简要描述2、Flume网址3、Flume的组成架构3.1、Agent3.2、Source3.3、Channel3.4、Sink3.5、Event4、拓扑结构5、运行原理6、简要安装7、开发案例7.1、监控端口数据官方案例1&#xff09;安装telnet工具2&#xff09;判断44444端口是否被占用3&#xff09;创建Flume…

线索二叉树构建和遍历

线索二叉树 文章目录线索二叉树引出线索解决方案(以中序线索树为例)引论:策略&#xff1a;问题1&#xff1a;♥ 对策线索二叉树的节点类型定义线索化二叉树♥ 线索化算法♥ 建立中序线索二叉树的算法♥ 算法实现遍历线索化二叉树引言:♥ 遍历思路(中序遍历举例)&#xff1a;♥ …

产品设计:Material Design 学习笔记一

​自从Material Design发布以来&#xff0c;我就在一直收集相关素材与资源&#xff0c;研究别人的作品。这套设计风格非常鲜明&#xff0c;带有浓郁的Google式严谨和理性哲学&#xff0c;深得我心。实际上&#xff0c;光是研究素材和别人作品&#xff0c;就能发现一些明显的规律…

【Docker】虚悬镜像(Dangling Image)介绍和处理方法

本期目录1. 虚悬镜像介绍2. 查看本地所有虚悬镜像3. 删除全部虚悬镜像4. 人为构建虚悬镜像专栏精选文章1. 虚悬镜像介绍 虚悬镜像 (Dangling Image) 指的是仓库名 (镜像名) 和标签 TAG 都是 <none> 的镜像。如下图所示。 在实际开发中&#xff0c;在构建或者删除镜像时出…

【案例实践】气象数据相关分析及使用系列:如何使用格点数据分析中国积温变化技术应用

【视频教程】气象数据相关分析及使用系列课程&#xff1a;如何使用格点数据分析中国积温变化技术应用https://mp.weixin.qq.com/s?__bizMzAxNzcxMzc5MQ&mid2247519871&idx8&sn5ccca4436825438ce253ab7455437259&chksm9be3916fac94187970353477a4c191cdb6d499d…

[LINUX]基本权限

&#x1f941;作者&#xff1a; 华丞臧. &#x1f4d5;​​​​专栏&#xff1a;【LINUX】 各位读者老爷如果觉得博主写的不错&#xff0c;请诸位多多支持(点赞收藏关注)。如果有错误的地方&#xff0c;欢迎在评论区指出。 推荐一款刷题网站 &#x1f449; LeetCode刷题网站 文…

web前端网页设计与制作——华夏第一县HTML+CSS+JavaScript

家乡旅游景点网页作业制作 网页代码运用了DIV盒子的使用方法&#xff0c;如盒子的嵌套、浮动、margin、border、background等属性的使用&#xff0c;外部大盒子设定居中&#xff0c;内部左中右布局&#xff0c;下方横向浮动排列&#xff0c;大学学习的前端知识点和布局方式都有…

【C++】C++入门

屏幕前的你&#xff0c;一起加油啊&#xff01;&#xff01;&#xff01; 文章目录一、命名空间&#xff08;namespace&#xff09;1.命名空间的定义&#xff08;::域作用限定符&#xff09;2.命名空间的使用&#xff08;三种使用方式&#xff09;二、C输入&输出&#xff…