Ceph架構(gòu)介紹
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ī)劃
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 版本選擇
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塊存儲
工作流程
(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 的加載僻造。
部署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)供給工作流程
ceph-csi供給程序
ceph-csi是ceph官方維護(hù)的PV供給程序憋他,專門用于在Kubernetes中使用 RBD 、CephFS 為 Pod 提供存儲
項(xiàng)目地址:https://github.com/ceph/ceph-csi
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