- Java锁的逻辑(结合对象头和ObjectMonitor)
- 还在用饼状图?来瞧瞧这些炫酷的百分比可视化新图形(附代码实现)⛵
- 自动注册实体类到EntityFrameworkCore上下文,并适配ABP及ABPVNext
- 基于Sklearn机器学习代码实战
Kubernetes 作为资源调度和应用编排的开源系统,正在成为云计算和现代 IT 基础架构的通用平台。JuiceFS CSI Driver 实现了容器编排系统的存储接口,使得用户可以在 Kubernetes 中以原生的方式使用 JuiceFS.
由于 Kubernetes 自身的复杂性,用户反馈在部署和使用 JuiceFS CSI Driver 时,会遇到不少疑难问题。本文将为大家介绍JuiceFS CSI Driver架构、常见问题排查思路.
JuiceFS CSI Driver 的架构如下图,共有两个组件:
Controller Service:以 PV id 为名在 JuiceFS 文件系统中创建子目录.
Node Service:创建 Mount Pod(JuiceFS 客户端),并挂载应用 Pod.
CSI Node 的工作机制如下图,主要将 JuiceFS 客户端放在单独的 pod 中运行,这样做有如下益处:
动态创建 PV(不使用 StorageClass 的跳过此步骤):
用户创建 PVC ,使用 JuiceFS 作为 StorageClass; 。
CSI Controller 负责在 JuiceFS 文件系统中做初始化,默认以 PV ID 为名字创建子目录,同时创建对应的 PV; 。
Kubernetes (PV Controller 组件) 将上述用户创建的 PVC 与 CSI Controller 创建的 PV 进行绑定,此时 PVC 与 PV 的状态变为「Bound」; Pod 中使用 PVC:
用户创建应用 Pod,Pod 中声明使用先前创建的 PVC; 。
CSI Node Service 负责在应用 Pod 所在节点创建 Mount Pod; 。
Mount Pod 启动,执行 JuiceFS 客户端挂载,运行 JuiceFS 客户端,挂载路径暴露在宿主机上,路径为 /var/lib/juicefs/volume/[pv-name] ; 。
CSI Node Service 等待 Mount Pod 启动成功后,将 PV 对应的 JuiceFS 子目录 bind 到容器内,路径为其声明的 VolumeMount 路径; 。
Kubelet 创建应用 Pod。 PVC - PV - MountPod 的关系可以用下图表示,在同一个节点上,一个 PVC 会对应一个 Mount Pod.
创建 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 会自动创建.
CSI Node 负责管理 Mount Pod 的生命周期,有一些特性可以根据业务情况选择使用.
第一,多个应用 pod 使用同一个 PVC时,共用 Mount Pod。主要的做法是:
HostToContainer
或 Bidirectional
。并且,在挂载点损坏前打开的文件不能恢复,需要用户侧做好重试。 第三,可以设置 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 镜像.
对于 JuiceFS CSI Driver 的使用,有以下几点建议:
常见错误有两种:一种是 PV 创建失败,属于 CSI Controller 的职责;另一种是应用 Pod 创建失败,属于 CSI Node 和 Mount Pod 的职责.
详细问题排查思路请访问, 排查方法文档 .
关于更多 JuiceFS CSI Driver 的文档,包括使用方法、运维管理等,可以统一访问 JuiceFS CSI Driver 文档 .
使用静态挂载,应用声明 PVC,指定 PV;动态配置会保证每个应用使用单独的子目录作为隔离,不能访问已有的数据.
2.同一个 JuiceFS 卷,如何实现挂载不同参数?
声明不同的 PVC 和 PV/StorageClass,在 PV/StorageClass 中指定不同的挂载参数.
同一个PVC对应同一个MountPod(juicefs fuse 客户端)的,应用 pod 中可以在 volumeMount 中定义不同的 subPath 实现挂载不同的子目录.
juicefs format 的参数,如 trash-days、inodes、capacity 等,在 secret 的 format-options 里设置.
使用 kubectl exec 命令进入到 Mount Pod 中, df 命令查看挂载点,再用 juicefs warmup 命令做预热,其中社区版的二进制路径为 /usr/local/bin/juicefs,商业版的二进制路径为 /usr/bin/juicefs.
更多问题排查案例请访问 排查案例文档 .
如有帮助的话欢迎关注我们项目 Juicedata/JuiceFS 哟! (0ᴗ0✿) 。
最后此篇关于JuiceFSCSIDriver常见问题排查指南的文章就讲到这里了,如果你想了解更多关于JuiceFSCSIDriver常见问题排查指南的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
我在 Microsoft Azure 中创建了一个新的 Windows Server 2012 R2 虚拟机。该虚拟机上安装的其他内容之一是 IIS 中托管的网站,但我似乎无法让该服务器上的 IIS
引用问题:: EJB weblogic.ejb20.cache.CacheFullException 我试图了解 EJB 容器如何管理实体 bean,我知道 EJBHome 对象上的 create/f
我刚刚继承了一个node.js 项目,我怀疑 Node 项目所需的一些原始样板尚未完成。这也是我第一次使用node.js。 无论如何,当我运行 node app.js 时,正确的端口会启动,但应用程序
我需要查看在 Azure 应用服务中运行的 .Net 应用程序的日志。 我在应用程序源代码中看到了许多我希望在 Application Insights 中看到的日志,但是,转到 Applicatio
我一直在使用 git 将我的本地代码推送到服务器。我有一个名为“origin”的本地 Remote ,我在服务器上有一个名为“github”的 Remote 。通常,提交后,我使用“git push
我用印地 TidHTTPServer和 TidServerIOHandlerSSLOpenSSL在我的服务器组件上处理命令和控制的 HTTPS 请求。 在某些情况下 - 服务器上没有任何记录的错误 -
更新:如果弄清楚了这一点,但我仍然对解释感兴趣。问题是我在运行下面的代码的同时也从 SqlWorkbenchJ 连接到我的 Redshift 集群(两者都在同一台笔记本电脑上运行)。第二次我断开 Sq
使用 CloudFormation 在 AWS 中创建带有附加 AutoScalingPolicy 的 AutoScalingGroup 时,您可能会收到错误 the load balancer do
我是一名优秀的程序员,十分优秀!