Kubernetes 持久化存储 Cephfs

熟悉kubernetes volume的同学应该了解,kubernetes 对volume的提供支持“静态PV”和“动态PV”两种方式。

  • 静态PV:集群管理员创建一些PV,之后便可用于PVC消费。

  • 动态PV:相比静态PV而言,动态PV无需管理员手动创建PV,PV的操作是由一个叫StorageClass的控制器创建。对于Cephfs volume来说,截止到kubernetes 1.16版本并没有直接提供Cephfs的StorageClass。

 

虽然官方并没有直接提供对Cephfs StorageClass的支持,但是社区给出了类似的解决方案 external-storage/cephfs,后面我们会使用到。

地址:https://github.com/kubernetes-incubator/external-storage

1. 静态PV

编辑 Cephfs PV 对象文件 cephfs-pv.yaml

apiVersion: v1kind: PersistentVolumemetadata:  name: cephfs-pvspec:  capacity:    storage: 1Gi  accessModes:    - ReadWriteMany  cephfs:    monitors:      - 192.168.0.3:6789    user: kube    secretRef:      name: secret-for-cephfs    readOnly: false  persistentVolumeReclaimPolicy: Recycle

创建 PV:$ kubectl create -f cephfs-pv.yaml -n cephfs

$ kubectl get pv -n cephfs

创建PVC:

$ vim cephfs-pv-claim.yamlapiVersion: v1kind: PersistentVolumeClaimmetadata:  name: cephfs-pv-claim  namespace: cephfs spec:  accessModes:    - ReadWriteMany  resources:    requests:      storage: 1Gi

在 deployment 中使用 PV:

​​

apiVersion: apps/v1kind: Deploymentmetadata:  name: cephfs-pvc  namespace: cephfsspec:  replicas: 2  template:    metadata:      labels:        app: cephfs-pvc    spec:      containers:      - name: nginx        image: busybox:latest        volumeMounts:        - name: cephfs-pv          mountPath: /data/cephfs          readOnly: false      volumes:      - name: cephfs        persistentVolumeClaim:          claimName: cephfs-pv-claim

这样,在同一个deployment中的2个pod容器内都可以读写同一个cephfs volume了。

2. 动态PV

对于规模不大的容器平台而言,静态PV方式就可以满足需求;但是当容器规模很大时,你不知道用户什么时候创建PV,因此动态PV方式就非常有用了。下面我们看下如何基于 external-storage/cephfs 来实现动态PV。

 

部署 cephfs-provisioner

cephfs-provisioner 是 kubernetes 官方社区提供的Cephfs的StorageClass支持。用于动态的调用后端存储Cephfs创建PV。

cephfs-provisoner 的实现机制如图所示:

 

它主要是包含两部分:

  • cephfs-provisoner.go

是cephfs-provisoner(cephfs的StorageClass)的核心,主要是 watch kubernetes中 PVC 资源的CURD事件,然后以命令行方式调用 cephfs_provisor.py脚本创建PV。

  • cephfs_provisoner.py

python 脚本实现的与cephfs交互的命令行工具。cephfs-provisoner 对cephfs端volume的创建都是通过该脚本实现。里面封装了volume的增删改查等功能。

创建 StorageClass:

$ kubectl create -f class.yaml$ kubectl get sc -n cephfsNAME      PROVISIONER       AGEcephfs    ceph.com/cephfs   33d

基于RBAC授权方式启动cephfs-provisioner:

$ kubectl create -f  *$ kubectl get deploy -n cephfs

这样动态创建PV的环境就准备好了。

 

动态PV方式,无需再手动创建PV,只需创建PVC,cephfs-provisoner会自动的为该PVC在后端cephfs存储上创建对应的PV。

kind: PersistentVolumeClaimapiVersion: v1metadata:  name: pvc-1  annotations:    volume.beta.kubernetes.io/storage-class: "cephfs"spec:  accessModes:    - ReadWriteMany  resources:    requests:      storage: 1Gi

此时,我们创建PVC后,会看到同时会自动创建并绑定上一个PV。

 

至此,基于 cephfs 的动态PV方式就介绍完了。

 

cephfs-provisoner的坑

 

在使用 cephfs-provisoner 与公司 cephfs 对接的时候遇到了一些坑,在这里一并说一下。

 

  • 路径问题

 

在 cephfs_provisioner/ cephfs_provisioner.py 的实现中,默认在cephfs中创建的根目录名是”kubernetes“,所有后续创建的卷都在cephfs端的 /kubernetes/ 一级目录下 ,代码实现中以VOlUME_GROUP="kubernetes"定义。因此,如果你不想在 cephfs 中以该名字命名,需要修改VOLUME_GROUP值。

 

另外,它的二级目录也是固定的为/kubernetes/volumes,二级目录是python-cephfs模块中由DEFAULT_VOL_PREFIX变量定义:POOL_PREFIX = "fsvolume_"

DEFAULT_VOL_PREFIX = "/volumes"
DEFAULT_NS_PREFIX = "fsvolumens_"

因此,要定制化在cephfs端的一级和二级目录,需要修改这两个地方。

 

  • 权限问题

     

这里遇到两个权限问题:

 

  1. 挂载权限问题

默认python-cephfs模块在连接cephfs挂载时是mount的根目录”/“。

 

而根目录只有admin用户才有权限进行挂载,所以这个地方除了admin用户外,没办法使用其它用户。但是,我们在使用cephfs时,为了安全,管理员是不会给我们admin用户使用的,所以这个地方肯定是接受不了的。为此,我们定制修改了libcephfs2和python-cephfs的源码,增加了connect_with_path方法,允许指定挂载的目录,这样我们只要在挂载时不使用根目录即可。 

 

   2. 读写权限问题

在 cephfs_provisoner.py 的实现中,默认添加了对 cephfs namespace的支持,因此在对volume授权时会添加对namespace 相关的权限设置。因为,我们使用的ceph版本luminous没有对namespace进行支持,所以,在使用时产生了创建的volume挂载到pod内后没有读写权限"input/output error"的问题。此时,你在cephfs端查看卷的读写权限时,你可以看到目录读写权限都是问号。于是我们修改了这部分逻辑,去掉了 namespace 相关的部分。

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

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

相关文章

RDIFramework.NET — 系列目录 — 基于.NET的快速信息化系统开发框架

RDIFramework.NET — 基于.NET的快速信息化系统开发框架 — 系列目录RDIFramework.NET,基于.NET的快速信息化系统开发、整合框架,给用户和开发者最佳的.Net框架部署方案。框架简单介绍RDIFramework.NET,基于.NET的快速信息化系统开发、整合框…

Visual Studio项目版本转换器(c#项目版本转换器 v1.0)

Visual Studio项目版本转换器(c#项目版本转换器 v1.0) 使用截图: 下载地址:http://files.cnblogs.com/stone_w/VsConvert.zip vs转换中文通用版,目前版本只支持c#程序。 功能说明: 1.智能判断当前待转换引…

基于 Kubernetes 构建企业 Jenkins 持续集成平台

1、部署Jenkins 新建kube-ops 命名空间 $ kubectl create namespace kube-ops 新建Deployment文件(jenkins2.yaml) ---apiVersion: extensions/v1beta1kind: Deploymentmetadata: name: jenkins2 namespace: kube-opsspec: template: metadata: labels: …

TC 配置插件

转载:http://hi.baidu.com/accplaystation/item/07534686f39dc329100ef310 1、插件下载地址:http://www.topcoder.com/tc?moduleStatic&d1applet&d2plugins 一般用下面三个插件:CodeProcessor(2.0)&#xff0…

WebClient 访问间歇性返回403解决方案

说明:前段时间做的一个项目莫名的返回403的错误,这种情况也多大是程序员最不喜欢的了,没办法先来分析一下错误信息。之前的代码如下: WebClient webclient new WebClient();string u9Str webclient.DownloadString("http:/…

bootstrap select2 php,JS组件Bootstrap Select2使用方法详解

在介绍select组件的时候,之前分享过一篇JS组件中bootstrap multiselect两大组件较量的文章,这两个组件的功能确实很强大,本文分享下select组件的一些用法和特性。一些通用的单选、多选、分组等功能这里就不多做介绍了,multiselect…

文件删除小助手

亲,还在为删除多个文件而发愁吗?还在为删除不同目录下的N多文件而发愁吗?那你就下载这个吧。 功能以及优点: 1.支持删除某一类文件。 2.支持某一路径下所有文件的检索删除。 3.支持复杂文件名称匹配。 4.免安装,绿色中…

2020-11-29

分布式爬虫往往都需要多个环境,多个进程,如果手动去管理这些环境是很费事的,使用Docker集群就能很好地帮你解决这些问题,让你的爬虫管理变得简单。 主节点安装Docker 这里主节点建议大家使用Ubuntu,从节点随意。 Ubun…

八伟大的工具,Windows用户永远都不想错过

有许多的应用程序你可以找到,但是获得免费并且好用 的程序不是一件容易的事情,每当你需要这样的软件的时候,你就会网上搜啊搜,结果下载下来一运行达不到想要的效果,这就是今天我分享我收藏的8个工具原因,这…

Python3网络设备巡检(交换机篇)

介绍 只写了交换机的,路由器、防火墙、负载等其它设备以后,有需求再写,下面以一组交换机为例。 思路 1、收取交换机的信息 需要哪些信息,哪些命令,不同品牌交换机命令不同(本篇以H3C为例)&a…

Python 代码优化常见技巧

代码优化能够让程序运行更快,它是在不改变程序运行结果的情况下使得程序的运行效率更高,根据 80/20 原则,实现程序的重构、优化、扩展以及文档相关的事情通常需要消耗 80% 的工作量。优化通常包含两方面的内容:减小代码的体积&…

adb shell——Android虚拟机调试必须知道的命令

2019独角兽企业重金招聘Python工程师标准>>> 之前开发Android的时候喜欢用自己的手机来调试,特别是数据库!!!因为是自己的手机嘛,可以安装一些类似数据库编辑器的工具,调试起来非常方便&#xf…

mysql6.10,MySQL经典50题-第6-10题

MySQL50-4-第6-10题本文中介绍的是第6-10题,涉及到的主要知识点:模糊匹配和通配符使用表的自连接in/not in连接查询的条件筛选image题目6题目需求查询“李”姓老师的数量分析过程使用通配符和like来解决SQL实现select count(t_name) from Teacher where …

增加系统右键菜单

本文介绍添加系统右键菜单,效果如下图: 原理很简单就是给注册表添加值,以下是添加系统右键菜单所要涉及的值。 KEY值:HKEY_CLASSES_ROOT\*\shell(所有文件的右键菜单)HKEY_CLASSES_ROOT\directory\shell&am…

Nginx-ingress部署及使用

目录 一 手动部署-官网版 1.1 获取资源1.2 安装RBAC1.3 安装基础资源1.4 安装ingress controllers1.5 创建ingress controllers service二 手动部署-github社区版(推荐) 2.1 获取资源2.2 创建default backend2.3 确认验证三 ingress使用 3.1 创建demo环境3.2 创建i…

WinRAR(WinZip)压缩与解压实现(C#版Window平台)

本文的原理是借助Windows平台安装的WinRAR(WinZip)实现C#程序的调用(注:WinRAR压缩解压WinZip同样适用)。 先来看WinRAR(WinZip)自身的支持调用命令: 压缩命令:a {0} {1} -r 【{0}:…

Docker Consul 安装及使用服务发现

更多配置和原理:https://blog.csdn.net/liuzhuchen/article/details/81913562 从2016年起就开始接触Consul,使用的主要目的就是做服务发现,后来逐步应用于生产环境,并总结了少许使用经验。最开始使用Consul的人不多,为…

Visual Studio扩展工具添加与卸载

简介:vs 作为主流的开发工具之一,其强大的功能无可厚非,但日益增加的需求就使得vs的扩展工具成为优秀dev所必备的利器之一。 Visual Studio扩展工具添加 Visual Studio扩展工具的添加很简单,只需要选择需要的扩展工具然后一般安装…

php充值注入,PHP注入一路小跑

PHP注入一路小跑[ 2006-04-20 14:16:55 | 作者: 承諾 ]字体大小: 大 | 中 | 小很老的了,我是给我自己看的。忘了好多,补习一下‘ or ‘11‘/*‘%23‘ and password‘mypassid-1 union select 1,1,1id-1 union select char(97),char(97),char(97)id1 unio…

Visual Studio 扩展包(.vsix)制作

前言:上篇介绍了 Visual Studio扩展工具添加与卸载,本编要介绍的是Visual Studio 扩展包(.vsix)的制作。 方法: ①、下载并安装Visual Studio 2010 SDK。 vs 2010 开发工具下载SDK安装包官方下载地址:http://www.microsoft.com/d…