在Kubernetes中搭建ceph的StorageClass

在Kubernetes中搭建ceph的StorageClass

搭建Ceph集群

注意

此文中的ceph只支持mimic以下的版本,推荐使用luminous版本

设备需求

操作系统数量CPU内存磁盘
CentOS72或者322G200G

配置ssh互信

  • 配置3台设备的HostName以及hosts文件
    hostnamehosts
    cephNode1/etc/hosts文件配置3台设备的IP和hostname
    cephNode2/etc/hosts文件配置3台设备的IP和hostname
    cephNode3/etc/hosts文件配置3台设备的IP和hostname
  • 做ssh互信
    ssh-copy-id ${hostname}

安装Ceph

  • 配置ceph的repo (配置阿里云的即可)
    [ceph]
    name=ceph
    baseurl=http://mirrors.aliyun.com/ceph/rpm-luminous/el7/x86_64/
    gpgcheck=0
    [ceph-noarch]
    name=cephnoarch
    baseurl=http://mirrors.aliyun.com/ceph/rpm-luminous/el7/noarch/
    gpgcheck=0
    
  • 安装ceph
    • cephNode1安装ceph-deploy和ceph
      yum -y install epel-release
      yum clean all
      yum makecache
      yum -y install ceph ceph-deploy
      
    • cephNode2(和cephNode3)安装ceph
      yum -y install epel-release
      yum clean all
      yum makecache
      yum -y install ceph
      
  • 安装过程中遇到的问题
    • 缺少安装包问题,如下图
      在这里插入图片描述
      问题解决方案:yum -y install epel-release
    • hostname问题
      在这里插入图片描述
      这个问题推荐先配置好hostname在做ceph的安装

创建Ceph的Pool

  • 调整防火墙策略,如果您是在测试环境,可以考虑关闭firewalld
    systemctl stop firewalld
    
  • ceph初始化
    • 在cephNode1上执行以下操作
    • 初始化
      mkdir ~/cluster
      cd ~/cluster
      ceph-deploy new cephNode1
      
    • 配置ceph.conf
        osd pool default size = 2
        osd crush chooseleaf type = 0
        osd max object name len = 256
        osd journal size = 128
      
    • 执行以下命令完成ceph初始化
      ceph-deploy mon create-initial
      ceph-deploy mgr create cephNode1
      ceph-deploy admin cephNode1 cephNode2 cephNode3
       ```
      
  • ceph准备disk,如果防火墙没有放开,此步骤会失败
    ceph-deploy osd create --data ${你的200G磁盘地址} cephNode1
    ceph-deploy osd create --data ${你的200G磁盘地址} cephNode2
    ceph-deploy osd create --data ${你的200G磁盘地址} cephNode3
    
  • 创建ceph pool
    • 初始化pool rbd,不初始化这个不能使用rbd ls等命令
       cd ~/cluster
       ceph osd pool create rbd 100 100
       rbd pool init rbd
       rbd ls
      
      • 创建pool kube
        cd ~/cluster
        ceph osd pool create kube 50 50
        ceph osd pool ls
        ceph osd pool application enable kube rbd
        ceph osd crush tunables hammer
        ceph auth get-or-create client.k8s mon 'allow r' osd 'allow rwx pool=k8s' -o ceph.client.k8s.keyring
        
  • 测试ceph
    # 创建pool	
    rbd create foo --size 4096 --pool rbd --image-format=1
    # 列举pool	
    rbd ls
    # 删除pool	
    rbd rm foo
    
  • 准备如下文件
    ceph.client.admin.keyring
    ceph.client.kube.keyring
    ceph.conf
    

配置StorageClass

  • 在kubernetes中安装与ceph集群相同版本的ceph-common
    yum -y install ceph-common
    
  • 将上一步中准备的文件拷贝到kubernetes集群中的每一个节点的/etc/ceph/目录下(这一步有的时候不一定起作用,下面还有一次拷贝)
  • 部署ceph的rbac
    • 获取相关的k8s文件
      git clone https://github.com/kubernetes-incubator/external-storage.git
      
    • 修改相关文件
      cd external-storage/ceph/rbd/deploy
      NAMESPACE=default # change this if you want to deploy it in another namespace
      sed -r -i "s/namespace: [^ ]+/namespace: $NAMESPACE/g" ./rbac/clusterrolebinding.yaml ./rbac/rolebinding.yaml
      kubectl -n $NAMESPACE apply -f ./rbac
      
      • 建议在kube-system命名空间中装一次
      • 因为存在一个权限问题,所以,需要修改rbac/clusterrole.yaml文件中添加如下内容,隶属于roles模块
        - apiGroups: [""]
        resources: ["secrets"]
        verbs: ["get", "create", "delete"]
        
      • 这里需要将ceph的那几个配置文件拷贝到对应的rbd-provisioner容器中,如果不拷贝,可能会出现找不到keyring或者ceph.conf的情况
    • 部署StorageClass
      cd external-storage/ceph/rbd/examples/
      
      
      • 部署secrets
        查看secrets.yaml文件,按照文件中的提示获取auth base64码,并配置
        
      • 部署StorageClass,修改class.yaml文件,以下为样例
      ```
      kind: StorageClass
      apiVersion:storage.k8s.io/v1
      metadata:
         name: rbd
      provisioner: ceph.com/rbd
      parameters:
          monitors: 10.80.0.144:6789(修改这里)
          pool: k8s(修改这里)
          adminId: admin
          adminSecretNamespace: kube-system
          adminSecretName: ceph-admin-secret
          userId: kube
          userSecretNamespace: kube-system(这里视情况修改,看你的secret建在哪个namespace了)
          userSecretName: ceph-secret
          imageFormat: "2"
          imageFeatures: layering
      ```
      
      • 部署PVC
        kubectl apply -f claim.yaml
        
      • 部署Pod
      ```
       kubectl apply -f ${目录下的pod的yaml文件}
      ```
      
      • 如果PVC Bound成功,pod也成功mount到volume则此次实验成功
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值