news 2026/5/16 15:22:13

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/16 15:19:06

基于Claude构建个人知识库:从向量检索到智能对话的完整实践

1. 项目概述&#xff1a;构建你的第二大脑&#xff0c;为什么Claude是绝佳选择最近在AI圈子里&#xff0c;一个叫“Claude Second Brain”的项目热度不低。乍一看这个标题&#xff0c;你可能会觉得有点玄乎——“第二大脑”&#xff1f;听起来像是科幻小说里的概念。但如果你深…

作者头像 李华
网站建设 2026/5/16 15:15:40

实测Taotoken多模型API的响应延迟与稳定性观感分享

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 实测Taotoken多模型API的响应延迟与稳定性观感分享 1. 引言 在将大模型集成到实际应用时&#xff0c;API的响应延迟和服务的稳定性…

作者头像 李华
网站建设 2026/5/16 15:15:17

高性能数据导入导出框架:企业级Excel处理解决方案架构设计

高性能数据导入导出框架&#xff1a;企业级Excel处理解决方案架构设计 【免费下载链接】fast-excel &#x1f989; Fast Excel import/export for Laravel 项目地址: https://gitcode.com/gh_mirrors/fa/fast-excel FastExcel是一款基于OpenSpout构建的高性能数据导入导…

作者头像 李华
网站建设 2026/5/16 15:14:29

VSCode插件开发实战:构建个人代码知识库提升开发效率

1. 项目概述&#xff1a;一个专为开发者打造的VSCode知识库插件如果你和我一样&#xff0c;每天大部分时间都泡在Visual Studio Code里&#xff0c;那么你一定遇到过这样的场景&#xff1a;为了解决一个棘手的问题&#xff0c;你花了几个小时在网上搜索、在Stack Overflow上翻找…

作者头像 李华
网站建设 2026/5/16 15:14:24

DevUI性能优化完全手册:让你的Angular应用飞起来的10个秘诀

DevUI性能优化完全手册&#xff1a;让你的Angular应用飞起来的10个秘诀 【免费下载链接】ng-devui Angular UI Component Library based on DevUI Design 项目地址: https://gitcode.com/DevCloudFE/ng-devui 想要让你的Angular应用运行如飞吗&#xff1f;DevUI作为企业…

作者头像 李华