Kubernetes1.15.2使用Ceph集群部署

一 概述

1.1 背景

近期进行公司业务容器化改造,在为kubernetes提供存储选型方面,在选型中本地存储不可跨node,NFS共享存储不好做高可用,因此选型Ceph来为k8s提供存储类。特此笔记以备后用。

1.2 概述

Ceph是一种为优秀的性能、可靠性和可扩展性而设计的统一的、分布式文件系统。Ceph是一个开源的分布式文件系统。因为它还支持块存储、对象存储,所以很自然的被用做云计算框架openstack或cloudstack整个存储后端。当然也可以单独作为存储,例如部署一套集群作为对象存储、SAN存储、NAS存储等。可以作为k8s的存储类,来方便容器持久化存储。

1.3 支持格式

  • 对象存储:即radosgw,兼容S3接口。通过rest api上传、下载文件。

  • 文件系统:posix接口。可以将ceph集群看做一个共享文件系统挂载到本地。

  • 块存储:即rbd。有kernel rbd和librbd两种使用方式。支持快照、克隆。相当于一块硬盘挂到本地,用法和用途和硬盘一样。比如在OpenStack项目里,Ceph的块设备存储可以对接OpenStack的后端存储

1.4 优势

  • 统一存储:虽然ceph底层是一个分布式文件系统,但由于在上层开发了支持对象和块的接口

  • 高扩展性:扩容方便、容量大。能够管理上千台服务器、EB级的容量。

  • 高可靠性:支持多份强一致性副本,EC。副本能够垮主机、机架、机房、数据中心存放。所以安全可靠。存储节点可以自管理、自动修复。无单点故障,容错性强。

  • 高性能:因为是多个副本,因此在读写操作时候能够做到高度并行化。理论上,节点越多,整个集群的IOPS和吞吐量越高。另外一点ceph客户端读写数据直接与存储设备(osd) 交互。

1.5 核心组件

  • Ceph OSDs:Ceph OSD 守护进程( Ceph OSD )的功能是存储数据,处理数据的复制、恢复、回填、再均衡,并通过检查其他OSD 守护进程的心跳来向 Ceph Monitors 提供一些监控信息。当 Ceph 存储集群设定为有2个副本时,至少需要2个 OSD 守护进程,集群才能达到 active+clean 状态( Ceph 默认有3个副本,但你可以调整副本数)。

  • Monitors: Ceph Monitor维护着展示集群状态的各种图表,包括监视器图、 OSD 图、归置组( PG )图、和 CRUSH 图。 Ceph 保存着发生在Monitors 、 OSD 和 PG上的每一次状态变更的历史信息(称为 epoch )。

  • MDSs: Ceph 元数据服务器( MDS )为 Ceph 文件系统存储元数据(也就是说,Ceph 块设备和 Ceph 对象存储不使用MDS )。元数据服务器使得 POSIX 文件系统的用户们,可以在不对 Ceph 存储集群造成负担的前提下,执行诸如 ls、find 等基本命令。

二 安装部署

2.1 主机信息

主机名

操作系统

配置

K8S组件

CEPH组件

私网IP

SSH端口

用户名密码

master

CentOS 7.4 64bit

4C8G + 500G硬盘

admin,osd, mon

172.16.60.2

2001/22

root/uWWKWnjySO7Zocuh

node01

CentOS 7.4 64bit

4C8G + 500G硬盘

osd, mon

172.16.60.3

2002/22

root/IZ5lReaUBz3QOkLh

node02

CentOS 7.4 64bit

4C8G + 500G硬盘

osd, mon

172.16.60.4

2003/22

root/nUMFlg9a4zpzDMcE

2.2 磁盘准备

需要在三台主机创建磁盘,并挂载到主机的/var/local/osd{0,1,2}

2.3 配置各主机hosts文件

2.4 管理节点ssh免密钥登录node1/node2

2.5 master节点安装ceph-deploy工具

2.6 创建monitor服务

创建monitor服务,指定master节点的hostname

2.7 所有节点安装ceph

2.8 部署相关服务

2.9 统一配置

用ceph-deploy把配置文件和admin密钥拷贝到所有节点,这样每次执行Ceph命令行时就无需指定monitor地址和ceph.client.admin.keyring了

2.10 部署MDS服务

我们在node01/node02上安装部署MDS服务

至此,基本上完成了ceph存储集群的搭建。

三 创建ceph文件系统

3.1 创建文件系统

关于创建存储池 确定 pg_num 取值是强制性的,因为不能自动计算。下面是几个常用的值:

  • 少于 5 个 OSD 时可把 pg_num 设置为 128

  • OSD 数量在 5 到 10 个时,可把 pg_num 设置为 512

  • OSD 数量在 10 到 50 个时,可把 pg_num 设置为 4096

  • OSD 数量大于 50 时,你得理解权衡方法、以及如何自己计算 pg_num 取值

  • 自己计算 pg_num 取值时可借助 pgcalc 工具   随着 OSD 数量的增加,正确的 pg_num 取值变得更加重要,因为它显著地影响着集群的行为、以及出错时的数据持久性(即灾难性事件导致数据丢失的概率)。

3.2 创建客户端密钥

四 卸载

参考链接

Last updated

Was this helpful?