K8s使用Ceph作为后端存储

  1. Ceph概述
  2. 部署Ceph集群
  3. Ceph存储使用
  4. Pod使用Ceph持久化数据
  5. Ceph监控
  6. Rook部署Ceph

1❖ Ceph概述

  • Ceph介绍
  • Ceph架构
  • Ceph核心概念

Ceph介绍

Ceph是一个开源的分布式存储系统,具有高扩展性、高性能、高可靠性等特点,提
供良好的性能、可靠性和可扩展性。支持对象存储、块存储和文件系统。
是目前为云平台提供存储的理想方案。

Ceph架构

K8s使用Ceph作为后端存储_第1张图片
  • RBD(RADOS Block Device):块存储接口
  • RGW(RADOS Gateway)):对象存储网关,接口与S3和Swift兼容
  • CephFS(Ceph File System):文件级存储接口
  • RADOS(Reliable Autonomic Distributed Object Store):抽象的对象存储集群,Ceph核心,实现用户数据分配、故障转移等集群操作
  • MON:集群状态维护,例如OSD是否健康、PG状态等
  • MDS (Metadata Server) :CephFS服务依赖的元数据服务
  • OSD(Object Storage Daemon):对象存储设备,主要存储数据

Ceph核心概念

K8s使用Ceph作为后端存储_第2张图片
  • Pool:存储池,是存储对象的逻辑分区,它规定了数据冗余的类型和对应的副本分布策略;支持两种类型:副本(replicated)和 纠删码(Erasure Code)
  • PG( placement group):放置策略组,对象的集合,该集合里的所有对象都具有相同的放置策略;简单点说就是相同PG内的对象都会放到相同的硬盘上; PG是ceph的核心概念, 服务端数据均衡和恢复的最小粒度;引入PG这一层其实是为了更好的分配数据和定位数据。
右边这张图描述了它们之间的关系:
  • 一个Pool里有很多PG;
  • 一个PG里包含一堆对象;一个对象只能属于一个PG;
  • PG属于多个OSD,分布在不同的OSD上;

2❖ 部署Ceph集群

  • Ceph版本选择
  • 服务器配置建议
  • Ceph集群部署规划
  • 操作系统初始化配置
  • Ceph集群部署
  • Ceph集群服务管理
  • Ceph集群常用管理命令

Ceph版本选择

Ceph目前最新版本16(P版),市面上应用最广泛的是12(L版)
参考:https://docs.ceph.com/en/latest/releases/
K8s使用Ceph作为后端存储_第3张图片

服务器配置建议

K8s使用Ceph作为后端存储_第4张图片

Ceph集群部署规划

K8s使用Ceph作为后端存储_第5张图片

  • ceph-deploy:ceph集群部署节点,负责集群整体部署,这里复用node1节点,也可以单独找一台服务器作为部署节点。
  • monitor:Ceph监视管理节点,承担Ceph集群重要的管理任务,负责集群状态维护,例如存储池副本数、PG状态、OSD数量等,至少部署1个,一般需要3或5个节点组建高可用。
  • osd:Ceph存储节点,实际负责数据存储的节点,集群中至少有3个OSD,不少于默认副本数,每个OSD对应一块硬盘。

操作系统初始化配置

# 关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
# 关闭selinux
sed -i 's/enforcing/disabled/' /etc/selinux/config # 永久,重启生效
setenforce 0 # 临时
# 关闭swap(可选)
swapoff -a # 临时
sed -ri 's/.*swap.*/#&/' /etc/fstab # 永久,重启生效
# 根据规划设置主机名
hostnamectl set-hostname 
# 在node添加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 65535
cat >> /etc/security/limits.conf << EOF
* soft nofile 65535
* hard nofile 65535
EOF
# 时间同步
yum install ntpdate -y
ntpdate time.windows.com
# 配置SSH免交互认证
ssh-keygen -t rsa
ssh-copy-id root@ceph-node01
ssh-copy-id root@ceph-node02
ssh-copy-id root@ceph-node03

Ceph集群部署

Ceph集群部署方式:
14(N)版本及之前:
  • yum:常规的部署方式
  • ceph-deploy:ceph提供的简易部署工具,可以非常方便部署ceph集群。
  • ceph-ansible:官方基于ansible写的自动化部署工具
14(N)版本之后:
  • cephadm:使用容器部署和管理Ceph集群,需要先部署Docker或者Podman和Python3
  • rook:在Kubernetes中部署和管理Ceph集群

Ceph集群部署步骤:
  1. 配置阿里云yum仓库
  2. 安装ceph-deploy工具
  3. 创建集群
  4. 安装Ceph
  5. 部署Monitor服务
  6. 部署OSD服务并添加硬盘
  7. 部署MGR服务

1、配置阿里云yum仓库

cat > /etc/yum.repos.d/ceph.repo << EOF
[Ceph]
name=Ceph packages for $basearch
baseurl=http://mirrors.aliyun.com/ceph/rpm-nautilus/el7/\$basearch
gpgcheck=0
[Ceph-noarch]
name=Ceph noarch packages
baseurl=http://mirrors.aliyun.com/ceph/rpm-nautilus/el7/noarch
gpgcheck=0
[ceph-source]
name=Ceph source packages
baseurl=http://mirrors.aliyun.com/ceph/rpm-nautilus/el7/SRPMS
gpgcheck=0
EOF

2、安装ceph-deploy工具

yum -y install ceph-deploy

3、创建集群

创建一个my-cluster目录,所有命令在此目录下进行:
mkdir my-cluster
cd my-cluster
# 创建一个Ceph集群
ceph-deploy new ceph-node01 ceph-node02 ceph-node03

4、安装Ceph

安装Ceph包到指定节点:
ceph-deploy install --no-adjust-repos ceph-node01 ceph-node02 ceph-node03
注:–no-adjust-repos参数是直接使用本地源,不使用官方默认源。

5、部署Monitor服务

初始化并部署monitor,收集所有密钥:
ceph-deploy mon create-initial
使用ceph-deploy命令将配置文件和 admin key复制到管理节点和Ceph节点,以便每次执行ceph CLI命令无需
指定monitor地址和 ceph.client.admin.keyring。
ceph-deploy admin ceph-node01 ceph-node02 ceph-node03

6、部署OSD服务并添加硬盘

创建6个OSD,分别对应每个节点未使用的硬盘:
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

7、部署MGR服务

ceph-deploy mgr create ceph-node01 ceph-node02 ceph-node03
注:MGR是Ceph L版本新增加的组件,主要作用是分担和扩展monitor的部分功能,减轻monitor的负担。
建议每台monitor节点都部署一个mgr,以实现相同级别的高可用。
查看Ceph集群状态:
ceph -s
查看Ceph版本:
ceph -v
日志目录:/var/log/ceph

Ceph集群服务管理

1、启动所有守护进程
# systemctl restart ceph.target
2、按类型启动守护进程
# systemctl restart ceph-osd@id
# systemctl restart ceph-osd.target
# systemctl restart ceph-mon.target
# systemctl restart ceph-mgr.target

Ceph集群常用管理命令

K8s使用Ceph作为后端存储_第6张图片

3❖ Ceph存储使用

  • 三种存储类型介绍
  • RBD块存储
  • CephFS文件存储

三种存储类型介绍

  • 块存储(RBD)
优点:存储速度较快
缺点:不支持共享存储
应用场景:虚拟机硬盘
典型设备:硬盘、Raid
  • 文件存储(CephFS)
优点:支持共享存储
缺点:读写速度较慢(需要经过操作系统处理再转为块存储)
应用场景:文件共享,多台服务器共享使用同一个存储
典型设备:FTP、NFS
  • 对象存储(Object)
优点:具备块存储的读写性能和文件存储的共享特性
缺点:操作系统不能直接访问,只能通过应用程序级别的API访问
应用场景:图片存储,视频存储
典型设备:阿里云OSS,腾讯云COS

RBD块存储:RBD工作流程

1、客户端创建一个pool,并指定pg数量,创建rbd设备并挂载到文件系统;
2、用户写入数据,ceph进行对数据切块,每个块的大小默认为4M,每个块名
字是object+序号;
3、将每个object通过pg进行副本位置的分配;
4、pg根据crush算法会寻找3个osd,把这object分别保存在这3个osd上存储;
5、osd实际把硬盘格式化为xfs文件系统,object存储在这个文件系统就相当
于存储了一个文件rbd0.object1.file。
K8s使用Ceph作为后端存储_第7张图片

RBD块存储:常用管理命令

K8s使用Ceph作为后端存储_第8张图片

RBD块存储:RBD创建并使用

1、创建存储池
ceph osd pool create rbd-pool 128 # 格式:ceph osd pool create  
ceph osd pool ls
2、指定存储池使用存储类型
ceph osd pool application enable rbd-pool rbd
3、创建一个10G的块设备
rbd create --size 10240 rbd-pool/image01 # 格式:rbd create --size {megabytes} {pool-name}/{image-name}
4、查看块设备
rbd ls -l rbd-pool
rbd info rbd-pool/image01

RBD块存储:RBD创建并使用

节点本地挂载使用块设备:
1、映射
rbd map rbd-pool/image01
2、格式化块设备
mkfs.xfs /dev/rbd0
3、挂载
mount /dev/rbd0 /mnt
4、取消挂载和内核映射
umount /mnt
rbd unmap rbd-pool/image01
远程挂载使用块设备:
1、拷贝配置文件和秘钥
cd my-cluster/
scp ceph.conf [email protected]:/etc/ceph
scp ceph.client.admin.keyring [email protected]:/etc/ceph
2、安装Ceph客户端
yum install epel-release -y
yum -y install ceph-common
3、剩余操作就与左侧一样了

RBD块存储:快照

快照:在某个时间点的副本,当系统出现问题,可以通过恢复快照恢复之前副本状态。
1、创建快照
rbd snap create rbd-pool/image01@snap01
2、查看快照
rbd snap list image01
rbd snap ls rbd/image01
rbd ls –l
3、还原快照
rbd snap rollback rbd-pool/image01@snap01
注:还原快照前需先取消挂载和内核映射,否则会出错
4、重新映射并挂载验证
rbd map rbd-pool/image01
mount /dev/rbd0 /mnt/
5、删除快照
rbd snap rm rbd-pool/image01@snap01

RBD块存储:克隆

克隆:基于指定的块设备克隆出相同的一份出来
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
rbd info image02_clone 
5、就可以按照前面方式使用这个新克隆的块设备了
6、目前克隆的块设备依赖于父块设备,也可以将其独立于父块设备
rbd flatten rbd-pool/image02_clone

CephFS文件系统

 CephFS 是一个基于 ceph 集群且兼容POSIX标准的文件系统。
创建 cephfs 文件系统时需要在 ceph 集群中添加 mds 服务,该服务
负责处理 POSIX 文件系统中的 metadata 部分,实际的数据部分交由
ceph 集群中的OSD处理。
K8s使用Ceph作为后端存储_第9张图片

CephFS文件存储:部署MDS服务

部署MDS实例:
ceph-deploy mds create ceph-node01 ceph-node02 ceph-node03
ceph mds stat # 查看MDS节点状态

CephFS文件系统:创建文件系统

1、创建存储池
ceph osd pool create cephfs_data  
ceph osd pool create cephfs_metadata 
ceph fs ls
2、创建文件系统
ceph fs new cephfs cephfs_metadata cephfs_data # 格式:ceph fs new   
ceph fs ls #查看创建后的cephfs

CephFS文件存储:部署MDS服务

4❖ Pod使用Ceph持久化数据

5❖ Ceph监控

6❖ Rook部署Ceph

你可能感兴趣的:(kubernetes,ceph,容器)