Rook-ceph(1.8最新版)
正常运行的多节点k8s集群,两个子节点及以上
要使用单独的裸盘进行创建,也就是创建一个新的磁盘,挂载到宿主机,不进行格式化,直接使用即可。检查步骤:
FSTYPE为空的磁盘为可用磁盘,该磁盘需要清除数据(不能格式化)。
做这个实验需要高配置,每个子节点配置不能低于2核4G,主节点不低于4核8G
简单介绍一rook是啥逼
Rook本身并不是一个分布式存储系统,而是利用 Kubernetes 平台的强大功能,通过 Kubernetes Operator 为每个存储提供商提供服务。它是一个存储“编排器”,可以使用不同的后端(例如 Ceph、EdgeFS 等)执行繁重的管理存储工作,从而抽象出很多复杂性。
Rook 将分布式存储系统转变为自我管理、自我扩展、自我修复的存储服务。它自动执行存储管理员的任务:部署、引导、配置、供应、扩展、升级、迁移、灾难恢复、监控和资源管理
Rook 编排了多个存储解决方案,每个解决方案都有一个专门的 Kubernetes Operator 来实现自动化管理。目前支持Ceph、Cassandra、NFS。
目前主流使用的后端是Ceph ,Ceph 提供的不仅仅是块存储;它还提供与 S3/Swift 兼容的对象存储和分布式文件系统。Ceph 可以将一个卷的数据分布在多个磁盘上,因此可以让一个卷实际使用比单个磁盘更多的磁盘空间,这很方便。当向集群添加更多磁盘时,它会自动在磁盘之间重新平衡/重新分配数据。
ceph-rook 与k8s集成方式
Rook 是一个开源的cloud-native storage编排, 提供平台和框架;为各种存储解决方案提供平台、框架和支持,以便与云原生环境本地集成。
Rook 将存储软件转变为自我管理、自我扩展和自我修复的存储服务,它通过自动化部署、引导、配置、置备、扩展、升级、迁移、灾难恢复、监控和资源管理来实现此目的。
Rook 使用底层云本机容器管理、调度和编排平台提供的工具来实现它自身的功能。
Rook 目前支持Ceph、NFS、Minio Object Store和CockroachDB。
Rook使用Kubernetes原语使Ceph存储系统能够在Kubernetes上运行
安装前准备
#确认安装lvm2
yum install lvm2 -y
#启用rbd模块
modprobe rbd
cat > /etc/rc.sysinit << EOF
#!/bin/bash
for file in /etc/sysconfig/modules/*.modules
do[ -x \$file ] && \$file
done
EOF
cat > /etc/sysconfig/modules/rbd.modules << EOF
modprobe rbd
EOF
chmod 755 /etc/sysconfig/modules/rbd.modules
lsmod |grep rbd
Ceph集群需要3个节点,当前的K8S集群为3节点集群,因此需要在master节点上创建pod
如果像我一样穷,修改master,加入工作节点(只限测试环境使用哦)
#master去污吧,加入工作节点
kubectl get no -o yaml | grep taint -A 5
kubectl taint nodes --all node-role.kubernetes.io/master-
下载Rook安装文件(官网)
git clone --single-branch --branch v1.8.3 https://github.com/rook/rook.git
cd rook/deploy/examples
#我的已经修改好的镜像https://gitee.com/jbjb123/rook-ceph.git
- 修改Rook CSI镜像地址,原本的地址可能是gcr的镜像,但是gcr的镜像无法被国内访问,所以需要同步gcr的镜像到阿里云镜像仓库,本文档已经为大家完成同步,可以直接修改如下
- vim operator.yaml
- 如下:
ROOK_CSI_CEPH_IMAGE: "registry.cn-shenzhen.aliyuncs.com/jbjb/csi:cephcsi"ROOK_CSI_REGISTRAR_IMAGE: "registry.cn-shenzhen.aliyuncs.com/jbjb/csi:csi-node-driver-registrar240"ROOK_CSI_RESIZER_IMAGE: "registry.cn-shenzhen.aliyuncs.com/jbjb/csi:csi-resizer13"ROOK_CSI_PROVISIONER_IMAGE: "registry.cn-shenzhen.aliyuncs.com/jbjb/csi:csi-provisioner31"ROOK_CSI_SNAPSHOTTER_IMAGE: "registry.cn-shenzhen.aliyuncs.com/jbjb/csi:csi-snapshotter42"ROOK_CSI_ATTACHER_IMAGE: "registry.cn-shenzhen.aliyuncs.com/jbjb/csi:csi-attacher34"
- 还需要修改operator文件,新版本rook默认关闭了自动发现容器的部署,可以找到ROOK_ENABLE_DISCOVERY_DAEMON改成true即可:
开始部署ROOK
kubectl create -f crds.yaml -f common.yaml -f operator.yamlkubectl -n rook-ceph get pod
创建ceph集群
kubectl create -f cluster.yaml
- 其中osd-0、osd-1、osd-2容器必须是存在且正常的,如果上述pod均正常运行成功,则视为集群安装成功。
安装ceph 客户端工具
kubectl create -f toolbox.yaml -n rook-ceph
常用命令:(不在演示)
ceph status
ceph osd status
ceph df
rados df
开启 配置ceph dashboard
tee dashboard-https.yaml <<-'EOF'
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: 8443selector:app: rook-ceph-mgrrook_cluster: rook-cephsessionAffinity: Nonetype: NodePort
EOF
kubectl apply -f dashboard-https.yaml
获取临时密码
kubectl -n rook-ceph get secret rook-ceph-dashboard-password -o jsonpath="{['data']['password']}"|base64 --decode && ech
接下来 创建块存储以供 Pod (RWO) 使用
tee storageClass.yaml <<-'EOF'
apiVersion: ceph.rook.io/v1
kind: CephBlockPool
metadata:name: replicapoolnamespace: rook-ceph
spec:failureDomain: hostreplicated:size: 3
---
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:name: rook-ceph-block
provisioner: rook-ceph.rbd.csi.ceph.com
parameters:clusterID: rook-cephpool: replicapoolimageFormat: "2"imageFeatures: layering# The secrets contain Ceph admin credentials.csi.storage.k8s.io/provisioner-secret-name: rook-csi-rbd-provisionercsi.storage.k8s.io/provisioner-secret-namespace: rook-cephcsi.storage.k8s.io/controller-expand-secret-name: rook-csi-rbd-provisionercsi.storage.k8s.io/controller-expand-secret-namespace: rook-cephcsi.storage.k8s.io/node-stage-secret-name: rook-csi-rbd-nodecsi.storage.k8s.io/node-stage-secret-namespace: rook-cephcsi.storage.k8s.io/fstype: ext4
#将默认设置为“ext4”。 xfs格式的ceph技术还不够成熟官网暂时不推荐
# Delete the rbd volume when a PVC is deleted
EOF
官网参考
https://rook.io/docs/rook/v1.8/ceph-block.html
- 创建sc
[root@node66 yaml]# kubectl get sc | grep rook
rook-ceph-block rook-ceph.rbd.csi.ceph.com Delete Immediate true 90m
创建一个 redis集群试试
redi.conf 配置
kubectl create configmap redis-conf --from-file=redis.conf
tee redis.yaml <<-'EOF'
apiVersion: v1
kind: Service
metadata:name: redis-service labels:app: redis
spec:ports:- port: 6379targetPort: 6379name: redis-portclusterIP: Noneselector:app: redis
---
apiVersion: apps/v1
kind: StatefulSet
metadata:name: redis
spec:selector:matchLabels:app: redisserviceName: "redis-service"replicas: 6template:metadata:labels:app: redisspec:terminationGracePeriodSeconds: 20containers:- name: redisimage: redis:6.2.6-alpineimagePullPolicy: IfNotPresent command:- "redis-server" #redis启动命令args:- "/etc/redis/redis.conf" #redis-server后面跟的参数,换行代表空格- "--protected-mode" #允许外网访问- "no"# command: redis-server /etc/redis/redis.conf --protected-mode noresources: #资源requests: #请求的资源cpu: "100m" #m代表千分之,相当于0.1 个cpu资源memory: "100Mi" #内存100m大小ports:- name: rediscontainerPort: 6379protocol: "TCP"- name: clustercontainerPort: 16379protocol: "TCP"volumeMounts:- name: "redis-conf" #挂载configmap生成的文件mountPath: "/etc/redis" #挂载到哪个路径下- name: "redis-data" #挂载持久卷的路径mountPath: "/var/lib/redis"volumes:- name: "redis-conf" #引用configMap卷configMap:name: "redis-conf"items:- key: "redis.conf" #创建configMap指定的名称path: "redis.conf" #里面的那个文件--from-file参数后面的文件volumeClaimTemplates:- metadata:name: "redis-data"spec:accessModes: [ "ReadWriteOnce" ]storageClassName: "rook-ceph-block"resources:requests:storage: 1Gi
EOF
创建集群
kubectl exec -it redis-0 -- redis-cli --cluster create --cluster-replicas 1 $(kubectl get pods -l app=redis -o jsonpath='{range.items[*]}{.status.podIP}:6379 ' | awk 'NF--')
所有已修改的配置 直接拉取即可使用
https://gitee.com/jbjb123/rook-ceph.git
不在演示了
还有一个注意的是cluster.yaml 文件
关闭所有节点和所有设备选择,手动指定节点和设备
sed -i 's|useAllNodes: true|useAllNodes: false|g' cluster.yaml
sed -i 's|useAllDevices: true|useAllDevices: false|g' cluster.yaml# useAllNodes: true
# useAllDevices: true
# 在storage标签的config:下添加配置metadataDevice:databaseSizeMB: "1024"journalSizeMB: "1024"nodes:- name: "master"devices:- name: "sdb"config:storeType: bluestore- name: "node01"devices:- name: "sdb"config:storeType: bluestore- name: "node02"devices:- name: "sdb"config:storeType: bluestore
# 注意,name不能够配置为IP,而应该是标签 kubernetes.io/hostname 的内容
kubectl get node
kubectl describe node master |grep kubernetes.io/hostname
# 添加后的配置文件参见下图
# 集群创建
kubectl apply -f cluster.yaml
kubectl -n rook-ceph get pod
个人觉得使用官网推荐的自动扫描添加的方式比较好
Rook-ceph(1.8最新版)相关推荐
- 基于Rook+Ceph的云原生存储架构剖析
[摘要]Rook 是一款云原生存储编排服务工具,Ceph 是一种广泛使用的开源分布式存储方案,通过 Rook 可以大大简化 Ceph 在 Kubernetes 集群中的部署和维护工作.本文重点介绍 ...
- kubernetes存储:local,openEBS,rook ceph
文章目录 Local 存储(PV) 概念 hostPath Local PV storageClassName指定延迟绑定动作 pv的删除流程 OpenEBS存储 控制平面 OpenEBS PV Pr ...
- kubernetes部署 rook ceph
环境: centos7.6, kubernetes 1.15.3, rook 1.3.4 部署 rook ceph 1.部署 rook ceph 官网下载 rook.解压后, cd rook-1.3. ...
- 使用Rook+Ceph在Kubernetes上作持久存储
使用Rook+Ceph在Kubernetes上作持久存储 作者:Earl C. Ruby III 我想在新的Kubernetes集群上安装Prometheus和Grafana,但为了使这些软件包能够工 ...
- k8s + rook + Ceph 记录
k8s 部署 ceph git clone git@github.com:rook/rook.git --single-branch --branch v1.6.11 failed to reconc ...
- K8S部署rook+ceph云原生存储
1. 概念 1.1. Ceph 1.2. Rook 1.3. 架构 2. 部署rook+ceph 2.1. 准备事项 2.1.1. 建议配置 2.1.2. 本文环境 2.1.3. 注意事项 2.1.4 ...
- Rook Ceph Snapshot的清理
目录 问题 背景知识 Ceph rbd快照 VolumeSnapshotContent和rbd快照 删除一个rbd snapshot 删除多个rbd snapshot 参考 问题 平时用k8s进行开发 ...
- K8S通过rook部署rook ceph集群、配置dashboard访问并创建pvc
Rook概述 Ceph简介 Ceph是一种高度可扩展的分布式存储解决方案,提供对象.文件和块存储.在每个存储节点上,将找到Ceph存储对象的文件系统和Ceph OSD(对象存储守护程序)进程.在Cep ...
- Rook Ceph浅谈
部署rook-ceph git clone --single-branch --branch v1.9.2 https://github.com/rook/rook.git Network 1.osd ...
- kubernetes 部署 rook (ceph集群)
说明 存储初始化 部署 rook 存储初始化 常见存储磁盘结构 全部 ssd 磁盘组成 (推荐) ceph 数据存放独立 ssd 硬盘, journal 数据存放至独立 ssd 硬盘 ( 不知道 ro ...
最新文章
- linux io体系结构,Linux IO体系结构
- Strom的trident单词计数代码
- Java修炼之路——基础篇——Java关键字
- mysql5.7四字节中文_mysql 字节问题,中文和数字
- React入门教程第三课--gulp编译优化
- Java关键字new和newInstance的区别
- 华为Mate 40 Pro全新概念图曝光:这设计有点夸张了
- 探究position定位中absolute和relative的异同
- java字符串替换 数组,Java工具类-拆分字符串组装数组,替换字符
- 计算机软件专业毕业论文题目,★计算机软件专业论文题目_计算机软件专业毕业论文题目大全_计算机软件专业论文选题参考...
- 非线性光纤光学_《Nature》子刊:解决大纵横比光纤中传质不匀的难题!
- Html实现Excel模板下载
- 联想昭阳E46A不能上网
- 《内向性格的竞争力:发挥你的本来优势》读书笔记
- eclipse多线程调试
- poj3294Life Forms
- 你还把游戏本地化当作是游戏翻译
- ps的切片用来转换html,Photoshop切片导出HTML+CSS
- Android开发——错误:远程主机强迫关闭一个现有连接——解决办法
- 基于JAVA景区售票系统设计与实现 开题报告