概要

项目中帮助客户部署了一套k8s集群,但是苦于客户环境不存在持久化存储,这里在k8s集群里面部署一套rook-ceph用于持久化存储。

架构说明

3台Master(使用的是虚拟机)
3台worker(使用的是物理主机)
除开系统磁盘,worker主机每台有6块磁盘可以使用。
这里我们需要使用3*6总共18块磁盘用于ceph的pool。
在这里插入图片描述

步骤1

清除主机所有用于OSD的磁盘

fdisk /dev/sdb

下载rook-ceph的yaml包

$ git clone --single-branch --branch v1.13.2 https://github.com/rook/rook.git
进入目录
cd rook/deploy/examples

注:v1.13.2可以更改为需要安装rook-ceph实际版本

关闭自动发现新增磁盘

vim operator.yaml
ROOK_ENABLE_DISCOVERY_DAEMON: “false”

扫描发现磁盘间隔

  • name: ROOK_DISCOVER_DEVICES_INTERVAL
    value: “60s”

创建安装工具pod(这一步在步骤2镜像全部下载修改路径后执行)

执行create -f yaml创建operator工具
kubectl create -f crds.yaml -f common.yaml -f operator.yaml
查看创建的pod是否成功
kubectl -n rook-ceph get pod |grep operator

步骤2

查看rook-ceph所需的镜像版本

cat rook/deploy/examples/images.txt

在这里插入图片描述拉取所需的镜像
镜像有两种方式,第一种直接拉取到本地的docker images 存放(docker pull),第二种拉取到harbor仓库统一管理。

示例:

在这里插入图片描述

本次采用通过拉取镜像存放到harbor仓库,这里不做过多叙述。

修改yaml的image路径为实际harbor的路径

vi /root/rook/deploy/examples/cluster.yaml

在这里插入图片描述

vi /root/rook/deploy/examples/operator.yaml

在这里插入图片描述
修改cluster.yaml的参数

vi /root/rook/deploy/examples/cluster.yaml

修改useAllNodes和useAllDevices的true为false
storage: # cluster level storage configuration and selection
useAllNodes: false
useAllDevices: false
#useAllNodes: true 表示将使用集群中的所有节点作为存储节点。这意味着存储将在集群中的每个节点上进行分布,以提供更好的容量和冗余。(比如有5台节点,只需要其中三台作为存储节点)
#useAllDevices: true 表示将使用节点上的所有设备作为存储设备。这包括节点上的所有硬盘、SSD 或其他可用的存储设备。通过使用所有设备,可以最大化存储资源的利用和性能。

添加OSD主机和主机磁盘

vi /root/rook/deploy/examples/cluster.yaml

在这里插入图片描述

创建ceph集群

kubectl create -f cluster.yaml

安装管理工具

kubectl create -f toolbox.yaml -n rook-ceph

进入管理工具查看ceph状态

kubectl -n rook-ceph exec -it deploy/rook-ceph-tools – bash

ceph -s

安装ceph dashboard

选择创建http或https

kubectl apply -f dashboard-external-https.yaml
kubectl apply -f dashboard-external-http.yaml

账户admin,获取密码

kubectl -n rook-ceph get secret rook-ceph-dashboard-password -o jsonpath=“{[‘data’][‘password’]}”|base64 --decode && echo

步骤3

使用块存储

创建存储类
kubectl create -f rook/deploy/examples/csi/rbd/storageclass.yaml
kubectl get CephBlockPool -n rook-ceph && kubectl get StorageClass | grep rook-ceph-block

创建pv测试
kubectl create -f rook/deploy/examples/csi/rbd/pvc.yaml
kubectl create -f rook/deploy/examples/csi/rbd/pod.yaml

注:修改storageclass.yaml里副本为实际

使用文件存储

创建存储类
kubectl apply -f rook/deploy/examples/filesystem.yaml kubectl apply -f
rook/deploy/examples/csi/cephfs/storageclass.yaml
创建pvc测试
kubectl apply -f rook/deploy/examples/csi/cephfs/pvc.yaml
kubectl apply -f rook/deploy/examples/csi/cephfs/pod.yaml
kubectl -n rook-ceph get pod -l app=rook-ceph-mds

注:修改storageclass.yaml里副本为实际

常用命令

kubectl -n rook-ceph exec -it deploy/rook-ceph-tools – bash 进入tools维护ceph
kubectl logs -n rook-ceph rook-ceph-operator-123fajd 查看operator部署的日志用于诊OSD激活情况
kubectl -n rook-ceph delete pod -l app=rook-ceph-operator 通过 重启operator新增OSD
ceph crash ls 查看错误log
ceph crash info <错误> 查看详细错误
ceph crash rm <错误> 删除告警
ceph status #获取 Ceph 存储集群中 OSD 的状态信息
ceph osd status #查看osd的树状结构
ceph osd tree #查看osd详细信息,上一步查出来的,比如0,可以看到那块磁盘<bluestore_bdev_dev_node>
ceph osd metadata #获取 Ceph 存储集群的分布式文件系统(CephFS)的容量和使用情况
ceph df 获取 Ceph 存储集群中 RADOS的容量和使用情况。PS:RADOS是 Ceph 存储集群的核心组件,它是一个高度可扩展、分布式的对象存储系统,用于存储和管理 Ceph 存储集群中的数据
rados df #查看osd磁盘信息
ceph mgr module enable rook 开启Rook模块 (新版本rook-ceph存在文件存储写入mon崩溃需要开启rook模块解决)
ceph orch set backend rook 设置 orchestrator 后端为rook

排错路径

https://rook.io/docs/rook/latest-release/Getting-Started/intro/

Logo

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

更多推荐