1. 部署前准备

== 此步非常重要,可以节约很多时间少踩很多坑 ==

1.1 环境信息

1.1.1 系统环境版本

名称版本
操作系统centos7.4 amd64 内核 3.10.0
kubenetesv1.23.10
docker20.10.8 及 19.3.9
kubespherev3.3.2

1.1.2 rook-ceph版本

名称版本
rookv1.9.12
cephv15.2.17

1.2 版本对照确认

以下4类服务或系统版本均互相有要求,不要搞错安装错误版本,如若错误安装, 问题将会非常难以定位

  1. os版本
  2. k8s版本
  3. ceph版本
  4. rook版本
  5. 挂载盘类型

1.2.1 os与ceph版本

在这里插入图片描述
链接地址: ceph版本要求

我是cenos7.4的系统,错误安装了ceph17.2后,一切看上去均正常,但是就是无法挂载pv到容器上,经过查了无数资料, 确定centos7 系统安装ceph 15.2 是比较稳妥的做法

1.2.2 rook与ceph版本

在这里插入图片描述
链接地址: rookv1.12-upgrades
rook最新版本1.12最低支持ceph16.2.7,因此centos7 不能选择最新版本rook


在这里插入图片描述
链接地址: rookv1.9-upgrades
切换到v1.9, 看到rook支持ceph v15.2版本,因此我选择rook v1.9版本进行部署安装

1.2.3 ceph与kubenetes版本

ceph版本k8s版本要求
rook v1.12v1.22及以上
rook v1.9v1.17及以上

1.2.4 ceph与挂载硬盘

在这里插入图片描述

  1. 原始设备(没有分区或格式化的文件系统)
  2. 原始分区(没有格式化的文件系统)
  3. LVM逻辑卷(没有格式化的文件系统)
  4. 块模式存储类中可用的持久卷

2. 部署步骤

2.1 镜像代理服务

由于容器镜像均无法正常访问,因此推荐安装镜像代理服务,自动使用镜像代理服务拉取新创建的 Pod 中的外网容器镜像(仅限公有镜像)。
官方网站: ketches.cn/registry-proxy/

  1. 安装 cert-manager

    如果集群中已经安装了 cert-manager,可以跳过这一步。这里提供快速安装的方式:

    kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.13.2/cert-manager.yaml
    
    # 代理地址
    kubectl apply -f https://ghproxy.com/https://github.com/cert-manager/cert-manager/releases/download/v1.13.2/cert-manager.yaml
    

    官方文档: Install cert-manager

  2. 安装 registry-proxy

    export LATEST=$(basename $(curl -s -w %{redirect_url} https://github.com/ketches/registry-proxy/releases/latest))
    
    kubectl apply -f https://raw.githubusercontent.com/ketches/registry-proxy/$LATEST/deploy/manifests.yaml
    
    # 代理地址
    kubectl apply -f https://ghproxy.com/https://raw.githubusercontent.com/ketches/registry-proxy/$LATEST/deploy/manifests.yaml
    

2.2 安装rook-ceph

2.2.1 通过helm安装

先安装rook-operator , 运行正常后安装rook-cluster

2.2.1.1 安装rook-operator

以下文件是修改过后的operator.yaml配置文件,用于rook-operator的自定义配置, 我个人对此文件只对cpu限制部门进行修改,缩小了默认请求配置,其他项目均为修改

模板地址: operator.yaml

然后执行如下命令进行安装

helm repo add rook-release https://charts.rook.io/release
helm install --create-namespace --namespace rook-ceph rook-ceph rook-release/rook-ceph -f operator.yaml

在这里插入图片描述
镜像代理会修改镜像地址自动从代理仓库拉取镜像

2.2.1.2 安装rook-cluster

以下文件需要根据自己的需求进行较多的自定义修改
在安装之前,检查这些值。以确认是否需要更新默认设置。
1. 如果操作符安装在其他命名空间,则必须在operatorNamespace变量中设置该命名空间。
2. 在cephClusterSpec中设置所需的设置。默认值只是一个示例,不太可能应用于您的集群。
3. 监控部分应该从cepclusterspec中删除,因为它是在helm设置中单独指定的。
4. cepphblockpools、cepphfilesystems和CephObjectStores的默认值将分别创建一个和它们相应的存储类。
5. 所有Ceph组件现在都有pod资源的默认值。生产集群中的资源可能需要根据负载进行调整。如果Ceph不应该被限制(例如测试集群),资源也可以被禁用。

模板地址: cluster.yaml

自定义修改部分:

  1. 修改ceph镜像版本
cephClusterSpec:
  cephVersion:
    image: quay.io/ceph/ceph:v15.2.17
  1. 关闭更新检查
cephClusterSpec:
  skipUpgradeChecks: true
  1. dashboard关闭ssl
  dashboard:
    enabled: true
    port: 8443
    ssl: false
  1. 选择自定义挂载卷

修改useAllNodes和useAllDevices为false。
其中useAllNodes选项指示 Ceph 是否应该使用集群中的所有节点作为存储节点。
1. 当设置为 true 时,Ceph 将使用所有节点作为存储节点。这意味着每个节点都可以被用作存储设备的托管节点,并参与存储池和数据的管理。
2. 当设置为 false 时,只有在 storage 部分中显式定义的节点才会被用作存储节点;


useAllDevices选项指示 Ceph 是否应该使用节点上的所有可用设备作为存储设备。
1. 当设置为 true 时,Ceph 将使用节点上的所有可用设备作为存储设备。这包括硬盘、固态驱动器 (SSD) 等。
2. 当设置为 false 时,只有在 storage 部分中显式定义的设备才会被用作存储设备


此处选择node180,node181,node182三个节点的 /dev/sdc盘作为存储设备

tips: 使用kubectl get node --show-labels命令后,如kubernetes.io/hostname=node180后面的名称node180即为此处所需要的name

  storage: # cluster level storage configuration and selection
    useAllNodes: false
    useAllDevices: false
    nodes:
      - name: "node180"
        devices: # specific devices to use for storage can be specified for each node
          - name: "sdc"
      - name: "node181"
        devices:
          - name: "sdc"
      - name: "node182"
        devices:
          - name: "sdc"

然后执行如下命令进行安装

helm repo add rook-release https://charts.rook.io/release
helm install --create-namespace --namespace rook-ceph rook-ceph-cluster \
   --set operatorNamespace=rook-ceph rook-release/rook-ceph-cluster -f cluster.yaml

2.3 安装ceph-tools

ceph-tools的作用是可以执行ceph命令行查询或管理ceph集群状态

2.3.1 通过k8s容器安装

配置模板链接: toolbox.yaml

  1. 启动toolbox
kubectl create -f deploy/examples/toolbox.yaml
  1. 等待toolbox下载并完成启动
kubectl -n rook-ceph rollout status deploy/rook-ceph-tools
  1. toolbox启动可以执行如下命令进入控制台
kubectl -n rook-ceph exec -it deploy/rook-ceph-tools -- bash
  1. 使用用例
  • ceph status
  • ceph osd status
  • ceph df
  • rados df

2.3.2 通过kubectl插件安装

需要先安装krew

2.3.2.1 在线安装rook-ceph插件

由于网络环境的原因, 很难通过在线的方式进行插件的安装,因此推荐通过离线的方式安装

  kubectl krew install rook-ceph
2.3.2.2 离线安装rook-ceph插件

准备文件:

  1. rook-ceph.yaml
    使用如下yaml配置文件即可
apiVersion: krew.googlecontainertools.github.com/v1alpha2
kind: Plugin
metadata:
  name: rook-ceph
spec:
  version: v0.6.0
  homepage: https://github.com/rook/kubectl-rook-ceph
  shortDescription: Rook plugin for Ceph management
  description: |
    The kubectl-rook-ceph is a Krew plugin designed for Rook-Ceph. It simplifies the management, debugging, and
    troubleshooting processes, while also offering valuable insights into the configuration of the Rook-Ceph clusters.
  platforms:
  - selector:
      matchLabels:
        os: linux
        arch: amd64
    uri: https://github.com/rook/kubectl-rook-ceph/releases/download/v0.6.0/kubectl-rook-ceph_v0.6.0_linux_amd64.tar.gz
    sha256: c729e68d00b2d18493866c428a5201a71163e668a6b3a8b26fdd3e082b2140c1
    bin: kubectl-rook-ceph
  1. kubectl-rook-ceph_v0.6.0_linux_amd64.tar.gz
    提前下载kubectl-rook-ceph_v0.6.0_linux_amd64.tar.gz包上传到服务器

  2. 进行插件安装

kubectl krew install --manifest rook-ceph.yaml --archive kubectl-rook-ceph_v0.6.0_linux_amd64.tar.gz
  1. 示意命令
 kubectl rook-ceph ceph status

output:

  cluster:
  id:     a1ac6554-4cc8-4c3b-a8a3-f17f5ec6f529
  health: HEALTH_OK

  services:
  mon: 3 daemons, quorum a,b,c (age 11m)
  mgr: a(active, since 10m)
  mds: 1/1 daemons up, 1 hot standby
  osd: 3 osds: 3 up (since 10m), 3 in (since 8d)

  data:
  volumes: 1/1 healthy
  pools:   6 pools, 137 pgs
  objects: 34 objects, 4.1 KiB
  usage:   58 MiB used, 59 GiB / 59 GiB avail
  pgs:     137 active+clean

  io:
  client:   1.2 KiB/s rd, 2 op/s rd, 0 op/s wr

2.4 验证安装

2.4.1 验证rook-ceph安装完成

通过rook-tools 如 kubectl rook-ceph ceph status 或 ceph status查看安装状态, 如果返回health: HEALTH_OK则表示安装成功

2.4.2 新建PVC及挂载验证

在这里插入图片描述
存储类选择ceph-filesystem或ceph-block 均可正常创建pvc及绑定自动分配的pv

在这里插入图片描述
启动容器可正常挂载pvc卷

至此基本完成rook-ceph部署

3. 踩坑记录

3.1 错误版本选择

第一次没有认证看版本要求,均安装最新版本,截止到挂载容器阶段没有任何问题。包括新建PVC及绑定PV也很正常,直到容器挂载存储卷无论如何都挂不上
很多错误响应我均没有进行记录,但是优先检查兼容情况是没有问题的。
推荐几个看了的网站

  1. rook-trobleshooting
    这里有特别多的错误现象和解决定位步骤
  2. github-rook
    github也有很多issue
  3. ceph-csi
    这个是连接ceph和容器的桥梁,也有很多问题会出现在这个组件

tobe continued…

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐