k8s使用ceph分布式存储
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
上一篇: Hadoop Notes I
下一篇: 增强版雪花算法-防重复