首页软件使用教程Kubernetes对接Ceph分布式存储教程

Kubernetes对接Ceph分布式存储教程

2024-11-04 16

Ceph是一个开源的分布式存储系统,提供高性能、高可靠性的对象存储、块存储和文件系统。其去中心化架构自动处理数据复制和恢复,旨在实现弹性扩展和容错能力。为了实现数据持久化,本教程主要介绍如何通过Kubernetes对接Ceph分布式存储。

一、Ceph存储类型

1、块存储(RBD)

块存储(RBD)提供高性能的块级存储,适用于虚拟机和数据库。通过Ceph的RADOS(ReliableAutonomicDistributedObjectStore)接口提供块设备。且每个块设备映射到一个RADOS对象,支持动态分配和快照功能,可动态增加或减少存储容量。块设备具有优异的读写性能,但不支持多处同时挂载。用户可直接使用不含文件系统的块设备,也可以格式化成特定的文件系统。

2、文件系统(CephFS)

文件系统(CephFS)提供完整的分布式文件系统,提供标准的POSIX文件系统接口,支持标准的文件操作和目录结构。又基于Ceph的对象存储,通过元数据服务器(MDS)管理文件和目录的元数据。支持横向扩展,能够处理大量的文件和目录操作。文件系统性能不及块设备,但共享性优秀。

3、对象存储(ObjectGateway)

对象存储(ObjectGateway)提供兼容AmazonS3和OpenStackSwift的RESTfulAPI,适合存储大量非结构化数据,如照片、视频等。其数据以对象形式存储,由数据、元数据和唯一标识符组成。可通过增加存储节点横向扩展,适合大规模数据存储需求。

二、Ceph分布式存储的优点

  • 弹性扩展:可无缝添加存储节点以满足增长需求;
  • 高可用性:数据自动复制到多个节点,确保硬件故障时数据安全;
  • 高性能:提供快速的读写速度;
  • 去中心化:无单点故障,提升可靠性;
  • 灵活性:支持对象、块和文件系统等多种存储类型。

三、Ceph核心组件

  • Monitors(监视器):维护集群状态,包括监视器、管理器和OSD映射,负责身份验证。建议至少三台;
  • Managers:跟踪运行时指标,管理和公开Ceph集群信息,建议至少两台;
  • CephOSD:负责存储数据,处理复制和恢复等操作,建议至少三台;
  • MDS(元数据服务器):管理Ceph文件系统的元数据,支持POSIX文件操作。

四、部署Ceph高可用集群

1、服务器环境信息

注意:本实验将Ceph集群与K8S集群部署在一起,生产环境应单独部署Ceph集群。

Kubernetes对接Ceph分布式存储教程

2、部署前环境准备工作

在所有主机上执行以下步骤:

(1)配置阿里云Ceph安装源

Kubernetes对接Ceph分布式存储教程

(2)安装基础包

yum install -y yum-utils device-mapper-persistent-data lvm2 wget net-tools nfs-utils lrzsz gcc gcc-c++ make cmake libxml2-devel openssl-devel curl curl-devel unzip sudo ntp libaio-devel wget vim ncurses-devel autoconf automake zlib-devel python-devel epel-release openssh-server socat ipvsadm conntrack ntpdate telnet deltarpm

(3)添加hosts本地解析

vim /etc/hosts
16.32.15.200 master-1
16.32.15.201 node-1
16.32.15.202 node-2

(4)修改主机名(对应主机执行)

hostnamectl set-hostname master-1 && bash
hostnamectl set-hostname node-1 && bash
hostnamectl set-hostname node-2 && bash

(5)配置内网免密登录

ssh-keygen
ssh-copy-id master-1
ssh-copy-id node-1
ssh-copy-id node-2

(6)配置NTP时间同步

yum -y install ntpdate
ntpdate ntp1.aliyun.com

(7)添加定时任务

echo "0 1 * * * ntpdate ntp1.aliyun.com" >> /var/spool/cron/root

3、部署Ceph监控服务Monitor

(1)安装cephdeploy(在Ceph管理节点执行)

yum install python-setuptools ceph-deploy -y

(2)安装Ceph(在所有主机执行)

yum install ceph ceph-radosgw -y

(3)查看Ceph版本

ceph --version

(4)创建Monitor(在Ceph管理节点执行)

cd /etc/ceph
ceph-deploy new master-1 node-1 node-2

(5)查看当前生成的文件

ls -1 /etc/ceph
ceph.conf # Ceph配置文件
ceph-deploy-ceph.log # 日志文件
ceph.mon.keyring # Monitor密钥

(6)修改ceph配置文件(在Ceph管理节点执行)

Kubernetes对接Ceph分布式存储教程

注意:Ceph对每个监视器之间的时间同步延时要求在0.05秒之间,必要时可适当放宽该误差时间。

(7)配置初始Monitor、收集所有的密钥(在Ceph管理节点执行)

cd /etc/ceph
ceph-deploy mon create-initial

(8)等待收集完成后,查看收集到的key

ls -1 /etc/ceph/*.keyring

4、激活Ceph存储服务OSD

注意:以下操作需在Ceph管理节点执行!

(1)准备OSD

cd /etc/ceph/
ceph-deploy osd prepare master-1:/dev/sdb
ceph-deploy osd prepare node-1:/dev/sdb 
ceph-deploy osd prepare node-2:/dev/sdb

(2)激活OSD

ceph-deploy osd activate master-1:/dev/sdb1
ceph-deploy osd activate node-1:/dev/sdb1
ceph-deploy osd activate node-2:/dev/sdb1

(3)查看OSD状态

ceph-deploy osd list master-1 node-1 node-2

五、K8S对接Ceph存储

在K8S集群中使用Ceph存储时,需要在K8S各个节点中安装”cephcommon”工具,安装命令如下:

yum install ceph-common -y

如果K8S集群和Ceph集群不在同一服务器中,需要将Ceph集群中的”/etc/ceph”目录拷贝到K8S各个节点下。

1、K8S对接CephRBD实现数据持久化

(1)创建RBD

ceph osd pool create k8srbd 16
rbd create rbda -s 1024 -p k8srbd 
rbd feature disable k8srbd/rbda object-map fast-diff deep-flatten # 禁用无用特性

(2)查看RBD状态信息

ceph osd pool ls # 列出所有pool
ceph osd pool stats k8srbd # 查看状态

(3)创建Pod,使用RBD挂载

Kubernetes对接Ceph分布式存储教程

(4)执行apply并查看Pod状态

kubectl apply -f pod.yaml
kubectl get pods

注意:RBD类型只能挂载一个,如果再创建一个Pod使用相同的RBD,则会创建失败!

2、基于CephRBD生成PV

(1)创建Cephsecret对象

Secret对象用于K8SVolume插件访问Ceph集群,获取”client.admin”的keyring值(在Ceph管理节点执行):

ceph auth get-key client.admin | base64
QVFDVHljbG1hU3JnSnhBQSt0eUpmcVRjNEs2SHdrZUcxdjJVblE9PQ==

(2)创建Ceph的Secret资源(在K8SMaster节点操作):

apiVersion: v1
kind: Secret
metadata:
name: ceph-secret
data:
key: QVFBWk0zeGdZdDlhQXhBQVZsS0poYzlQUlBianBGSWJVbDNBenc9PQ==
kubectl apply -f ceph-secret.yaml

(3)创建pool池

ceph osd pool create k8srbd1 16
rbd create rbda -s 1024 -p k8srbd1
rbd feature disable k8srbd1/rbda object-map fast-diff deep-flatten

(4)创建PV、PVC

Kubernetes对接Ceph分布式存储教程

kubectl apply -f ceph-pv-pvc.yaml
kubectl get pvc ceph-pvc

Kubernetes对接Ceph分布式存储教程

(5)创建Deployment资源,使用PVC

Kubernetes对接Ceph分布式存储教程

kubectl apply -f deployment.yaml

注意:Ceph RBD块存储能在同一Node上跨Pod以使用ReadWriteOnce共享挂载,但不支持跨Node使用。

由于Deployment触发更新,为了保证服务可用性,Deployment需要先创建一个Pod并运行正常后,再删除老Pod。如果新Pod和老Pod不在同一Node上,将会导致故障。

解决办法:

  • 使用支持跨Node和Pod挂载的共享存储,例如CephFS、GlusterFS等;
  • 给Node添加Label,只允许Deployment所管理的Pod调度到一个固定的Node上(不建议,Node节点宕机会导致服务中断)。

3、基于Storage Class动态生成PV

注意:K8S1.20版本后需修改”kubeapiserver”配置以支持自动生成PV:

vim/etc/kubernetes/manifests/kubeapiserver.yaml

添加这一行:

featuregates=RemoveSelfLink=false

Kubernetes对接Ceph分布式存储教程

重启kubelet使其生效:

systemctl restart kubelet

注意:在本文测试环境中,v1.26.2版本修改此配置后导致集群无法启动,而v1.23.0版本修改后正常,建议在测试环境验证后再在生产环境中添加。

(1)执行赋权操作(所有K8S集群、Ceph集群中执行)

chmod 777 -R /etc/ceph/*
mkdir /root/.ceph/
cp -ar /etc/ceph/ /root/.ceph/
cp -ar /etc/ceph/* /root/.ceph/

(2)创建RBD的供应商Provisioner

Kubernetes对接Ceph分布式存储教程

Kubernetes对接Ceph分布式存储教程

Kubernetes对接Ceph分布式存储教程

kubectl apply -f rbd-provisioner.yaml

(3)创建StorageClass

Kubernetes对接Ceph分布式存储教程

kubectl apply -f storageclass.yaml

(4)创建PVC,自动生成PV

Kubernetes对接Ceph分布式存储教程

kubectl apply -f rbd-pvc.yaml
kubectl get pvc

(5)创建Pod,挂载PVC

Kubernetes对接Ceph分布式存储教程

kubectl apply -f pod-sto.yaml

4、K8S对接CephFS实现数据持久化

(1)创建MDS

ceph-deploy mds create master-1 node-1 node-2

(2)创建存储池

一个CephFS至少要求两个librados存储池,一个为data,一个为metadata。配置这两个存储池时,请注意以下几点:

为metadatapool设置较高级别的副本级别,以避免metadata损坏导致整个文件系统无法使用。
建议metadatapool使用低延时存储,如SSD,以提高客户端响应速度。

ceph osd pool create cephfs_data 128
ceph osd pool create cephfs_metadata 128

pg_num取值是强制性的,常用值如下:

  • 少于5个OSD时可设置为128;
  • OSD数量在5到10个时可设置为512;
  • OSD数量在10到50个时可设置为4096;
  • 当OSD数量大于50时,需根据权衡方法自行计算pg_num取值。

(3)创建文件系统

ceph fs new k8sfs cephfs_metadata cephfs_data

(4)查看状态

Kubernetes对接Ceph分布式存储教程

(5)创建目录,将CephFS挂载到此目录

Kubernetes对接Ceph分布式存储教程

mkdir -p /data/ceph_data/qinzt
chmod 0777 /data/ceph_data/qinzt

(6)创建Secret,用于K8S连接Ceph

将”/etc/ceph/ceph.client.admin.keyring”中的key值转换为base64:

Kubernetes对接Ceph分布式存储教程

Kubernetes对接Ceph分布式存储教程

kubectl apply -f cephfs-secret.yaml

(7)创建PV、PVC

Kubernetes对接Ceph分布式存储教程

kubectl apply -f cephfs-pv-pvc.yaml
kubectl get pvc cephfs-pvc

(8)创建Pods,挂载CephFS

Kubernetes对接Ceph分布式存储教程

kubectl apply -f cephfs-deployment.yaml

(9)验证

在Pod中创建文件,查看本地是否存在。

Kubernetes对接Ceph分布式存储教程

  • 广告合作

  • QQ群号:707632017

温馨提示:
1、本网站发布的内容(图片、视频和文字)以原创、转载和分享网络内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。邮箱:2942802716#qq.com(#改为@)。 2、本站原创内容未经允许不得转裁,转载请注明出处“站长百科”和原文地址。

相关文章