首页 > 其他分享 >基于现有Kubernetes集群使用Rook部署Ceph集群

基于现有Kubernetes集群使用Rook部署Ceph集群

时间:2022-12-02 15:47:40浏览次数:65  
标签:Ceph 存储 rook Kubernetes ceph Rook 集群 k8s root


基于现有Kubernetes集群使用Rook部署Ceph集群

一、前言

本片文章主要是基于现有的k8s集群环境使用Rook部署Ceph集群

Rook官方文档:https://rook.github.io/docs/rook/v1.6/

环境版本信息:k8s版本为1.21.0; Rook版本为:v1.6

集群基础配置要求:内存不低于5G,CPU不低于2核

二、概念介绍:

2.1、什么是Rook

Rook是一个开源的云原生存储编排器,可将存储软件转换为自我管理、自我扩展、自我修复的存储服务,且支持的存储系统包括Ceph、NFS、EdgeFS、CockroachDB、YugabyteDB。本文以Ceph为例,主要介绍Rook概念和框架的部署

 

Rook-Ceph架构

关于Ceph

Ceph是一款开源,高度可扩展的分布式存储解决方案,用于有多年生产的块存储,共享文件存储和对象存储。主要由以下组件组成:

  • MON(Ceph监视器)负责集群监控,所有集群节点都要向MON报告,并共享有关其状态变更信息
  • OSD(Ceph对象存储设备)负责存储对象并通过网络提供访问入口
  • MGR(Ceph Manager)提供额外的监视和与外部管理系统连接的接口
  •  RADOS(可靠的自制分布式对象存储)是Ceph集群的核心,RADOS确保所存储的数据始终与数据复制,故障检测和恢复保持一致
  • RBD(RADOS块设备)现在称为Ceph块设备,提供了持久化块存储,它是精简配置的,可调整大小,并存储在多个OSD节点条带化数据
  • RGW(RADOS网关)是提供对象存储服务的接口,它使用libRGW(RGW库)和libRADOS来与应用程序之间的Ceph对象存储建立连接。RGW提供了与Amazon S3和OpenStack Swift兼容的RESTful API。
  • CephFS是提供POSIX兼容文件系统的Ceph文件系统,CephFS使用Ceph集群存储用户数据
  • MDS跟踪文件层次结构,并仅存储CephFS的元数据

Ceph Rook

Rook operator是一个简单的容器,主要主要引导和监视存储集群所需要的全部内容,operator启动并监视Ceph守护程序Pod,例如MON、OSD、MGR等。还监视守护程序以确保集群运行状态良好,Ceph MON在必要时启动或者故障转移;

  • Ceph CSI(容器存储接口)是一种标准,用于将任意块和文件存储系统暴露给容器编排系统(如Kubernetes)上的容器化工作负载。Ceph CSI与Rook集成在一起,并支持三种方案 RBD(块存储):

  • RBD(块存储):此驱动程序针对RWO pod访问进行了优化,其中只有一个pod可以访问存储

  • CephFS(文件共享存储):此驱动程序允许一个pod或者多个pod的RWX访问同一个存储
  • 对于对象存储,Rook支持创建新存储桶以及通过两个自定义资源访问现有存储桶:对象存储桶声明(OBC)和对象存储桶(OB)。应用程序可以通过RGW访问对象

 三、Rook环境部署

3.1、拉取rook官方安装文件

#git clone --single-branch --branch v1.6.11 https://github.com/rook/rook.git
#cd rook/cluster/examples/kubernetes/ceph
#kubectl create -f crds.yaml -f common.yaml #创建RBAC相关secrets权限 、rook的crd组件,主要用于管理控制Ceph集群

3.2、创建operator yaml文件

修改Rook CSI 镜像地址,默认地址可能是gcr国外镜像,在国内无法正常访问,因此需要同步gcr镜像到阿里云镜像仓库或者其他本地仓库
#root@k8s-master01 rook]# vim cluster/examples/kubernetes/ceph/operator.yaml

#root@k8s-master01 rook]# kubectl create -f  cluster/examples/kubernetes/ceph/operator.yaml 

四、部署Ceph集群

PS: 要保证operator容器和discover 容器都启动完毕之后再开始创建Ceph集群

4.1、创建cluster集群,并修改其yaml配置文件

#root@k8s-master01 rook]# vim cluster/examples/kubernetes/ceph/cluster.yaml 

 配置OSD磁盘存储设备(配置OSD存储节点,name不能配置IP,而应该是标签kubernetes.io/hostname的内容)

#[root@k8s-master01 rook]# kubectl create -f cluster/examples/kubernetes/ceph/cluster.yaml 
[root@k8s-master01 rook]# kubectl get cephcluster -n rook-ceph
NAME        DATADIRHOSTPATH   MONCOUNT   AGE   PHASE   MESSAGE                        HEALTH        EXTERNAL
rook-ceph   /var/lib/rook     3          8d    Ready   Cluster created successfully   HEALTH_WARN

 4.2、部署Ceph snapshot控制器

rook snapshot官方文档:https://rook.io/docs/rook/v1.6/ceph-csi-snapshot.html 

[root@k8s-master01 rook]#cd /root/k8s-ha-install
[root@k8s-master01 k8s-ha-install]# git remote -v
origin https://github.com/dotbalo/k8s-ha-install.git (fetch)
origin https://github.com/dotbalo/k8s-ha-install.git (push)
[root@k8s-master01 k8s-ha-install]# git checkout manual-installation-v1.21.x
[root@k8s-master01 k8s-ha-install]# git branch
* manual-installation-v1.21.x
master
[root@k8s-master01 k8s-ha-install]# kubectl create -f snapshotter/ -n kube-system
[root@k8s-master01 k8s-ha-install]# kubectl get pod -n kube-system -l app=snapshot-controller

 五、部署Ceph客户端工具

对于Ceph集群维护者,推荐两个维护方法

  • Toolbox+Ceph CLI:推荐的方法是在Rook Toolbox终端执行命令
  • Ceph 仪表盘:使用Ceph dashboard
[root@k8s-master01 rook]# cd cluster/examples/kubernetes/ceph
[root@k8s-master01 ceph]# kubectl create -f toolbox.yaml -n rook-ceph #创建tools pod 客户端
[root@k8s-master01 ceph]# kubectl get pod -n rook-ceph -l app=rook-ceph-tools #检查tools容器是否正常启动
NAME READY STATUS RESTARTS AGE
rook-ceph-tools-fc5f9586c-mql8d 1/1 Running 0 66s
[root@k8s-master01 ceph]# kubectl -n rook-ceph exec -it deployment/rook-ceph-tools -- bash #进入tools容器
[root@rook-ceph-tools-fc5f9586c-mql8d /]# ceph status
cluster:
id: d6b21555-bfc5-4aa8-a5bc-2e9ab0cfc3ec
health: HEALTH_WARN  #警告信息可以暂且忽略,后面可以去掉,这个信息提示允许一个不安全的端口对mons进行一个操作
mons are allowing insecure global_id reclaim
Reduced data availability: 1 pg inactive
OSD count 0 < osd_pool_default_size 3
services:
mon: 3 daemons, quorum a,b,c (age 2h)
mgr: a(active, since 2h)
osd: 3 osds: 3 up (since 2m), 3 in (since 2m)
data:
pools: 1 pools, 1 pgs
objects: 0 objects, 0 B
usage: 3.0 GiB used, 57 GiB / 60 GiB avail
pgs: 1 active+clean
[root@rook-ceph-tools-fc5f9586c-f6wgr /]# ceph osd status
ID HOST USED AVAIL WR OPS WR DATA RD OPS RD DATA STATE
0 k8s-master03 1030M 18.9G 0 0 0 0 exists,up
1 k8s-node01 1030M 18.9G 0 0 0 0 exists,up
2 k8s-node02 1030M 18.9G 0 0 0 0 exists,up
[root@rook-ceph-tools-fc5f9586c-f6wgr /]# ceph df

 

 六、配置Ceph Dashboard

 默认情况下,Ceph已经存在service,默认是CLuster IP类型,无法在K8s节点之外的主机访问,虽然可以修改成NodePort不建议直接对其修改成NodePort,因此需要新建一个service,并改成Nodeport类型,对外开放

[root@k8s-master01 ceph]# vim dashboard-ceph.yaml
apiVersion: v1
kind: Service
metadata:
  labels:
    app: rook-ceph-mgr
    ceph_daemon_id: a
    rook_cluster: rook-ceph
  name: rook-ceph-mgr-dashboard-np
  namespace: rook-ceph
spec:
  ports:
  - name: http-dashboard
    port: 7000
    protocol: TCP
    targetPort: 7000
  selector:
    app: rook-ceph-mgr
    ceph_daemon_id: a
    rook_cluster: rook-ceph
  sessionAffinity: None
  type: NodePort
[root@k8s-master01 ceph]# kubectl create -f  dashboard-ceph.yaml

查看rook-ceph命名空间下的secret的密码信息,并通过json结合based64进行解码解密获取登录CEPH平台的密码

[root@k8s-master01 ceph]# kubectl -n rook-ceph get secret rook-ceph-dashboard-password -o jsonpath="{['data']['password']}" | base64 --decode && echo
QW=@c}Xn2Ol4.14B}4Tu 

七、验证

这里直接指定节点IP+暴露的端口即可访问该ceph

PS:登录之后会状态这里会有警告信息,按照ceph官方文档上可处理掉

 

 解决当前ceph界面警告信息

登录到toos客户端,执行该命令即可解决警告信息

[root@k8s-master01 ceph]# kubectl -n rook-ceph exec -it deploy/rook-ceph-tools -- bash
[root@rook-ceph-tools-fc5f9586c-f6wgr /]# ceph config set mon auth_allow_insecure_global_id_reclaim false1se
 

标签:Ceph,存储,rook,Kubernetes,ceph,Rook,集群,k8s,root
From: https://www.cnblogs.com/Lqdream/p/16944640.html

相关文章

  • centos7.9采用kubeadm的方式部署k8s(Kubernetes)
    一.环境准备1.系统介绍k8s-master:192.168.142.131k8s-node1:192.168.142.133k8s-node2:192.168.142.1342.软件介绍Docker:20-ceK8s:1.233.主机环境配置systemctlstopfirewa......
  • Docker Swarm 安装 Redis 集群(bitnami/redis-cluster:latest)
    准备集群环境:​​docker-79​​​、​​docker-80​​​、​​docker-81​​拉取镜像:dockerpullbitnami/redis-cluster:latest3.在任意文件夹下新建compose.yml脚本:​......
  • Docker 搭建redis集群-三台机机器、三主三从
    1.拉取redis镜像这里我使用的是之前打包的镜像,redis版本是:​​6.2.0​​直接拉取也行:dockerpullredis:latest三台服务器:​​192.168.104.79​​​、​​192.168.104.80​......
  • HBase集群环境搭建
    HBase集群环境配置一、集群规划二、前置条件三、集群搭建        3.1下载并解压        3.2配置环境变量        3.3集群配置    ......
  • kubernetes中Deployment和replicaset关系剖析
    kubernetes中Deployment和replicaset关系剖析 前言:本片文章主要介绍了Deployment和Replicaset之间的关系以及如何产生Pod#vimnginx-deploy.yaml  #先给出De......
  • Kubernetes(K8S) 集群安全机制
    概述访问K8S集群,需要经过三个步骤完成具体操作认证鉴权(授权)准入控制进行访问时,过程中需要经过ApiServer,做统一协调,比如门卫,访问过程中需要证书、token、或者用户......
  • Kubernetes(K8S) 配置管理-ConfigMap 介绍
    作用:存储不加密数据到etcd,让Pod以变量或者Volume挂载到容器中场景:配置文件创建配置文件创建ConfigMap#根据redis.properties创建redis-config[root@k8sma......
  • Kubernetes通过HostAliases自定义hosts
    背景:今天突然就有了那么一个需求,记录一下:腾讯云的redis内网地址都是IP的方式。我们的服务注册在了nacos中。小伙伴本地测试链接上nacos(nacos开通了外网访问),获取redis中re......
  • Redis 集群
    Redis集群作用容量不够,redis如何进行扩容并发写操作,redis如何分摊都可使用集群解决。介绍Redis集群实现了对Redis的水平扩容,即启动N个redis节点,将整个数据库分......
  • K8S集群操作
    部署一个容器创建tomcat容器kubectlcreatedeploymenttomcat6--image=tomcat:6.0.53-jre8[root@masterk8s]#kubectlgetsvcNAMETYPECLUSTER-IP......