Ceph架构介绍
1641438794173.pngRBD ( RADOs Block Device ):块存储接口
RGW ( RADOs Gateway )):对象存储网关,接口与S3和 Swift 兼容
LIBRADOs CephFS ( Ceph File System ):文件级存储接口
RADOS RADOs ( Reliable Autonomic Distributed Object Store ):抽象的对象存储集群, Ceph 核心,实现用户数据分配、故障转移等集群操作
MON :集群状态维护,例如 osD 是否健康、 PG 状态等
MDS ( Metadata Server ): CephFS 服务依赖的元数据服务
OSD ( Object Storage Daemon ):对象存储设备,主要存储数据
Ceph核心概念
RADOS
01 全称Reliable Autonomic Distributed Object Store,即可靠的、自动化的、分布式对象存储系统。
02 RADOS是Ceph集群的精华,用户实现数据分配、Failover等集群操作。
Librados
01 Rados提供库,因为RADOS是协议很难直接访问,因此上层的RBD、RGW和CephFS都是通过librados访问的
02 目前提供PHP、Ruby、Java、Python、C和C++支持。
Crush
01 通过Crush算法的寻址操作,Ceph得以摒弃了传统的集中式存储元数据寻址方案
02 Crush算法在一致性哈希基础上很好的考虑了容灾域的隔离,使得Ceph能够实现各类负载的副本放置规则,例如跨机房、机架感知等
03 Crush算法有相当强大的扩展性,理论上可以支持数千个存储节点,这为Ceph在大规模云环境中的应用提供了先天的便利
Pool
01 Pool是存储对象的逻辑分区,它规定了数据冗余的类型和对应的副本分布策略
02 副本(replicated)和 纠删码( Erasure Code)
PG
01 PG( placement group)是一个放置策略组,它是对象的集合,该集合里的所有对象都具有相同的放置策略
02 简单点说就是相同PG内的对象都会放到相同的硬盘上
03 PG是 ceph的逻辑概念,服务端数据均衡和恢复的最小粒度就是PG,一个PG包含多个OSD。
04 引入PG这一层其实是为了更好的分配数据和定位数据;
Object
01 简单来说块存储读写快,不利于共享,文件存储读写慢,利于共享。能否弄一个读写快,利 于共享的出来呢。于是就有了对象存储
02 最底层的存储单元,包含元数据和原始数据
Pool、PG和OSD的关系
01 一个Pool里有很多PG;
02 一个PG里包含一堆对象,一个对象只能属于一个PG;
03 PG有主从之分,一个PG分布在不同的OSD上;
OSD
001 OSD是负责物理存储的进程,一般配置成和磁盘一一对应,一块磁盘启动一个OSD进程。
002 主要功能是存储数据、复制数据、平衡数据、恢复数据,以及与其它OSD间进行心跳检查,负责响应客户端请求返回具体数据的进程等;
Ceph三种存储类型
块存储( RBD )
优点:存储速度较快
缺点:不支持共享存储
应用场景:虚拟机硬盘
典型设备:硬盘、 Raid
文件存储( CephFS )
优点:支持共享存储
缺点:读写速度较慢(需要经过操作系统处理再转为块存储)
应用场景:文件共享,多台服务器共享使用同一个存储
典型设备: FTP 、 NFs
对象存储( Object )
优点:具备块存储的读写性能和文件存储的共享特性
缺点:操作系统不能直接访问,只能通过应用程序级别的 API 访问
应用场景:图片存储,视频存储
典型设备:阿里云 OSs ,腾讯云 Cos
部署Ceph集群
初始化工作
关闭防火墙
systemcti stop firewald
systemctl disable firewalld
关闭selinux
sed -i 's/enforcing/disabled/' /etc/selinux/config #永久,重启生效
setenforce 0 #临时
关闭 swap
swapof - a #临时
#永久
[root@k8s-m1 ~]# vi /etc/fstab
#UUID=ff5b128d-f66c-40a5-86d7-ce69d2c0da61 swap ...
根据规划设置主机名
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
设置文件描述符
#临时生效
ulimit -SHn 102400
#重启生效
cat >> /etc/security/limits.conf << EOF
* soft nofile 65535
* hard nofile 65535
EOF
时间同步
yum instal ntpdate - y
ntpdate time.windows.com
配置 SSH 免交互认证
ssh-keygen
ssh-copy-id root@ceph-node01
ssh-copy-id root@ceph-node02
ssh-copy-id root@ceph-node03
集群规划
1641449306492.pngceph - deploy : ceph 集群部署节点,负责集群整体部署,这里复用node1节点,也可以单独找一台服务器作为部署节点
monitor : Ceph 监视管理节点,负责集群状态维护,例如存储池副本数、 PG 状态、 OSD 数量等,至少部署1个,一般需要3或5个节点组建高可用
osd : Ceph 存储节点,实际负责数据存储的节点,集群中至少有3个 OSD ,不少于默认副本数,每个 OSD 对应一快硬盘。
Ceph 集群部署方式
yum :常规的部署方式
ceph - ansible :官方基于 ansible 写的自动化部署工具
https://docs.ceph.com/projects/ceph-ansible/en/latest/
ceph - deploy : ceph 提供的简易部署工具,可以非常方便部署 ceph 集群。(推荐)https://docs.ceph.com/projects/ceph-deploy/en/latest/
Ceph 版本选择
1641450946948.pngCeph 集群部署步骤
1、配置阿里云 yum 仓库
2、安装 ceph-deploy 工具
3、创建集群
4、安装 Ceph
5、部署 Monitor 服务
6、部署 OSD 服务并添加硬盘
7、部署 MGR 服务
配置阿里云 yum 仓库
#所有机器都要配置
#rpm-octopus是对应版本的
#el7 对应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
创建集群
创建一个my-cluster 目录,所有命令在此目录下进行:
mkdir my-cluster
cd my-cluster
创建一个 Ceph 集群:
yum install epel-release -y #所有节点都安装
yum install python2-pip -y
ceph-deploy new ceph-node01 ceph-node02 ceph-node03
安装 Ceph
安装 Ceph 包到指定节点:
ceph-deploy install --no-adjust-repos ceph-node01 ceph-node02 ceph-node03
注:-no-adjust-repos参数是直接使用本地源,不使用官方默认源
部署 Monitor 服务
初始化并部署 monitor ,收集所有密钥:
ceph-deploy mon create-initial
使用ceph-deploy命令将配置文件和admin key复制到管理节点和Ceph节点,以便毎次执行ceph CL命令无需指定 monitor 地址和 ceph.client.admin.keyring
ceph-deploy admin ceph-node01 ceph-node02 ceph-node03
部署 OSD 服务并添加硬盘
创建6个 OSD ,分别对应每个节点未使用的硬盘:
fdisk -l #查看每个节点
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 服务
ceph-deploy mgr create ceph-node01 ceph-node02 ceph-node03
01 MGR 是 Ceph L版本新增加的组件
02 主要用是分担和扩展 monitor 的部分功能,减轻 monitor 的负担
03 建议每台 monitor 节点都部署一个 mgr ,以实现相同级别的高可用。
pip3 install pecan werkzeug #所有节点都安装
ceph config set mon auth_allow_insecure_global_id_reclaim false #所有节点都执行
查看 Ceph 集群状态:
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 集群服务管理
1、启动所有守护进程
# systemctl restart ceph.target
2、按类型启动守护进程
# 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 集群常用管理命令
主机名 | 命令 |
---|---|
PG 状态 | ceph pg stat |
Pool状态 | ceph osd pool Is #查看存储池<br />ceph osd pool Is detail |
OSD 状态 | ceph osd stat<br />ceph osd dump # OSD 详情 ceph osd tree # OSD 分布 ceph osd df # OSD 使用 |
Monitor 状态 | ceph mon stat ceph quorum status #仲裁状态 |
集群空间用量 | ceph df |
RDB块存储
工作流程
1641467877051.png(1)客户端创建一个pool,需要为这个pool指定pg的数量;
(2)创建pool/image rbd设备进行挂载;
(3)用户写入的数据进行切块,每个块的大小默认为4M,并且每个块都有一个名字,名字就是object+序号;
(4)将每个object通过pg进行副本位置的分配;
(5)pg根据cursh算法会寻找3个osd,把这个object分别保存在这三个osd上;
(6)osd上实际是把底层的disk进行了格式化操作,一般部署工具会将它格式化为xfs文件系统;
(7)object的存储就变成了存储一个文rbd0.object1.file
RBD常用命令
命令 | 功能 |
---|---|
rbd create | 创建块设备映像 |
rbd ls | 列出 rbd 存储池中的块设备 |
rbd info | 查看块设备信息 |
rbd diff | 可以统计 rbd 使用量 |
rbd map | 映射块设备 |
rbd showmapped | 查看已映射块设备 |
rbd remove | 删除块设备 |
rbd resize | 更改块设备的大小 |
RBD的创建并使用
1、创建rbd使用的pool
ceph osd pool create rbd-pool 128 # ceph osd pool create <pool-name> <pg-num>
ceph osd pool ls
pg数量设置建议:
pg数量=(osd数量*100)/副本数
副本数默认为3
例如 3*100/3 =100 向上取2的n次方 128
2、指定存储池使用存储类型
ceph osd pool application enable rbd-pool rbd
3、创建一个块设备
# rbd create --size 10240 rbd-pool/image01
3、查看块设备
# rbd ls rbd-pool
# rbd info rbd-pool/image01
本地挂载使用块设备
1、禁用当前系统内核不支持的feature
# rbd feature disable image01 exclusive-lock, object-map, fast-diff, deep-flatten
2、映射(任意节点操作)
# rbd map rbd-pool/image01
--/dev/rbd0
3、格式化块设备
# mkfs.xfs /dev/rbd0
4、mount到本地
# mount /dev/rbd0 /mnt
# umount /mnt
5、取消块设备和内核映射
# rbd unmap rbd-pool/image01
6、删除RBD块设备
# rbd rm rbd-pool/image01
远程挂载使用块设备
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、创建快照
rbd snap create rbd-pool/image01@snap01
2、列出创建的快照
rbd snap list rbd-pool/image01
3、还原快照
rbd snap rollback rbd-pool/image01@snap01
注:还原快照前需要先取消挂载和内核映射,否则会出错
umount /dev/rdb0 /mnt
rbd unmap rbd-pool/image01
4、重新映射并挂载验证
rbd map rbd-pool/image01
mount /dev/rbd0 /mnt
5、删除快照
rbd snap rm rbd-pool/image01@snap01
克隆配置
1、创建一个块设备
# rbd create --size 10240 rbd-pool/image02
2、创建快照
rbd snap create rbd-pool/image02@snap01
3、设置快照处于被保护状态
# rbd snap protect rbd-pool/image02@snap01
4、通过快照克隆一个新块设备
# rbd clone rbd-pool/image02@snap01 rbd-pool/image02_clone
# rdb info rbd-pool/image02_clone
5、将克隆的快照独立于父设备
# rbd flatten rbd-pool/image02_clone
CephFS文件系统
概述
01 CephFS 是一个基于 ceph 集群且兼容 POSIX 标准的文件系统。
02 创建 cephfs 文件系统时需要在 ceph 集群中添加 mds 服务,该服务负责处理 POSIX 文件系统中的 metadata 部分,实际的数据部分交由 ceph 集群中的 OSD 处理。
03 cephfs 支持以内核模块方式加载也支持 fuse 方式加载。
04 无论是内核模式还是 fuse 模式,都是通过调用 libcephfs 库来实现 cephfs 文件系统的加载,而 libcephfs 库又调用 librados 库与 ceph 集群进行通信,从而实现 cephfs 的加载。
1641521621653.png
部署MDS服务
ceph-deploy mds create ceph-node01 ceph-node02 ceph-node03
创建文件系统
#创建存储池
ceph osd pool create cephfs-data <pg_num>
ceph osd pool create cephfs-metadata <pg_num>
ceph fs ls
#创建文件系统
#格式:ceph fs new <fs_name> <metadata> <data>
ceph fs new cephfs cephfs-metadata cephfs-data
ceph fs ls #查看创建后的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动态供给工作流程
1641526606246.pngceph-csi供给程序
ceph-csi是ceph官方维护的PV供给程序,专门用于在Kubernetes中使用 RBD 、CephFS 为 Pod 提供存储
项目地址:https://github.com/ceph/ceph-csi
1641527748959.png
RBD
关于部署,RBD YAML文件在deploy/rbd/kubernetes目录,YAML改动如下:
01 全部统一命名空间到 ceph-csi
02 csi-config-map.yaml修改连接ceph集群信息
03 增加storageclass.yaml,修改集群ID和存储池
04 增加secret.yaml,修改秘钥
05 将csi-rbdplugin-provisioner.yaml和csi-rbdplugin.yaml中关于kms配置注释
**全部统一命名空间到 ceph-csi **
kubectl create ns ceph-csi
k8s节点安装 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==
启动验证
[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
#动态供给程序创建的
[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
关于部署,cephfs YAML文件在deploy/cephfs/kubernetes目录,YAML改动如下:
01 全部统一命名空间到 ceph-csi-cephfs
02 csi-config-map.yaml修改连接ceph集群信息
03 增加storageclass.yaml,修改集群ID、文件存储池、文件系统名称
增加 secret.yaml和storageclass.yaml文件
将 csi-rbdplugin-provisioner.yaml 和 csi-rbdplugin.yaml 中关于 kms 配置注释
在使用中,还需要根据自己集群环境修改:
secret.yaml 修改秘钥
storageclass.yaml修改集群ID和文件系统名称
关于部署,RBD YAML文件在deploy/rbd/kubernetes目录,YAML改动如下:
01 全部统一命名空间到 ceph-csi
02 csi-config-map.yaml修改连接ceph集群信息
03 增加storageclass.yaml,修改集群ID和存储池
04 增加secret.yaml,修改秘钥
05 将csi-rbdplugin-provisioner.yaml和csi-rbdplugin.yaml中关于kms配置注释
**全部统一命名空间到 ceph-csi **
kubectl create ns ceph-csi-cephfs
k8s节点安装 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==
启动验证
[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
网友评论