当前位置: 首页 > news >正文

openEuler aarch64 环境下 cephadm 离线部署 Ceph Reef:私有镜像仓库构建与全栈容器镜像预置指南

1. 为什么需要离线部署Ceph Reef?

在arm64架构的生产环境中部署Ceph集群时,我们经常会遇到一个棘手的问题:官方镜像仓库中aarch64架构的容器镜像严重不足。我去年在金融行业的一个项目中就深有体会,当时客户的数据中心是完全隔离的内网环境,而我们需要部署的Ceph Reef版本恰好缺乏arm64架构的官方镜像支持。

这种情况其实非常普遍,特别是在一些对安全性要求严格的行业,比如金融、政务等领域。这些场景通常会有以下几个典型特征:

  • 服务器集群完全隔离,无法访问外部网络
  • 使用国产化硬件平台(如鲲鹏、飞腾等arm64架构)
  • 需要符合等保要求,禁止随意拉取外部镜像

针对这些限制,我们摸索出了一套完整的解决方案。核心思路是:先在一台可以临时联网的跳板机上准备好所有必需的容器镜像,然后通过私有镜像仓库将这些资源导入到隔离环境中。这种方法不仅解决了架构兼容性问题,还能确保整个部署过程符合安全规范。

2. 环境准备与基础配置

2.1 硬件与操作系统要求

在开始之前,我们需要确保所有节点都满足以下条件:

  • 至少3台arm64架构的服务器(测试环境可以是虚拟机)
  • 每台机器配备4核CPU、16GB内存、100GB系统盘
  • 额外的空白磁盘用于OSD(建议每节点至少2块)
  • 操作系统为openEuler 20.03 LTS SP2或更高版本

我曾经在一个项目中因为忽略了系统版本要求,结果在部署时遇到了glibc兼容性问题。所以特别提醒大家,一定要先检查系统版本:

cat /etc/openEuler-release

2.2 Podman基础配置

在openEuler上,我们使用Podman替代Docker作为容器运行时。首先需要在所有节点上安装Podman:

yum install -y podman podman-docker

配置镜像源是容易被忽视但极其重要的一步。很多同学反映拉取不到aarch64镜像,问题往往出在这里。我们需要编辑/etc/containers/registries.conf文件,确保包含以下内容:

unqualified-search-registries = ["docker.io"] [[registry]] location = "docker.io"

这个配置告诉Podman在拉取镜像时,默认去docker.io查找。配置完成后不需要重启服务,立即生效。

3. 构建私有镜像仓库

3.1 Registry镜像获取与部署

在离线环境中,我们需要先搭建一个本地镜像仓库。这里选择官方registry镜像,但要注意arm64架构的获取方式:

podman pull registry:2 podman save -o registry-2.tar registry:2

将导出的tar包拷贝到内网环境后,就可以部署私有仓库了:

podman load -i registry-2.tar mkdir -p /var/lib/registry podman run --privileged -d --name registry -p 5000:5000 \ -v /var/lib/registry:/var/lib/registry \ --restart=always registry:2

记得开放防火墙端口:

firewall-cmd --permanent --add-port=5000/tcp firewall-cmd --reload

3.2 安全配置调整

由于是内网私有仓库,我们需要将其标记为不安全仓库。修改/etc/containers/registries.conf

[registries.insecure] registries = ["10.2.1.176:5000"] # 替换为你的实际IP

这个配置非常重要,否则在推送镜像时会遇到TLS证书验证失败的问题。

4. Ceph Reef镜像准备

4.1 核心镜像获取

Ceph Reef的核心组件包括多个容器镜像,我们需要逐个获取。这里有个小技巧:先启动一个临时容器,从中提取cephadm工具:

podman pull quay.io/ceph/ceph:v18.2.0 podman run -it quay.io/ceph/ceph:v18.2.0 /bin/bash # 在容器内执行: cp /usr/sbin/cephadm /host/usr/local/sbin/cephadm

为什么要这么做?因为cephadm脚本中包含了所有依赖镜像的准确版本信息。直接使用容器内的cephadm可以避免版本不匹配的问题。

4.2 全量依赖镜像准备

根据cephadm脚本中的定义,我们需要准备以下镜像:

podman pull quay.io/prometheus/prometheus:v2.43.0 podman pull docker.io/grafana/loki:2.4.0 podman pull quay.io/prometheus/node-exporter:v1.5.0 # 其他镜像同理...

将这些镜像导出为离线包:

podman save -o ceph-v18.2.0.tar quay.io/ceph/ceph:v18.2.0 podman save -o prometheus-v2.43.0.tar quay.io/prometheus/prometheus:v2.43.0 # 其他镜像同理...

5. 镜像导入私有仓库

5.1 镜像标记与推送

将准备好的镜像导入私有仓库需要两个步骤:重新标记和推送。这里有个坑要注意——必须使用IP地址而不是主机名:

podman tag quay.io/ceph/ceph:v18.2.0 10.2.1.176:5000/quay.io/ceph/ceph:v18.2.0 podman push 10.2.1.176:5000/quay.io/ceph/ceph:v18.2.0

我曾经因为使用主机名导致推送卡住半小时,后来发现是DNS解析问题。使用IP地址可以避免这类网络问题。

5.2 多节点同步配置

将registry配置同步到集群其他节点:

scp /etc/containers/registries.conf node2:/etc/containers/ scp /etc/containers/registries.conf node3:/etc/containers/

在其他节点上测试镜像拉取:

podman pull 10.2.1.176:5000/quay.io/ceph/ceph:v18.2.0

6. 部署Ceph集群

6.1 初始化bootstrap节点

使用私有仓库中的镜像初始化第一个节点:

cephadm bootstrap --mon-ip 10.2.1.176 \ --registry-url 10.2.1.176:5000 \ --registry-username admin --registry-password admin

这个命令会自动完成以下工作:

  1. 部署Ceph Monitor和Manager服务
  2. 生成初始配置和密钥
  3. 配置所有服务使用私有镜像仓库

6.2 添加集群节点

将其他节点加入集群:

cephadm add-host --hostname node2 --ip 10.2.1.191 cephadm add-host --hostname node3 --ip 10.2.1.219

添加OSD存储设备:

ceph orch device zap node1 /dev/sdb --force ceph orch daemon add osd node1:/dev/sdb

7. 监控组件部署

Ceph Reef的监控栈包括多个组件,我们可以通过cephadm统一部署:

ceph orch apply prometheus --placement="3" ceph orch apply grafana --placement="3" ceph orch apply alertmanager --placement="3"

部署完成后,可以通过以下命令检查服务状态:

ceph orch ls ceph -s

在部署监控组件时,我发现一个常见问题是资源不足。建议至少为每个监控服务分配2GB内存,否则可能会出现容器不断重启的情况。

8. 常见问题排查

8.1 镜像拉取失败

如果遇到镜像拉取问题,首先检查:

  • 私有仓库是否正常运行
  • 防火墙规则是否允许5000端口
  • /etc/containers/registries.conf配置是否正确

可以尝试手动拉取测试:

podman pull 10.2.1.176:5000/quay.io/ceph/ceph:v18.2.0

8.2 服务启动超时

当服务启动超过预期时间时,可以查看容器日志:

podman logs <container_id> ceph logs <service_name>

我曾经遇到一个案例,因为NTP时间不同步导致证书验证失败。所以务必确保所有节点时间同步。

8.3 存储设备识别问题

如果cephadm无法识别存储设备,尝试:

ceph orch device ls ceph-volume inventory

有时候需要先清理磁盘上的残留信息:

ceph-volume zap /dev/sdb --destroy
http://www.jsqmd.com/news/828994/

相关文章:

  • 告别OpenMV?Canmv K210+MaixHub在线训练,打造你的专属视觉识别方案
  • WinDirStat:3步快速上手Windows磁盘空间高效管理
  • 纸张计数技术深度解析:基于STM32与FDC2214的高精度电容传感系统架构剖析
  • Arthas实战指南:从入门到精通的8大核心场景
  • 3步零编程定制你的Windows系统:Windhawk终极指南
  • QQ截图独立版逆向工程深度解析:多引擎OCR集成与录屏功能实现原理
  • 知识竞赛代表队分组方法详解
  • Machine Learning Refined项目结构解析:高效学习路径规划
  • GraphQL-WS vs 传统GraphQL:为什么WebSocket是实时应用的首选
  • 告别手动处理!用MATLAB App Designer打造你的专属数据(图片/表格)预处理小工具
  • Simplefolio动画效果深度解析:ScrollReveal与Tilt.js实战应用指南 [特殊字符]
  • 3分钟搞定游戏模组:BepInEx插件框架终极入门指南
  • 智能通信与计算 学术会议分享 - 每天学术做一点
  • Programming Bitcoin最佳实践:10个核心编程技巧助你从零掌握比特币开发 [特殊字符]
  • Simulink + F28335 从环境搭建到第一个信号:手把手教你输出可调方波
  • BLIP视觉语言模型终极指南:从零开始掌握多模态AI技术
  • SystemVerilog联合(Union)详解:硬件工程师的打包与解包实战指南
  • 8255 Boot流程深度解析与Bring Up实战避坑指南
  • PyWxDump:本地微信数据处理工具的终结与开源合规启示
  • 3个VPS运维困境:reinstall一键重装工具如何重塑系统管理体验
  • CXPatcher:一键解锁Mac游戏性能的终极CrossOver优化工具
  • iOS照片去背景有哪些方法?苹果手机照片操作指南与工具对比 - 软件小管家
  • 7大视频网站一键下载:Video-Downloader让离线观看变得如此简单
  • 桌面级机械臂DIY全攻略:从运动学建模到PID控制实战
  • 欢迎使用Marp CLI
  • 如何实现高性能PC游戏分屏:Universal Split Screen架构设计与实战指南
  • 3分钟搞定电脑风扇噪音:FanControl免费开源风扇控制软件终极指南
  • t-io协议适配技术:如何统一处理不同网络协议的终极指南
  • 屏幕缺陷检测-目标检测数据集(包括VOC格式、YOLO格式)
  • 3分钟掌握Windows终极优化神器:WinUtil一键搞定软件安装和系统优化