十、云原生存储(一)
  BMwtnym6fXTR 2023年11月02日 52 0

十、云原生存储之ceph集群部署(一)

1. ceph集群部署

1.1 准备环境

k8s集群要求:

  • 最低版本支持Kubernetes v1.21或更高版本
  • 至少五个节点,每个节点的内存不低于5G,CPU不低于2核。
  • 至少有三个存储节点,并且每个节点至少有一个裸盘。
  • K8s集群所有的节点时间必须一致


分区或设备不能使用文件系统进行格式化(存储节点都新添加一块裸盘)

十、云原生存储之ceph集群部署(一)_Kubernetes

Tips:Rook 的版本大于 1.3,不要使用目录创建集群,要使用单独的裸盘进行创建,所以不能进行格式化。


1.2 部署Rook

克隆Rook相关代码(本次使用Rook 1.6版本)

git clone --single-branch --branch v1.6.11 https://gitee.com/dukuan/rook.git


修改operator.yaml

[root@k8s-master01 ceph]# pwd
/root/rook/cluster/examples/kubernetes/ceph
[root@k8s-master01 ceph]# vim operator.yaml
#v1.6.11版本可用镜像地址
ROOK_CSI_CEPH_IMAGE: "registry.cn-shanghai.aliyuncs.com/yinjay/github:cephcsi-v3.3.1"
ROOK_CSI_REGISTRAR_IMAGE: "registry.cn-shanghai.aliyuncs.com/yinjay/github:csi-node-driver-registrar-v2.2.0"
ROOK_CSI_RESIZER_IMAGE: "registry.cn-shanghai.aliyuncs.com/yinjay/github:csi-resizer-v1.2.0"
ROOK_CSI_PROVISIONER_IMAGE: "registry.cn-shanghai.aliyuncs.com/yinjay/github:csi-provisioner-v2.2.2"
ROOK_CSI_SNAPSHOTTER_IMAGE: "registry.cn-shanghai.aliyuncs.com/yinjay/github:csi-snapshotter-v4.1.1"
ROOK_CSI_ATTACHER_IMAGE: "registry.cn-shanghai.aliyuncs.com/yinjay/github:csi-attacher-v3.2.1"

#Rook镜像,应该在370行左右
image: registry.cn-shanghai.aliyuncs.com/yinjay/github:rook-ceph-v1.6.11

十、云原生存储之ceph集群部署(一)_Kubernetes_02

十、云原生存储之ceph集群部署(一)_Kubernetes_03


开启自动添加新节点或自动发现和添加新的Ceph存储服务。

十、云原生存储之ceph集群部署(一)_Kubernetes_04


部署Rook,等待 Operator 容器和 Discover 容器启动好了,Running状态了才能进行创建ceph集群。

kubectl create -f crds.yaml -f common.yaml -f operator.yaml


1.3 创建ceph集群

cluster.yaml配置修改

#修改ceph镜像
image: registry.cn-shanghai.aliyuncs.com/yinjay/github:ceph-v15.2.13

#跳过升级检查以及何时要升级群集
skipUpgradeChecks: true

#关闭Dashboard SSL
ssl: false

#关闭选择所有节点和设备
storage:
  useAllNodes: false
  useAllDevices: false

#修改useAllNodes和useAllDevices为false,其中useAllNodes选项指示Ceph 是否应该使用集群中的所有节点作为存储节点。当设置为 true 时,Ceph 将使用所有节点作为存储节点。这意味着每个节点都可以被用作存储设备的托管节点,并参与存储池和数据的管理。当设置为 false 时,只有在 storage 部分中显式定义的节点才会被用作存储节点;

#useAllDevices选项指示 Ceph 是否应该使用节点上的所有可用设备作为存储设备。当设置为 true 时,Ceph 将使用节点上的所有可用设备作为存储设备。这包括硬盘、固态驱动器 (SSD) 等。当设置为 false 时,只有在 storage 部分中显式定义的设备才会被用作存储设备。


#指定节点作为存储资源(对齐config)

    nodes:
    - name: "k8s-master01"
      devices:
      - name: "nvme0n2"
    - name: "k8s-master02"
      devices:
      - name: "nvme0n2"
    - name: "k8s-master03"
      devices:
      - name: "nvme0n2"
#devices下面的name指的是新加的空白磁盘的名字,nodes下面的name指的是label标签的http://kubernetes.io/hostname的value值。

十、云原生存储之ceph集群部署(一)_Kubernetes_05

十、云原生存储之ceph集群部署(一)_Kubernetes_06


创建集群,开始漫长的等待!最好将镜像仓库同步到本地Harbor镜像仓库,会更快!或者同步到一台节点后导出所有相关镜像到其他节点进行导入。

kubectl create -f cluster.yaml


直到rook-ceph命名空间下的容器都Running、Completed,主要rook-ceph-osd要能够起来。

十、云原生存储之ceph集群部署(一)_Kubernetes_07


查看cephcluster集群状态,观察到正常,Ready!

十、云原生存储之ceph集群部署(一)_Kubernetes_08


1.4 安装ceph客户端工具
[root@k8s-master01 ceph]# pwd
/root/rook/cluster/examples/kubernetes/ceph

[root@k8s-master01 ceph]# kubectl create -f toolbox.yaml -n rook-ceph
deployment.apps/rook-ceph-tools created


待容器 Running 后,即可执行相关命令。

十、云原生存储之ceph集群部署(一)_Kubernetes_09


查看ceph状态,3个OSD都up,以及存储池信息。

十、云原生存储之ceph集群部署(一)_Kubernetes_10


查看OSD状态,ceph磁盘使用率。

十、云原生存储之ceph集群部署(一)_Kubernetes_11

十、云原生存储之ceph集群部署(一)_Kubernetes_12


1.5 安装ceph snapshot控制器

k8s 1.19 版本以上需要单独安装 snapshot 控制器,才能完成 pvc 的快照功能。

#拉取项目文件
git pull https://gitee.com/dukuan/k8s-ha-install.git

#进入到项目目录中,切换分支(k8s版本自己替换)
git checkout manual-installation-v1.23.x


创建 snapshot controller

kubectl create -f snapshotter/ -n kube-system


查看该Pod的状态,Running即可。

十、云原生存储之ceph集群部署(一)_Kubernetes_13


1.6 暴露Dashboard服务

ceph的Dashboard默认是已经安装完成的,只是只能内部访问。现在如果我们想要从外部访问必须要修改服务类型为Nodeport。

十、云原生存储之ceph集群部署(一)_Kubernetes_14


新版本修改服务类型为Nodeport的文件已存在,此时我们只需要直接创建即可,查看service就能看到暴露的端口啦。

十、云原生存储之ceph集群部署(一)_Kubernetes_15


然后通过任意 k8s 节点的 IP+该端口即可访问该Dashboard(这里我访问的是VIP)

十、云原生存储之ceph集群部署(一)_Kubernetes_16


登录,账号为 admin,查看密码。

[root@k8s-master01 ceph]# kubectl -n rook-ceph get secret rook-ceph-dashboard-password -o jsonpath="{['data']['password']}" | base64 --decode && echo
w0f[C7JKL;CJ.Ao/G=Nq

十、云原生存储之ceph集群部署(一)_Kubernetes_17


1.7 创建StorageClass和Ceph的存储池

首先进入Ceph的代码目录,找到RBD目录的StorageClass配置,然后根据需求修改对应参数。

[root@k8s-master01 ceph]# pwd
/root/rook/cluster/examples/kubernetes/ceph
[root@k8s-master01 ceph]# vim csi/rbd/storageclass.yaml


replicated的size生产环境最少为 3,且要小于等于 osd 的数量。

[root@k8s-master01 ceph]# cat csi/rbd/storageclass.yaml
apiVersion: ceph.rook.io/v1
kind: CephBlockPool
metadata:
  name: replicapool     #定义了一个名为replicapool的块池
  namespace: rook-ceph  #属于rook-ceph命名空间
spec:
  failureDomain: host   #使用主机作为故障域,也就是副本是按主机分布,非按OSD进行分布。
  replicated:
    size: 3             #3副本的复制块池
    requireSafeReplicaSize: true
---
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: rook-ceph-block
provisioner: rook-ceph.rbd.csi.ceph.com  #指定用于创建和管理卷的 CSI(Container Storage Interface)插件的提供者,这里使用Rook-Ceph RBD CSI插件来创建和管理与该StorageClass关联的持久卷。
parameters: #指定了一些特定于Rook-Ceph的参数
  clusterID: rook-ceph # namespace:cluster
  pool: replicapool   #指定要使用的Ceph块池的名称。
  imageFormat: "2"    #指定创建的RBD镜像的格式,设置为2表示使用RBD镜像格式版本2。
  imageFeatures: layering  #指定RBD镜像的特性。在示例中,设置为layering表示启用镜像分层特性。
  csi.storage.k8s.io/provisioner-secret-name: rook-csi-rbd-provisioner
  csi.storage.k8s.io/provisioner-secret-namespace: rook-ceph # namespace:cluster
  csi.storage.k8s.io/controller-expand-secret-name: rook-csi-rbd-provisioner
  csi.storage.k8s.io/controller-expand-secret-namespace: rook-ceph # namespace:cluster
  csi.storage.k8s.io/node-stage-secret-name: rook-csi-rbd-node
  csi.storage.k8s.io/node-stage-secret-namespace: rook-ceph # namespace:cluster
  csi.storage.k8s.io/fstype: ext4  #定要在挂载卷时使用的文件系统类型。
allowVolumeExpansion: true  #指定是否允许卷进行扩展。在示例中,设置为true表示允许扩展卷的大小。
reclaimPolicy: Delete       #指定在卷被释放后如何处理底层存储资源。在示例中,设置为Delete表示删除底层存储资源。

Tips:根据上述文件内容进行修改!


开始创建StorageClass和Ceph的存储池

kubectl create -f csi/rbd/storageclass.yaml

十、云原生存储之ceph集群部署(一)_Kubernetes_18

Tips:推荐使用kubectl get sc,命令短!


查看存储池,也有了!

十、云原生存储之ceph集群部署(一)_Kubernetes_19

Tips:StorageClass没有Namespace隔离性!

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
  O704k6GYsxMM   2023年11月13日   19   0   0 rkeDockerkubernetes
BMwtnym6fXTR