• 基于现有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

    END! 

  • 相关阅读:
    js文件内部导入引用js文件方法
    CSS3.0动画之hover---Y轴----3D旋转
    静态的html页面想要设置使用浏览器缓存
    opener 属性是一个可读可写的属性,可返回对创建该窗口的 Window 对象的引用
    input获取永久焦点
    修改zepto源代码,使支持wp8的ie10
    EChart
    input属性disabled和readonly的区别
    trigger
    解决jquery mobile的遇到高版本Chrome一直转圈,页面加载不出来的情况。
  • 原文地址:https://www.cnblogs.com/bixiaoyu/p/16135309.html
Copyright © 2020-2023  润新知