# IT明星不是夢 # Ceph持久化存儲爲k8s應用提供存儲方案(2)

目錄:1、RBD介紹
RBD經常使用命令
RBD配置操做
RBD掛載在到操做系統
快照配置
導出導入RBD鏡像
RBD在線擴容容量 node

RBD介紹

RBD即RADOS Block Device的簡稱,RBD塊存儲是最穩定且最經常使用的存儲類型。RBD塊設備相似磁盤能夠被掛載。 RBD塊設備具備快照、多副本、克隆和一致性等特性,數據以條帶化的方式存儲在Ceph集羣的多個OSD中。以下是對Ceph RBD的理解,快照也就是至關於克隆,也就是有一個RBD1作一個快照,好比往裏面去寫數據,想回滾,就是能夠經過這個去作備份,雖然咱們寫到塊裏面的是一個文件,可是實際存放裏面的是一個對象。後端

RBD 就是 Ceph 裏的塊設備,一個 4T 的塊設備的功能和一個 4T 的 SATA 相似,掛載的 RBD 就能夠當磁盤用;能夠理解成一個塊就是一個盤的意思。centos

resizable:這個塊可大可小;可是這個塊能夠改變大小,能夠對這個塊進行擴大

data striped:這個塊在Ceph裏面是被切割成若干小塊來保存,否則 1PB 的塊怎麼存的下;1PB的數據能夠存放55個PB的塊設備app

thin-provisioned:精簡置備,1TB 的集羣是能建立無數 1PB 的塊的。其實就是塊的大小和在 Ceph 中實際佔用大小是沒有關係的,剛建立出來的塊是不佔空間,從此用多大空間,纔會在 Ceph 中佔用多大空間。舉例:你有一個 32G 的 U盤,存了一個2G的電影,那麼 RBD 大小就相似於 32G,而 2G 就至關於在 Ceph 中佔用的空間;ide

塊存儲本質就是將裸磁盤或相似裸磁盤(lvm)設備映射給主機使用,主機能夠對其進行格式化並存儲和讀取數據,塊設備讀取速度快可是不支持共享。
塊的存儲速度很快可是相對來講是不支持共享的,也是支持的話,也就不用Cephfs了,不少公司就是用這個塊,基於塊去作一些開發,及對象存儲作一些開發。工具

ceph能夠經過內核模塊和librbd庫提供塊設備支持。客戶端能夠經過內核模塊掛在rbd使用,客戶端使用rbd塊設備就像使用普通硬盤同樣,能夠對其就行格式化而後使用;客戶應用也能夠經過librbd使用ceph塊,典型的是雲平臺的塊存儲服務(以下圖),雲平臺可使用rbd做爲雲的存儲後端提供鏡像存儲、volume塊或者客戶的系統引導盤等。測試

使用場景:spa

雲平臺(OpenStack作爲雲的存儲後端提供鏡像存儲)操作系統

K8s容器 (自動pv供給)code

map成塊設備直接使用,在存儲裏去申請塊,塊映射到系統能夠識別的盤,好比ls /dev/能夠看到這塊RBD,能夠把它掛載到本機,若是共享的話藉助其餘的工具exports,把這個映射出去,

ISCIS,安裝Ceph客戶端,也就是在每臺機器都裝iscls這個包,這樣的話才能使用這個命令去建立塊

RBD經常使用命令

# IT明星不是夢 #  Ceph持久化存儲爲k8s應用提供存儲方案(2)

RBD配置操做

RBD掛載到操做系統

一、建立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命令了
[root@cephnode01 my-cluster]# rbd ls


二、建立一個塊設備鏡像
#rbd create --size 10240 image01

三、查看塊設備有多少鏡像,以及詳細信息

#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

四、將塊設備映射到系統內核
#rbd map image01

若是這裏報錯這裏須要執行如下不支持的系統內核

五、禁用當前系統內核不支持的feature
#rbd feature disable image01 exclusive-lock, object-map, fast-diff, deep-flatten
再次查看rbd info image01
詳細信息能夠看到feature已經關掉

六、再次映射

#rbd map image01
/dev/rbd0
#ls /dev/rbd0 查看會多一個/dev/rbd0設備
/dev/rbd0

六、格式化塊設備鏡像,也就是如今可使用這個塊設備了,由於已經映射到系統內核當中,可是用以前咱們須要將它格式化

#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

七、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

八、在/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

九、取消塊設備和內核映射
查看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

十、刪除RBD塊設備

#rbd rm image01

這是本機怎麼將rbd掛載到文件系統上,但這隻能是在ceph集羣中有rbd命令的時候才能去建立的,若是想使用rbd命令的話須要安裝ceph-mon

快照配置

一、建立快照

#rbd create --size 10240 image02
#rbd snap create image02@image02_snap01

二、列出建立的快照

#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           
image02@image02_snap01 10 GiB          2

三、查看快照詳細信息

#rbd info image02@image02_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

四、克隆快照(快照必須處於被保護狀態才能被克隆)
進入保護狀態

#rbd snap protect image02@image02_snap01

這裏須要建立kube的pool

#ceph osd pool create kube 16 16
克隆到kube/image02_clone01中
#rbd clone rbd/image02@image02_snap01 kube/image02_clone01
#rbd ls -p kube
image02_clone01

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

#rbd children image02
kube/image02_clone01

六、去掉快照的parent,去掉關係以後再次查看它的就沒有了

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

七、恢復快照,也就是回滾操做,好比以前建立一個快照有1g的文件,後面想回滾到以前的狀態就可使用恢復以前的快照操做
#rbd snap rollback image02@image02_snap01

八、刪除快照
取消保護

#rbd snap unprotect image02@image02_snap01
#rbd snap remove image02@image02_snap01

刪除以後查看
#rbd snap ls image02

九、導出導入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

針對RBD實如今線擴容:

在k8s中若是使用rbd的話,建立一個塊設備,映射成系統可識別的設備,格式化以後,mount到本地,經過exports共享出去,使用NFS一塊兒使用RBD,這樣也是能夠的

對RBD擴容使用命令:rbd --image image03 resize --size 15240

一、使用rbd進行擴容,舉個新例子,新建立一個rbd鏡像

#rbd create --size 10240 image03
rbd ls

二、查看塊存儲的詳細信息
#rbd info image03

三、使用rados能夠查看底層設備rbd塊設備
#rados -p rbd ls

四、禁用當前系統內核不支持的feature

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

五、map成系統可識別的設備
#rbd map image03

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

七、掛載到本地當中
#mount /dev/rbd0 /mnt

八、使用df -h能夠查看到磁盤已經掛載上
#df -h

九、進行擴容大小
#rbd --image image03 resize --size 15240

十、查看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

十一、可是查看咱們的系統的掛載目錄目前仍是沒有擴容到咱們的15G呢,能夠執行xfs_growfs -d 指定掛載目錄

#xfs_growfs -d /mnt

#df -h   查看已經擴容
/dev/rbd0                 15G   33M   15G    1% /mnt
/dev/rbd1                 20G   33M   20G    1% /test1
相關文章
相關標籤/搜索