• 正常运行的多节点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
#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最新版)相关推荐

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

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

  2. kubernetes存储:local,openEBS,rook ceph

    文章目录 Local 存储(PV) 概念 hostPath Local PV storageClassName指定延迟绑定动作 pv的删除流程 OpenEBS存储 控制平面 OpenEBS PV Pr ...

  3. kubernetes部署 rook ceph

    环境: centos7.6, kubernetes 1.15.3, rook 1.3.4 部署 rook ceph 1.部署 rook ceph 官网下载 rook.解压后, cd rook-1.3. ...

  4. 使用Rook+Ceph在Kubernetes上作持久存储

    使用Rook+Ceph在Kubernetes上作持久存储 作者:Earl C. Ruby III 我想在新的Kubernetes集群上安装Prometheus和Grafana,但为了使这些软件包能够工 ...

  5. k8s + rook + Ceph 记录

    k8s 部署 ceph git clone git@github.com:rook/rook.git --single-branch --branch v1.6.11 failed to reconc ...

  6. 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 ...

  7. Rook Ceph Snapshot的清理

    目录 问题 背景知识 Ceph rbd快照 VolumeSnapshotContent和rbd快照 删除一个rbd snapshot 删除多个rbd snapshot 参考 问题 平时用k8s进行开发 ...

  8. K8S通过rook部署rook ceph集群、配置dashboard访问并创建pvc

    Rook概述 Ceph简介 Ceph是一种高度可扩展的分布式存储解决方案,提供对象.文件和块存储.在每个存储节点上,将找到Ceph存储对象的文件系统和Ceph OSD(对象存储守护程序)进程.在Cep ...

  9. Rook Ceph浅谈

    部署rook-ceph git clone --single-branch --branch v1.9.2 https://github.com/rook/rook.git Network 1.osd ...

  10. kubernetes 部署 rook (ceph集群)

    说明 存储初始化 部署 rook 存储初始化 常见存储磁盘结构 全部 ssd 磁盘组成 (推荐) ceph 数据存放独立 ssd 硬盘, journal 数据存放至独立 ssd 硬盘 ( 不知道 ro ...

最新文章

  1. linux io体系结构,Linux IO体系结构
  2. Strom的trident单词计数代码
  3. Java修炼之路——基础篇——Java关键字
  4. mysql5.7四字节中文_mysql 字节问题,中文和数字
  5. React入门教程第三课--gulp编译优化
  6. Java关键字new和newInstance的区别
  7. 华为Mate 40 Pro全新概念图曝光:这设计有点夸张了
  8. 探究position定位中absolute和relative的异同
  9. java字符串替换 数组,Java工具类-拆分字符串组装数组,替换字符
  10. 计算机软件专业毕业论文题目,★计算机软件专业论文题目_计算机软件专业毕业论文题目大全_计算机软件专业论文选题参考...
  11. 非线性光纤光学_《Nature》子刊:解决大纵横比光纤中传质不匀的难题!
  12. Html实现Excel模板下载
  13. 联想昭阳E46A不能上网
  14. 《内向性格的竞争力:发挥你的本来优势》读书笔记
  15. eclipse多线程调试
  16. poj3294Life Forms
  17. 你还把游戏本地化当作是游戏翻译
  18. ps的切片用来转换html,Photoshop切片导出HTML+CSS
  19. Android开发——错误:远程主机强迫关闭一个现有连接——解决办法
  20. 基于JAVA景区售票系统设计与实现 开题报告

热门文章

  1. 魅族手机文件删除-通知栏警告流程分析(下)
  2. 终于有人把“缠论”说的如此透彻
  3. autoit mysql update_【Autoit】Autoit 使用
  4. 音圈的重要性体现在那些方面
  5. 基于低成本CNC和热转印技术的双面PCB制备流程详解
  6. 视频托管必须了解的视频参数
  7. 工具+IDEA小插件
  8. 利用pd时间序列计算日均、月均、年均的快捷方式
  9. SATA、MSATA、M.2 SATA、M.2 NVME-实物接口
  10. 如何设计一个美观的仪表板 – 案例篇