• k8s部署rook ceph


    Rook部署Ceph#

    Rook版本Ceph版本K8S版本
    Rook Ceph v1.8Ceph Pacific v16.2.7 stablekubernetes v1.20.4

    1 Rook介绍#

    1. Rook是一个自管理的分布式存储编排系统,可以为Kubernetes提供便利的存储解决方案,Rook本身并不提供存储,而是在Kubernetes和存储之间
    2. 提供适配层,简化存储系统的部署和维护工作。目前,主要支持存储系统包括但不限于Ceph(主推)、Cassandra、NFS。
    3. Rook复用了k8s集群节点用于自动化部署Ceph集群,优点是部署Ceph集群方便,缺点是如果Ceph集群出现故障,很难排查错误,我个人还是倾向于
    4. 使用独立的Ceph集群为k8s提供存储服务。
    5. 官网: https://rook.io
    6. 项目地址: https://github.com/rook

    2 Rook架构图#

    官方文档: https://rook.io/docs/rook/v1.8/ceph-storage.htmlicon-default.png?t=M666https://rook.io/docs/rook/v1.8/ceph-storage.html

    3 Rook在Kubernetes中部署Ceph#

    官方文档: Ceph Docs

    (1) 先决条件

    1. 1) K8s集群,1.16版本+
    2. 2) K8s至少3个工作节点
    3. 3) 每个工作节点有一块未使用的硬盘
    4. 4) Rook仅支持部署Ceph Nautilus(14.2.22)以上版本
    5. 注:
    6. 我这里k8s集群有4个节点,分别是k8s-master1、k8s-master2、k8s-node1、k8s-node2,四个节点各挂载一块20GB的未使用的
    7. 硬盘作为osd提供存储服务。k8s-master2节点需要去污点,允许pod调度,命令如下。
    8. # kubectl taint node k8s-master2 node-role.kubernetes.io/master-

    (2) 部署Ceph集群

    1. 1) 下载包并解压
    2. [root@k8s-master1 ~]# wget https://github.com/rook/rook/archive/refs/tags/v1.8.0.zip
    3. [root@k8s-master1 ~]# unzip v1.8.0.zip
    4. [root@k8s-master1 ~]# cd rook-1.8.0/deploy/examples/
    5. 2) 部署所用到的镜像如下
    6. [root@k8s-master1 examples]# cat images.txt
    7. k8s.gcr.io/sig-storage/csi-attacher:v3.3.0
    8. k8s.gcr.io/sig-storage/csi-node-driver-registrar:v2.3.0
    9. k8s.gcr.io/sig-storage/csi-provisioner:v3.0.0
    10. k8s.gcr.io/sig-storage/csi-resizer:v1.3.0
    11. k8s.gcr.io/sig-storage/csi-snapshotter:v4.2.0
    12. quay.io/ceph/ceph:v16.2.7
    13. quay.io/cephcsi/cephcsi:v3.4.0
    14. quay.io/csiaddons/volumereplication-operator:v0.1.0
    15. rook/ceph:v1.8.0
    16. 注:
    17. 由于以上镜像的镜像源在国外,国内无法下载,前五个镜像源我修改为阿里官方同步国外的镜像源
    18. (registry.aliyuncs.com/google_containers/:),后四个镜像我FQ下
    19. 载后上传到阿里个人账号的镜像仓库下了(registry.cn-hangzhou.aliyuncs.com/rook_image/:)。
    20. # grep <镜像名> crds.yaml common.yaml operator.yaml cluster.yaml toolbox.yaml dashboard-external-https.yaml

    1. 3) 应用yaml文件
    2. [root@k8s-master1 examples]# kubectl create -f crds.yaml -f common.yaml -f operator.yaml
    3. # 开始部署集群,有些镜像比较大(大于1G),pod完全启动大概1个小时左右
    4. [root@k8s-master1 examples]# kubectl create -f cluster.yaml

    (3) 部署Rook Ceph 工具

    [root@k8s-master1 examples]# kubectl create -f toolbox.yaml

    (4) 部署Ceph Dashboard

    1. [root@k8s-master1 examples]# kubectl apply -f dashboard-external-https.yaml
    2. # 获取 dashboard admin密码
    3. [root@k8s-master1 examples]# kubectl -n rook-ceph get secret rook-ceph-dashboard-password -o \
    4. jsonpath="{['data']['password']}" | base64 -d
    5. 输出 admin 用户的密码为: *Pfl:f_6FDSLZVO)*-,7

    (5) 查看pod、svc

    1. [root@k8s-master1 examples]# kubectl get pod -o wide -n rook-ceph
    2. [root@k8s-master1 examples]# kubectl get svc -n rook-ceph

    (6) 通过ceph-tool工具pod查看ceph集群状态

    [root@k8s-master1 examples]# kubectl exec -it pod/rook-ceph-tools-6979f5784f-84jpw -n rook-ceph -- bash

    4 通过Ceph Dashboard查看Ceph集群状态#

    1. 从svc状态中可以看到dashboard的svc类型为NodePort,对外暴露的端口为30493
    2. https://:30493/
    3. 为172.16.1.81、82、83、84

    (1) 登录界面

    (2) 集群状态UI

    (3) 主机UI

    (4) pool UI

    5 测试#

    (1) RBD测试

    1. [root@k8s-master1 examples]# kubectl apply -f csi/rbd/storageclass.yaml # 创建一个名为replicapool的rbd pool
    2. [root@k8s-master1 examples]# kubectl get sc
    3. NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE
    4. rook-ceph-block rook-ceph.rbd.csi.ceph.com Delete Immediate true 12m
    5. [root@k8s-master1 examples]# kubectl apply -f mysql.yaml # 在default命名空间下
    6. [root@k8s-master1 examples]# kubectl apply -f wordpress.yaml # 在default命名空间下
    7. [root@k8s-master1 examples]# kubectl get pv,pvc -n default
    8. [root@k8s-master1 examples]# kubectl get pod,svc -n default

    (2) CephFS测试

    1. [root@k8s-master1 examples]# kubectl apply -f filesystem.yaml
    2. [root@k8s-master1 examples]# kubectl apply -f csi/cephfs/storageclass.yaml

    6 总结#

    1. 通过rook复用k8s节点部署的ceph集群虽然部署方便,但是由于rook部署ceph时全程自动化且服务全部为pod导致后期维护ceph集群比较困难,我个人
    2. 并不建议在生产环境中使用rook部署ceph集群,生产中应独立部署ceph集群比较方便维护。还有一点是,当你重启k8s节点后,该节点上osd对应的磁盘
    3. ceph集群会识别不到,这可能是一个bug吧,社区应该后期还会再改进。


    参考链接:Rook部署Ceph - 云起时。 - 博客园5.6 Rook部署Ceph 1 Rook介绍 2 Rook架构图 官方文档: https://rook.io/docs/rook/v1.8/ceph-storage.html 3 Rook在Kubehttps://www.cnblogs.com/LiuChang-blog/p/15706365.html

  • 相关阅读:
    通过usb串口发送接收数据
    自动巡查、自动换充电……浙江这两台无人机“巢穴”派大用场
    MapReduce面试题+详解
    YOLOR剪枝【附代码】
    MySQL数据库索引与事务、存储引擎、MyISAM和lnnoDB
    聊聊推荐系统的评测(下)
    你绝对想象不到的端对端通信的几种方式
    2024年csdn最新最全面的fiddler教程【1】
    Windows 有趣功能集锦
    41.说说Promise自身的静态方法
  • 原文地址:https://blog.csdn.net/a772304419/article/details/126267923