概述

前文介绍了 kubernetes 实战 使用 nfs 作为动态 storageClass 存储,本文介绍 kubernetes 集群 使用 rook ceph 作为动态 storageClass 存储。ceph 搭建对于没有基础的童鞋来说还是比较困难的,之前做虚拟化时搞过几次,基本都是专业高存储的操作。现在 出现了rook帮助我们简化了这些过程,本文通过 rook 快速搭建ceph分布式存储。

ceph 简介:
Ceph 是一个开源的分布式存储系统,包括对象存储、块设备、文件系统。它具有高可靠性、安装方便、管理简便、能够轻松管理海量数据。Ceph 存储集群具备了企业级存储的能力,它通过组织大量节点,节点之间靠相互通讯来复制数据、并动态地重分布数据,从而达到高可用分布式存储功能

rook 简介:
Rook 是专用于 Cloud-Native 环境的文件、块、对象存储服务。它实现了一个自动管理的、自动扩容的、自动修复的分布式存储服务。Rook 支持自动部署、启动、配置、分配、扩容/缩容、升级、迁移、灾难恢复、监控以及资源管理。为了实现所有这些功能,Rook 需要依赖底层的容器编排平台,例如 kubernetes、CoreOS 等。Rook 目前支持 Ceph、NFS、Minio Object Store、Edegefs、Cassandra、CockroachDB 存储的搭建,后期会支持更多存储方案。

rook github 地址

Rook与Kubernetes结合的架构图如下:

Rook的主要组件有两个,功能如下:
Rook Operator:
Rook与Kubernetes交互的组件
整个Rook集群只有一个

Rook Agent:
与Rook Operator交互,执行命令
每个Kubernetes的Node上都会启动一个
不同的存储系统,启动的Agent是不同的

环境

  • kubernetes 集群 or 高可用集群
  • rook release-1.1

部署 rook operator

rook 官方操作步骤, 可以通过helm chart 方式部署 rook operator,这里不再赘述。

获取 rook 源码, 切换为release-1.1

git clone https://github.com/rook/rook.git
git checkout  -b release-1.1 origin/release-1.1

部署 operator

cd cluster/examples/kubernetes/ceph
kubectl create -f common.yaml
kubectl create -f operator.yaml

验证 rook-ceph-operator 是否部署成功

[root@node3 ceph]# kubectl -n rook-ceph get pod
NAME                                           READY   STATUS      RESTARTS   AGE
csi-cephfsplugin-44269                         3/3     Running     3          5h34m
csi-cephfsplugin-provisioner-b66d48bc8-6f6wl   4/4     Running     4          5h34m
csi-cephfsplugin-provisioner-b66d48bc8-c89dj   4/4     Running     4          5h34m
csi-rbdplugin-9hgbm                            3/3     Running     3          5h34m
csi-rbdplugin-provisioner-95dd85d6-k74pk       5/5     Running     17         5h34m
csi-rbdplugin-provisioner-95dd85d6-sspfb       5/5     Running     19         5h34m
rook-ceph-agent-f9kpk                          1/1     Running     1          5h34m
rook-ceph-mgr-a-85dbb977cd-5hxw9               1/1     Running     0          119m
rook-ceph-mon-a-756c9d7d7f-djc4s               1/1     Running     0          120m
rook-ceph-operator-6f556bcbff-qjr7h            1/1     Running     20         5h49m
rook-ceph-osd-0-54bb64bdcb-pjghp               1/1     Running     0          118m
rook-ceph-osd-prepare-node3-4k5pp              0/1     Completed   0          119m
rook-ceph-tools-868c87d5b9-rbgqt               1/1     Running     0          68m
rook-discover-thgf4

部署 ceph cluster

cluster-test.yaml 配置如下:

apiVersion: ceph.rook.io/v1
kind: CephCluster
metadata:name: rook-cephnamespace: rook-ceph
spec:cephVersion:# For the latest ceph images, see https://hub.docker.com/r/ceph/ceph/tagsimage: ceph/ceph:v14.2.3-20190904dataDirHostPath: /var/lib/rookmon:count: 3dashboard:enabled: truestorage:useAllNodes: trueuseAllDevices: false# Important: Directories should only be used in pre-production environmentsdirectories:- path: /var/lib/rook

部署:

kubectl apply -f cluster-test.yaml

部署 Ceph Dashboard

** 开启 dashboard **

上一步操作已经部署ceph cluster,确保 cluster-test.yaml 中 dashboard 开启 , dashboard 就会自动创建。

dashboard:enabled: true

确认是否创建成功

[root@node3 ceph]# kubectl get svc -n rook-ceph
NAME                                     TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)             AGE
csi-cephfsplugin-metrics                 ClusterIP   10.43.187.98   <none>        8080/TCP,8081/TCP   5h49m
csi-rbdplugin-metrics                    ClusterIP   10.43.120.23   <none>        8080/TCP,8081/TCP   5h49m
rook-ceph-mgr                            ClusterIP   10.43.93.116   <none>        9283/TCP            133m
rook-ceph-mgr-dashboard                  ClusterIP   10.43.90.79    <none>        8443/TCP            133m
rook-ceph-mgr-dashboard-external-https   ClusterIP    10.43.230.64   <none>        8443/TCP      113m
rook-ceph-mon-a                          ClusterIP   10.43.104.11   <none>        6789/TCP,3300/TCP   4h9m

修改 service类型为NodePort:

service 默认类型为NodePort 只能在集群内部访问,将类型修改为 NodePort。
修改 dashboard-external-https.yaml

apiVersion: v1
kind: Service
metadata:name: rook-ceph-mgr-dashboard-external-httpsnamespace: rook-cephlabels:app: rook-ceph-mgrrook_cluster: rook-ceph
spec:ports:- name: dashboardport: 8443protocol: TCPtargetPort: 8443nodePort: 30007 # 固定端口访问selector:app: rook-ceph-mgrrook_cluster: rook-cephsessionAffinity: Nonetype: NodePort # 修改类型

部署

kubectl  apply -f dashboard-external-https.yaml

确认 service 类型修改成功:

[root@node3 ceph]# kubectl get svc -n rook-ceph
NAME                                     TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)             AGE
csi-cephfsplugin-metrics                 ClusterIP   10.43.187.98   <none>        8080/TCP,8081/TCP   5h49m
csi-rbdplugin-metrics                    ClusterIP   10.43.120.23   <none>        8080/TCP,8081/TCP   5h49m
rook-ceph-mgr                            ClusterIP   10.43.93.116   <none>        9283/TCP            133m
rook-ceph-mgr-dashboard                  ClusterIP   10.43.90.79    <none>        8443/TCP            133m
rook-ceph-mgr-dashboard-external-https   NodePort    10.43.230.64   <none>        8443:30007/TCP      113m
rook-ceph-mon-a                          ClusterIP   10.43.104.11   <none>        6789/TCP,3300/TCP   4h9m

测试dashboard是否可以访问:

获取密码:
用户名 admin

kubectl -n rook-ceph get secret rook-ceph-dashboard-password -o jsonpath="{['data']['password']}" | base64 --decode && echo

首页:

部署 Rook toolbox 测试

kubectl apply -f toolbox.yaml

验证是否部署成功:
注意本次演示是单节点的kubernetes 集群。

[root@node3 ceph]# kubectl -n rook-ceph get pod -l "app=rook-ceph-tools"
NAME                               READY   STATUS    RESTARTS   AGE
rook-ceph-tools-868c87d5b9-rbgqt   1/1     Running   0          95m

进入pod:
错误提示不用care

[root@node3 ceph]# kubectl -n rook-ceph exec -it $(kubectl -n rook-ceph get pod -l "app=rook-ceph-tools" -o jsonpath='{.items[0].metadata.name}') bash
bash: warning: setlocale: LC_CTYPE: cannot change locale (en_US.UTF-8): No such file or directory
bash: warning: setlocale: LC_COLLATE: cannot change locale (en_US.UTF-8): No such file or directory
bash: warning: setlocale: LC_MESSAGES: cannot change locale (en_US.UTF-8): No such file or directory
bash: warning: setlocale: LC_NUMERIC: cannot change locale (en_US.UTF-8): No such file or directory
bash: warning: setlocale: LC_TIME: cannot change locale (en_US.UTF-8): No such file or directory

测试:

[root@node3 /]# ceph statuscluster:id:     d693bbc6-5c4e-432c-b3ff-1e707cfdbb51health: HEALTH_WARNReduced data availability: 5 pgs inactiveDegraded data redundancy: 5 pgs undersizedtoo few PGs per OSD (5 < min 30)services:mon: 1 daemons, quorum a (age 2h)mgr: a(active, since 2h)osd: 1 osds: 1 up (since 2h), 1 in (since 2h)data:pools:   1 pools, 5 pgsobjects: 0 objects, 0 Busage:   14 GiB used, 21 GiB / 35 GiB availpgs:     100.000% pgs not active5 undersized+peered[root@node3 /]# ceph osd status
+----+-------+-------+-------+--------+---------+--------+---------+-----------+
| id |  host |  used | avail | wr ops | wr data | rd ops | rd data |   state   |
+----+-------+-------+-------+--------+---------+--------+---------+-----------+
| 0  | node3 | 14.3G | 20.7G |    0   |     0   |    0   |     0   | exists,up |
+----+-------+-------+-------+--------+---------+--------+---------+-----------+[[root@node3 /]# ceph df
RAW STORAGE:CLASS     SIZE       AVAIL      USED       RAW USED     %RAW USEDhdd       35 GiB     21 GiB     14 GiB       14 GiB         40.86TOTAL     35 GiB     21 GiB     14 GiB       14 GiB         40.86POOLS:POOL          ID     STORED     OBJECTS     USED     %USED     MAX AVAILtest-pool      1        0 B           0      0 B         0       6.3 GiB[root@node3 /]# rados df
POOL_NAME USED OBJECTS CLONES COPIES MISSING_ON_PRIMARY UNFOUND DEGRADED RD_OPS  RD WR_OPS  WR USED COMPR UNDER COMPR
test-pool  0 B       0      0      0                  0       0        0      0 0 B      0 0 B        0 B         0 Btotal_objects    0
total_used       14 GiB
total_avail      21 GiB
total_space      35 GiB

创建 pool :

ceph osd pool create pool1 5

查看 pool:

[root@node3 /]# ceph df
RAW STORAGE:CLASS     SIZE       AVAIL      USED       RAW USED     %RAW USEDhdd       35 GiB     21 GiB     14 GiB       14 GiB         40.86TOTAL     35 GiB     21 GiB     14 GiB       14 GiB         40.86POOLS:POOL          ID     STORED     OBJECTS     USED     %USED     MAX AVAILtest-pool      1        0 B           0      0 B         0       6.3 GiBpool1          2        0 B           0      0 B         0       6.3 GiB

dashboard 查看pool:

kubernetes 之战 基于 rook 搭建 ceph 分布式存储相关推荐

  1. Kubernetes 集群基于 Rook 搭建 Ceph 分布式存储系统

    文章目录 1.Rook & Ceph 介绍 1.1.Rook 1.2.Ceph 2.环境.软件准备 3.Kubernetes HA 集群搭建 4.部署 Rook Operator 5.配置 R ...

  2. Kubernetes 集群基于 Rook 的 Ceph 存储之块设备、文件系统、对象存储

    文章目录 1.Rook & Ceph 介绍 2.环境.软件准备 3.Block 块存储 3.1.创建 CephBlockPool.StorageClass 3.2.验证并测试 4.File S ...

  3. K8s上使用rook搭建Ceph集群

    目录 准备工作 一.安装kubectl 二:win10 安装Docker Desktop for Windows(非必须) 三.Harbor 知识补充: 1.Ceph mgr和mon 2:Ceph 中 ...

  4. Rook搭建Ceph

    一.软件版本及先决条件   软件版本:   软件版本名称 软件版本号 Pacific 16.2.7 Rook V1.9   先决条件: • K8s集群,1.16版本+ • K8s至少3个工作节点 • ...

  5. K8S集群rook部署ceph集群

    前言: 之前自己用rook部署过几次ceph集群,每次部署或多或少都会遇到一些问题.有些网上还能找到解决方法,有的只能靠自己去解决,毕竟每个人部署遇到的问题不一定都相同.因为每次部署完自己也没做记录, ...

  6. 最新版本 release版本 ceph分布式存储搭建(rook-1.8.6)

    rook+ceph ceph简介: Rook 是 Kubernetes 的开源云原生存储编排器,为各种存储解决方案提供平台.框架和支持,以与云原生环境进行原生集成. Rook 将存储软件转变为自我管理 ...

  7. 基于Rook+Ceph的云原生存储架构剖析

     [摘要]Rook 是一款云原生存储编排服务工具,Ceph 是一种广泛使用的开源分布式存储方案,通过 Rook 可以大大简化 Ceph 在 Kubernetes 集群中的部署和维护工作.本文重点介绍 ...

  8. 直播 | 基于kubeadm搭建Kubernetes HA集群

    分享时间:6月18日 20:30 分享主题:基于kubeadm搭建Kubernetes HA集群 分享人介绍: 张炯,上汽集团下属赛可出行运维工程师.10年工作经验,曾任职于Ctrip.SNDA,作为 ...

  9. Ceph分布式存储实战:从0搭建一个存储集群,并把块设备镜像映射到CentOS 7系统上的步骤

    本文配套视频和笔记: Ceph分布式存储实战(Ceph快速上手) B站视频在线观看链接:[千锋教育]Ceph分布式存储技术教程(进阶到实战) 百度网盘链接:2020全新_Ceph分布式存储技术-进阶到 ...

最新文章

  1. python怎么读取文件-python怎么读写文件操作
  2. kubesphere devops介绍、访问账密及nfs数据备份同步
  3. TMS320F28335时钟(1)
  4. Windows XP时代终结:假设你还在用它怎么办
  5. MySQL高级之查询优化(索引失效)
  6. Piggy-Bank POJ - 1384(完全背包+背包放满)
  7. 关于服务器虚化的优势,vmware虚化优势.docx
  8. Centos+Mysql+sphinx+mmseg(rhel4)
  9. 【操作系统】—操作系统的四个特征
  10. python画三维图-Python基于matplotlib实现绘制三维图形功能示例
  11. js排序算法详解-桶排序
  12. 七种qsort排序方法
  13. sqoop-1.4.7安装
  14. 算法导论 中+英 PDF分享 附书单
  15. HCIA-虚拟化与网络存储技术
  16. Ubuntu 无法复制大文件 卡死
  17. Linux CentOS 大数据集群的基础配置(3) CHD分布式环境搭建
  18. DDR2(SDRAM)初始化 28个步骤总结
  19. HTML中的meta标签
  20. 【How2RE】 UPX壳及脱壳方式

热门文章

  1. 发光二极管和数码管有什么关系?你知道吗?
  2. 计算几何——快速排斥实验和跨立实验
  3. JAVA文件读取和写入(内附简单的代码实现)
  4. 鱼眼相机成像模型以及基于OpenCV标定鱼眼镜头(C++)
  5. appium定位之各种键盘输入
  6. prism项目搭建 wpf_新WPF项目的Prism和MVVM
  7. 使用javac编译Java项目
  8. 手机CPU之各型号CPU比较
  9. 一站式采购智能化系统
  10. 洛谷 2969 音符