使用rook在kubernetes集群中部署ceph

Rook是一款用于将Ceph部署到Kubernetes集群中的工具。

目录

环境信息

部署要求

osd节点需要准备好数据盘

下载LVM2

加载rbd内核

升级内核

取消master污点

下载rook

拉取镜像 

部署rook operator

 部署ceph集群

部署ceph工具 

 部署ceph-dashboard


环境信息

  • kubernetes: v1.23.5
  • rook: v1.11.1

目前rook最新版为v1.11.1,支持kubernetes v1.21及以上版本

部署要求

osd节点需要准备好数据盘

#数据盘可以是一块硬盘sdb,也可以是硬盘的一个分区sdb2,或者是逻辑卷,但是这些都必须没有被格式过,没有指定文件系统类型。
#可以使用lsblk -f 来确认数据盘有没有被文件系统格式化过。FSTYPE字段为空即代表未被文件系统格式化过。
#如下所示,vdb可以作为ceph的数据盘。

[root@master ~]# lsblk -f
NAME   FSTYPE  LABEL    UUID                                 MOUNTPOINT
sr0    iso9660 config-2 2023-05-08-09-42-28-00               
vda                                                          
├─vda1 xfs              624b9bfb-904e-4d69-b7e0-cf598f443497 /boot
└─vda2 xfs              974b2a82-1668-42c8-a4b6-bb1d24eada2f /
vdb                            

下载LVM2

#Ceph OSD 在某些情况下(比如启用加密或指定元数据设备)依赖于 LVM(Logical Volume Manager)。如果没有安装 LVM2 软件包,则虽然 Rook 可以成功创建 Ceph OSD,但是当节点重新启动时,重新启动的节点上运行的 OSD pod 将无法启动。

yum -y install lvm2

加载rbd内核

#Ceph 存储需要包含了 RBD 模块的 Linux 内核来支持。在使用 Kubernetes 环境中运行 Ceph 存储之前,需要在 Kubernetes 节点上运行 modprobe rbd 命令来测试当前内核中是否已经加载了 RBD 内核。
#查看内核有没有加载rbd模块
#如下所示代表已加载
lsmod | grep rbd
[root@master ~]# lsmod | grep rbd
rbd                    83640  0 
libceph               306625  1 rbd

#如未加载可手动加载rbd内核模块
modprobe rbd

升级内核

如果需要使用文件存储CephFS,则需要将操作系统内核版本升级到4.17以上。
#查看内核版本
#uname -r

升级到最新稳定版:6.4.6-1.el7.elrepo.x86_64
rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
rpm -Uvh https://www.elrepo.org/elrepo-release-7.0-3.el7.elrepo.noarch.rpm
yum install --enablerepo=elrepo-kernel kernel-ml -y
grub2-mkconfig -o /boot/grub2/grub.cfg
grub2-set-default 0
reboot

取消master污点

由于ceph集群默认最小三个节点,当前kubernetes也是三节点,1个master+2个worker,所以需要使用master节点来充当ceph节点,因此需要取消master节点上的污点,否是ceph相关pod无法调度到master节点,导致部署失败。

如果worker节点足够则无需此操作。

#获取 Kubernetes 集群中所有节点的 Taint 信息,输出的格式是 YAML 格式,其中用到了 grep 和 -A 两个命令参数。grep 用于过滤包含字符串 "taint" 的行,-A 参数后面跟的数字表示显示匹配行输出后多少行的内容,因此 -A 5 表示匹配行向下再显示 5 行内容,以显示与 Taint 相关的属性信息。

kubectl get no -o yaml | grep taint -A 5


#默认在master节点上会有名为node-role.kubernetes.io/master-的污点,使用该命令可以取消所有节点上的node-role.kubernetes.io/master-污点

kubectl taint nodes --all node-role.kubernetes.io/master-

下载rook

git clone --single-branch --branch v1.11.5 https://github.com/rook/rook.git

拉取镜像 

cd rook/deploy/examples
#查看部署所需要的镜像提前拉取
cat images.txt

 rook/ceph:v1.11.5
 quay.io/ceph/ceph:v17.2.6
 quay.io/cephcsi/cephcsi:v3.8.0
 quay.io/csiaddons/k8s-sidecar:v0.5.0
 registry.k8s.io/sig-storage/csi-attacher:v4.1.0
 registry.k8s.io/sig-storage/csi-node-driver-registrar:v2.7.0
 registry.k8s.io/sig-storage/csi-provisioner:v3.4.0
 registry.k8s.io/sig-storage/csi-resizer:v1.7.0
 registry.k8s.io/sig-storage/csi-snapshotter:v6.2.1
 
docker pull rook/ceph:v1.11.5
docker pull quay.io/ceph/ceph:v17.2.6
docker pull quay.io/cephcsi/cephcsi:v3.8.0
docker pull quay.io/csiaddons/k8s-sidecar:v0.5.0         
#如果拉不下去可使用以下脚本
#该脚本从阿里云镜像仓库拉取到本地,docker image tag为原镜像,再删除从阿里云拉取的镜像。

#!/bash/bin
image_list=(
  csi-node-driver-registrar:v2.7.0
  csi-attacher:v4.1.0
  csi-snapshotter:v6.2.1
  csi-resizer:v1.7.0
  csi-provisioner:v3.4.0
)
 
aliyuncs="registry.aliyuncs.com/it00021hot"
google_gcr="registry.k8s.io/sig-storage"
for image in ${image_list[*]}
do
  docker image pull ${aliyuncs}/${image}
  docker image tag ${aliyuncs}/${image} ${google_gcr}/${image}
  docker image rm ${aliyuncs}/${image}
  echo "${aliyuncs}/${image} ${google_gcr}/${image} downloaded."
done 

部署rook operator

kubectl create -f crds.yaml -f common.yaml -f operator.yaml
 
kubectl -n rook-ceph get pod

部署ceph集群

kubectl create -f cluster.yaml

#如下图所示代表部署完成
ceph-osd-prepare 是job  所以状态是compute

部署ceph工具 

cd rook/deploy/examples/
kubectl apply -f toolbox.yaml

kubectl exec -it rook-ceph-tools-598b59df89-kqjr9 -n rook-ceph -- bash


[root@master examples]# kubectl exec -it rook-ceph-tools-598b59df89-kqjr9 -n rook-ceph -- bash
bash-4.4$ ceph -s
  cluster:
    id:     d5215f94-1830-4e95-96b7-d2ddbd6302da
    health: HEALTH_OK
 
  services:
    mon: 3 daemons, quorum a,b,c (age 4m)
    mgr: b(active, since 2m), standbys: a
    osd: 6 osds: 6 up (since 2m), 6 in (since 3m)
 
  data:
    pools:   1 pools, 1 pgs
    objects: 2 objects, 449 KiB
    usage:   122 MiB used, 180 GiB / 180 GiB avail
    pgs:     1 active+clean
 
bash-4.4$ ceph osd tree
ID  CLASS  WEIGHT   TYPE NAME        STATUS  REWEIGHT  PRI-AFF
-1         0.17578  root default                              
-7         0.06839      host master                           
 1    hdd  0.04880          osd.1        up   1.00000  1.00000
 3    hdd  0.00980          osd.3        up   1.00000  1.00000
 5    hdd  0.00980          osd.5        up   1.00000  1.00000
-5         0.05859      host node1                            
 2    hdd  0.04880          osd.2        up   1.00000  1.00000
 4    hdd  0.00980          osd.4        up   1.00000  1.00000
-3         0.04880      host node2                            
 0    hdd  0.04880          osd.0        up   1.00000  1.00000

bash-4.4$ ceph osd status
ID  HOST     USED  AVAIL  WR OPS  WR DATA  RD OPS  RD DATA  STATE      
 0  node2   21.0M  49.9G      0        0       0        0   exists,up  
 1  master  19.6M  49.9G      0        0       0        0   exists,up  
 2  node1   20.9M  49.9G      0        0       0        0   exists,up  
 3  master  19.6M  9.98G      0        0       0        0   exists,up  
 4  node1   19.7M  9.98G      0        0       0        0   exists,up  
 5  master  20.8M  9.97G      0        0       0        0   exists,up  

bash-4.4$ ceph osd pool ls
.mgr
bash-4.4$ 

部署ceph-dashboard

kubectl create -f dashboard-external-https.yaml
kubectl get svc -n rook-ceph

#删除原有的dashboard service
kubectl delete svc/rook-ceph-mgr-dashboard -n rook-ceph

访问地址:https://172.31.246.53:32326
用户名默认是admin,密码6^A%m-ZI=0k&rCg(08L-
密码可以通过以下代码获取:
kubectl -n rook-ceph get secret rook-ceph-dashboard-password -o jsonpath="{['data']['password']}"|base64 --decode && echo


[root@master examples]# kubectl create -f dashboard-external-https.yaml
service/rook-ceph-mgr-dashboard-external-https created
[root@master examples]# kubectl get svc -n rook-ceph
NAME                                     TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)             AGE
rook-ceph-mgr                            ClusterIP   10.10.226.83    <none>        9283/TCP            6m32s
rook-ceph-mgr-dashboard                  ClusterIP   10.10.205.62    <none>        8443/TCP            6m32s
rook-ceph-mgr-dashboard-external-https   NodePort    10.10.157.25    <none>        8443:32326/TCP      4s
rook-ceph-mon-a                          ClusterIP   10.10.97.117    <none>        6789/TCP,3300/TCP   7m48s
rook-ceph-mon-b                          ClusterIP   10.10.174.129   <none>        6789/TCP,3300/TCP   7m21s
rook-ceph-mon-c                          ClusterIP   10.10.186.23    <none>        6789/TCP,3300/TCP   7m9s
[root@master examples]# 

接下来,我们将使用这个ceph集群用于kubernetes集群的持久化存储,存储方式为存储类storageclass,详情请见: 使用ceph作为kubernetes集群的持久化存储(storageclass)

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
安装 Rook 需要以下步骤: 1. 安装 Rook CRDs 和 Operator 使用以下命令安装 Rook CRDs 和 Operator: ``` $ kubectl create -f https://github.com/rook/rook/raw/release-1.7/cluster/examples/kubernetes/ceph/common.yaml $ kubectl create -f https://github.com/rook/rook/raw/release-1.7/cluster/examples/kubernetes/ceph/operator.yaml ``` 检查 Operator 是否正常运行: ``` $ kubectl -n rook-ceph get pod ``` 2. 创建 Ceph 集群 创建 Rook 集群需要以下步骤: - 创建 Ceph 集群定义 - 创建 Ceph 存储定义 - 创建 Ceph 存储类 - 创建 Ceph 块存储和文件存储 在创建之前,需要先配置 Ceph 集群所需的参数,如 OSD 数量、Monitors 数量等。可以通过修改 `cluster.yaml` 文件来配置这些参数。 使用以下命令创建 Ceph 集群: ``` $ kubectl create -f https://github.com/rook/rook/raw/release-1.7/cluster/examples/kubernetes/ceph/cluster.yaml ``` 检查 Ceph 集群是否成功创建: ``` $ kubectl -n rook-ceph get pod ``` 3. 创建 Ceph 存储定义 使用以下命令创建 Ceph 存储定义: ``` $ kubectl create -f https://github.com/rook/rook/raw/release-1.7/cluster/examples/kubernetes/ceph/storageclass.yaml ``` 4. 创建 Ceph 块存储和文件存储 使用以下命令创建 Ceph 块存储和文件存储: ``` $ kubectl create -f https://github.com/rook/rook/raw/release-1.7/cluster/examples/kubernetes/ceph/csi/rbd/storageclass.yaml $ kubectl create -f https://github.com/rook/rook/raw/release-1.7/cluster/examples/kubernetes/ceph/csi/cephfs/storageclass.yaml ``` 至此,Rook 集群已经成功安装并且 Ceph 存储已经创建完毕。可以使用 `kubectl get` 命令来查看集群状态和存储状态。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值