k8s集群中部署Rook-Ceph高可用集群
先决条件
为确保您有一个准备就绪的 Kubernetes 集群Rook,您可以按照这些说明进行操作。
为了配置 Ceph 存储集群,至少需要以下本地存储选项之一:
- 原始设备(无分区或格式化文件系统)
- 这需要lvm2在主机上安装。为了避免这种依赖性,您可以在磁盘上创建一个完整的磁盘分区(见下文)
- 原始分区(无格式化的文件系统)
- block模式下存储类可用的持久卷
部署 Rook Operator
$ git clone --single-branch --branch release-1.7 https://gitee.com/Aaron-23/rook.git
cd rook/cluster/examples/kubernetes/ceph
第一步是部署 Rook 算子。检查您是否正在使用与您的 Rook 版本相对应的示例 yaml 文件。有关更多选项,请参阅示例文档。
cd cluster/examples/kubernetes/ceph
kubectl create -f crds.yaml -f common.yaml -f operator.yaml
# verify the rook-ceph-operator is in the `Running` state before proceeding
kubectl -n rook-ceph get pod
修改cluster.yaml文件中storage.node的相关信息,至少需要三个节点
kubectl create -f cluster.yaml
使用kubectl到列表荚的rook-ceph命名空间。一旦它们全部运行,您应该能够看到以下 pod。osd pod 的数量取决于集群中的节点数量和配置的设备数量。如果cluster.yaml上面没有修改,预计每个节点会创建一个OSD。
如果rook-ceph-mon,rook-ceph-mgr或rook-ceph-osd不创建豆荚,请参阅 Ceph的常见问题的详细信息和可能的解决方案。
$ kubectl -n rook-ceph get pod
NAME READY STATUS RESTARTS AGE
csi-cephfsplugin-provisioner-d77bb49c6-n5tgs 5/5 Running 0 140s
csi-cephfsplugin-provisioner-d77bb49c6-v9rvn 5/5 Running 0 140s
csi-cephfsplugin-rthrp 3/3 Running 0 140s
csi-rbdplugin-hbsm7 3/3 Running 0 140s
csi-rbdplugin-provisioner-5b5cd64fd-nvk6c 6/6 Running 0 140s
csi-rbdplugin-provisioner-5b5cd64fd-q7bxl 6/6 Running 0 140s
rook-ceph-crashcollector-minikube-5b57b7c5d4-hfldl 1/1 Running 0 105s
rook-ceph-mgr-a-64cd7cdf54-j8b5p 1/1 Running 0 77s
rook-ceph-mon-a-694bb7987d-fp9w7 1/1 Running 0 105s
rook-ceph-mon-b-856fdd5cb9-5h2qk 1/1 Running 0 94s
rook-ceph-mon-c-57545897fc-j576h 1/1 Running 0 85s
rook-ceph-operator-85f5b946bd-s8grz 1/1 Running 0 92m
rook-ceph-osd-0-6bb747b6c5-lnvb6 1/1 Running 0 23s
rook-ceph-osd-1-7f67f9646d-44p7v 1/1 Running 0 24s
rook-ceph-osd-2-6cd4b776ff-v4d68 1/1 Running 0 25s
rook-ceph-osd-prepare-node1-vx2rz 0/2 Completed 0 60s
rook-ceph-osd-prepare-node2-ab3fd 0/2 Completed 0 60s
rook-ceph-osd-prepare-node3-w4xyz 0/2 Completed 0 60s
验证集群是否处于健康状态
使用Rook tools并运行该 ceph status命令。
kubectl create -f toolbox.yaml
kubectl -n rook-ceph rollout status deploy/rook-ceph-tools
$ kubectl -n rook-ceph exec -it deploy/rook-ceph-tools -- bash
$ ceph status
[root@rook-ceph-tools-7869bc54f6-67rvk /]# ceph status
cluster:
id: 1f70694e-df88-4a1f-b77e-d2dd0ded9977
health: HEALTH_OK
services:
mon: 3 daemons, quorum a,b,c (age 23h)
mgr: a(active, since 20h), standbys: b
mds: 1/1 daemons up, 1 hot standby
osd: 3 osds: 3 up (since 20h), 3 in (since 20h)
data:
volumes: 1/1 healthy
pools: 3 pools, 192 pgs
objects: 25 objects, 50 KiB
usage: 107 MiB used, 300 GiB / 300 GiB avail
pgs: 192 active+clean
io:
client: 1.2 KiB/s rd, 2 op/s rd, 0 op/s wr
存储
有关 Rook 公开的三种存储类型的演练,请参阅以下指南:
Block:创建由 Pod (RWO) 使用的块存储
共享文件系统:创建一个跨多个 Pod 共享的文件系统 (RWX)
Object:创建一个可以在 Kubernetes 集群内部或外部访问的对象存储
创建共享文件系统
kubectl create -f filesystem.yaml
Rook operator将创建启动服务所需的所有池和其他资源。这可能需要一分钟才能完成。
# To confirm the filesystem is configured, wait for the mds pods to start
kubectl -n rook-ceph get pod -l app=rook-ceph-mds
NAME READY STATUS RESTARTS AGE
rook-ceph-mds-myfs-7d59fdfcf4-h8kw9 1/1 Running 0 12s
rook-ceph-mds-myfs-7d59fdfcf4-kgkjp 1/1 Running 0 12s
要查看文件系统的详细状态,请启动并连接到Rook tools。将ceph status为该mds服务显示一个新行。在此示例中,有一个 MDS 的活动实例已启动,其中一个 MDS 实例处于standby-replay模式以备故障转移。
$ ceph status
...
services:
mds: myfs-1/1/1 up {[myfs:0]=mzw58b=up:active}, 1 up:standby-replay
供应存储
在 Rook 开始供应存储之前,需要根据文件系统创建一个 StorageClass。这是 Kubernetes 与 CSI 驱动程序互操作以创建持久卷所必需的。
注意:此示例使用 CSI 驱动程序,它是 K8s 1.13 和更新版本的首选驱动程序。示例可以在CSI CephFS目录中找到。有关使用 flex 驱动程序(K8s 1.12 及更早版本需要)的卷的示例,请参阅下面的Flex 驱动程序部分。
kubectl create -f storageclass.yaml
存储配额
重要提示:CephFS CSI 驱动程序使用配额来强制执行请求的 PVC 大小。只有较新的内核支持 CephFS 配额(内核版本至少为 4.17)。如果您需要强制执行配额并且内核驱动程序不支持它,您可以禁用内核驱动程序并使用 FUSE 客户端。这可以通过CSI_FORCE_CEPHFS_KERNEL_CLIENT: false 在操作员部署 ( operator.yaml) 中设置来完成。但是,重要的是要知道,当 FUSE 客户端启用时,存在一个问题,即在升级过程中应用程序 pod 将与挂载断开连接,需要重新启动。有关 更多详细信息,请参阅升级指南。
dashboard
获取svc,在平台上代理
kubectl -n rook-ceph get service rook-ceph-mgr-dashboard
连接到仪表板后,您需要登录以进行安全访问。Rook 创建一个默认用户, admin并rook-ceph-dashboard-password在 Rook Ceph 集群运行的命名空间中生成一个名为的秘密。要检索生成的密码,您可以运行以下命令:
kubectl -n rook-ceph get secret rook-ceph-dashboard-password -o jsonpath="{['data']['password']}" | base64 --decode && echo
k8s集群中部署Rook-Ceph高可用集群的更多相关文章
- kubeadm部署k8s1.9高可用集群--4部署master节点
部署master节点 kubernetes master 节点包含的组件: kube-apiserver kube-scheduler kube-controller-manager 本文档介绍部署一 ...
- 使用二进制的方式部署 K8S-1.16 高可用集群
一.项目介绍 项目致力于让有意向使用原生kubernetes集群的企业或个人,可以方便的.系统的使用二进制的方式手工搭建kubernetes高可用集群.并且让相关的人员可以更好的理解kubernete ...
- kubernetes部署redis主从高可用集群
1.redis主从高可用集群结构 2.k8s部署有状态的服务选择 对于K8S集群有状态的服务,我们可以选择deployment和statefulset statefulset service& ...
- 基于zookeeper(集群)+LevelDB的ActiveMq高可用集群安装、配置、测试
一. zookeeper安装(集群):http://www.cnblogs.com/wangfajun/p/8692117.html √ 二. ActiveMq配置: 1. ActiveMq集群部署 ...
- 使用 Sealos 在 3 分钟内快速部署一个生产级别的 Kubernetes 高可用集群
本文首发于:微信公众号「运维之美」,公众号 ID:Hi-Linux. 「运维之美」是一个有情怀.有态度,专注于 Linux 运维相关技术文章分享的公众号.公众号致力于为广大运维工作者分享各类技术文章和 ...
- 搭建 RabbitMQ Server 高可用集群
阅读目录: 准备工作 搭建 RabbitMQ Server 单机版 RabbitMQ Server 高可用集群相关概念 搭建 RabbitMQ Server 高可用集群 搭建 HAProxy 负载均衡 ...
- 搭建 RabbitMQ Server 高可用集群【转】
阅读目录: 准备工作 搭建 RabbitMQ Server 单机版 RabbitMQ Server 高可用集群相关概念 搭建 RabbitMQ Server 高可用集群 搭建 HAProxy 负载均衡 ...
- harbor高可用集群搭建
高可用harbor集群搭建 一.安装部署 1.节点角色 角色 数量 名称 备注 harbor主节点 2 harbor-1 harbor-2 双主模式 haproxy 2 HA-1 HA-2 需要通过k ...
- corosync+pacemaker and drbd实现mysql高可用集群
DRBD:Distributed Replicated Block Device 分布式复制块设备,原理图如下 DRBD 有主双架构和双主架构的,当处于主从架构时,这个设备一定只有一个节点是可以读写的 ...
- spark高可用集群搭建及运行测试
文中的所有操作都是在之前的文章spark集群的搭建基础上建立的,重复操作已经简写: 之前的配置中使用了master01.slave01.slave02.slave03: 本篇文章还要添加master0 ...
随机推荐
- 我的笔记本电脑瞬间扩大一个T的容量!
前言 不知道有多少人在家里搭建中央存储设备的,也就是NAS.这个东西在我日常生活中,存储了大量的个人资料,家人们的照片,技术的资料,还有各种高清影视剧.搭配公网的IP,可以真正做到,任何时候任何地点的 ...
- 近期业务大量突增微服务性能优化总结-3.针对 x86 云环境改进异步日志等待策略
最近,业务增长的很迅猛,对于我们后台这块也是一个不小的挑战,这次遇到的核心业务接口的性能瓶颈,并不是单独的一个问题导致的,而是几个问题揉在一起:我们解决一个之后,发上线,之后发现还有另一个的性能瓶颈问 ...
- python中的itertools模块简单使用
itertools 高效循环下创建循环器的标准库 Infinite itertools,无限迭代器 itertools.count(start=0, step=10) 默认返回一个从0开始,依次+10 ...
- Linux 限制IP远程连接
1.允许访问编辑 /etc/hosts.allow 文件,如下: sshd:all:allow #允许所有 IP 远程 ssh ...
- Laravel/Lumen 分组求和问题 where groupBy sum
在Laravel中使用分组求和,如果直接使用Laravel各数据库操作方法,应该会得出来如下代码式: DB::table('table_a') ->where('a','=',1) ->g ...
- 基于Lucene的全文检索实践
由于项目的需要,使用到了全文检索技术,这里将前段时间所做的工作进行一个实践总结,方便以后查阅.在实际的工作中,需要灵活的使用lucene里面的查询技术,以达到满足业务要求与搜索性能提升的目的. 一.全 ...
- 【Python+postman接口自动化测试】(7)Postman 的使用教程
Postman v6的使用 Postman: 简单方便的接口调试工具,便于分享和协作.具有接口调试,接口集管理,环境配置,参数化,断言,批量执行,录制接口,Mock Server, 接口文档,接口监控 ...
- mysql: 看不见的空符号 char(9) char(10) char(13)
在统计年度销售额时,总觉得哪里不对劲.于是找了找,对了对,试了trim,消除前后的空格,也没反应. 在崩溃的边缘,终于发现了错的原因. 原来我在录入的时候,粘贴多了其他空白符号,看不见,摸不着,啊~ ...
- Ubuntu20.04配置Java开发环境
Ubuntu20.04配置Java开发环境 JDK 1.8 安装 下载地址 下载后进行解压 tar -xvzf jdk-8u301-linux-x64.tar.gz 配置环境变量 gedit ~/.b ...
- Effective C++ 总结笔记(四)
五.实现 26.尽可能延后变量定义式的出现时间 尽可能延后变量定义式的出现,甚至应该尝试延后这份定义直到能够给他初值实参为止,这样不仅能避免构造和析构非必要对象,避免无意义的default行为,也可增 ...