k8s分布式存儲-Ceph

Ceph架構(gòu)介紹

1641438794173.png
RBD ( RADOs Block Device ):塊存儲接口
RGW ( RADOs Gateway )):對象存儲網(wǎng)關(guān)忆嗜,接口與S3和 Swift 兼容
LIBRADOs CephFS ( Ceph File System ):文件級存儲接口
RADOS RADOs ( Reliable Autonomic Distributed Object Store ):抽象的對象存儲集群霞篡, Ceph 核心,實(shí)現(xiàn)用戶數(shù)據(jù)分配吟宦、故障轉(zhuǎn)移等集群操作
MON :集群狀態(tài)維護(hù),例如 osD 是否健康、 PG 狀態(tài)等
MDS ( Metadata Server ): CephFS 服務(wù)依賴的元數(shù)據(jù)服務(wù)
OSD ( Object Storage Daemon ):對象存儲設(shè)備贮折,主要存儲數(shù)據(jù)

Ceph核心概念

RADOS

01 全稱Reliable Autonomic Distributed Object Store遍坟,即可靠的拳亿、自動(dòng)化的耻蛇、分布式對象存儲系統(tǒng)吧黄。
02 RADOS是Ceph集群的精華,用戶實(shí)現(xiàn)數(shù)據(jù)分配每庆、Failover等集群操作隔节。

Librados

01 Rados提供庫鹅经,因?yàn)镽ADOS是協(xié)議很難直接訪問,因此上層的RBD怎诫、RGW和CephFS都是通過librados訪問的
02 目前提供PHP瘾晃、Ruby、Java幻妓、Python蹦误、C和C++支持。

Crush

01 通過Crush算法的尋址操作,Ceph得以摒棄了傳統(tǒng)的集中式存儲元數(shù)據(jù)尋址方案
02 Crush算法在一致性哈锨恳龋基礎(chǔ)上很好的考慮了容災(zāi)域的隔離舱沧,使得Ceph能夠?qū)崿F(xiàn)各類負(fù)載的副本放置規(guī)則,例如跨機(jī)房哪廓、機(jī)架感知等
03 Crush算法有相當(dāng)強(qiáng)大的擴(kuò)展性狗唉,理論上可以支持?jǐn)?shù)千個(gè)存儲節(jié)點(diǎn),這為Ceph在大規(guī)模云環(huán)境中的應(yīng)用提供了先天的便利

Pool

01 Pool是存儲對象的邏輯分區(qū)涡真,它規(guī)定了數(shù)據(jù)冗余的類型和對應(yīng)的副本分布策略
02 副本(replicated)和 糾刪碼( Erasure Code)

PG

01 PG( placement group)是一個(gè)放置策略組分俯,它是對象的集合,該集合里的所有對象都具有相同的放置策略
02 簡單點(diǎn)說就是相同PG內(nèi)的對象都會(huì)放到相同的硬盤上
03 PG是 ceph的邏輯概念哆料,服務(wù)端數(shù)據(jù)均衡和恢復(fù)的最小粒度就是PG缸剪,一個(gè)PG包含多個(gè)OSD。
04 引入PG這一層其實(shí)是為了更好的分配數(shù)據(jù)和定位數(shù)據(jù)东亦;

Object

01 簡單來說塊存儲讀寫快杏节,不利于共享,文件存儲讀寫慢典阵,利于共享奋渔。能否弄一個(gè)讀寫快,利 于共享的出來呢壮啊。于是就有了對象存儲
02 最底層的存儲單元嫉鲸,包含元數(shù)據(jù)和原始數(shù)據(jù)

Pool、PG和OSD的關(guān)系

01 一個(gè)Pool里有很多PG歹啼;  
02 一個(gè)PG里包含一堆對象玄渗,一個(gè)對象只能屬于一個(gè)PG;  
03 PG有主從之分狸眼,一個(gè)PG分布在不同的OSD上;  

OSD

001 OSD是負(fù)責(zé)物理存儲的進(jìn)程藤树,一般配置成和磁盤一一對應(yīng),一塊磁盤啟動(dòng)一個(gè)OSD進(jìn)程拓萌。
002 主要功能是存儲數(shù)據(jù)岁钓、復(fù)制數(shù)據(jù)、平衡數(shù)據(jù)司志、恢復(fù)數(shù)據(jù)甜紫,以及與其它OSD間進(jìn)行心跳檢查,負(fù)責(zé)響應(yīng)客戶端請求返回具體數(shù)據(jù)的進(jìn)程等骂远;

Ceph三種存儲類型

塊存儲( RBD )

優(yōu)點(diǎn):存儲速度較快
缺點(diǎn):不支持共享存儲
應(yīng)用場景:虛擬機(jī)硬盤
典型設(shè)備:硬盤囚霸、 Raid 

文件存儲( CephFS )

優(yōu)點(diǎn):支持共享存儲
缺點(diǎn):讀寫速度較慢(需要經(jīng)過操作系統(tǒng)處理再轉(zhuǎn)為塊存儲)
應(yīng)用場景:文件共享,多臺服務(wù)器共享使用同一個(gè)存儲
典型設(shè)備: FTP 激才、 NFs 

對象存儲( Object )

優(yōu)點(diǎn):具備塊存儲的讀寫性能和文件存儲的共享特性
缺點(diǎn):操作系統(tǒng)不能直接訪問拓型,只能通過應(yīng)用程序級別的 API 訪問
應(yīng)用場景:圖片存儲额嘿,視頻存儲
典型設(shè)備:阿里云 OSs ,騰訊云 Cos

部署Ceph集群

初始化工作

關(guān)閉防火墻

systemcti stop firewald
systemctl disable firewalld

關(guān)閉selinux

sed -i 's/enforcing/disabled/' /etc/selinux/config  #永久劣挫,重啟生效
setenforce 0   #臨時(shí)

關(guān)閉 swap

swapof - a #臨時(shí) 
#永久
[root@k8s-m1 ~]# vi /etc/fstab 
#UUID=ff5b128d-f66c-40a5-86d7-ce69d2c0da61 swap  ...

根據(jù)規(guī)劃設(shè)置主機(jī)名

hostnamectl set - hostname < hostname > 

添加 hosts

cat >>/etc/hosts << EOF  
192.168.31.71 ceph-node01  
192.168.31.72 ceph-node02
192.168.31.73 ceph-node03 
EOF

設(shè)置文件描述符

#臨時(shí)生效
ulimit -SHn 102400   

#重啟生效
cat >> /etc/security/limits.conf << EOF
* soft nofile 65535
* hard nofile 65535
EOF

時(shí)間同步

yum instal ntpdate - y 
ntpdate time.windows.com 

配置 SSH 免交互認(rèn)證

ssh-keygen 
ssh-copy-id root@ceph-node01
ssh-copy-id root@ceph-node02
ssh-copy-id root@ceph-node03

集群規(guī)劃

1641449306492.png
ceph - deploy : ceph 集群部署節(jié)點(diǎn)册养,負(fù)責(zé)集群整體部署,這里復(fù)用node1節(jié)點(diǎn)压固,也可以單獨(dú)找一臺服務(wù)器作為部署節(jié)點(diǎn)
monitor : Ceph 監(jiān)視管理節(jié)點(diǎn)球拦,負(fù)責(zé)集群狀態(tài)維護(hù),例如存儲池副本數(shù)帐我、 PG 狀態(tài)坎炼、 OSD 數(shù)量等,至少部署1個(gè)拦键,一般需要3或5個(gè)節(jié)點(diǎn)組建高可用
osd : Ceph 存儲節(jié)點(diǎn)谣光,實(shí)際負(fù)責(zé)數(shù)據(jù)存儲的節(jié)點(diǎn),集群中至少有3個(gè) OSD 芬为,不少于默認(rèn)副本數(shù)萄金,每個(gè) OSD 對應(yīng)一快硬盤。

Ceph 集群部署方式

yum :常規(guī)的部署方式
ceph - ansible :官方基于 ansible 寫的自動(dòng)化部署工具
https://docs.ceph.com/projects/ceph-ansible/en/latest/
ceph - deploy : ceph 提供的簡易部署工具媚朦,可以非常方便部署 ceph 集群氧敢。(推薦)https://docs.ceph.com/projects/ceph-deploy/en/latest/

Ceph 版本選擇

1641450946948.png

Ceph 集群部署步驟

1、配置阿里云 yum 倉庫
2询张、安裝 ceph-deploy 工具
3福稳、創(chuàng)建集群
4、安裝 Ceph 
5瑞侮、部署 Monitor 服務(wù) 
6、部署 OSD 服務(wù)并添加硬盤
7鼓拧、部署 MGR 服務(wù)

配置阿里云 yum 倉庫

#所有機(jī)器都要配置
#rpm-octopus是對應(yīng)版本的
#el7 對應(yīng)centos版本
cat >/etc/yum.repos.d/ceph.repo<<EOF
[Ceph]
name=Ceph packages for $basearch
baseurl=http://mirrors.aliyun.com/ceph/rpm-octopus/el7/\$basearch
gpgcheck=0


[Ceph-noarch]
name=Ceph noarch packages
baseurl=http://mirrors.aliyun.com/ceph/rpm-octopus/el7/noarch
gpgcheck=0


[ceph-source]
name=Ceph source packages
baseurl=http://mirrors.aliyun.com/ceph/rpm-octopus/el7/SRPMS
gpgcheck=0
EOF

安裝 ceph - deploy 工具

yum -y install ceph-deploy

創(chuàng)建集群

創(chuàng)建一個(gè)my-cluster 目錄半火,所有命令在此目錄下進(jìn)行: 
mkdir my-cluster 
cd my-cluster 

創(chuàng)建一個(gè) Ceph 集群:
yum install  epel-release -y #所有節(jié)點(diǎn)都安裝
yum install python2-pip -y 
ceph-deploy new ceph-node01 ceph-node02 ceph-node03

安裝 Ceph

安裝 Ceph 包到指定節(jié)點(diǎn):
ceph-deploy install --no-adjust-repos ceph-node01 ceph-node02 ceph-node03
注:-no-adjust-repos參數(shù)是直接使用本地源,不使用官方默認(rèn)源

部署 Monitor 服務(wù)

初始化并部署 monitor ,收集所有密鑰: 
ceph-deploy mon create-initial 
使用ceph-deploy命令將配置文件和admin key復(fù)制到管理節(jié)點(diǎn)和Ceph節(jié)點(diǎn)季俩,以便毎次執(zhí)行ceph CL命令無需指定 monitor 地址和 ceph.client.admin.keyring 
ceph-deploy admin ceph-node01 ceph-node02 ceph-node03

部署 OSD 服務(wù)并添加硬盤

創(chuàng)建6個(gè) OSD 钮糖,分別對應(yīng)每個(gè)節(jié)點(diǎn)未使用的硬盤:
fdisk -l #查看每個(gè)節(jié)點(diǎn)
ceph-deploy osd create --data /dev/sdb ceph-node01
ceph-deploy osd create --data /dev/sdc ceph-node01
ceph-deploy osd create --data /dev/sdb ceph-node02
ceph-deploy osd create --data /dev/sdc ceph-node02
ceph-deploy osd create --data /dev/sdb ceph-node03
ceph-deploy osd create --data /dev/sdc ceph-node03

部署 MGR 服務(wù)

ceph-deploy mgr create ceph-node01 ceph-node02 ceph-node03
01 MGR 是 Ceph L版本新增加的組件
02 主要用是分擔(dān)和擴(kuò)展 monitor 的部分功能,減輕 monitor 的負(fù)擔(dān)
03 建議每臺 monitor 節(jié)點(diǎn)都部署一個(gè) mgr ,以實(shí)現(xiàn)相同級別的高可用酌住。
pip3 install pecan werkzeug #所有節(jié)點(diǎn)都安裝
ceph config set mon auth_allow_insecure_global_id_reclaim false #所有節(jié)點(diǎn)都執(zhí)行
查看 Ceph 集群狀態(tài): 
ceph -s 
查看 Ceph 版本: 
ceph -v 
-------------------------------------------------------------------------------------
[root@k8s-m1 ~]# ps -ef|grep ceph
root       10228       1  0 17:51 ?        00:00:00 /usr/bin/python3.6 /usr/bin/ceph-crash
ceph       68360       1  1 18:45 ?        00:00:05 /usr/bin/ceph-mgr -f --cluster ceph --id k8s-m1 --setuser ceph --setgroup ceph
ceph       68372       1  0 18:45 ?        00:00:01 /usr/bin/ceph-osd -f --cluster ceph --id 0 --setuser ceph --setgroup ceph
ceph       68415       1  3 18:45 ?        00:00:16 /usr/bin/ceph-mon -f --cluster ceph --id k8s-m1 --setuser ceph --setgroup ceph

Ceph 集群服務(wù)管理

1店归、啟動(dòng)所有守護(hù)進(jìn)程
# systemctl restart ceph.target 
2、按類型啟動(dòng)守護(hù)進(jìn)程
# systemctl restart ceph-osd@id  (ps -ef|grep ceph)
# systemctl restart ceph-mon.target 
# systemctl restart ceph-mds.target 
# systemctl restart ceph-mgr.target 

Ceph 集群常用管理命令

主機(jī)名 命令
PG 狀態(tài) ceph pg stat
Pool狀態(tài) ceph osd pool Is #查看存儲池<br />ceph osd pool Is detail
OSD 狀態(tài) ceph osd stat<br />ceph osd dump # OSD 詳情
ceph osd tree # OSD 分布
ceph osd df # OSD 使用
Monitor 狀態(tài) ceph mon stat
ceph quorum status #仲裁狀態(tài)
集群空間用量 ceph df

RDB塊存儲

工作流程

1641467877051.png
(1)客戶端創(chuàng)建一個(gè)pool酪我,需要為這個(gè)pool指定pg的數(shù)量消痛;  
(2)創(chuàng)建pool/image rbd設(shè)備進(jìn)行掛載;  
(3)用戶寫入的數(shù)據(jù)進(jìn)行切塊都哭,每個(gè)塊的大小默認(rèn)為4M秩伞,并且每個(gè)塊都有一個(gè)名字逞带,名字就是object+序號;  
(4)將每個(gè)object通過pg進(jìn)行副本位置的分配纱新;  
(5)pg根據(jù)cursh算法會(huì)尋找3個(gè)osd展氓,把這個(gè)object分別保存在這三個(gè)osd上;  
(6)osd上實(shí)際是把底層的disk進(jìn)行了格式化操作脸爱,一般部署工具會(huì)將它格式化為xfs文件系統(tǒng)遇汞;  
(7)object的存儲就變成了存儲一個(gè)文rbd0.object1.file

RBD常用命令

命令 功能
rbd create 創(chuàng)建塊設(shè)備映像
rbd ls 列出 rbd 存儲池中的塊設(shè)備
rbd info 查看塊設(shè)備信息
rbd diff 可以統(tǒng)計(jì) rbd 使用量
rbd map 映射塊設(shè)備
rbd showmapped 查看已映射塊設(shè)備
rbd remove 刪除塊設(shè)備
rbd resize 更改塊設(shè)備的大小

RBD的創(chuàng)建并使用

1、創(chuàng)建rbd使用的pool

ceph osd pool create rbd-pool  128 # ceph osd pool create <pool-name> <pg-num>
ceph osd pool ls 

pg數(shù)量設(shè)置建議:
pg數(shù)量=(osd數(shù)量*100)/副本數(shù)
副本數(shù)默認(rèn)為3
例如 3*100/3 =100 向上取2的n次方 128

2簿废、指定存儲池使用存儲類型

ceph osd pool application enable rbd-pool rbd 

3空入、創(chuàng)建一個(gè)塊設(shè)備

# rbd create --size 10240 rbd-pool/image01 

3、查看塊設(shè)備

# rbd ls rbd-pool
# rbd info rbd-pool/image01

本地掛載使用塊設(shè)備

1捏鱼、禁用當(dāng)前系統(tǒng)內(nèi)核不支持的feature

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

2执庐、映射(任意節(jié)點(diǎn)操作)

# rbd map rbd-pool/image01 
--/dev/rbd0

3、格式化塊設(shè)備

# mkfs.xfs /dev/rbd0

4导梆、mount到本地

# mount /dev/rbd0 /mnt
# umount /mnt

5轨淌、取消塊設(shè)備和內(nèi)核映射

# rbd unmap rbd-pool/image01 

6、刪除RBD塊設(shè)備

# rbd rm rbd-pool/image01

遠(yuǎn)程掛載使用塊設(shè)備

1看尼、拷貝配置文件和秘鑰

cd my-cluster /
scp ceph.conf root@192.168.153.17:/etc/ceph 
scp ceph.client.admin.keyring root@192.168.153.17:/etc/ceph
scp /etc/yum.repos.d/ceph.repo  root@192.168.153.17:/etc/yum.repos.d

2递鹉、安裝 Ceph 客戶端

 yum install epel-release - y 
 yum install -y ceph-common

3、剩余操作就與本地掛載操作一樣了

快照配置

1藏斩、創(chuàng)建快照

rbd snap create rbd-pool/image01@snap01

2躏结、列出創(chuàng)建的快照

rbd snap list rbd-pool/image01
 

3、還原快照

rbd snap rollback rbd-pool/image01@snap01

注:還原快照前需要先取消掛載和內(nèi)核映射狰域,否則會(huì)出錯(cuò)
umount /dev/rdb0 /mnt
rbd unmap rbd-pool/image01 

4媳拴、重新映射并掛載驗(yàn)證

rbd map rbd-pool/image01
mount /dev/rbd0 /mnt

5、刪除快照

rbd snap rm rbd-pool/image01@snap01

克隆配置

1兆览、創(chuàng)建一個(gè)塊設(shè)備

# rbd create --size 10240 rbd-pool/image02 

2屈溉、創(chuàng)建快照

rbd snap create rbd-pool/image02@snap01

3、設(shè)置快照處于被保護(hù)狀態(tài)

# rbd snap protect rbd-pool/image02@snap01

4抬探、通過快照克隆一個(gè)新塊設(shè)備

# rbd clone rbd-pool/image02@snap01  rbd-pool/image02_clone
# rdb info rbd-pool/image02_clone

5子巾、將克隆的快照獨(dú)立于父設(shè)備

# rbd flatten rbd-pool/image02_clone


CephFS文件系統(tǒng)

概述

01 CephFS 是一個(gè)基于 ceph 集群且兼容 POSIX 標(biāo)準(zhǔn)的文件系統(tǒng)。
02 創(chuàng)建 cephfs 文件系統(tǒng)時(shí)需要在 ceph 集群中添加 mds 服務(wù)小压,該服務(wù)負(fù)責(zé)處理 POSIX 文件系統(tǒng)中的 metadata 部分线梗,實(shí)際的數(shù)據(jù)部分交由 ceph 集群中的 OSD 處理。
03 cephfs 支持以內(nèi)核模塊方式加載也支持 fuse 方式加載怠益。
04 無論是內(nèi)核模式還是 fuse 模式仪搔,都是通過調(diào)用 libcephfs 庫來實(shí)現(xiàn) cephfs 文件系統(tǒng)的加載,而 libcephfs 庫又調(diào)用 librados 庫與 ceph 集群進(jìn)行通信溉痢,從而實(shí)現(xiàn) cephfs 的加載僻造。


1641521621653.png

部署MDS服務(wù)

ceph-deploy mds create ceph-node01 ceph-node02 ceph-node03


創(chuàng)建文件系統(tǒng)

#創(chuàng)建存儲池
ceph osd pool create cephfs-data  <pg_num>
ceph osd pool create cephfs-metadata  <pg_num>
ceph fs ls
#創(chuàng)建文件系統(tǒng)
#格式:ceph fs new <fs_name> <metadata> <data>
ceph fs new cephfs cephfs-metadata cephfs-data 
ceph fs ls #查看創(chuàng)建后的cephfs


掛載并使用

掛載本地目錄

#安裝 Ceph 客戶端
yum install epel-release - y 
yum install -y ceph-common

#獲取賬號與密鑰
ceph auth list |grep admin -A1

mkdir -p /opt/cephfs/local
 

#掛載本地目錄
mount -t ceph 192.168.0.201:6789,192.168.0.202:6789,192.168.0.203:6789:/ /opt/cephfs/local/ -o name=admin,secret=AQDHjeddHlktJhAAxDClZh9mvBxRea5EI2xD9w==
或者
mount -t ceph 192.168.153.25:6789,192.168.153.27:6789,192.168.153.28:6789:/ /opt/cephfs/local/ -o name=admin,secretfile=/opt/cephfs/admin.secret


#取消掛載
umount /opt/cephfs/local

fuse方式掛載

#安裝fuse
yum install -y ceph-fuse

cd my-cluster /
scp ceph.conf root@192.168.153.17:/etc/ceph 
scp ceph.client.admin.keyring root@192.168.153.17:/etc/ceph

mkdir -p /opt/cephfs/fuse
#掛載到本地目錄
ceph-fuse -m 192.168.153.25:6789,192.168.153.27:6789,192.168.153.28:6789  /opt/cephfs/fuse/

#取消掛載
fusermount -u /opt/cephfs/fuse/

k8s使用ceph作為pod存儲

pv動(dòng)態(tài)供給工作流程

1641526606246.png

ceph-csi供給程序

ceph-csi是ceph官方維護(hù)的PV供給程序憋他,專門用于在Kubernetes中使用 RBD 、CephFS 為 Pod 提供存儲
項(xiàng)目地址:https://github.com/ceph/ceph-csi

1641527748959.png

RBD

關(guān)于部署髓削,RBD YAML文件在deploy/rbd/kubernetes目錄竹挡,YAML改動(dòng)如下:
01 全部統(tǒng)一命名空間到 ceph-csi 
02 csi-config-map.yaml修改連接ceph集群信息
03 增加storageclass.yaml,修改集群ID和存儲池
04 增加secret.yaml立膛,修改秘鑰
05 將csi-rbdplugin-provisioner.yaml和csi-rbdplugin.yaml中關(guān)于kms配置注釋


**全部統(tǒng)一命名空間到 ceph-csi **

 kubectl create ns ceph-csi 

k8s節(jié)點(diǎn)安裝 Ceph 客戶端

 yum install epel-release - y 
 yum install -y ceph-common

csi-config-map.yaml

[root@k8s-m1 rbd]# vi csi-config-map.yaml 
---
apiVersion: v1
kind: ConfigMap
data:
  config.json: |-
    [
      {
        "clusterID": "6800e723-090a-4329-9fc4-bfa299110977",
        "monitors": [
          "192.168.153.25:6789",
          "192.168.153.27:6789",
          "192.168.153.28:6789"
        ]
      }
    ]
metadata:
  name: ceph-csi-config
  namespace: ceph-csi
  
---------------------------------------------------------------------------------
[root@k8s-m1 rbd]# ceph -s
  cluster:
    id:     6800e723-090a-4329-9fc4-bfa299110977
或者:    
[root@k8s-m1 rbd]# ceph mon dump
dumped monmap epoch 1
epoch 1
fsid 6800e723-090a-4329-9fc4-bfa299110977


storageclass

[root@k8s-m1 rbd]# vi storageclass.yaml 
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
   name: csi-rbd-sc
provisioner: rbd.csi.ceph.com
parameters:
   clusterID: 6800e723-090a-4329-9fc4-bfa299110977 
   pool: rbd-pool
   imageFeatures: layering
   csi.storage.k8s.io/provisioner-secret-name: csi-rbd-secret
   csi.storage.k8s.io/provisioner-secret-namespace: ceph-csi
   csi.storage.k8s.io/controller-expand-secret-name: csi-rbd-secret
   csi.storage.k8s.io/controller-expand-secret-namespace: ceph-csi
   csi.storage.k8s.io/node-stage-secret-name: csi-rbd-secret
   csi.storage.k8s.io/node-stage-secret-namespace: ceph-csi
   csi.storage.k8s.io/fstype: ext4
reclaimPolicy: Delete
allowVolumeExpansion: true
mountOptions:
   - discard
---------------------------------------------------------------------------------
clusterID:
[root@k8s-m1 rbd]# ceph -s
  cluster:
    id:     6800e723-090a-4329-9fc4-bfa299110977


pool:
[root@k8s-m1 rbd]# ceph osd pool ls
rbd-pool
......

secret

[root@k8s-m1 rbd]# vi secret.yaml 
apiVersion: v1
kind: Secret
metadata:
  name: csi-rbd-secret
  namespace: ceph-csi
stringData:
  userID: admin
  userKey: AQD9wNZhYxUQFRAA9hJrWc5DjqSVEsX5WM7lwA==
  
---------------------------------------------------------------------------------
userKey:
ceph auth list |grep admin -A1
client.admin
        key: AQD9wNZhYxUQFRAA9hJrWc5DjqSVEsX5WM7lwA==
        


        


啟動(dòng)驗(yàn)證

[root@k8s-m1 rbd]# ls
csi-config-map.yaml      csi-nodeplugin-rbac.yaml  csi-provisioner-rbac.yaml      
csi-rbdplugin.yaml  secret.yaml csi-nodeplugin-psp.yaml  csi-provisioner-psp.yaml  
csi-rbdplugin-provisioner.yaml     storageclass.yaml

[root@k8s-m1 rbd]# kubectl apply -f .

[root@k8s-m1 rbd]# kubectl get sc
NAME       PROVISIONER        RECLAIMPOLICY   VOLUMEBINDINGMODE   ALLOWVOLUMEEXPANSION   
csi-rbd-sc rbd.csi.ceph.com   Delete          Immediate           true  


[root@k8s-m1 rbd]# kubectl get pod -n ceph-csi -o wide                                     
NAME                                      READY   STATUS   IP               NODE       
csi-rbdplugin-245vq                       3/3    Running   192.168.153.28   k8s-node2 
csi-rbdplugin-mhg8g                       3/3    Running   192.168.153.25   k8s-m1  
csi-rbdplugin-w6trw                       3/3    Running   192.168.153.27   k8s-node1 
csi-rbdplugin-provisioner-fc66bb6-2b8tz   7/7    Running   10.244.36.131    k8s-node1   
csi-rbdplugin-provisioner-fc66bb6-7p72t   7/7    Running   10.244.169.129   k8s-node2   
csi-rbdplugin-provisioner-fc66bb6-kwd8k   0/7    Pending             
  



rbd-pod-test.yaml

apiVersion: v1
kind: Pod
metadata:
  name: ceph-rbd-test
spec:
  containers:
  - name: nginx
    image: nginx:latest
    volumeMounts:
      - name: www 
        mountPath: /usr/share/nginx/html 
  volumes:
  - name: www 
    persistentVolumeClaim:
      claimName: ceph-rbd-test
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: ceph-rbd-test
spec:
  accessModes:
    - ReadWriteOnce
  storageClassName: csi-rbd-sc  
  resources:
    requests:
      storage: 10Gi


測試

[root@k8s-m1 rbd]# rbd ls rbd-pool  
csi-vol-6a8a5824-6fb6-11ec-8aa4-a60b5dcd89ed
image01
image02

#動(dòng)態(tài)供給程序創(chuàng)建的
[root@k8s-m1 rbd]# rbd info rbd-pool/csi-vol-6a8a5824-6fb6-11ec-8aa4-a60b5dcd89ed
rbd image 'csi-vol-6a8a5824-6fb6-11ec-8aa4-a60b5dcd89ed':
        size 10 GiB in 2560 objects
        order 22 (4 MiB objects)
        snapshot_count: 0
        id: 2a853bb0bca9d
        block_name_prefix: rbd_data.2a853bb0bca9d
        format: 2
        features: layering
        op_features: 
        flags: 
        create_timestamp: Fri Jan  7 20:36:20 2022
        access_timestamp: Fri Jan  7 20:36:20 2022
        modify_timestamp: Fri Jan  7 20:36:20 2022
        
        
[root@k8s-m1 rbd]# kubectl exec -it ceph-rbd-test -- bash 
root@ceph-rbd-test:/# cd /usr/share/nginx/html/

root@ceph-rbd-test:/usr/share/nginx/html# touch aaa

#刪除pod
[root@k8s-m1 rbd]# kubectl delete pod ceph-rbd-test


[root@k8s-m1 rbd]# kubectl apply -f  rbd-pod-test.yaml 
pod/ceph-rbd-test created
persistentvolumeclaim/ceph-rbd-test unchanged
 
 
[root@k8s-m1 rbd]# kubectl exec -it ceph-rbd-test -- bash                      
root@ceph-rbd-test:/# cd /usr/share/nginx/html/
root@ceph-rbd-test:/usr/share/nginx/html# ls
aaa  

cephfs

關(guān)于部署揪罕,cephfs YAML文件在deploy/cephfs/kubernetes目錄,YAML改動(dòng)如下:
01 全部統(tǒng)一命名空間到 ceph-csi-cephfs 
02 csi-config-map.yaml修改連接ceph集群信息
03 增加storageclass.yaml宝泵,修改集群ID好啰、文件存儲池、文件系統(tǒng)名稱

增加 secret.yaml和storageclass.yaml文件
將 csi-rbdplugin-provisioner.yaml 和 csi-rbdplugin.yaml 中關(guān)于 kms 配置注釋
在使用中儿奶,還需要根據(jù)自己集群環(huán)境修改:
 
 secret.yaml 修改秘鑰
 storageclass.yaml修改集群ID和文件系統(tǒng)名稱
 
 關(guān)于部署框往,RBD YAML文件在deploy/rbd/kubernetes目錄,YAML改動(dòng)如下:
01 全部統(tǒng)一命名空間到 ceph-csi 
02 csi-config-map.yaml修改連接ceph集群信息
03 增加storageclass.yaml闯捎,修改集群ID和存儲池
04 增加secret.yaml椰弊,修改秘鑰
05 將csi-rbdplugin-provisioner.yaml和csi-rbdplugin.yaml中關(guān)于kms配置注釋

**全部統(tǒng)一命名空間到 ceph-csi **

 kubectl create ns ceph-csi-cephfs

k8s節(jié)點(diǎn)安裝 Ceph 客戶端

 yum install epel-release - y 
 yum install -y ceph-common


csi-config-map

[root@k8s-m1 rbd]# vi csi-config-map.yaml 
---
apiVersion: v1
kind: ConfigMap
data:
  config.json: |-
    [
      {
        "clusterID": "6800e723-090a-4329-9fc4-bfa299110977",
        "monitors": [
          "192.168.153.25:6789",
          "192.168.153.27:6789",
          "192.168.153.28:6789"
        ]
      }
    ]
metadata:
  name: ceph-csi-config
  namespace: ceph-csi-cephfs
  
---------------------------------------------------------------------------------
[root@k8s-m1 rbd]# ceph -s
  cluster:
    id:     6800e723-090a-4329-9fc4-bfa299110977
    
[root@k8s-m1 rbd]# ceph mon dump
dumped monmap epoch 1
epoch 1
fsid 6800e723-090a-4329-9fc4-bfa299110977


storageclass

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
   name: csi-cephfs-sc
provisioner: cephfs.csi.ceph.com
parameters:
   clusterID: 6800e723-090a-4329-9fc4-bfa299110977 
   pool: cephfs-data 
   fsName: cephfs
   csi.storage.k8s.io/provisioner-secret-name: csi-cephfs-secret
   csi.storage.k8s.io/provisioner-secret-namespace: ceph-csi-cephfs
   csi.storage.k8s.io/controller-expand-secret-name: csi-cephfs-secret
   csi.storage.k8s.io/controller-expand-secret-namespace: ceph-csi-cephfs
   csi.storage.k8s.io/node-stage-secret-name: csi-cephfs-secret
   csi.storage.k8s.io/node-stage-secret-namespace: ceph-csi-cephfs
reclaimPolicy: Delete
allowVolumeExpansion: true
mountOptions:
   - discard   
---------------------------------------------------------------------------------
clusterID:
[root@k8s-m1 rbd]# ceph -s
  cluster:
    id:     6800e723-090a-4329-9fc4-bfa299110977


pool:
[root@k8s-node2 ~]# ceph osd pool ls
cephfs-data
...

[root@k8s-m1 ~]# ceph fs ls 
name: cephfs, metadata pool: cephfs-metadata, data pools: [cephfs-data ]

secret

[root@k8s-m1 rbd]# vi secret.yaml 
apiVersion: v1
kind: Secret
metadata:
  name: csi-rbd-secret
  namespace: ceph-csi-cephfs
stringData:
  userID: admin
  userKey: AQD9wNZhYxUQFRAA9hJrWc5DjqSVEsX5WM7lwA==
  
---------------------------------------------------------------------------------
userKey:
ceph auth list |grep admin -A1
client.admin
        key: AQD9wNZhYxUQFRAA9hJrWc5DjqSVEsX5WM7lwA==

啟動(dòng)驗(yàn)證

[root@k8s-m1 cephfs]# ls
csi-cephfsplugin-provisioner.yaml  csi-config-map.yaml      csi-nodeplugin-rbac.yaml  csi-provisioner-rbac.yaml          storageclass.yaml        csi-cephfsplugin.yaml        csi-nodeplugin-psp.yaml            csi-provisioner-psp.yaml secret.yaml


[root@k8s-m1 cephfs]# kubectl get pod -n ceph-csi-cephfs
NAME                                            READY   STATUS    RESTARTS   AGE
csi-cephfsplugin-8knvq                          3/3     Running   0          26s
csi-cephfsplugin-dvfhf                          3/3     Running   0          26s
csi-cephfsplugin-provisioner-7c454885fc-cnb2v   0/6     Pending   0          26s
csi-cephfsplugin-provisioner-7c454885fc-t5mtd   6/6     Running   0          26s
csi-cephfsplugin-provisioner-7c454885fc-xtwqb   6/6     Running   0          26s
csi-cephfsplugin-xcr5g                          3/3     Running   0          26s

[root@k8s-m1 cephfs]# kubectl get sc
NAME            PROVISIONER           RECLAIMPOLICY   VOLUMEBINDINGMODE   
csi-cephfs-sc   cephfs.csi.ceph.com   Delete          Immediate           


ceph-cephfs-test

[root@k8s-m1 ~]# vi cephfs-deployment-test.yaml 
apiVersion: apps/v1
kind: Deployment
metadata:
  name: cephfs-pod-test
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx
        volumeMounts:
          - name: www
            mountPath: /usr/share/nginx/html
      volumes:
      - name: www
        persistentVolumeClaim:
          claimName: ceph-cephfs-test
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: ceph-cephfs-test
spec:
  accessModes:
    - ReadWriteMany
  storageClassName: csi-cephfs-sc
  resources:
    requests:
      storage: 10Gi

測試

[root@k8s-m1 ~]# kubectl get pod 
NAME                               READY   STATUS    RESTARTS   AGE
cephfs-pod-test-5d95fd8858-2v9cr   1/1     Running   0          8m40s
cephfs-pod-test-5d95fd8858-dsp7h   1/1     Running   0          8m40s
cephfs-pod-test-5d95fd8858-n2j87   1/1     Running   0          8m40s


[root@k8s-m1 ~]# kubectl exec -it cephfs-pod-test-5d95fd8858-2v9cr -- bash
root@cephfs-pod-test-5d95fd8858-2v9cr:/# cd  /usr/share/nginx/html 
root@cephfs-pod-test-5d95fd8858-2v9cr:/usr/share/nginx/html# touch test.txt

[root@k8s-m1 ~]# kubectl exec -it cephfs-pod-test-5d95fd8858-dsp7h -- bash
root@cephfs-pod-test-5d95fd8858-dsp7h:/# cd  /usr/share/nginx/html
root@cephfs-pod-test-5d95fd8858-dsp7h:/usr/share/nginx/html# ls
test.txt

總結(jié)

1641608575044.png
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
禁止轉(zhuǎn)載,如需轉(zhuǎn)載請通過簡信或評論聯(lián)系作者瓤鼻。
  • 序言:七十年代末秉版,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子茬祷,更是在濱河造成了極大的恐慌清焕,老刑警劉巖,帶你破解...
    沈念sama閱讀 223,002評論 6 519
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件祭犯,死亡現(xiàn)場離奇詭異秸妥,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)沃粗,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,357評論 3 400
  • 文/潘曉璐 我一進(jìn)店門筛峭,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人陪每,你說我怎么就攤上這事×常” “怎么了檩禾?”我有些...
    開封第一講書人閱讀 169,787評論 0 365
  • 文/不壞的土叔 我叫張陵,是天一觀的道長疤祭。 經(jīng)常有香客問我盼产,道長,這世上最難降的妖魔是什么勺馆? 我笑而不...
    開封第一講書人閱讀 60,237評論 1 300
  • 正文 為了忘掉前任戏售,我火速辦了婚禮侨核,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘灌灾。我一直安慰自己搓译,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,237評論 6 398
  • 文/花漫 我一把揭開白布锋喜。 她就那樣靜靜地躺著些己,像睡著了一般。 火紅的嫁衣襯著肌膚如雪嘿般。 梳的紋絲不亂的頭發(fā)上段标,一...
    開封第一講書人閱讀 52,821評論 1 314
  • 那天,我揣著相機(jī)與錄音炉奴,去河邊找鬼逼庞。 笑死,一個(gè)胖子當(dāng)著我的面吹牛瞻赶,可吹牛的內(nèi)容都是我干的赛糟。 我是一名探鬼主播,決...
    沈念sama閱讀 41,236評論 3 424
  • 文/蒼蘭香墨 我猛地睜開眼共耍,長吁一口氣:“原來是場噩夢啊……” “哼虑灰!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起痹兜,我...
    開封第一講書人閱讀 40,196評論 0 277
  • 序言:老撾萬榮一對情侶失蹤穆咐,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后字旭,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體对湃,經(jīng)...
    沈念sama閱讀 46,716評論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,794評論 3 343
  • 正文 我和宋清朗相戀三年遗淳,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了拍柒。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,928評論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡屈暗,死狀恐怖拆讯,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情养叛,我是刑警寧澤种呐,帶...
    沈念sama閱讀 36,583評論 5 351
  • 正文 年R本政府宣布,位于F島的核電站弃甥,受9級特大地震影響爽室,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜淆攻,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,264評論 3 336
  • 文/蒙蒙 一阔墩、第九天 我趴在偏房一處隱蔽的房頂上張望嘿架。 院中可真熱鬧,春花似錦啸箫、人聲如沸耸彪。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,755評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽搜囱。三九已至,卻和暖如春柑土,著一層夾襖步出監(jiān)牢的瞬間蜀肘,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,869評論 1 274
  • 我被黑心中介騙來泰國打工稽屏, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留扮宠,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,378評論 3 379
  • 正文 我出身青樓狐榔,卻偏偏與公主長得像坛增,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子薄腻,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,937評論 2 361

推薦閱讀更多精彩內(nèi)容