美文网首页K8s
k8s分布式存储-Ceph

k8s分布式存储-Ceph

作者: 小李飞刀_lql | 来源:发表于2022-01-10 09:34 被阅读0次

    Ceph架构介绍

    1641438794173.png
    RBD ( RADOs Block Device ):块存储接口
    RGW ( RADOs Gateway )):对象存储网关,接口与S3和 Swift 兼容
    LIBRADOs CephFS ( Ceph File System ):文件级存储接口
    RADOS RADOs ( Reliable Autonomic Distributed Object Store ):抽象的对象存储集群, Ceph 核心,实现用户数据分配、故障转移等集群操作
    MON :集群状态维护,例如 osD 是否健康、 PG 状态等
    MDS ( Metadata Server ): CephFS 服务依赖的元数据服务
    OSD ( Object Storage Daemon ):对象存储设备,主要存储数据
    

    Ceph核心概念

    RADOS

    01 全称Reliable Autonomic Distributed Object Store,即可靠的、自动化的、分布式对象存储系统。
    02 RADOS是Ceph集群的精华,用户实现数据分配、Failover等集群操作。
    

    Librados

    01 Rados提供库,因为RADOS是协议很难直接访问,因此上层的RBD、RGW和CephFS都是通过librados访问的
    02 目前提供PHP、Ruby、Java、Python、C和C++支持。
    

    Crush

    01 通过Crush算法的寻址操作,Ceph得以摒弃了传统的集中式存储元数据寻址方案
    02 Crush算法在一致性哈希基础上很好的考虑了容灾域的隔离,使得Ceph能够实现各类负载的副本放置规则,例如跨机房、机架感知等
    03 Crush算法有相当强大的扩展性,理论上可以支持数千个存储节点,这为Ceph在大规模云环境中的应用提供了先天的便利
    

    Pool

    01 Pool是存储对象的逻辑分区,它规定了数据冗余的类型和对应的副本分布策略
    02 副本(replicated)和 纠删码( Erasure Code)
    

    PG

    01 PG( placement group)是一个放置策略组,它是对象的集合,该集合里的所有对象都具有相同的放置策略
    02 简单点说就是相同PG内的对象都会放到相同的硬盘上
    03 PG是 ceph的逻辑概念,服务端数据均衡和恢复的最小粒度就是PG,一个PG包含多个OSD。
    04 引入PG这一层其实是为了更好的分配数据和定位数据;
    

    Object

    01 简单来说块存储读写快,不利于共享,文件存储读写慢,利于共享。能否弄一个读写快,利 于共享的出来呢。于是就有了对象存储
    02 最底层的存储单元,包含元数据和原始数据
    

    Pool、PG和OSD的关系

    01 一个Pool里有很多PG;  
    02 一个PG里包含一堆对象,一个对象只能属于一个PG;  
    03 PG有主从之分,一个PG分布在不同的OSD上;  
    

    OSD

    001 OSD是负责物理存储的进程,一般配置成和磁盘一一对应,一块磁盘启动一个OSD进程。
    002 主要功能是存储数据、复制数据、平衡数据、恢复数据,以及与其它OSD间进行心跳检查,负责响应客户端请求返回具体数据的进程等;
    

    Ceph三种存储类型

    块存储( RBD )

    优点:存储速度较快
    缺点:不支持共享存储
    应用场景:虚拟机硬盘
    典型设备:硬盘、 Raid 
    

    文件存储( CephFS )

    优点:支持共享存储
    缺点:读写速度较慢(需要经过操作系统处理再转为块存储)
    应用场景:文件共享,多台服务器共享使用同一个存储
    典型设备: FTP 、 NFs 
    

    对象存储( Object )

    优点:具备块存储的读写性能和文件存储的共享特性
    缺点:操作系统不能直接访问,只能通过应用程序级别的 API 访问
    应用场景:图片存储,视频存储
    典型设备:阿里云 OSs ,腾讯云 Cos
    

    部署Ceph集群

    初始化工作

    关闭防火墙

    systemcti stop firewald
    systemctl disable firewalld
    

    关闭selinux

    sed -i 's/enforcing/disabled/' /etc/selinux/config  #永久,重启生效
    setenforce 0   #临时
    

    关闭 swap

    swapof - a #临时 
    #永久
    [root@k8s-m1 ~]# vi /etc/fstab 
    #UUID=ff5b128d-f66c-40a5-86d7-ce69d2c0da61 swap  ...
    

    根据规划设置主机名

    hostnamectl set - hostname < hostname > 
    

    添加 hosts

    cat >>/etc/hosts << EOF  
    192.168.31.71 ceph-node01  
    192.168.31.72 ceph-node02
    192.168.31.73 ceph-node03 
    EOF
    

    设置文件描述符

    #临时生效
    ulimit -SHn 102400   
    
    #重启生效
    cat >> /etc/security/limits.conf << EOF
    * soft nofile 65535
    * hard nofile 65535
    EOF
    

    时间同步

    yum instal ntpdate - y 
    ntpdate time.windows.com 
    

    配置 SSH 免交互认证

    ssh-keygen 
    ssh-copy-id root@ceph-node01
    ssh-copy-id root@ceph-node02
    ssh-copy-id root@ceph-node03
    

    集群规划

    1641449306492.png
    ceph - deploy : ceph 集群部署节点,负责集群整体部署,这里复用node1节点,也可以单独找一台服务器作为部署节点
    monitor : Ceph 监视管理节点,负责集群状态维护,例如存储池副本数、 PG 状态、 OSD 数量等,至少部署1个,一般需要3或5个节点组建高可用
    osd : Ceph 存储节点,实际负责数据存储的节点,集群中至少有3个 OSD ,不少于默认副本数,每个 OSD 对应一快硬盘。
    

    Ceph 集群部署方式

    yum :常规的部署方式
    ceph - ansible :官方基于 ansible 写的自动化部署工具
    https://docs.ceph.com/projects/ceph-ansible/en/latest/
    ceph - deploy : ceph 提供的简易部署工具,可以非常方便部署 ceph 集群。(推荐)https://docs.ceph.com/projects/ceph-deploy/en/latest/
    

    Ceph 版本选择

    1641450946948.png

    Ceph 集群部署步骤

    1、配置阿里云 yum 仓库
    2、安装 ceph-deploy 工具
    3、创建集群
    4、安装 Ceph 
    5、部署 Monitor 服务 
    6、部署 OSD 服务并添加硬盘
    7、部署 MGR 服务
    

    配置阿里云 yum 仓库

    #所有机器都要配置
    #rpm-octopus是对应版本的
    #el7 对应centos版本
    cat >/etc/yum.repos.d/ceph.repo<<EOF
    [Ceph]
    name=Ceph packages for $basearch
    baseurl=http://mirrors.aliyun.com/ceph/rpm-octopus/el7/\$basearch
    gpgcheck=0
    
    
    [Ceph-noarch]
    name=Ceph noarch packages
    baseurl=http://mirrors.aliyun.com/ceph/rpm-octopus/el7/noarch
    gpgcheck=0
    
    
    [ceph-source]
    name=Ceph source packages
    baseurl=http://mirrors.aliyun.com/ceph/rpm-octopus/el7/SRPMS
    gpgcheck=0
    EOF
    

    安装 ceph - deploy 工具

    yum -y install ceph-deploy
    

    创建集群

    创建一个my-cluster 目录,所有命令在此目录下进行: 
    mkdir my-cluster 
    cd my-cluster 
    
    创建一个 Ceph 集群:
    yum install  epel-release -y #所有节点都安装
    yum install python2-pip -y 
    ceph-deploy new ceph-node01 ceph-node02 ceph-node03
    

    安装 Ceph

    安装 Ceph 包到指定节点:
    ceph-deploy install --no-adjust-repos ceph-node01 ceph-node02 ceph-node03
    注:-no-adjust-repos参数是直接使用本地源,不使用官方默认源
    

    部署 Monitor 服务

    初始化并部署 monitor ,收集所有密钥: 
    ceph-deploy mon create-initial 
    使用ceph-deploy命令将配置文件和admin key复制到管理节点和Ceph节点,以便毎次执行ceph CL命令无需指定 monitor 地址和 ceph.client.admin.keyring 
    ceph-deploy admin ceph-node01 ceph-node02 ceph-node03
    

    部署 OSD 服务并添加硬盘

    创建6个 OSD ,分别对应每个节点未使用的硬盘:
    fdisk -l #查看每个节点
    ceph-deploy osd create --data /dev/sdb ceph-node01
    ceph-deploy osd create --data /dev/sdc ceph-node01
    ceph-deploy osd create --data /dev/sdb ceph-node02
    ceph-deploy osd create --data /dev/sdc ceph-node02
    ceph-deploy osd create --data /dev/sdb ceph-node03
    ceph-deploy osd create --data /dev/sdc ceph-node03
    

    部署 MGR 服务

    ceph-deploy mgr create ceph-node01 ceph-node02 ceph-node03
    01 MGR 是 Ceph L版本新增加的组件
    02 主要用是分担和扩展 monitor 的部分功能,减轻 monitor 的负担
    03 建议每台 monitor 节点都部署一个 mgr ,以实现相同级别的高可用。
    pip3 install pecan werkzeug #所有节点都安装
    ceph config set mon auth_allow_insecure_global_id_reclaim false #所有节点都执行
    查看 Ceph 集群状态: 
    ceph -s 
    查看 Ceph 版本: 
    ceph -v 
    -------------------------------------------------------------------------------------
    [root@k8s-m1 ~]# ps -ef|grep ceph
    root       10228       1  0 17:51 ?        00:00:00 /usr/bin/python3.6 /usr/bin/ceph-crash
    ceph       68360       1  1 18:45 ?        00:00:05 /usr/bin/ceph-mgr -f --cluster ceph --id k8s-m1 --setuser ceph --setgroup ceph
    ceph       68372       1  0 18:45 ?        00:00:01 /usr/bin/ceph-osd -f --cluster ceph --id 0 --setuser ceph --setgroup ceph
    ceph       68415       1  3 18:45 ?        00:00:16 /usr/bin/ceph-mon -f --cluster ceph --id k8s-m1 --setuser ceph --setgroup ceph
    

    Ceph 集群服务管理

    1、启动所有守护进程
    # systemctl restart ceph.target 
    2、按类型启动守护进程
    # systemctl restart ceph-osd@id  (ps -ef|grep ceph)
    # systemctl restart ceph-mon.target 
    # systemctl restart ceph-mds.target 
    # systemctl restart ceph-mgr.target 
    
    

    Ceph 集群常用管理命令

    主机名 命令
    PG 状态 ceph pg stat
    Pool状态 ceph osd pool Is #查看存储池<br />ceph osd pool Is detail
    OSD 状态 ceph osd stat<br />ceph osd dump # OSD 详情
    ceph osd tree # OSD 分布
    ceph osd df # OSD 使用
    Monitor 状态 ceph mon stat
    ceph quorum status #仲裁状态
    集群空间用量 ceph df

    RDB块存储

    工作流程

    1641467877051.png
    (1)客户端创建一个pool,需要为这个pool指定pg的数量;  
    (2)创建pool/image rbd设备进行挂载;  
    (3)用户写入的数据进行切块,每个块的大小默认为4M,并且每个块都有一个名字,名字就是object+序号;  
    (4)将每个object通过pg进行副本位置的分配;  
    (5)pg根据cursh算法会寻找3个osd,把这个object分别保存在这三个osd上;  
    (6)osd上实际是把底层的disk进行了格式化操作,一般部署工具会将它格式化为xfs文件系统;  
    (7)object的存储就变成了存储一个文rbd0.object1.file
    
    

    RBD常用命令

    命令 功能
    rbd create 创建块设备映像
    rbd ls 列出 rbd 存储池中的块设备
    rbd info 查看块设备信息
    rbd diff 可以统计 rbd 使用量
    rbd map 映射块设备
    rbd showmapped 查看已映射块设备
    rbd remove 删除块设备
    rbd resize 更改块设备的大小

    RBD的创建并使用

    1、创建rbd使用的pool

    ceph osd pool create rbd-pool  128 # ceph osd pool create <pool-name> <pg-num>
    ceph osd pool ls 
    
    pg数量设置建议:
    pg数量=(osd数量*100)/副本数
    副本数默认为3
    例如 3*100/3 =100 向上取2的n次方 128
    
    

    2、指定存储池使用存储类型

    ceph osd pool application enable rbd-pool rbd 
    
    

    3、创建一个块设备

    # rbd create --size 10240 rbd-pool/image01 
    
    

    3、查看块设备

    # rbd ls rbd-pool
    # rbd info rbd-pool/image01
    
    

    本地挂载使用块设备

    1、禁用当前系统内核不支持的feature

    # rbd feature disable image01 exclusive-lock, object-map, fast-diff, deep-flatten
    
    

    2、映射(任意节点操作)

    # rbd map rbd-pool/image01 
    --/dev/rbd0
    
    

    3、格式化块设备

    # mkfs.xfs /dev/rbd0
    
    

    4、mount到本地

    # mount /dev/rbd0 /mnt
    # umount /mnt
    
    

    5、取消块设备和内核映射

    # rbd unmap rbd-pool/image01 
    
    

    6、删除RBD块设备

    # rbd rm rbd-pool/image01
    
    

    远程挂载使用块设备

    1、拷贝配置文件和秘钥

    cd my-cluster /
    scp ceph.conf root@192.168.153.17:/etc/ceph 
    scp ceph.client.admin.keyring root@192.168.153.17:/etc/ceph
    scp /etc/yum.repos.d/ceph.repo  root@192.168.153.17:/etc/yum.repos.d
    
    

    2、安装 Ceph 客户端

     yum install epel-release - y 
     yum install -y ceph-common
    
    

    3、剩余操作就与本地挂载操作一样了

    快照配置

    1、创建快照

    rbd snap create rbd-pool/image01@snap01
    
    

    2、列出创建的快照

    rbd snap list rbd-pool/image01
     
    
    

    3、还原快照

    rbd snap rollback rbd-pool/image01@snap01
    
    注:还原快照前需要先取消挂载和内核映射,否则会出错
    umount /dev/rdb0 /mnt
    rbd unmap rbd-pool/image01 
    
    

    4、重新映射并挂载验证

    rbd map rbd-pool/image01
    mount /dev/rbd0 /mnt
    
    

    5、删除快照

    rbd snap rm rbd-pool/image01@snap01
    
    

    克隆配置

    1、创建一个块设备

    # rbd create --size 10240 rbd-pool/image02 
    
    

    2、创建快照

    rbd snap create rbd-pool/image02@snap01
    
    

    3、设置快照处于被保护状态

    # rbd snap protect rbd-pool/image02@snap01
    
    

    4、通过快照克隆一个新块设备

    # rbd clone rbd-pool/image02@snap01  rbd-pool/image02_clone
    # rdb info rbd-pool/image02_clone
    
    

    5、将克隆的快照独立于父设备

    # rbd flatten rbd-pool/image02_clone
    
    
    

    CephFS文件系统

    概述

    01 CephFS 是一个基于 ceph 集群且兼容 POSIX 标准的文件系统。
    02 创建 cephfs 文件系统时需要在 ceph 集群中添加 mds 服务,该服务负责处理 POSIX 文件系统中的 metadata 部分,实际的数据部分交由 ceph 集群中的 OSD 处理。
    03 cephfs 支持以内核模块方式加载也支持 fuse 方式加载。
    04 无论是内核模式还是 fuse 模式,都是通过调用 libcephfs 库来实现 cephfs 文件系统的加载,而 libcephfs 库又调用 librados 库与 ceph 集群进行通信,从而实现 cephfs 的加载。
    
    
    
    1641521621653.png

    部署MDS服务

    ceph-deploy mds create ceph-node01 ceph-node02 ceph-node03
    
    
    

    创建文件系统

    #创建存储池
    ceph osd pool create cephfs-data  <pg_num>
    ceph osd pool create cephfs-metadata  <pg_num>
    ceph fs ls
    #创建文件系统
    #格式:ceph fs new <fs_name> <metadata> <data>
    ceph fs new cephfs cephfs-metadata cephfs-data 
    ceph fs ls #查看创建后的cephfs
    
    
    

    挂载并使用

    挂载本地目录

    #安装 Ceph 客户端
    yum install epel-release - y 
    yum install -y ceph-common
    
    #获取账号与密钥
    ceph auth list |grep admin -A1
    
    mkdir -p /opt/cephfs/local
     
    
    #挂载本地目录
    mount -t ceph 192.168.0.201:6789,192.168.0.202:6789,192.168.0.203:6789:/ /opt/cephfs/local/ -o name=admin,secret=AQDHjeddHlktJhAAxDClZh9mvBxRea5EI2xD9w==
    或者
    mount -t ceph 192.168.153.25:6789,192.168.153.27:6789,192.168.153.28:6789:/ /opt/cephfs/local/ -o name=admin,secretfile=/opt/cephfs/admin.secret
    
    
    #取消挂载
    umount /opt/cephfs/local
    
    

    fuse方式挂载

    #安装fuse
    yum install -y ceph-fuse
    
    cd my-cluster /
    scp ceph.conf root@192.168.153.17:/etc/ceph 
    scp ceph.client.admin.keyring root@192.168.153.17:/etc/ceph
    
    mkdir -p /opt/cephfs/fuse
    #挂载到本地目录
    ceph-fuse -m 192.168.153.25:6789,192.168.153.27:6789,192.168.153.28:6789  /opt/cephfs/fuse/
    
    #取消挂载
    fusermount -u /opt/cephfs/fuse/
    
    

    k8s使用ceph作为pod存储

    pv动态供给工作流程

    1641526606246.png

    ceph-csi供给程序

    ceph-csi是ceph官方维护的PV供给程序,专门用于在Kubernetes中使用 RBD 、CephFS 为 Pod 提供存储
    项目地址:https://github.com/ceph/ceph-csi
    
    
    1641527748959.png

    RBD

    关于部署,RBD YAML文件在deploy/rbd/kubernetes目录,YAML改动如下:
    01 全部统一命名空间到 ceph-csi 
    02 csi-config-map.yaml修改连接ceph集群信息
    03 增加storageclass.yaml,修改集群ID和存储池
    04 增加secret.yaml,修改秘钥
    05 将csi-rbdplugin-provisioner.yaml和csi-rbdplugin.yaml中关于kms配置注释
    
    
    

    **全部统一命名空间到 ceph-csi **

     kubectl create ns ceph-csi 
    
    

    k8s节点安装 Ceph 客户端

     yum install epel-release - y 
     yum install -y ceph-common
    
    

    csi-config-map.yaml

    [root@k8s-m1 rbd]# vi csi-config-map.yaml 
    ---
    apiVersion: v1
    kind: ConfigMap
    data:
      config.json: |-
        [
          {
            "clusterID": "6800e723-090a-4329-9fc4-bfa299110977",
            "monitors": [
              "192.168.153.25:6789",
              "192.168.153.27:6789",
              "192.168.153.28:6789"
            ]
          }
        ]
    metadata:
      name: ceph-csi-config
      namespace: ceph-csi
      
    ---------------------------------------------------------------------------------
    [root@k8s-m1 rbd]# ceph -s
      cluster:
        id:     6800e723-090a-4329-9fc4-bfa299110977
    或者:    
    [root@k8s-m1 rbd]# ceph mon dump
    dumped monmap epoch 1
    epoch 1
    fsid 6800e723-090a-4329-9fc4-bfa299110977
    
    
    

    storageclass

    [root@k8s-m1 rbd]# vi storageclass.yaml 
    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
       name: csi-rbd-sc
    provisioner: rbd.csi.ceph.com
    parameters:
       clusterID: 6800e723-090a-4329-9fc4-bfa299110977 
       pool: rbd-pool
       imageFeatures: layering
       csi.storage.k8s.io/provisioner-secret-name: csi-rbd-secret
       csi.storage.k8s.io/provisioner-secret-namespace: ceph-csi
       csi.storage.k8s.io/controller-expand-secret-name: csi-rbd-secret
       csi.storage.k8s.io/controller-expand-secret-namespace: ceph-csi
       csi.storage.k8s.io/node-stage-secret-name: csi-rbd-secret
       csi.storage.k8s.io/node-stage-secret-namespace: ceph-csi
       csi.storage.k8s.io/fstype: ext4
    reclaimPolicy: Delete
    allowVolumeExpansion: true
    mountOptions:
       - discard
    ---------------------------------------------------------------------------------
    clusterID:
    [root@k8s-m1 rbd]# ceph -s
      cluster:
        id:     6800e723-090a-4329-9fc4-bfa299110977
    
    
    pool:
    [root@k8s-m1 rbd]# ceph osd pool ls
    rbd-pool
    ......
    
    

    secret

    [root@k8s-m1 rbd]# vi secret.yaml 
    apiVersion: v1
    kind: Secret
    metadata:
      name: csi-rbd-secret
      namespace: ceph-csi
    stringData:
      userID: admin
      userKey: AQD9wNZhYxUQFRAA9hJrWc5DjqSVEsX5WM7lwA==
      
    ---------------------------------------------------------------------------------
    userKey:
    ceph auth list |grep admin -A1
    client.admin
            key: AQD9wNZhYxUQFRAA9hJrWc5DjqSVEsX5WM7lwA==
            
    
    
            
    
    
    

    启动验证

    [root@k8s-m1 rbd]# ls
    csi-config-map.yaml      csi-nodeplugin-rbac.yaml  csi-provisioner-rbac.yaml      
    csi-rbdplugin.yaml  secret.yaml csi-nodeplugin-psp.yaml  csi-provisioner-psp.yaml  
    csi-rbdplugin-provisioner.yaml     storageclass.yaml
    
    [root@k8s-m1 rbd]# kubectl apply -f .
    
    [root@k8s-m1 rbd]# kubectl get sc
    NAME       PROVISIONER        RECLAIMPOLICY   VOLUMEBINDINGMODE   ALLOWVOLUMEEXPANSION   
    csi-rbd-sc rbd.csi.ceph.com   Delete          Immediate           true  
    
    
    [root@k8s-m1 rbd]# kubectl get pod -n ceph-csi -o wide                                     
    NAME                                      READY   STATUS   IP               NODE       
    csi-rbdplugin-245vq                       3/3    Running   192.168.153.28   k8s-node2 
    csi-rbdplugin-mhg8g                       3/3    Running   192.168.153.25   k8s-m1  
    csi-rbdplugin-w6trw                       3/3    Running   192.168.153.27   k8s-node1 
    csi-rbdplugin-provisioner-fc66bb6-2b8tz   7/7    Running   10.244.36.131    k8s-node1   
    csi-rbdplugin-provisioner-fc66bb6-7p72t   7/7    Running   10.244.169.129   k8s-node2   
    csi-rbdplugin-provisioner-fc66bb6-kwd8k   0/7    Pending             
      
    
    
    
    

    rbd-pod-test.yaml

    apiVersion: v1
    kind: Pod
    metadata:
      name: ceph-rbd-test
    spec:
      containers:
      - name: nginx
        image: nginx:latest
        volumeMounts:
          - name: www 
            mountPath: /usr/share/nginx/html 
      volumes:
      - name: www 
        persistentVolumeClaim:
          claimName: ceph-rbd-test
    ---
    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: ceph-rbd-test
    spec:
      accessModes:
        - ReadWriteOnce
      storageClassName: csi-rbd-sc  
      resources:
        requests:
          storage: 10Gi
    
    
    

    测试

    [root@k8s-m1 rbd]# rbd ls rbd-pool  
    csi-vol-6a8a5824-6fb6-11ec-8aa4-a60b5dcd89ed
    image01
    image02
    
    #动态供给程序创建的
    [root@k8s-m1 rbd]# rbd info rbd-pool/csi-vol-6a8a5824-6fb6-11ec-8aa4-a60b5dcd89ed
    rbd image 'csi-vol-6a8a5824-6fb6-11ec-8aa4-a60b5dcd89ed':
            size 10 GiB in 2560 objects
            order 22 (4 MiB objects)
            snapshot_count: 0
            id: 2a853bb0bca9d
            block_name_prefix: rbd_data.2a853bb0bca9d
            format: 2
            features: layering
            op_features: 
            flags: 
            create_timestamp: Fri Jan  7 20:36:20 2022
            access_timestamp: Fri Jan  7 20:36:20 2022
            modify_timestamp: Fri Jan  7 20:36:20 2022
            
            
    [root@k8s-m1 rbd]# kubectl exec -it ceph-rbd-test -- bash 
    root@ceph-rbd-test:/# cd /usr/share/nginx/html/
    
    root@ceph-rbd-test:/usr/share/nginx/html# touch aaa
    
    #删除pod
    [root@k8s-m1 rbd]# kubectl delete pod ceph-rbd-test
    
    
    [root@k8s-m1 rbd]# kubectl apply -f  rbd-pod-test.yaml 
    pod/ceph-rbd-test created
    persistentvolumeclaim/ceph-rbd-test unchanged
     
     
    [root@k8s-m1 rbd]# kubectl exec -it ceph-rbd-test -- bash                      
    root@ceph-rbd-test:/# cd /usr/share/nginx/html/
    root@ceph-rbd-test:/usr/share/nginx/html# ls
    aaa  
    
    

    cephfs

    关于部署,cephfs YAML文件在deploy/cephfs/kubernetes目录,YAML改动如下:
    01 全部统一命名空间到 ceph-csi-cephfs 
    02 csi-config-map.yaml修改连接ceph集群信息
    03 增加storageclass.yaml,修改集群ID、文件存储池、文件系统名称
    
    增加 secret.yaml和storageclass.yaml文件
    将 csi-rbdplugin-provisioner.yaml 和 csi-rbdplugin.yaml 中关于 kms 配置注释
    在使用中,还需要根据自己集群环境修改:
     
     secret.yaml 修改秘钥
     storageclass.yaml修改集群ID和文件系统名称
     
     关于部署,RBD YAML文件在deploy/rbd/kubernetes目录,YAML改动如下:
    01 全部统一命名空间到 ceph-csi 
    02 csi-config-map.yaml修改连接ceph集群信息
    03 增加storageclass.yaml,修改集群ID和存储池
    04 增加secret.yaml,修改秘钥
    05 将csi-rbdplugin-provisioner.yaml和csi-rbdplugin.yaml中关于kms配置注释
    
    

    **全部统一命名空间到 ceph-csi **

     kubectl create ns ceph-csi-cephfs
    
    

    k8s节点安装 Ceph 客户端

     yum install epel-release - y 
     yum install -y ceph-common
    
    
    

    csi-config-map

    [root@k8s-m1 rbd]# vi csi-config-map.yaml 
    ---
    apiVersion: v1
    kind: ConfigMap
    data:
      config.json: |-
        [
          {
            "clusterID": "6800e723-090a-4329-9fc4-bfa299110977",
            "monitors": [
              "192.168.153.25:6789",
              "192.168.153.27:6789",
              "192.168.153.28:6789"
            ]
          }
        ]
    metadata:
      name: ceph-csi-config
      namespace: ceph-csi-cephfs
      
    ---------------------------------------------------------------------------------
    [root@k8s-m1 rbd]# ceph -s
      cluster:
        id:     6800e723-090a-4329-9fc4-bfa299110977
        
    [root@k8s-m1 rbd]# ceph mon dump
    dumped monmap epoch 1
    epoch 1
    fsid 6800e723-090a-4329-9fc4-bfa299110977
    
    
    

    storageclass

    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
       name: csi-cephfs-sc
    provisioner: cephfs.csi.ceph.com
    parameters:
       clusterID: 6800e723-090a-4329-9fc4-bfa299110977 
       pool: cephfs-data 
       fsName: cephfs
       csi.storage.k8s.io/provisioner-secret-name: csi-cephfs-secret
       csi.storage.k8s.io/provisioner-secret-namespace: ceph-csi-cephfs
       csi.storage.k8s.io/controller-expand-secret-name: csi-cephfs-secret
       csi.storage.k8s.io/controller-expand-secret-namespace: ceph-csi-cephfs
       csi.storage.k8s.io/node-stage-secret-name: csi-cephfs-secret
       csi.storage.k8s.io/node-stage-secret-namespace: ceph-csi-cephfs
    reclaimPolicy: Delete
    allowVolumeExpansion: true
    mountOptions:
       - discard   
    ---------------------------------------------------------------------------------
    clusterID:
    [root@k8s-m1 rbd]# ceph -s
      cluster:
        id:     6800e723-090a-4329-9fc4-bfa299110977
    
    
    pool:
    [root@k8s-node2 ~]# ceph osd pool ls
    cephfs-data
    ...
    
    [root@k8s-m1 ~]# ceph fs ls 
    name: cephfs, metadata pool: cephfs-metadata, data pools: [cephfs-data ]
    
    

    secret

    [root@k8s-m1 rbd]# vi secret.yaml 
    apiVersion: v1
    kind: Secret
    metadata:
      name: csi-rbd-secret
      namespace: ceph-csi-cephfs
    stringData:
      userID: admin
      userKey: AQD9wNZhYxUQFRAA9hJrWc5DjqSVEsX5WM7lwA==
      
    ---------------------------------------------------------------------------------
    userKey:
    ceph auth list |grep admin -A1
    client.admin
            key: AQD9wNZhYxUQFRAA9hJrWc5DjqSVEsX5WM7lwA==
    
    

    启动验证

    [root@k8s-m1 cephfs]# ls
    csi-cephfsplugin-provisioner.yaml  csi-config-map.yaml      csi-nodeplugin-rbac.yaml  csi-provisioner-rbac.yaml          storageclass.yaml        csi-cephfsplugin.yaml        csi-nodeplugin-psp.yaml            csi-provisioner-psp.yaml secret.yaml
    
    
    [root@k8s-m1 cephfs]# kubectl get pod -n ceph-csi-cephfs
    NAME                                            READY   STATUS    RESTARTS   AGE
    csi-cephfsplugin-8knvq                          3/3     Running   0          26s
    csi-cephfsplugin-dvfhf                          3/3     Running   0          26s
    csi-cephfsplugin-provisioner-7c454885fc-cnb2v   0/6     Pending   0          26s
    csi-cephfsplugin-provisioner-7c454885fc-t5mtd   6/6     Running   0          26s
    csi-cephfsplugin-provisioner-7c454885fc-xtwqb   6/6     Running   0          26s
    csi-cephfsplugin-xcr5g                          3/3     Running   0          26s
    
    [root@k8s-m1 cephfs]# kubectl get sc
    NAME            PROVISIONER           RECLAIMPOLICY   VOLUMEBINDINGMODE   
    csi-cephfs-sc   cephfs.csi.ceph.com   Delete          Immediate           
    
    
    

    ceph-cephfs-test

    [root@k8s-m1 ~]# vi cephfs-deployment-test.yaml 
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: cephfs-pod-test
    spec:
      replicas: 3
      selector:
        matchLabels:
          app: nginx
      template:
        metadata:
          labels:
            app: nginx
        spec:
          containers:
          - name: nginx
            image: nginx
            volumeMounts:
              - name: www
                mountPath: /usr/share/nginx/html
          volumes:
          - name: www
            persistentVolumeClaim:
              claimName: ceph-cephfs-test
    ---
    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: ceph-cephfs-test
    spec:
      accessModes:
        - ReadWriteMany
      storageClassName: csi-cephfs-sc
      resources:
        requests:
          storage: 10Gi
    
    

    测试

    [root@k8s-m1 ~]# kubectl get pod 
    NAME                               READY   STATUS    RESTARTS   AGE
    cephfs-pod-test-5d95fd8858-2v9cr   1/1     Running   0          8m40s
    cephfs-pod-test-5d95fd8858-dsp7h   1/1     Running   0          8m40s
    cephfs-pod-test-5d95fd8858-n2j87   1/1     Running   0          8m40s
    
    
    [root@k8s-m1 ~]# kubectl exec -it cephfs-pod-test-5d95fd8858-2v9cr -- bash
    root@cephfs-pod-test-5d95fd8858-2v9cr:/# cd  /usr/share/nginx/html 
    root@cephfs-pod-test-5d95fd8858-2v9cr:/usr/share/nginx/html# touch test.txt
    
    [root@k8s-m1 ~]# kubectl exec -it cephfs-pod-test-5d95fd8858-dsp7h -- bash
    root@cephfs-pod-test-5d95fd8858-dsp7h:/# cd  /usr/share/nginx/html
    root@cephfs-pod-test-5d95fd8858-dsp7h:/usr/share/nginx/html# ls
    test.txt
    
    

    总结

    1641608575044.png

    相关文章

      网友评论

        本文标题:k8s分布式存储-Ceph

        本文链接:https://www.haomeiwen.com/subject/jmhmcrtx.html