• k8s搭建rook-ceph


    一、介绍

    • Rook官网:https://rook.io
    • Rook是云原生计算基金会(CNCF)的孵化级项目.
    • Rook是Kubernetes的开源云本地存储协调器,为各种存储解决方案提供平台,框架和支持,以便与云原生环境本地集成。
    • 至于CEPH,官网在这:https://ceph.com/

    二、环境

    docker1.13.1

    k8s:1.13.4

    kubeadm安装

      集群成员:

        master单机

    三、安装

    3.1 环境准备

    所有节点开启ip_forward
    cat <<EOF >  /etc/sysctl.d/ceph.conf
    net.ipv4.ip_forward = 1
    net.bridge.bridge-nf-call-ip6tables = 1
    net.bridge.bridge-nf-call-iptables = 1
    EOF
    sysctl --system

    3.2部署Rook Operator

    #无另外说明,全部操作都在master操作
    
    cd $HOME
    git clone https://github.com/rook/rook.git
    
    cd rook
    cd cluster/examples/kubernetes/ceph
    kubectl apply -f operator.yaml
    #执行apply之后稍等一会。
    #operator会在集群内的每个主机创建两个pod:rook-discover,rook-ceph-agent

    3.3给节点打标签

    运行ceph-mon的节点打上:ceph-mon=enabled
      kubectl label nodes {kube-node1,kube-node2,kube-node3} ceph-mon=enabled
    运行ceph-osd的节点,也就是存储节点,打上:ceph-osd=enabled
      kubectl label nodes {kube-node1,kube-node2,kube-node3} ceph-osd=enabled
    运行ceph-mgr的节点,打上:ceph-mgr=enabled
      #mgr只能支持一个节点运行,这是ceph跑k8s里的局限
      kubectl label nodes kube-node1 ceph-mgr=enabled

    3.3配置cluster.yaml文件

    • 官方配置文件详解:https://rook.io/docs/rook/v0.8/ceph-cluster-crd.html

    • 文件中有几个地方要注意:

      • dataDirHostPath: 这个路径是会在宿主机上生成的,保存的是ceph的相关的配置文件,再重新生成集群的时候要确保这个目录为空,否则mon会无法启动
      • useAllDevices: 使用所有的设备,建议为false,否则会把宿主机所有可用的磁盘都干掉
      • useAllNodes:使用所有的node节点,建议为false,肯定不会用k8s集群内的所有node来搭建ceph的
      • databaseSizeMB和journalSizeMB:当磁盘大于100G的时候,就注释这俩项就行了
      • 参考https://blog.51cto.com/bigboss/2320016

    3.4部署cluster

    kubectl apply -f cluster.yaml

    四、配置ceph dashboard

    • 创建个nodeport类型的service以便集群外部访问
      kubectl apply -f dashboard-external-https.yaml

      执行后,会随机使用nodeport端口

    • # 查看一下nodeport在哪个端口
      kubectl -n rook-ceph get service
    • 查看登录密码
      #查看dashboard密码,用户为admin
      kubectl -n rook-ceph get secret rook-ceph-dashboard-password -o jsonpath="{['data']['password']}" | base64 --decode && echo
    • 打开浏览器输入任意一个Node的IP+nodeport端口

    五、配置ceph为storageclass

      5.1 修改storageclass.yaml

    apiVersion: ceph.rook.io/v1beta1
    kind: Pool
    metadata:
      #这个name就是创建成ceph pool之后的pool名字
      name: replicapool
      namespace: rook-ceph
    spec:
      replicated:
        size: 1
      # size 池中数据的副本数,1就是不保存任何副本
      failureDomain: osd
      #  failureDomain:数据块的故障域,
      #  值为host时,每个数据块将放置在不同的主机上
      #  值为osd时,每个数据块将放置在不同的osd上
    ---
    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
       name: ceph
       # StorageClass的名字,pvc调用时填的名字
    provisioner: ceph.rook.io/block
    parameters:
      pool: replicapool
      fstype: xfs
    # 设置回收策略默认为:Retain
    reclaimPolicy: Retain
    #添加动态扩容
    allowVolumeExpansion: true
    kubectl apply -f storageclass.yaml

    创建个nginx pod尝试挂载

    cat << EOF > nginx.yaml
    ---
    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: nginx-pvc
    spec:
      accessModes:
        - ReadWriteMany
      resources:
        requests:
          storage: 1Gi
      storageClassName: ceph
    
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: nginx
    spec:
      selector:
        app: nginx
      ports: 
      - port: 80
        name: nginx-port
        targetPort: 80
        protocol: TCP
    
    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: nginx
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: nginx
      template:
        metadata:
          name: nginx
          labels:
            app: nginx
        spec:
          containers:
          - name: nginx
            image: nginx
            ports:
            - containerPort: 80
            volumeMounts:
            - mountPath: /html
              name: http-file
          volumes:
          - name: http-file
            persistentVolumeClaim:
              claimName: nginx-pvc
    EOF
    
    kubectl apply -f nginx.yaml

    六、已经创建的pvc,如何扩容

     6.1首先storageclass开启

      allowVolumeExpansion: true

    6.2修改pvc的容量,(ps:不能比之前小)

    6.3重启pod

    如何在线文件系统扩展?,无需重启呢:

    Kubernetes v1.11 还引入了一个 Alpha 功能,叫做在线文件系统扩展。这个功能可以对一个正在被 Pod 使用的卷进行文件系统的扩展。这个功能还处于 Alpha 阶段,
    因此需要通过 Feature gate 启用 ExpandInUsePersistentVolumes。
    目前支持的有 GCE-PD、AWS-EBS、Cinder 以及 Ceph RBD。当激活这个功能后,引用被扩展的卷的 Pod 无需重启。文件系统会随着卷扩展的步骤进行扩展。
    文件系统的扩展只有在 Pod 引用被扩展的卷的时候才会发生,所以如果没有 Pod 引用这个卷,那么就不会进行文件系统扩展。
  • 相关阅读:
    图表引擎AChartEngine 一
    最优二叉树(哈夫曼树)知识点
    IO流_PrintWriter(字符打印流)与PrintStream(字节打印流)
    Properties集合_练习
    Properties集合_修改配置信息
    Properties集合_list方法与store方法
    Properties集合概述与存和取
    File类_删除一个带内容的目录_练习
    递归
    File类_深度遍历文件夹_练习
  • 原文地址:https://www.cnblogs.com/kevincaptain/p/10655721.html
Copyright © 2020-2023  润新知