欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

k8s使用ceph分布式存储

程序员文章站 2022-07-12 17:13:03
...

ceph 简介

ceph基础介绍

ceph是一个可靠地,自动重均衡、自动恢复的分布式存储系统,根据使用场景可以划分为对象存储、块存储和文件系统服务

ceph的核心组件

ceph OSDs

基本功能:
存储数据、复制数据、平衡数据、恢复数据等,与其他osd间进行心跳检查等,并将变化上报给ceph Monitor,一般情况一块磁盘对应一个OSD,由OSD管理磁盘,或者一个分区也可以成为一个OSD
关联概念:Journal盘
一般写数据到ceph集群时,都会先将数据写到Journal盘,然后每隔一段时间将Journal盘的数据刷新到文件系统中,一般为了读写延迟小,会采用SSD硬盘,分配10G,ceph引用Journal盘可以让ceph OSD功能很快做小的写操作;一个随机写入在一个连续类型的Journal,然后刷新到文件系统,这样可以给文件系统足够时间来合并写入磁盘。可以很有效的缓冲突发负载

ceph Monitor

基本概念
负载监视ceph集群,维护ceph集群的健康状态,同时维护ceph集群中各种map图,如OSD Map、Monitor Map、PG Map和CRUSH Map,统称为cluster map,cluster map是RADOS的关键数据结构,管理集群中的所有成员、关系、属性等信息以及数据的分发。比如:当用户需要存储数据到ceph集群时,OSD需要先通过Monitor获取最新的map图,然后根据map图和object id等计算出数据最终存储的位置

ceph MDS

基本概念
全称ceph metadata server,主要保存文件系统服务的元数据,但对象存储和快存储是不需要使用这个服务的

ceph基础命令整理

#查看已经创建的磁盘
 rbd ls -l 
#查看ceph集群 
 ceph osd tree
#查看ceph授权信息
ceph auth get client.admin
#清除磁盘上的逻辑卷
 /usr/sbin/ceph-volume lvm zap --destroy /dev/vdc
#手动创建一个rbd磁盘
rbd create --image-feature layering [rbd-name] -s 10240
#移除monitor节点
 ceph-deploy mon destroy node4
#详细列出集群每块磁盘的使用情况
    ceph osd df
#检查 MDS 状态:
ceph mds stat

ceph集群构建

准备工作

 cat << EOF > /etc/yum.repos.d/ceph.repo
[ceph]
name=ceph
baseurl=http://mirrors.163.com/ceph/rpm-luminous/el7/x86_64/
gpgcheck=0
[ceph-noarch]
name=ceph-noarch
baseurl=http://mirrors.163.com/ceph/rpm-luminous/el7/noarch/
gpgcheck=0 
EOF

[root@master ~]# cat /etc/hosts
192.168.33.111 master
192.168.33.112 node1
192.168.33.113 node2
[root@master ~]# ssh-****** 
[root@master ~]# ssh-copy-id node1
[root@master ~]# ssh-copy-id node2

同步时间 时区: 
/1 * * * /usr/sbin/ntpdate -s time.pool.aliyun.com 
timedatectl list-timezones # 列出所有时区 
timedatectl set-timezone Asia/Shanghai # 设置系统时区为上海 
cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

#机器初始化设置
sed -i  's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
sed -i "s/PasswordAuthentication no/PasswordAuthentication yes/g" /etc/ssh/sshd_config
systemctl restart sshd
yum -y remove firewalld
setenforce 0


#相关下载
rpm -Uvh https://download.ceph.com/rpm-luminous/el7/noarch/ceph-release-1-1.el7.noarch.rpm
yum -y install epel-release yum-plugin-priorities yum-utils ntpdate
yum install -y ceph-deploy ceph ceph-radosgw snappy leveldb gdisk python-argparse gperftools-libs

#在每台机器上部署ceph,之前yum,已经安装过了
ceph-deploy install --release luminous master node1 node2   #同上

部署

mkdir ceph-deploy &&  cd ceph-deploy

#初始化ceph集群,配置文件相关
ceph-deploy new master node1 node2  

#添加到 ceph.conf
public network = 10.0.4.0/26 #地址相等于node的ip地址段

#初始化mon
ceph-deploy mon create-initial 
or
ceph-deploy mon create master node1 node2
#赋予各个节点使用命令面用户名权限
#指定机器为admin权限
ceph-deploy admin master node1 node2  
#目的可以执行
ceph -s

#部署mgr
ceph-deploy mgr create master node1 node2

#添加osd
ceph-deploy osd create --data /dev/sdb master 
ceph-deploy osd create --data /dev/sdb node1 
ceph-deploy osd create --data /dev/sdb node2

#创建管理域**
ceph auth get-or-create mgr.master mon 'allow profile mgr' osd 'allow *' mds 'allow *'
#方法2:
ceph auth get-key client.admin | base64

#开启 ceph-mgr 管理域
ceph-mgr -i master
#开启dashboard
ceph mgr module enable dashboard

#绑定开启 dashboard 模块的 ceph-mgr 节点的 ip 地址
ceph config-key set mgr/dashboard/master/server_addr 192.168.33.111 
dashboard 默认运行在7000端口

#创建pool
#若少于5个OSD, 设置pg_num为128。
#5~10个OSD,设置pg_num为512。
#10~50个OSD,设置pg_num为4096。
#超过50个OSD,可以参考pgcalc计算。
ceph osd pool create rbd 128 128 
rbd pool init rbd

#删除pool
ceph osd pool rm rbd rbd –yes-i-really-really-mean-it 
ceph.conf 添加 
mon_allow_pool_delete = true

#推送配置文件:
ceph-deploy --overwrite-conf config push master 
ceph-deploy --overwrite-conf config push node1 
ceph-deploy --overwrite-conf config push node2

添加删除OSD节点

#添加osd节点node4:
#在节点node4上面安装ceph,并复制ceph.conf到其相应的位置,同时在/etc/hosts中添加node4节点
#确保node1上有充足的空间进行写数据,执行下面的写命令的同时扩展集群
dd if=/dev/zero of=/mnt/ceph-vol1/file1 count=10240 bs=1M #node1节点
ceph-deploy disk zap ceph-node4:sdb ceph-node4:sdc ceph-node4:sdd #node4节点
ceph-deploy osd create ceph-node4:sdb ceph-node4:sdc ceph-node4:sdd  #node4节点
watch ceph status  #动态打印ceph的状态
#在node4硬盘添加完成,集群会恢复健康

删除osd节点的node4

#查看节点node4上的所有osd,比如osd.9 osd.10:
ceph osd tree #查看目前cluster状态
#把node4上的所欲osd踢出集群:(node1节点上执行)
ceph osd out osd.9
ceph osd out osd.10
#让node4上的所有osd停止工作:(node4上执行)
service ceph stop osd.9
service ceph stop osd.10
#查看node4上osd的状态是否为down,权重为0
ceph osd tree
#移除node4上的所有osd:
ceph osd crush remove osd.9
ceph osd crush remove osd.10
#删除节点node4:
ceph osd crush remove ceph-node4

替换一个失效的磁盘驱动

#首先ceph osd tree 查看down掉的osd,将因磁盘问题down掉的osd及相关key删除
ceph osd out osd.0       #都在node1节点下执行
ceph osd crush rm osd.0
ceph auth del osd.0
ceph osd rm osd.0
#zap新磁盘 清理新磁盘:
ceph-deploy disk zap node1:sdb
#在磁盘上新建一个osd,ceph会把它添加为osd:0:
ceph-deploy --overwrite-conf osd create node1:sdb

使用storage class自动获取存储空间

启动ceph-device

https://github.com/kubernetes-incubator/external-storage

启动ceph-rbd

kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
  name: prod-sc
  namespace: default
  annotations:
     storageclass.kubernetes.io/is-default-class: "false"
provisioner: ceph.com/rbd
reclaimPolicy: Retain
parameters:
  monitors: node1:6789,node3:6789,node2:6789
  adminId: admin
  adminSecretName: storage-secret
  adminSecretNamespace: default
  pool: rbd
  userId: admin
  userSecretName: storage-secret
  imageFormat: "2"
  imageFeatures: "layering"
#sercet
apiVersion: v1
kind: Secret
metadata:
  name: storage-secret
  namespace: default
data:
  key: QVFCU0xqdGI0WXFsQnhBQWtpM1dRTkRxOFRybmh4SWdDUEk5ZUE9PQ==   #base64加密/unbase64 解密的密文,可以 ceph auth get-key client.admin | base64 
type:
  kubernetes.io/rbd
#测试:
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: ceph-sc-test
  namespace: default
spec:
  storageClassName: prod-sc
  accessModes:
  - ReadWriteOnce
  resources:
    requests:
      storage: 5Gi

参考:
http://docs.ceph.org.cn/start/intro/
安装部署参考(介绍了非ROOT用户安装使用) https://www.jianshu.com/p/dce260ac837c
文档:
https://docs.openshift.com/container-platform/3.5/install_config/storage_examples/ceph_rbd_dynamic_example.html#ceph-rbd-dynamic-example-installing-the-ceph-common-package

相关标签: 分布式存储