• k8s-8_-rook介绍与使用


    k8s-8_Kubernetes-rook介绍与使用

    1.rook简介

    一、容器的持久化存储
    1. 容器的持久化存储是保存容器存储状态的重要手段,存储插件会在容器里挂载一个基于网络或者其他机制的远程数据卷,使得在容器里创建的文件,实际上是保存在远程存储服务器上,或者以分布式的方式保存在多个节点上,而与当前宿主机没有任何绑定关系。这样,无论你在其他哪个宿主机上启动新的容器,都可以请求挂载指定的持久化存储卷,从而访问到数据卷里保存的内容。
    
    2. 由于 Kubernetes 本身的松耦合设计,绝大多数存储项目,比如 Ceph、GlusterFS、NFS 等,都可以为 Kubernetes 提供持久化存储能力。
    
    • 1
    • 2
    • 3

    二、Rook

    1. 简介
    ● Rook 是一个开源的cloud-native storage编排, 提供平台和框架;为各种存储解决方案提供平台、框架和支持,以便与云原生环境本地集成。
    ● Rook 将存储软件转变为自我管理、自我扩展和自我修复的存储服务,它通过自动化部署、引导、配置、置备、扩展、升级、迁移、灾难恢复、监控和资源管理来实现此目的。
    ● Rook 使用底层云本机容器管理、调度和编排平台提供的工具来实现它自身的功能。
    ● Rook 目前支持Ceph、NFS、Minio、EdgeFS等
    
    • 1
    • 2
    • 3
    • 4

    2. 架构

    • Rook使用Kubernetes原语使Ceph存储系统能够在Kubernetes上运行。

    image-20220806150017789

    ● 随着Rook在Kubernetes集群中运行,Kubernetes应用程序可以挂载由Rook管理的块设备和文件系统,或者可以使用S3 / Swift API提供对象存储。Rook oprerator自动配置存储组件并监控群集,以确保存储处于可用和健康状态。
    
    ● Rook oprerator是一个简单的容器,具有引导和监视存储集群所需的全部功能。oprerator将启动并监控ceph monitor pods和OSDs的守护进程,它提供基本的RADOS存储。oprerator通过初始化运行服务所需的pod和其他组件来管理池,对象存储(S3 / Swift)和文件系统的CRD。
    
    ● oprerator将监视存储后台驻留程序以确保群集正常运行。Ceph mons将在必要时启动或故障转移,并在群集增长或缩小时进行其他调整。oprerator还将监视api服务请求的所需状态更改并应用更改。
    
    ● Rook oprerator还创建了Rook agent。这些agent是在每个Kubernetes节点上部署的pod。每个agent都配置一个Flexvolume插件,该插件与Kubernetes的volume controller集成在一起。处理节点上所需的所有存储操作,例如附加网络存储设备,安装卷和格式化文件系统。
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    image-20220806150117644

    一、ceph基本概念

    1. 功能

    Ceph是一个可靠、自动重均衡、自动恢复的分布式存储系统,根据场景划分可以将Ceph分为三大块,分别是对象存储、块设备和文件系统服务。
    
    • 1

    2. 优点

    ● 高性能:摒弃了传统的集中式存储元数据寻址的方案,采用CRUSH算法,数据分布均衡,并行度高,能够实现各类负载的副本放置规则,能够支持上千个存储节点的规模,支持TB到PB级的数据。
    
    ● 高可用性:副本数可以灵活控制。支持故障域分隔,数据强一致性。多种故障场景自动进行修复自愈。没有单点故障,自动管理,自动扩充副本数。
    
    ● 高可扩展性:去中心化。扩展灵活。随着节点增加而线性增长。
    
    ● 特性丰富:支持三种存储接口:块存储(得到的是硬盘)、文件存储(目录)、对象存储(对接的是一个挂载的目录,后端会把数据打散,采用键值对形式存储)。支持自定义接口,支持多种语言驱动。
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    3. Ceph核心组件

    image-20220806150401247

    ● Monitors(管理服务):监视器,维护集群状态的多种映射,同时提供认证和日志记录服务,包括有关monitor 节点端到端的信息,其中包括 Ceph 集群ID,监控主机名和IP以及端口。并且存储当前版本信息以及最新更改信息,通过 "ceph mon dump"查看 monitor map。
    
    ● MDS(Metadata Server):Ceph 元数据,主要保存的是Ceph文件系统的元数据。注意:ceph的块存储和ceph对象存储都不需要MDS。
    
    ● OSD:即对象存储守护程序,但是它并非针对对象存储。是物理磁盘驱动器,将数据以对象的形式存储到集群中的每个节点的物理磁盘上。OSD负责存储数据、处理数据复制、恢复、回(Backfilling)、再平衡。完成存储数据的工作绝大多数是由 OSD daemon 进程实现。在构建 Ceph OSD的时候,建议采用SSD 磁盘以及xfs文件系统来格式化分区。此外OSD还对其它OSD进行心跳检测,检测结果汇报给Monitor
    
    ● RADOS:Reliable Autonomic Distributed Object Store。RADOS是ceph存储集群的基础。在ceph中,所有数据都以对象的形式存储,并且无论什么数据类型,RADOS对象存储都将负责保存这些对象。RADOS层可以确保数据始终保持一致。
    
    ● librados:librados库,为应用程度提供访问接口。同时也为块存储、对象存储、文件系统提供原生的接口。
    
    ● RADOSGW:网关接口,提供对象存储服务。它使用librgw和librados来实现允许应用程序与Ceph对象存储建立连接。并且提供S3 和 Swift 兼容的RESTful API接口。
    
    ● RBD:块设备,它能够自动精简配置并可调整大小,而且将数据分散存储在多个OSD上。
    
    ● CephFS:Ceph文件系统,与POSIX兼容的文件系统,基于librados封装原生接口。
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    4. Ceph 数据存储过程

    image-20220806150455221

    ● File : 用户需要存储或者访问的文件。当上层应用向RADOS存入size很大的file时,需要将file切分成统一大小的一系列object(最后一个的大小可以不同)进行存储。
    
    ● Object : 无论使用哪种存储方式(对象、块、文件系统),存储的数据都会被切分成Objects。每个对象都会有一个唯一的OID,由ino(文件的File ID,在全局唯一标识每一个文件)与ono(分片的编号,比如:一个文件FileID为A,它被切成了两个对象,那么这两个文件的oid则为A0与A1)生成。
    
    ● pool是ceph存储数据时的逻辑分区,它起到namespace的作用。其他分布式存储系统。每个pool包含一定数量的PG,PG里的对象被映射到不同的OSD上,因此pool是分布到整个集群的。除了隔离数据,我们也可以分别对不同的POOL设置不同的优化策略,比如副本数、数据清洗次数、数据块及对象大小等。
    
    ● PG(Placement Group):对object的存储进行组织和位置映射。PG和object之间是“一对多”映射关系。PG和OSD之间是“多对多”映射关系。
    
    ● OSD: 即object storage device,OSD的数量事实上也关系到系统的数据分布均匀性,因此其数量不应太少
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    5. Ceph中的寻址映射过程

    ● File -> object映射
    ● Object -> PG映射,hash(oid) & mask -> pgid(哈希算法)
    ● PG -> OSD映射,CRUSH算法
    
    • 1
    • 2
    • 3

    6. RADOS分布式存储相较于传统分布式存储的优势

    ● 将文件映射到object后,利用Cluster Map 通过CRUSH 计算而不是查找表方式定位文件数据存储到存储设备的具体位置。优化了传统文件到块的映射和Block MAp的管理。
    ● RADOS充分利用OSD的智能特点,将部分任务授权给OSD,最大程度地实现可扩展
    
    • 1
    • 2

    7. cephfs与ceph rbd对比

    CephFS 文件存储Ceph RBD块存储
    优点:读取延迟低,I/O带宽表现良好,尤其是block size较大一些的文件灵活度高,支持k8s的所有接入模式1. 读取延迟低,I/O带宽表现良好,尤其是block size较大一些的文件 1. I/O带宽表现良好2. 灵活度高,支持k8s的所有接入模式 2. 读写延迟都很低3. 支持镜像快照,镜像转储4. 支持k8s动态供给
    缺点:写入延迟相对较高且延迟时间不稳定,不支持动态供给不支持多节点挂载
    适用场景:适用于要求灵活度高(支持k8s多节点挂载特性),对I/O延迟不甚敏感的文件读写操作,以及非海量的小文件存储支持.例如作为常用的应用/中间件挂载存储后端.对I/O带宽和延迟要求都较高,且无多个节点同时读写数据需求的应用,例如数据库

    二、部署ceph集群

    github地址,一键部署集群

    https://github.com/luckman666/deploy_ceph_cluster_luminous_docker
    
    • 1

    环境准备

    主机名IP配置磁盘空间
    ceph1192.168.10.1314C4Gsda(50G,安装系统)sdb(50G,不格式化) sdc(50G,不格式化)
    ceph2192.168.10.1324C4Gsda(50G,安装系统) sdb(50G,不格式化) sdc(50G,不格式化)
    ceph3192.168.10.1324C4Gsda(50G,安装系统) sdb(50G,不格式化) sdc(50G,不格式化)

    image-20220806152847234

    1、主机名

    #三个节点分别配置主机名

    [root@localhost ~]# hostnamectl set-hostname ceph1
    [root@localhost ~]# hostnamectl set-hostname ceph2
    [root@localhost ~]# hostnamectl set-hostname ceph3
    
    • 1
    • 2
    • 3

    2、关闭防火墙、核心防护

    [root@ceph01 ~]# systemctl stop firewalld
    [root@ceph01 ~]# systemctl disable firewalld
    [root@ceph01 ~]# setenforce 0
    [root@ceph01 ~]# sed -i '7s/enforcing/disabled/' /etc/selinux/config
    
    
    • 1
    • 2
    • 3
    • 4
    • 5

    3、配置hosts

    [root@ceph01 ~]# vim /etc/hosts
    192.168.0.68	ceph1
    192.168.0.71	ceph2
    192.168.0.189	ceph3
    
    • 1
    • 2
    • 3
    • 4

    image-20220806160236646

    2. clone项目脚本,赋予执行权限

    # git clone https://github.com/luckman666/deploy_ceph_cluster_luminous_docker.git && chmod -R 755 deploy_ceph_cluster_luminous_docker
    
    • 1

    image-20220806153617232

    3. 配置base.config基本信息

    image-20220806161659193

    4. 执行安装脚本

    # ./ceph_luminous.sh 
    
    • 1

    脚本内容

    image-20220806160332279

    执行完成一个阶段,他会自动执行第二个节点

    image-20220806161732561

    image-20220806161853089

    ceph节点信息

    image-20220806161959390

    安装完毕

    image-20220806162850887

    5. 查看安装日志信息

    	`# tail -f setup.log` 
    
    • 1

    6. 验证

    	`# ceph -s` 
    
    • 1

    image-20220806172617948

    三、k8s连接ceph

    1. k8s所有节点安装ceph客户端
    • 添加阿里云repo源

      # vim /etc/yum.repos.d/ceph.repo
      [ceph-nautilus]
      name=ceph-luminous
      baseurl=https://mirrors.aliyun.com/ceph/rpm-nautilus/el7/x86_64/
      gpgcheck=0
      [ceph-noarch]
      name=cephnoarch
      baseurl=https://mirrors.aliyun.com/ceph/rpm-nautilus/el7/noarch/
      gpgcheck=0
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9

    image-20220806170819339

    2. 查看可用版本,与ceph服务端版本保持一致
    yum list ceph --showduplicates | sort -r` 
    
    • 1
    3. 安装指定版本ceph
    	`# yum install -y ceph-common-14.2.6` 
    
    • 1
    4. 添加配置文件,验证连接
    • ceph进入到/data/ceph/etc目录将 ceph.client.admin.keyring和ceph.conf两个配置文件传送到ceph客户端服务器的/etc/ceph目录下
      image-20220806173034063
    	`# scp /data/ceph/etc/ceph.client.admin.keyring 192.168.10.101:/etc/ceph` 
    
    ​	`# scp /data/ceph/etc/ceph.conf 192.168.10.101:/etc/ceph` 
    
    • 1
    • 2
    • 3
    • k8s查看ceph信息
    	`# ceph -s` 
    
    • 1

    3.rook部署

    官方文档链接

    https://www.rook.io/docs/rook/v1.2/ceph-quickstart.html
    
    • 1
    1. clone项目到本地
    # git clone --single-branch --branch release-1.2 https://github.com/rook/rook.git 
    
    	# cd cluster/examples/kubernetes/ceph 
    
    • 1
    • 2
    • 3

    image-20220806174654378

    2. 创建rook-ceph名称空间
    kubectl create namespace rook-ceph 
    
    • 1

    image-20220809173343249

    3. apply资源清单文件
    # kubectl apply -f common.yaml 
    # kubectl apply -f operator.yaml 
    # kubectl apply -f cluster.yaml(cluster至少需要三个work节点)
    
    • 1
    • 2
    • 3

    image-20220809173758697

    image-20220809173810990

    4. 创建ceph客户端连接工具
    kubectl apply -f toolbox.yaml 
    
    • 1
    • 进入容器bash环境
    kubectl -n rook-ceph exec -it $(kubectl -n rook-ceph get pod -l "app=rook-ceph-tools" -o jsonpath='{.items[0].metadata.name}') bash 
    
    • 1
    • 查看集群状态

    image-20220809175611953

    image-20220809175620741

    • 使用完成后删除部署
    	`kubectl -n rook-ceph delete deployment rook-ceph-tools`
    
    • 1
    5. dashboard部署
    • 查看svc信息,默认使用clusterip

    image-20220809175658972

    • 创建nodeport模式https代理
     kubectl apply -f dashboard-external-https.yaml 
    
    • 1

    image-20220809175719009

    • 访问测试

    image-20220809175729938

    • 获取默认密码
    kubectl -n rook-ceph get secret rook-ceph-dashboard-password -o jsonpath="{['data']['password']}" | base64 --decode && echo 
    
    • 1
    6. 使用Prometheus监控

    相关文档

    https://www.rook.io/docs/rook/v1.2/ceph-monitoring.html
    
    • 1
    
    [外链图片转存中...(img-63wVv0KF-1660039217649)]
    
    - 访问测试
    
    [外链图片转存中...(img-ed146VXj-1660039217649)]
    
    - 获取默认密码
    
    ```shell
    kubectl -n rook-ceph get secret rook-ceph-dashboard-password -o jsonpath="{['data']['password']}" | base64 --decode && echo 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    6. 使用Prometheus监控

    相关文档

    https://www.rook.io/docs/rook/v1.2/ceph-monitoring.html
    
    • 1
  • 相关阅读:
    mybatis面试题及回答
    .net MVC 拦截器
    01. Docker的基本介绍
    1500*B. The Walkway(贪心&规律)
    echarts中tooltip设为渐变色与模糊背景滤镜
    HTML+CSS美食静态网页设计——简单牛排美食餐饮(9个页面)公司网站模板企业网站实现
    Hi5 2.0 产品说明书-Ver 1.0
    uni-app:实现页面效果2(canvas绘制,根据页面宽度调整元素位置)
    Python3 异步编程简介
    良心安利万向轮 SolidWorks模型素材网站
  • 原文地址:https://blog.csdn.net/tianmingqing0806/article/details/126252999