新闻详情

新闻详情

首页 / 资讯中心 / 详情

Linux学习37-rook-ceph部署

发布时间:2026/10/1 18:56:24来源:尧图网络
Linux学习37-rook-ceph部署
官网Quickstart - Rook Ceph DocumentationRook 是 Kubernetes 的存储编排工具rook-ceph Rook Ceph就是在 K8s 集群里面用 Rook 自动部署、管理 Ceph 分布式存储Ceph 开源分布式存储把多节点磁盘整合为一个大存储池支持块存储、文件存储、对象存储Rook Ceph 原生很复杂Rook 以 Operator 方式跑在 k8s 里自动部署、监控、扩缩容、故障自愈 Ceph不用手动敲大量 ceph 命令部署ceph集群集群的状态需要为一master两worker在实验之前在k8s三个节点上各添加一块50G磁盘部署rook-ceph添加 rook-ceph chart库再将value.yml文件中的镜像拉取打标签上传至私有仓库笔者这里编辑了一个脚本来自动拉取打标签上传#!/bin/bash set -e # 定义镜像数组 images( quay.io/cephcsi/cephcsi:v3.17.1 registry.k8s.io/sig-storage/csi-node-driver-registrar:v2.17.0 registry.k8s.io/sig-storage/csi-provisioner:v6.2.0 registry.k8s.io/sig-storage/csi-snapshotter:v8.5.0 registry.k8s.io/sig-storage/csi-attacher:v4.12.0 registry.k8s.io/sig-storage/csi-resizer:v2.1.0 quay.io/csiaddons/k8s-sidecar:v0.14.0 ) # 目标仓库前缀 TARGET_PREFIXreg.westos.org/ceph for img in ${images[]}; do echo -e \n Processing $img # 拉取原始镜像 echo docker pull $img docker pull $img # 提取镜像名:tag img_name_tag${img##*/} new_img${TARGET_PREFIX}/${img_name_tag} # 打新标签 echo docker tag $img $new_img docker tag $img $new_img # 推送到私有仓库 echo docker push $new_img docker push $new_img echo Finished $img done echo -e \n✅ 全部镜像拉取、打标签、推送完成还缺少了两个镜像可以自行拉取最后再替换掉value.yaml文件中的镜像路径image:repository: reg.westos.org/rook/cephtag: v1.20.7csi:cephcsi:repository: reg.westos.org/ceph/cephcsitag: v3.17.1registrar:repository: reg.westos.org/ceph/csi-node-driver-registrartag: v2.17.0provisioner:repository: reg.westos.org/ceph/csi-provisionertag: v6.2.0snapshotter:repository: reg.westos.org/ceph/csi-snapshottertag: v8.5.0attacher:repository: reg.westos.org/ceph/csi-attachertag: v4.12.0resizer:repository: reg.westos.org/ceph/csi-resizertag: v2.1.0csiAddons:repository: reg.westos.org/ceph/k8s-sidecartag: v0.14.0tolerations:- key: node-role.kubernetes.io/control-planeeffect: NoScheduleceph-csi-operator:controllerManager:manager:image:repository: reg.westos.org/ceph/ceph-csi-operatortag: v1.0.4再将k8s1的admin.conf拷贝到该节点写入kubeconfigmkdir -p ~/.kube cp /etc/kubernetes/admin.conf ~/.kube/config chown $(id -u):$(id -g) ~/.kube/config验证部署ceph集群下载rook-ceph的部署文件注意匹配版本修改文件这里的磁盘必须要是新添加的未使用的盘参考apiVersion: ceph.rook.io/v1kind: CephClustermetadata:name: rook-cephnamespace: rook-ceph # namespace:clusterspec:cephVersion:image: reg.westos.org/rook/ceph:v20.2.4allowUnsupported: falsesecurity:cephx:csi:keyType: aes # required when Kubernetes nodes dont run Linux kernel 7.0dataDirHostPath: /var/lib/rookskipUpgradeChecks: falsecontinueUpgradeAfterChecksEvenIfNotHealthy: falsewaitTimeoutForHealthyOSDInMinutes: 10upgradeOSDRequiresHealthyPGs: falsemon:count: 3allowMultiplePerNode: falsemgr:count: 2allowMultiplePerNode: falsemodules:- name: rookenabled: falsedashboard:enabled: truessl: truemonitoring:enabled: falsemetricsDisabled: falseexporter:perfCountersPrioLimit: 5statsPeriodSeconds: 5network:connections:encryption:enabled: falsecompression:enabled: falserequireMsgr2: falseprovider: hostcrashCollector:disable: falselogCollector:enabled: trueperiodicity: daily # one of: hourly, daily, weekly, monthlymaxLogSize: 500M # SUFFIX may be M or G. Must be at least 1M.cleanupPolicy:confirmation: sanitizeDisks:method: quickdataSource: zeroiteration: 1allowUninstallWithVolumes: falseplacement:all:tolerations:- key: node-role.kubernetes.io/control-planeeffect: NoScheduleannotations:labels:resources:removeOSDsIfOutAndSafeToRemove: falsepriorityClassNames:mon: system-node-criticalosd: system-node-criticalmgr: system-cluster-criticalstorage: # cluster level storage configuration and selectionuseAllNodes: falseuseAllDevices: falseconfig:allowDeviceClassUpdate: false # whether to allow changing the device class of an OSD after it is createdallowOsdCrushWeightUpdate: false # whether to allow resizing the OSD crush weight after osd pvc is increasednodes:- name: k8s1devices:- name: nvme0n2- name: k8s2devices:- name: nvme0n2- name: k8s3devices:- name: nvme0n2scheduleAlways: falseonlyApplyOSDPlacement: falsedisruptionManagement:managePodBudgets: trueosdMaintenanceTimeout: 30csi:readAffinity:enabled: falsecephfs:healthCheck:daemonHealth:mon:disabled: falseinterval: 45sosd:disabled: falseinterval: 60sstatus:disabled: falseinterval: 60slivenessProbe:mon:disabled: falsemgr:disabled: falseosd:disabled: falsestartupProbe:mon:disabled: falsemgr:disabled: falseosd:disabled: false最终出现三个osd-n的pod即为成功部署storageclass创建pvcapiVersion: v1kind: PersistentVolumeClaimmetadata:name: pvc-cephspec:storageClassName: rook-ceph-blockaccessModes:- ReadWriteOnceresources:requests:storage: 1GiRook 1.20 用 helm 部署时 rook-ceph chart 只部署rook operator ceph-csi-operator不再自动部署 RBD/cephfs CSI 驱动provisioner、nodeplugin、CSIDriver。 必须额外独立安装 ceph-csi-drivers helm chart否则kubectl get csidrivers 无资源PVC 一直 Pending卡在等待外部 provisioner rook-ceph.rbd.csi.ceph.com添加 ceph-csi-operator 仓库更新values.yaml可以在rook目录中找到rook/deploy/charts/ceph-csi-drivers/values.yaml拉取所需chart部署查看csi驱动查看pvc已经变为bound创建deployment webserverapiVersion: v1kind: Servicemetadata:name: webserverlabels:app: webserver-cephspec:type: LoadBalancerports:- protocol: TCPport: 80selector:app: webserver-ceph---apiVersion: apps/v1kind: Deploymentmetadata:name: webserver-cephspec:replicas: 1selector:matchLabels:app: webserver-cephtemplate:metadata:labels:app: webserver-cephspec:volumes:- name: webrootpersistentVolumeClaim:claimName: pvc-cephcontainers:- name: apache-frontendimage: reg.westos.org/library/httpd:dnsports:- containerPort: 80volumeMounts:- mountPath: /var/www/htmlname: webroot测试需要metallb和ip-pool就绪访问外部ip返回成功验证数据持久性删除pod后访问外部ip依旧可以返回设定内容验证rbd存储的单点挂载设置5个副本会将所有pod调度到k8s2以保证单点挂载副本数增加到10个会发现k8s3上的pod会无法达到running状态在pod所在的worker节点验证RBD 块盘已经成功挂载在 k8s2 节点获取CIDcrictl inspect CID | grep -B1 -A2 pvc获取HOSTPATHls HOSTPATHdf -Th HOSTPATHPod 内容器目录/var/www/html ⇀ containerd 绑定挂载 ⇀ 宿主机 kubelet 下的 CSI 挂载目录 ⇀ 底层 Ceph RBD 块设备/dev/rbd0拉伸pvc容量扩容pvc至2G等待pvc扩容并确认大小改为RWOP模式ReadWriteOncePod可以被单个 Pod 以读写方式挂载。 如果你想确保整个集群中只有一个 Pod 可以读取或写入该 PVC 请使用 ReadWriteOncePod 访问模式。ReadWriteOncePod 访问模式仅适用于 CSI 卷和 Kubernetes v1.22。要使用此特性你需要将以下 CSI 边车更新为下列或更高版本• csi-provisioner:v3.0.0• csi-attacher:v3.3.0• csi-resizer:v1.3.0---apiVersion: v1kind: PersistentVolumeClaimmetadata:name: rbd-pvcspec:accessModes:- ReadWriteOncePodresources:requests:storage: 1GistorageClassName: rook-ceph-block注意pvc的name该文件可能需要修改只允许一个pod挂载
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

SpringBoot+Vue博客系统开发实战:从数据库设计到部署答辩全攻略 2026/10/1 19:46:32

SpringBoot+Vue博客系统开发实战:从数据库设计到部署答辩全攻略

SpringBoot搭Vue的博客系统,几乎是计算机毕业设计题库里出现频率最高的题目。标题换一个说法叫“个人内容发布与互动平台”,再换一个叫“轻量级在线创作社区系统”,核心要解决的其实是同一件事:用户能注册登录、发文章、看文章、评…

阅读更多 →
2026年9月GESP真题及题解(C++八级):末班车 2026/10/1 19:46:17

2026年9月GESP真题及题解(C++八级):末班车

2026年9月GESP真题及题解(C++八级):末班车 题目描述 城市里有 n n n 个地铁站以及 m m m 条地铁线路,地铁站依次以

阅读更多 →
日志排查别急着问 AI:先用 awk、grep、jq 把日志统计清楚(附可复制命令) 2026/10/1 19:46:17

日志排查别急着问 AI:先用 awk、grep、jq 把日志统计清楚(附可复制命令)

目录一、为什么不直接把日志贴给 AI数量级对不上有用的信息被淹没日志里有不该发出去的东西我的流程二、准备一份示例日志日志格式生成脚本三、五个统计,把两万行压成几张表1. 状态码分布2. 错误是从什么时候开始的3. 错误集中在哪个接口4. 慢在哪:P50 和…

阅读更多 →
Git与Gitee实战速查:高频命令、踩坑与协作技巧 2026/10/1 19:46:11

Git与Gitee实战速查:高频命令、踩坑与协作技巧

说实话,Git和Gitee对我来说早就不只是工具,而是日常工作流的一部分。Git管版本、Gitee管托管和协作,两个配合起来,无论是个人项目还是团队开发,效率都能提上去不少。这篇东西说白了就是我长期使用中整理出的一份速查手…

阅读更多 →
opencode-crawl4ai — 无限制网络访问 2026/10/1 19:46:04

opencode-crawl4ai — 无限制网络访问

### 1.1 插件简介与定位**opencode-crawl4ai** 是 OpenCode 的无限制网络访问插件,基于 [crawl4ai](https://github.com/unclecode/crawl4ai) 项目实现。它让 AI 能够抓取任意网页内容、执行搜索、截取截图、进行深度爬取,打破 AI 训练数据的时间限制。*…

阅读更多 →
Git与Gitee高频命令实战:从SSH配置到分支合并与冲突解决 2026/10/1 19:46:04

Git与Gitee高频命令实战:从SSH配置到分支合并与冲突解决

做开发的兄弟大概都有过这样的体验:Git 装好了,Gitee 仓库建好了,结果日常提交、推送、拉取全靠一顿复制粘贴,一旦遇到“push 被拒绝”“SSH 认证失败”“commit 信息写错了”这类报错,整个人直接懵掉。前段时间带团队…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉