Erlo

附013.Kubernetes永久存储Rook部署

2020-03-18 11:30:06 发布   585 浏览  
页面报错/反馈
收藏 点赞
原文:https://www.cnblogs.com/itzgr/p/12516141.html

一 Rook概述

1.1 Ceph简介

Ceph是一种高度可扩展的分布式存储解决方案,提供对象、文件和块存储。在每个存储节点上,将找到Ceph存储对象的文件系统和Ceph OSD(对象存储守护程序)进程。在Ceph集群上,还存在Ceph MON(监控)守护程序,它们确保Ceph集群保持高可用性。

更多Ceph介绍参考:https://www.cnblogs.com/itzgr/category/1382602.html

1.2 Rook简介

Rook 是一个开源的cloud-native storage编排, 提供平台和框架;为各种存储解决方案提供平台、框架和支持,以便与云原生环境本地集成。目前主要专用于Cloud-Native环境的文件、块、对象存储服务。它实现了一个自我管理的、自我扩容的、自我修复的分布式存储服务。

Rook支持自动部署、启动、配置、分配(provisioning)、扩容/缩容、升级、迁移、灾难恢复、监控,以及资源管理。为了实现所有这些功能,Rook依赖底层的容器编排平台,例如 kubernetes、CoreOS 等。。

Rook 目前支持Ceph、NFS、Minio Object Store、Edegefs、Cassandra、CockroachDB 存储的搭建。

Rook机制:

  • Rook 提供了卷插件,来扩展了 K8S 的存储系统,使用 Kubelet 代理程序 Pod 可以挂载 Rook 管理的块设备和文件系统。
  • Rook Operator 负责启动并监控整个底层存储系统,例如 Ceph Pod、Ceph OSD 等,同时它还管理 CRD、对象存储、文件系统。
  • Rook Agent 代理部署在 K8S 每个节点上以 Pod 容器运行,每个代理 Pod 都配置一个 Flexvolume 驱动,该驱动主要用来跟 K8S 的卷控制框架集成起来,每个节点上的相关的操作,例如添加存储设备、挂载、格式化、删除存储等操作,都有该代理来完成。

更多参考如下官网:

https://rook.io

https://ceph.com/

1.3 Rook架构

Rook架构如下:

clipboard

Kubernetes集成Rook架构如下:

clipboard


二 Rook部署

2.1 前期规划

提示:本实验不涉及Kubernetes部署,Kubernetes部署参考《附012.Kubeadm部署高可用Kubernetes》。

主机

IP

磁盘

备注

k8smaster01

172.24.8.71

Kubernetes master节点

k8smaster02

172.24.8.72

Kubernetes master节点

k8smaster03

172.24.8.73

Kubernetes master节点

k8snode01

172.24.8.74

sdb

Kubernetes node节点

Ceph节点

k8snode02

172.24.8.75

sdb

Kubernetes node节点

Ceph节点

k8snode03

172.24.8.76

sdb

Kubernetes node节点

Ceph节点

裸磁盘规划

k8snode01

k8snode02

k8snode03

Disk

sdb

sdb

sdb

2.2 获取YAML

[root@k8smaster01 ~]# git clone https://github.com/rook/rook.git

2.3 部署Rook Operator

本实验使用k8snode01——k8snode03三个节点,因此需要如下修改:

[root@k8smaster01 ceph]# kubectl taint node k8smaster01 node-role.kubernetes.io/master="":NoSchedule

[root@k8smaster01 ceph]# kubectl taint node k8smaster02 node-role.kubernetes.io/master="":NoSchedule

[root@k8smaster01 ceph]# kubectl taint node k8smaster03 node-role.kubernetes.io/master="":NoSchedule

[root@k8smaster01 ceph]# kubectl label nodes {k8snode01,k8snode02,k8snode03} ceph-osd=enabled

[root@k8smaster01 ceph]# kubectl label nodes {k8snode01,k8snode02,k8snode03} ceph-mon=enabled

[root@k8smaster01 ceph]# kubectl label nodes k8snode01 ceph-mgr=enabled

提示:当前版本rook中mgr只能支持一个节点运行。


[root@k8smaster01 ~]# cd /root/rook/cluster/examples/kubernetes/ceph/

[root@k8smaster01 ceph]# kubectl create -f common.yaml

[root@k8smaster01 ceph]# kubectl create -f operator.yaml

解读:如上创建了相应的基础服务(如serviceaccounts),同时rook-ceph-operator会在每个节点创建 rook-ceph-agent 和 rook-discover。

2.4 配置cluster

[root@k8smaster01 ceph]# vi cluster.yaml

  1 apiVersion: ceph.rook.io/v1
  2 kind: CephCluster
  3 metadata:
  4   name: rook-ceph
  5   namespace: rook-ceph
  6 spec:
  7   cephVersion:
  8     image: ceph/ceph:v14.2.4-20190917
  9     allowUnsupported: false
 10   dataDirHostPath: /var/lib/rook
 11   skipUpgradeChecks: false
 12   mon:
 13     count: 3
 14     allowMultiplePerNode: false
 15   dashboard:
 16     enabled: true
 17     ssl: true
 18   monitoring:
 19     enabled: false
 20     rulesNamespace: rook-ceph
 21   network:
 22     hostNetwork: false
 23   rbdMirroring:
 24     workers: 0
 25   placement:				#配置特定节点亲和力保证Node作为存储节点
 26 #    all:
 27 #      nodeAffinity:
 28 #        requiredDuringSchedulingIgnoredDuringExecution:
 29 #          nodeSelectorTerms:
 30 #          - matchExpressions:
 31 #            - key: role
 32 #              operator: In
 33 #              values:
 34 #              - storage-node
 35 #      tolerations:
 36 #      - key: storage-node
 37 #        operator: Exists
 38     mon:
 39       nodeAffinity:
 40         requiredDuringSchedulingIgnoredDuringExecution:
 41           nodeSelectorTerms:
 42           - matchExpressions:
 43             - key: ceph-mon
 44               operator: In
 45               values:
 46               - enabled
 47       tolerations:
 48       - key: ceph-mon
 49         operator: Exists
 50     ods:
 51       nodeAffinity:
 52         requiredDuringSchedulingIgnoredDuringExecution:
 53           nodeSelectorTerms:
 54           - matchExpressions:
 55             - key: ceph-osd
 56               operator: In
 57               values:
 58               - enabled
 59       tolerations:
 60       - key: ceph-osd
 61         operator: Exists
 62     mgr:
 63       nodeAffinity:
 64         requiredDuringSchedulingIgnoredDuringExecution:
 65           nodeSelectorTerms:
 66           - matchExpressions:
 67             - key: ceph-mgr
 68               operator: In
 69               values:
 70               - enabled
 71       tolerations:
 72       - key: ceph-mgr
 73         operator: Exists
 74   annotations:
 75   resources:
 76   removeOSDsIfOutAndSafeToRemove: false
 77   storage:
 78     useAllNodes: false			#关闭使用所有Node
 79     useAllDevices: false		#关闭使用所有设备
 80     deviceFilter: sdb
 81     config:
 82         metadataDevice:
 83         databaseSizeMB: "1024"
 84         journalSizeMB: "1024"
 85     nodes:
 86     - name: "k8snode01"			#指定存储节点主机
 87       config:
 88         storeType: bluestore	#指定类型为裸磁盘
 89       devices:
 90       - name: "sdb"			    #指定磁盘为sdb
 91     - name: "k8snode02"
 92       config:
 93         storeType: bluestore
 94       devices:
 95       - name: "sdb"
 96     - name: "k8snode03"
 97       config:
 98         storeType: bluestore
 99       devices:
100       - name: "sdb"
101   disruptionManagement:
102     managePodBudgets: false
103     osdMaintenanceTimeout: 30
104     manageMachineDisruptionBudgets: false
105     machineDisruptionBudgetNamespace: openshift-machine-api

提示:更多cluster的CRD配置参考:https://github.com/rook/rook/blob/master/Documentation/ceph-cluster-crd.md。

https://blog.gmem.cc/rook-based-k8s-storage-solution

2.5 获取镜像

可能由于国内环境无法Pull镜像,建议提前pull如下镜像:

docker pull rook/ceph:master

docker pull quay.azk8s.cn/cephcsi/cephcsi:v1.2.2

docker pull quay.azk8s.cn/k8scsi/csi-node-driver-registrar:v1.1.0

docker pull quay.azk8s.cn/k8scsi/csi-provisioner:v1.4.0

docker pull quay.azk8s.cn/k8scsi/csi-attacher:v1.2.0

docker pull quay.azk8s.cn/k8scsi/csi-snapshotter:v1.2.2


docker tag quay.azk8s.cn/cephcsi/cephcsi:v1.2.2 quay.io/cephcsi/cephcsi:v1.2.2

docker tag quay.azk8s.cn/k8scsi/csi-node-driver-registrar:v1.1.0 quay.io/k8scsi/csi-node-driver-registrar:v1.1.0

docker tag quay.azk8s.cn/k8scsi/csi-provisioner:v1.4.0 quay.io/k8scsi/csi-provisioner:v1.4.0

docker tag quay.azk8s.cn/k8scsi/csi-attacher:v1.2.0 quay.io/k8scsi/csi-attacher:v1.2.0

docker tag quay.azk8s.cn/k8scsi/csi-snapshotter:v1.2.2 quay.io/k8scsi/csi-snapshotter:v1.2.2



docker rmi quay.azk8s.cn/cephcsi/cephcsi:v1.2.2

docker rmi quay.azk8s.cn/k8scsi/csi-node-driver-registrar:v1.1.0

docker rmi quay.azk8s.cn/k8scsi/csi-provisioner:v1.4.0

docker rmi quay.azk8s.cn/k8scsi/csi-attacher:v1.2.0

docker rmi quay.azk8s.cn/k8scsi/csi-snapshotter:v1.2.2

2.6 部署cluster

[root@k8smaster01 ceph]# kubectl create -f cluster.yaml

[root@k8smaster01 ceph]# kubectl logs -f -n rook-ceph rook-ceph-operator-cb47c46bc-pszfh #可查看部署log

[root@k8smaster01 ceph]# kubectl get pods -n rook-ceph -o wide #需要等待一定时间,部分中间态容器可能会波动

clipboard

登录查看全部

参与评论

评论留言

还没有评论留言,赶紧来抢楼吧~~

手机查看

返回顶部

给这篇文章打个标签吧~

棒极了 糟糕透顶 好文章 PHP JAVA JS 小程序 Python SEO MySql 确认