k8s部署rook-ceph记录

目录

  • 1. 部署前准备
    • 1.1 环境信息
      • 1.1.1 系统环境版本
      • 1.1.2 rook-ceph版本
    • 1.2 版本对照确认
      • 1.2.1 os与ceph版本
      • 1.2.2 rook与ceph版本
      • 1.2.3 ceph与kubenetes版本
      • 1.2.4 ceph与挂载硬盘
  • 2. 部署步骤
    • 2.1 镜像代理服务
    • 2.2 安装rook-ceph
      • 2.2.1 通过helm安装
        • 2.2.1.1 安装rook-operator
        • 2.2.1.2 安装rook-cluster
    • 2.3 安装ceph-tools
      • 2.3.1 通过k8s容器安装
      • 2.3.2 通过kubectl插件安装
        • 2.3.2.1 在线安装rook-ceph插件
        • 2.3.2.2 离线安装rook-ceph插件
    • 2.4 验证安装
      • 2.4.1 验证rook-ceph安装完成
      • 2.4.2 新建PVC及挂载验证
  • 3. 踩坑记录
    • 3.1 错误版本选择

1. 部署前准备

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

1.1 环境信息

1.1.1 系统环境版本

名称 版本
操作系统 centos7.4 amd64 内核 3.10.0
kubenetes v1.23.10
docker 20.10.8 及 19.3.9
kubesphere v3.3.2

1.1.2 rook-ceph版本

名称 版本
rook v1.9.12
ceph v15.2.17

1.2 版本对照确认

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

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

1.2.1 os与ceph版本

k8s部署rook-ceph记录_第1张图片
链接地址: ceph版本要求

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

1.2.2 rook与ceph版本

k8s部署rook-ceph记录_第2张图片
链接地址: rookv1.12-upgrades
rook最新版本1.12最低支持ceph16.2.7,因此centos7 不能选择最新版本rook


k8s部署rook-ceph记录_第3张图片
链接地址: rookv1.9-upgrades
切换到v1.9, 看到rook支持ceph v15.2版本,因此我选择rook v1.9版本进行部署安装

1.2.3 ceph与kubenetes版本

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

1.2.4 ceph与挂载硬盘

k8s部署rook-ceph记录_第4张图片

  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

k8s部署rook-ceph记录_第5张图片
镜像代理会修改镜像地址自动从代理仓库拉取镜像

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及挂载验证

k8s部署rook-ceph记录_第6张图片
存储类选择ceph-filesystem或ceph-block 均可正常创建pvc及绑定自动分配的pv

k8s部署rook-ceph记录_第7张图片
启动容器可正常挂载pvc卷

至此基本完成rook-ceph部署

3. 踩坑记录

3.1 错误版本选择

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

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

tobe continued…

你可能感兴趣的:(kubernetes,ceph,容器)