关于kubernetes:实战篇使用rook在k8s上搭建ceph集群

32次阅读

共计 13676 个字符,预计需要花费 35 分钟才能阅读完成。

写在开篇

上一次,我发了一篇:《实践篇:让咱们一起鲁克鲁克——rook(开源存储编排)》。这次,来一篇实战,应用 rook 在 k8s 上把 ceph 集群搞起来。后续,还会陆续分享如何对接 k8s(作为 k8s 的后端存储)、以及分享一些在生产上的实践经验。

环境规划

主机名 IP 角色 数据磁盘
k8s-a-master 192.168.11.10 k8s master
k8s-a-node01 192.168.11.11 k8s worker、ceph osd 1 个 1TB 硬盘
k8s-a-node02 192.168.11.12 k8s worker、ceph osd 1 个 1TB 硬盘
k8s-a-node03 192.168.11.13 k8s worker、ceph osd 1 个 1TB 硬盘
k8s-a-node04 192.168.11.14 k8s worker、ceph osd 1 个 1TB 硬盘
k8s-a-node05 192.168.11.15 k8s worker、ceph osd 1 个 1TB 硬盘
k8s-a-node06 192.168.11.16 k8s worker、ceph osd 1 个 1TB 硬盘
k8s-a-node07 192.168.11.17 k8s worker、ceph osd 1 个 1TB 硬盘
k8s-a-node08 192.168.11.18 k8s worker、ceph osd 1 个 1TB 硬盘
k8s-a-node09 192.168.11.19 k8s worker、ceph osd 1 个 1TB 硬盘
k8s-a-node010 192.168.11.20 k8s worker、ceph osd 1 个 1TB 硬盘

筹备工作

筹备工作在所有 worker 节点上做操作。

  1. 数据盘筹备,除了 sda 是装了操作系统之外,sdb 是用于 osd 盘的,不能被格式化文件系统
[root@k8s-a-node01 ~]# lsblk 
sda               8:0    0  500G  0 disk 
├─sda1            8:1    0    2G  0 part /boot
└─sda2            8:2    0  498G  0 part 
  ├─centos-root 253:0    0  122G  0 lvm  /
...
sdb               8:16   0 1000G  0 disk  # 就是这块 
  1. 装置 lvm2 如果在裸设施或未应用的分区上创立 OSD,则 Ceph OSD 具备对 LVM(逻辑卷治理)的依赖。
yum install -y lvm2
  1. 加载 rbd 模块 Ceph 须要应用带有 RBD 模块的 Linux 内核。许多 Linux 发行版都曾经蕴含了 RBD 模块,但不是所有的发行版都有,所以要确认。
modprobe rbd
lsmod | grep rbd

Rook 的默认 RBD 配置仅指定了 layering 个性,以便与较旧的内核放弃兼容。如果您的 Kubernetes 节点运行的是 5.4 或更高版本的内核,您能够抉择启用其余个性标记。其中,fast-diff 和 object-map 个性尤其有用。

  1. 降级内核(可选)如果你将应用 Ceph 共享文件系统(CephFS)来创立卷(Volumes),则 rook 官网倡议应用至多 4.17 版本的 Linux 内核。如果你应用的内核版本低于 4.17,则申请的 Persistent Volume Claim(PVC)大小将不会被强制执行。存储配额(Storage quotas)只能在较新的内核上失去强制执行。

在 Kubernetes 中,PVC 用于向存储系统申请指定大小的存储空间。如果申请的 PVC 大小无奈失去强制执行,则无奈保障所申请的存储空间大小。因为存储配额在较旧的内核上无奈失去强制执行,因而在应用 CephFS 创立卷时,如果应用较旧的内核版本,则可能无奈正确地治理和调配存储空间。因而,rook 官网倡议应用至多 4.17 版本的内核。

在所有 k8s 节点降级内核,之前遗记思考这个事件,当前得提前降级好内核再搭建 k8s 集群,这种状况下降级内核,很难保障不会对 k8s 集群带来间接影响。留神了,生产环境可不能这么玩,得提前做好布局和筹备。

我的 centos7 内核以后版本:

[root@k8s-a-node01 ~]# uname -r
3.10.0-1160.el7.x86_64

开始降级

rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
rpm -Uvh https://www.elrepo.org/elrepo-release-7.el7.elrepo.noarch.rpm
yum --enablerepo=elrepo-kernel install kernel-ml-devel kernel-ml-headers kernel-ml -y
grub2-set-default 0
grub2-mkconfig -o /boot/grub2/grub.cfg
reboot
uname -sr

# 降级实现后查看内核,曾经满足条件
[root@k8s-a-node10 ~]# uname -sr
Linux 6.2.9-1.el7.elrepo.x86_64

# 看看 k8s 是否失常,我的没问题,十分顺利。kubectl get nodes
kubectl get pod -n kube-system

部署 ceph 集群

  1. 部署 Rook Operator
git clone --single-branch --branch v1.11.2 https://github.com/rook/rook.git
cd rook/deploy/examples/
kubectl create -f crds.yaml -f common.yaml -f operator.yaml

# 在持续操作之前,验证 rook-ceph-operator 是否失常运行
kubectl get deployment -n rook-ceph
kubectl get pod -n rook-ceph
  1. 创立 Ceph 集群

当初 Rook Operator 曾经运行起来了,接下来咱们能够创立 Ceph 集群。

Rook 容许通过自定义资源定义(CephCluster CRD)创立和自定义存储集群,创立群集的次要模式有四种不同的模式,对于模式以及对于 cluster.yaml 所有可用的字段和阐明请仔细阅读和参考:https://rook.io/docs/rook/v1.11/CRDs/Cluster/ceph-cluster-crd/

本次创立的集群就先按官网示例里的 cluster.yaml,不改变示例里的内容,它会在每个节点将创立一个 OSD

kubectl create -f cluster.yaml

创立后查看,请确保所有 Pod 处于 Running,OSD POD 处于 Completed:

[root@k8s-a-master ~]# kubectl get pod -n rook-ceph
NAME                                                     READY   STATUS      RESTARTS       AGE
csi-cephfsplugin-4cx9v                                   2/2     Running     0              45m
csi-cephfsplugin-84fd4                                   2/2     Running     0              45m
csi-cephfsplugin-dnx6l                                   2/2     Running     0              45m
csi-cephfsplugin-gb4f7                                   2/2     Running     0              45m
csi-cephfsplugin-mtd67                                   2/2     Running     0              45m
csi-cephfsplugin-nrnck                                   2/2     Running     0              45m
csi-cephfsplugin-p5kmv                                   2/2     Running     0              45m
csi-cephfsplugin-provisioner-9f7449fc9-9qf67             5/5     Running     0              45m
csi-cephfsplugin-provisioner-9f7449fc9-k2cxc             5/5     Running     0              45m
csi-cephfsplugin-vhfr7                                   2/2     Running     0              45m
csi-cephfsplugin-wrgrb                                   2/2     Running     0              45m
csi-cephfsplugin-xt6f6                                   2/2     Running     0              45m
csi-rbdplugin-5mnb8                                      2/2     Running     0              45m
csi-rbdplugin-9j69s                                      2/2     Running     0              45m
csi-rbdplugin-ffg9b                                      2/2     Running     0              45m
csi-rbdplugin-ggfxk                                      2/2     Running     0              45m
csi-rbdplugin-h5gj7                                      2/2     Running     0              45m
csi-rbdplugin-ks7db                                      2/2     Running     0              45m
csi-rbdplugin-l2kmv                                      2/2     Running     0              45m
csi-rbdplugin-l5jm2                                      2/2     Running     0              45m
csi-rbdplugin-m7nc4                                      2/2     Running     0              45m
csi-rbdplugin-provisioner-649c57b978-m5pdk               5/5     Running     0              45m
csi-rbdplugin-provisioner-649c57b978-trp8j               5/5     Running     0              45m
csi-rbdplugin-szchk                                      2/2     Running     0              45m
rook-ceph-crashcollector-k8s-a-node01-6db7865746-clr4h   1/1     Running     0              50m
rook-ceph-crashcollector-k8s-a-node02-97bb5864c-wqbx4    1/1     Running     0              37m
rook-ceph-crashcollector-k8s-a-node03-59777d587b-gkr24   1/1     Running     0              41m
rook-ceph-crashcollector-k8s-a-node04-7f77bbdcfc-qgh7x   1/1     Running     0              45m
rook-ceph-crashcollector-k8s-a-node05-7cd59b4bc8-nkfgt   1/1     Running     0              45m
rook-ceph-crashcollector-k8s-a-node06-74dc6dc879-n9z5z   1/1     Running     0              45m
rook-ceph-crashcollector-k8s-a-node07-5f4c5c6c56-27zs9   1/1     Running     0              50m
rook-ceph-crashcollector-k8s-a-node08-7fd7ff557-5qthx    1/1     Running     0              39m
rook-ceph-crashcollector-k8s-a-node09-6b7d5645f4-fdpwp   1/1     Running     0              50m
rook-ceph-crashcollector-k8s-a-node10-69f8f5cbfb-6mhtw   1/1     Running     0              33m
rook-ceph-mgr-a-86f445fdcc-vdg4b                         3/3     Running     0              50m
rook-ceph-mgr-b-7b7967fd54-wjhxw                         3/3     Running     0              50m
rook-ceph-mon-a-6dd564d54d-cq4rb                         2/2     Running     0              52m
rook-ceph-mon-b-5c4875d7b9-xbd7l                         2/2     Running     0              51m
rook-ceph-mon-c-7fb466569d-qwb6v                         2/2     Running     0              51m
rook-ceph-operator-c489cccb5-8dtnz                       1/1     Running     1 (116m ago)   14h
rook-ceph-osd-0-f7cc57ddf-vc9tg                          2/2     Running     0              50m
rook-ceph-osd-1-7d79b4d4c-rbrkn                          2/2     Running     0              50m
rook-ceph-osd-2-564d78d445-jpjqk                         2/2     Running     0              50m
rook-ceph-osd-3-7ddf87bfd6-dlvmf                         2/2     Running     0              45m
rook-ceph-osd-4-849ddc4b68-5xg8h                         2/2     Running     0              45m
rook-ceph-osd-5-5ff57d4d55-skwv6                         2/2     Running     0              45m
rook-ceph-osd-6-668fcb969c-cwb46                         2/2     Running     0              41m
rook-ceph-osd-7-7876687b4d-r4b2g                         2/2     Running     0              39m
rook-ceph-osd-8-6c7784c4c-6xtv6                          2/2     Running     0              37m
rook-ceph-osd-9-654ffc5b66-qqhnr                         2/2     Running     0              33m
rook-ceph-osd-prepare-k8s-a-node01-6lf6r                 0/1     Completed   0              33m
rook-ceph-osd-prepare-k8s-a-node02-8rcpw                 0/1     Completed   0              33m
rook-ceph-osd-prepare-k8s-a-node03-dqcl4                 0/1     Completed   0              33m
rook-ceph-osd-prepare-k8s-a-node04-8qtmq                 0/1     Completed   0              33m
rook-ceph-osd-prepare-k8s-a-node05-qm78x                 0/1     Completed   0              33m
rook-ceph-osd-prepare-k8s-a-node06-qq58n                 0/1     Completed   0              33m
rook-ceph-osd-prepare-k8s-a-node07-lp9j8                 0/1     Completed   0              33m
rook-ceph-osd-prepare-k8s-a-node08-vh4sn                 0/1     Completed   0              33m
rook-ceph-osd-prepare-k8s-a-node09-smvp8                 0/1     Completed   0              32m
rook-ceph-osd-prepare-k8s-a-node10-k6ggk                 0/1     Completed   0              32m
rook-ceph-tools-54bdbfc7b7-hqdw4                         1/1     Running     0              24m
[root@k8s-a-master ~]# 
  1. 验证 ceph 集群

要验证群集是否处于失常状态,能够连贯到 toolbox 工具箱并运行命令

kubectl create -f toolbox.yaml
kubectl exec -it rook-ceph-tools-54bdbfc7b7-hqdw4 -n rook-ceph -- bash

# 进去之后就能够执行各种命令了:ceph status
ceph osd status
ceph df
rados df

# 看看我的
[root@k8s-a-master examples]# kubectl exec -it rook-ceph-tools-54bdbfc7b7-pzkd4 -n rook-ceph -- bash
bash-4.4$ ceph -s
  cluster:
    id:     0b64957b-9aaa-43ef-9946-211ca911dc92
    health: HEALTH_OK
 
  services:
    mon: 3 daemons, quorum a,b,c (age 3m)
    mgr: a(active, since 64s), standbys: b
    osd: 10 osds: 10 up (since 116s), 10 in (since 2m)
 
  data:
    pools:   1 pools, 1 pgs
    objects: 2 objects, 449 KiB
    usage:   234 MiB used, 9.8 TiB / 9.8 TiB avail
    pgs:     1 active+clean
 
bash-4.4$ ceph osd status
ID  HOST           USED  AVAIL  WR OPS  WR DATA  RD OPS  RD DATA  STATE      
 0  k8s-a-node02  23.9M   999G      0        0       0        0   exists,up  
 1  k8s-a-node03  20.9M   999G      0        0       0        0   exists,up  
 2  k8s-a-node04  24.9M   999G      0        0       0        0   exists,up  
 3  k8s-a-node06  24.9M   999G      0        0       0        0   exists,up  
 4  k8s-a-node05  23.8M   999G      0        0       0        0   exists,up  
 5  k8s-a-node07  23.8M   999G      0        0       0        0   exists,up  
 6  k8s-a-node08  19.8M   999G      0        0       0        0   exists,up  
 7  k8s-a-node10  23.8M   999G      0        0       0        0   exists,up  
 8  k8s-a-node01  23.8M   999G      0        0       0        0   exists,up  
 9  k8s-a-node09  23.7M   999G      0        0       0        0   exists,up  

每个 OSD 都有一个状态,能够是以下几种之一:

  • up:示意该 OSD 失常运行,并且能够解决数据申请。
  • down:示意该 OSD 以后无奈运行或不可用,可能因为硬件故障或软件问题。
  • out:示意该 OSD 不参加数据存储或复原,这通常是因为管理员手动将其标记为不可用。
  • exists:示意该 OSD 配置存在,但尚未启动或退出集群。

在我这里,exists,up 示意该 OSD 配置存在,并且曾经胜利启动并参加了数据存储和复原。exists 状态示意 OSD 配置曾经存在,然而 OSD 还没有启动。只有当 OSD 运行后,状态才会变为 up。因而,exists,up 示意 OSD 的启动过程曾经实现,并且 OSD 失常运行。

裸露 Dashboard

Dashboard 能够让咱们查看 Ceph 集群的状态,包含整体的运行状况、mon 仲裁状态、mgr、osd 和其余 Ceph 守护程序的状态、查看池和 PG 状态、显示守护程序的日志等。对于 Dashboard 的更多配置,请参考:https://rook.io/docs/rook/v1.11/Storage-Configuration/Monitor…

  1. 查看 dashboard 的 svc,Rook 将启用端口 8443 以进行 https 拜访:
[root@k8s-a-master ~]# kubectl get svc -n rook-ceph
NAME                      TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)             AGE
rook-ceph-mgr             ClusterIP   10.103.90.1      <none>        9283/TCP            52m
rook-ceph-mgr-dashboard   ClusterIP   10.108.66.238    <none>        8443/TCP            52m
rook-ceph-mon-a           ClusterIP   10.104.191.13    <none>        6789/TCP,3300/TCP   54m
rook-ceph-mon-b           ClusterIP   10.108.194.172   <none>        6789/TCP,3300/TCP   53m
rook-ceph-mon-c           ClusterIP   10.98.32.80      <none>        6789/TCP,3300/TCP   53m
[root@k8s-a-master ~]# 
  • rook-ceph-mgr:是 Ceph 的治理过程(Manager),负责集群的监控、状态报告、数据分析、调度等性能,它默认监听 9283 端口,并提供了 Prometheus 格局的监控指标,能够被 Prometheus 拉取并用于集群监控。
  • rook-ceph-mgr-dashboard:是 Rook 提供的一个 Web 界面,用于不便地查看 Ceph 集群的监控信息、状态、性能指标等。
  • rook-ceph-mon:是 Ceph Monitor 过程的 Kubernetes 服务。Ceph Monitor 是 Ceph 集群的外围组件之一,负责保护 Ceph 集群的状态、拓扑构造、数据分布等信息,是 Ceph 集群的治理节点。
  1. 查看默认账号 admin 的明码
[root@k8s-a-master examples]# kubectl -n rook-ceph get secret rook-ceph-dashboard-password -o jsonpath="{['data']['password']}" | base64 --decode && echo
$}<EVv58G-*C3@/?J1@t

这个明码就是等会用来登录

  1. 应用 NodePort 类型的 Service 裸露 dashboard dashboard-external-https.yaml
apiVersion: v1
kind: Service
metadata:
  name: rook-ceph-mgr-dashboard-external-https
  namespace: rook-ceph
  labels:
    app: rook-ceph-mgr
    rook_cluster: rook-ceph
spec:
  ports:
  - name: dashboard
    port: 8443
    protocol: TCP
    targetPort: 8443
  selector:
    app: rook-ceph-mgr
    rook_cluster: rook-ceph
  sessionAffinity: None
  type: NodePort
  1. 创立后 NodePort 类的 svc 后查看
[root@k8s-a-master examples]# kubectl get svc -n rook-ceph
NAME                                     TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)             AGE
rook-ceph-mgr                            ClusterIP   10.96.58.93      <none>        9283/TCP            28m
rook-ceph-mgr-dashboard                  ClusterIP   10.103.131.77    <none>        8443/TCP            28m # 记得干掉
rook-ceph-mgr-dashboard-external-https   NodePort    10.107.247.53    <none>        8443:32564/TCP      9m38s
rook-ceph-mon-a                          ClusterIP   10.98.168.35     <none>        6789/TCP,3300/TCP   29m
rook-ceph-mon-b                          ClusterIP   10.103.127.134   <none>        6789/TCP,3300/TCP   29m
rook-ceph-mon-c                          ClusterIP   10.111.46.187    <none>        6789/TCP,3300/TCP   29m

ClusterIP 类型的 SVC 是集群部署后默认创立的,要干掉,不然影响 NodePort 类型的拜访。

  1. 在任何节点拜访 dashboard

清理集群

如果你不想要这个集群了,干掉这个集群也是很简略的,工夫无限,我就不再输入,可参考官网文档:https://rook.io/docs/rook/v1.11/Getting-Started/ceph-teardown…。后续我也会专门抽个工夫做个分享。

写在最初

对于 3 种存储类型的实战,下次持续分享:

  • 块:创立要由 Pod(RWO)应用的块存储
  • 共享文件系统:创立要在多个 Pod(RWX)之间共享的文件系统
  • 对象:创立可在 Kubernetes 集群外部或内部拜访的对象存储


PS:我会继续的分享 k8s、rook ceph 等等,感激各位盆友高度关注,如你跟着我的文章做测试,遇到问题解决不了的时候可私信我,我会尽力帮忙您解决问题。

本文转载于 WX 公众号:不背锅运维(喜爱的盆友关注咱们):https://mp.weixin.qq.com/s/gBErT26UikPBdsot9_Tjqg

正文完
 0