# IT明星不是梦 # Ceph持久化存储为k8s应用提供存储方案(2)

目录:一、RBD介绍
RBD常用命令
RBD配置操作
RBD挂载在到操作系统
快照配置
导出导入RBD镜像

RBD介绍

RBD即RADOS Block Device的简称,RBD块存储是最稳定且最常用的存储类型。RBD块设备类似磁盘可以被挂载。 RBD块设备具有快照、多副本、克隆和一致性等特性,数据以条带化的方式存储在Ceph集群的多个OSD中。如下是对Ceph RBD的理解,快照也就是相当于克隆,也就是有一个RBD1做一个快照,比如往里面去写数据,想回滚,就是可以通过这个去做备份,虽然我们写到块里面的是一个文件,但是实际存放里面的是一个对象。

RBD 就是 Ceph 里的块设备,一个 4T 的块设备的功能和一个 4T 的 SATA 类似,挂载的 RBD 就可以当磁盘用;可以理解成一个块就是一个盘的意思。

resizable:这个块可大可小;但是这个块可以改变大小,可以对这个块进行扩大

data striped:这个块在Ceph里面是被切割成若干小块来保存,不然 1PB 的块怎么存的下;1PB的数据可以存放55个PB的块设备

thin-provisioned:精简置备,1TB 的集群是能创建无数 1PB 的块的。其实就是块的大小和在 Ceph 中实际占用大小是没有关系的,刚创建出来的块是不占空间,今后用多大空间,才会在 Ceph 中占用多大空间。举例:你有一个 32G 的 U盘,存了一个2G的电影,那么 RBD 大小就类似于 32G,而 2G 就相当于在 Ceph 中占用的空间;

块存储本质就是将裸磁盘或类似裸磁盘(lvm)设备映射给主机使用,主机可以对其进行格式化并存储和读取数据,块设备读取速度快但是不支持共享。
块的存储速度很快但是相对来说是不支持共享的,也是支持的话,也就不用Cephfs了,很多公司就是用这个块,基于块去做一些开发,及对象存储做一些开发。

ceph可以通过内核模块和librbd库提供块设备支持。客户端可以通过内核模块挂在rbd使用,客户端使用rbd块设备就像使用普通硬盘一样,可以对其就行格式化然后使用;客户应用也可以通过librbd使用ceph块,典型的是云平台的块存储服务(如下图),云平台可以使用rbd作为云的存储后端提供镜像存储、volume块或者客户的系统引导盘等。

使用场景:

云平台(OpenStack做为云的存储后端提供镜像存储)

K8s容器 (自动pv供给)

map成块设备直接使用,在存储里去申请块,块映射到系统可以识别的盘,比如ls /dev/可以看到这块RBD,可以把它挂载到本机,如果共享的话借助其他的工具exports,把这个映射出去,

ISCIS,安装Ceph客户端,也就是在每台机器都装iscls这个包,这样的话才能使用这个命令去创建块

RBD常用命令

RBD配置操作

RBD挂载到操作系统

1、创建rbd使用的pool

也就是创建rbd的时候都会放到这个pool下,但是如果不想放到pool下就可以指定pool的名字,目前这些命令不是针对k8s去用的,比如我们的服务临时需要一块空间,把这个文件挂载到本地上,那么就可以用这么个方法,从存储里面拿出一块空间供他使用
32 32:是它的pg与pgp number的pg数,就是创建一个pool,32个pg,32个pgp,这个会随着容量的增加,pg也会动态的去扩容,生产上规定pg会用多少,根据osd的数量,文件数量,做一个前期的规划

创建好之后可以通过 ceph osd lspools 查看新增一个rbd块存储

#ceph osd pool create rbd 32 32
.rgw.root
default.rgw.control
default.rgw.meta
default.rgw.log
rbd

可以通过# ceph osd pool ls detail 查看创建pool的详细信息,可以看到pg_num与pgp_num
pg_num是pg里面包含的object,pg_num是描述pg的位置,这两个数是一一对应的
pool 5 ‘rbd‘ replicated size 3 min_size 2 crush_rule 0 object_hash rjenkins pg_num 32 pgp_num 32 autoscale_mode warn last_change 29 flags hashpspool stripe_width 0

把这个pool标记成rbd
#ceph osd pool application enable rbd rbd

执行完就可以使用rbd ls命令了
[[email protected] my-cluster]# rbd ls

?
2、创建一个块设备镜像
#rbd create --size 10240 image01

3、查看块设备有多少镜像,以及详细信息

#ls
#rbd info image01
rbd image ‘image01‘:
    size 10 GiB in 2560 objects
    order 22 (4 MiB objects)
    snapshot_count: 0
    id: 11bb8aff0615
    block_name_prefix: rbd_data.11bb8aff0615
    format: 2
    features: layering, exclusive-lock, object-map, fast-diff, deep-flatten
    op_features:
    flags:
    create_timestamp: Mon Mar  2 15:14:01 2020
    access_timestamp: Mon Mar  2 15:14:01 2020
    modify_timestamp: Mon Mar  2 15:14:01 2020
使用rados命令查看底层rbd
#rados -p rbd ls --all
    rbd_id.image01
    rbd_directory
    rbd_object_map.11bb8aff0615
    rbd_header.11bb8aff0615
    rbd_info

4、将块设备映射到系统内核
#rbd map image01

如果这里报错这里需要执行以下不支持的系统内核

5、禁用当前系统内核不支持的feature
#rbd feature disable image01 exclusive-lock, object-map, fast-diff, deep-flatten
再次查看rbd info image01
详细信息可以看到feature已经关掉

6、再次映射

#rbd map image01
/dev/rbd0
#ls /dev/rbd0 查看会多一个/dev/rbd0设备
/dev/rbd0

6、格式化块设备镜像,也就是现在可以使用这个块设备了,因为已经映射到系统内核当中,但是用之前我们需要将它格式化

#mkfs.xfs /dev/rbd0
meta-data=/dev/rbd0              isize=512    agcount=16, agsize=163840 blks
=                       sectsz=512   attr=2, projid32bit=1
=                       crc=1        finobt=0, sparse=0
data     =                       bsize=4096   blocks=2621440, imaxpct=25
=                       sunit=1024   swidth=1024 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal log           bsize=4096   blocks=2560, version=2
=                       sectsz=512   sunit=8 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0

7、mount到本地,挂载到系统的/mnt目录下,也可以使用其他的目录

#mount /dev/rbd0 /mnt
文件系统                 容量  已用  可用 已用% 挂载点
/dev/mapper/centos-root   36G  5.6G   30G   16% /
devtmpfs                 1.9G     0  1.9G    0% /dev
tmpfs                    1.9G     0  1.9G    0% /dev/shm
tmpfs                    1.9G   13M  1.9G    1% /run
tmpfs                    1.9G     0  1.9G    0% /sys/fs/cgroup
/dev/sda1               1014M  170M  845M   17% /boot
tmpfs                    378M  8.0K  378M    1% /run/user/42
tmpfs                    378M   44K  378M    1% /run/user/0
/dev/sr0                 4.2G  4.2G     0  100% /run/media/root/CentOS 7 x86_64
tmpfs                    1.9G   52K  1.9G    1% /var/lib/ceph/osd/ceph-0
/dev/rbd0                 10G   33M   10G    1% /mnt

8、在/mnt也就是挂载的目录下创建文件进行测试,使用rados命令可以查看到它是以rbd的格式去存放数据

#cd /mnt
#echo "welcome to use rbd" > test.txt
#rados -p rbd ls --all
    rbd_data.11bb8aff0615.0000000000000001
    rbd_data.11bb8aff0615.00000000000006e0
    rbd_data.11bb8aff0615.00000000000008c0
    rbd_data.11bb8aff0615.0000000000000501
    rbd_data.11bb8aff0615.0000000000000140
    rbd_data.11bb8aff0615.0000000000000960
    rbd_id.image01
    rbd_data.11bb8aff0615.0000000000000780
    rbd_data.11bb8aff0615.0000000000000640
    rbd_directory
    rbd_data.11bb8aff0615.0000000000000820
    rbd_data.11bb8aff0615.00000000000001e0
    rbd_header.11bb8aff0615
    rbd_info
    rbd_data.11bb8aff0615.00000000000005a0
    rbd_data.11bb8aff0615.00000000000009ff
    rbd_data.11bb8aff0615.0000000000000280

卸载使用umount
#umount /mnt

9、取消块设备和内核映射
查看map

#rbd showmapped
id pool namespace image   snap device
rbd            image01 -    /dev/rbd0 

取消块设备
#rbd unmap image01

再次查看info设备信息还都在,也就是umount和unmap之后数据不会丢失,只有rm删除块设备之后数据才会丢失

#rbd info image01
rbd image ‘image01‘:
    size 10 GiB in 2560 objects
    order 22 (4 MiB objects)
    snapshot_count: 0
    id: 11bb8aff0615
    block_name_prefix: rbd_data.11bb8aff0615
    format: 2
    features: layering
    op_features:
    flags:
    create_timestamp: Mon Mar  2 15:14:01 2020
    access_timestamp: Mon Mar  2 15:14:01 2020
    modify_timestamp: Mon Mar  2 15:14:01 2020

10、删除RBD块设备

#rbd rm image01

这是本机怎么将rbd挂载到文件系统上,但这只能是在ceph集群中有rbd命令的时候才能去创建的,如果想使用rbd命令的话需要安装ceph-mon

快照配置

1、创建快照

#rbd create --size 10240 image02
#rbd snap create [email protected]_snap01

2、列出创建的快照

#rbd snap list image02
SNAPID NAME           SIZE   PROTECTED TIMESTAMP
image02_snap01 10 GiB           Mon Mar  2 16:44:37 2020
或
#rbd ls -l
NAME                   SIZE   PARENT FMT PROT LOCK
image02                10 GiB          2
[email protected]_snap01 10 GiB          2 

3、查看快照详细信息

#rbd info [email protected]_snap01
rbd image ‘image02‘:
    size 10 GiB in 2560 objects
    order 22 (4 MiB objects)
    snapshot_count: 1
    id: 12315524dc09
    block_name_prefix: rbd_data.12315524dc09
    format: 2
    features: layering, exclusive-lock, object-map, fast-diff, deep-flatten
    op_features:
    flags:
    create_timestamp: Mon Mar  2 16:32:50 2020
    access_timestamp: Mon Mar  2 16:32:50 2020
    modify_timestamp: Mon Mar  2 16:32:50 2020
    protected: False

4、克隆快照(快照必须处于被保护状态才能被克隆)
进入保护状态

#rbd snap protect [email protected]_snap01

这里需要创建kube的pool

#ceph osd pool create kube 16 16
克隆到kube/image02_clone01中
#rbd clone rbd/[email protected]_snap01 kube/image02_clone01
#rbd ls -p kube
image02_clone01

5、查看快照的children,查看它的子快照

#rbd children image02
kube/image02_clone01

6、去掉快照的parent,去掉关系之后再次查看它的就没有了

#rbd flatten kube/image02_clone01
Image flatten: 100% complete...done.

7、恢复快照,也就是回滚操作,比如之前创建一个快照有1g的文件,后面想回滚到之前的状态就可以使用恢复之前的快照操作
#rbd snap rollback [email protected]_snap01

8、删除快照
取消保护

#rbd snap unprotect [email protected]_snap01
#rbd snap remove [email protected]_snap01

删除之后查看
#rbd snap ls image02

9、导出导入RBD镜像
导出RBD镜像

#rbd export image02 /tmp/image02
Exporting image: 100% complete...done.

导入RBD镜像
先把之前的进行删除

#rbd ls
image02
rbd remove image02
Removing image: 100% complete...done.

导入
#rbd import /tmp/image02 rbd/image02 --image-format 2

小结:

在k8s中如果使用rbd的话,创建一个块设备,映射成系统可识别的设备,格式化之后,mount到本地,通过exports共享出去,使用NFS一起使用RBD,这样也是可以的

对RBD扩容使用命令:rbd --image image03 resize --size 15240

1、使用rbd进行扩容,举个新例子,新创建一个rbd镜像

#rbd create --size 10240 image03
rbd ls

2、查看块存储的详细信息
#rbd info image03

3、使用rados可以查看底层设备rbd块设备
#rados -p rbd ls

4、禁用当前系统内核不支持的feature

#rbd feature disable image03 exclusive-lock, object-map, fast-diff, deep-flatten

5、map成系统可识别的设备
#rbd map image03

6、格式化
#mkfs.xfs /dev/rbd0

7、挂载到本地当中
#mount /dev/rbd0 /mnt

8、使用df -h可以查看到磁盘已经挂载上
#df -h

9、进行扩容大小
#rbd --image image03 resize --size 15240

10、查看rbd的大小,已经扩容到15,但是这个不会直接占用15g,而是用多少占用多少,使用的精简置用

#rbd info image03
rbd image ‘image03‘:
    size 15 GiB in 3810 objects
    order 22 (4 MiB objects)
    snapshot_count: 0
    id: 134426f02050
    block_name_prefix: rbd_data.134426f02050
    format: 2
    features: layering
    op_features:
    flags:
    create_timestamp: Mon Mar  2 18:26:29 2020
    access_timestamp: Mon Mar  2 18:26:29 2020
    modify_timestamp: Mon Mar  2 18:26:29 2020

原文地址:https://blog.51cto.com/14143894/2474987

时间: 2024-08-30 14:27:33

# IT明星不是梦 # Ceph持久化存储为k8s应用提供存储方案(2)的相关文章

Ceph持久化存储为k8s应用提供存储方案(3)

一.CephFs介绍二.CephFS架构三.配置CephFS MDS1.创建一个Ceph文件系统1.1.以kernel client 形式挂载CephFS1.2.以FUSE client 形式挂载CephFS四.MDS主备与主主切换1.配置主主模式2.还原单主MDS 一.CephFs介绍 Ceph File System (CephFS) 是与 POSIX 标准兼容的文件系统, 能够提供对 Ceph 存储集群上的文件访问. Jewel 版本 (10.2.0) 是第一个包含稳定 CephFS 的

kubernetes持久化存储,静态存储【pv】,动态存储【StorageClass】(5)

在开始介绍k8s持久化存储前,我们有必要了解一下k8s的emptydir和hostpath.configmap以及secret的机制和用途 1.EmptydirEmptyDir是一个空目录,他的生命周期和所属的 Pod 是完全一致的,pod删掉目录消失 2.HostpathHostpath会把宿主机上的指定卷加载到容器之中,如果 Pod 发生跨主机的重建,其内容就难保证了 3.ConfigmapConfigMap跟Secrets类似,但是ConfigMap可以更方便的处理不包含敏感信息的字符串.

# IT明星不是梦 # kubernetes调度器学习基础概览

scheudler是kubernetes中的核心组件,负责为用户声明的pod资源选择合适的node,同时保证集群资源的最大化利用,这里先介绍下资源调度系统设计里面的一些基础概念 基础任务资源调度 基础的任务资源调度通常包括三部分: 角色类型 功能 node node负责具体任务的执行,同时对包汇报自己拥有的资源 resource manager 汇总当前集群中所有node提供的资源,供上层的scheduler的调用获取,同时根据node汇报的任务信息来进行当前集群资源的更新 scheduler

【云快讯】之二十六《AWS推出网络文件存储EFS,进军NAS存储市场》

2015-04-10 东方云洞察 点击上面的链接文字,可以快速关注"东方云洞察"公众号 亚马逊网络服务的不断蚕食企业存储市场,AWS最新计划发布一个新服务替代网络附加存储(NAS)设备.亚马逊弹性文件系统(EFS)将提供一个共享的,低延迟的文件系统,用于支持项目团队和组织内部需要共享大型文件,并快速访问它们的场景,如视频制作公司等. "该文件系统在云服务普及的今天是缺少的一环,"Amazon Web Services的负责人安迪·雅西周四在AWS峰会在旧金山表示该服

(转)C++内存分配方式详解——堆、栈、自由存储区、全局/静态存储区和常量存储区

程序在内存有五个存在区域: A:动态区域中的栈区  B:动态区域中的栈区 C:静态区域中:全局变量 和静态变量    (这个区域又可以进一步细分为:初始化的全局变量和静态变量    以及    未初始化的全局变量和静态变量  ) D:静态区域中:文字 数字 常量 E:静态区域中:代码区(就是编译后的二进制代码  指导CPU怎么运行的玩意) ××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××× 栈,程

架构设计:系统存储(2)——块存储方案(2)

接上文<架构设计:系统存储(1)--块存储方案(1)> 4-2.固态硬盘工作过程 本小节我们要解决一个关键问题:既然机械硬盘和固态硬盘从工作原理.制作工艺.技术规范等多个方面都完全不一样,那为什么无论硬件层是使用机械硬盘还是固态硬盘操作系统却都可以进行识别,并在其上进行数据读写呢? 这个问题中,计算机系统不同层次对数据操作最小单位的定义不一致都还是一个小问题:虽然机械硬盘上数据操作单元为512字节.固态硬盘上数据操作单元为4KB.操作系统层面定义的数据操作单元可能是1KB\2KB\4KB\8K

深入PHP变量存储结构 标签: PHP存储

1.深入PHP变量存储结构 标签: PHP存储  分类: 编程语言(10)  首先声明,我并没有去读PHP的源码,只是对于PHP的有时候诡异的表现感兴趣,找了一下开发人员laruence的博客结合PHP提供的函数debug_zval_dump刺探得到了本博客所阐述的工作机理.如果你想对PHP变量存储结构有一个了解或想对PHP变量加深理解的话,本文是适合你的,比较深入的去看源代码吧. 为了保证博客的连贯性,首先引用laruence关于PHP变量内部存储结构的部分内容(稍作修改) 在PHP中,所有的

Android 存储学习之在外部存储中读写文件

上节学习了如何在手机内部存储中读写文件,本节学习如何在手机的外部存储中读写文件.那就是如何在Sdcard中读写文件. 那我们还是用以前登录界面的例子举例说明,(登录界面请看上节Android 存储学习之在内部存储中读写文件) 先我们显示写的代码: 当点击确定并且自动登录的钩是选中的,则就会在sdcard文件夹写创建一个info.txt文件 public void login(View v) { String name = ed_nam.getText().toString(); String p

c++ 堆、栈、自由存储区、全局/静态存储区和常量存储区

在C++中,内存分成5个区,他们分别是堆.栈.自由存储区.全局/静态存储区和常量存储区. 栈,就是那些由编译器在需要的时候分配,在不需要的时候自动清楚的变量的存储区.里面的变量通常是局部变量.函数参数等. 堆,就是那些由new分配的内存块,他们的释放编译器不去管,由我们的应用程序去控制,一般一个new就要对应一个delete.如果程序员没有释放掉,那么在程序结束后,操作系统会自动回收. 自由存储区,就是那些由malloc等分配的内存块,他和堆是十分相似的,不过它是用free来结束自己的生命的.