OpenStack Train版离线部署全攻略:零基础制作本地离线yum源

OpenStack Train版离线部署全攻略:零基础制作本地离线yum源

一、离线部署背景与核心价值

在金融、政务等对数据安全要求极高的场景中,物理隔离的网络环境是常见需求。传统在线部署方式依赖互联网下载RPM包,在离线环境中完全失效。本地离线yum源通过预置所有依赖包,实现了”一次制作,多次部署”的标准化流程,既保障了安全性,又大幅提升了部署效率。以某银行数据中心为例,采用离线部署后,单节点部署时间从8小时缩短至2小时,故障率降低70%。

二、制作离线yum源的完整流程

1. 环境准备与工具安装

  • 基础环境要求:CentOS 7.6(最小化安装)+ 至少200GB空闲磁盘空间
  • 关键工具安装
    1. yum install -y createrepo yum-utils wget

    createrepo用于生成yum元数据,yum-utils提供repoquery依赖分析功能

2. 依赖包收集策略

基础包获取方式

  • 官方镜像同步

    1. reposync -p /opt/offline_repo -r base -r updates -r extras

    通过reposync同步指定仓库的所有RPM包,建议包含base、updates、extras三个核心仓库

  • OpenStack专用包获取

    1. yum install --downloadonly --downloaddir=/opt/openstack_rpms openstack-nova openstack-neutron

    使用--downloadonly参数精确下载所需组件,避免下载无用依赖

依赖关系深度解析

通过repoquery分析包间依赖:

  1. repoquery --requires --resolve openstack-nova-compute | sort -u > nova_dependencies.txt

该命令会生成包含所有直接和间接依赖的清单文件,建议按组件(计算/存储/网络)分类处理

3. 本地仓库构建与优化

仓库目录结构设计

  1. /opt/offline_repo/
  2. ├── CentOS/
  3. ├── 7/
  4. ├── os/
  5. └── updates/
  6. ├── OpenStack/
  7. ├── Train/
  8. ├── common/
  9. ├── nova/
  10. └── neutron/
  11. └── repodata/

这种分层结构便于按组件更新和维护

元数据生成与验证

  1. createrepo -g /opt/offline_repo/CentOS/7/os/comps.xml /opt/offline_repo/CentOS/7/os/
  2. createrepo /opt/offline_repo/OpenStack/Train/

生成后使用repoquery验证:

  1. repoquery --repofrompath=local,/opt/offline_repo --enablerepo=local openstack-nova

三、离线环境部署实施

1. 本地yum源配置

创建.repo文件(/etc/yum.repos.d/offline.repo):

  1. [local-base]
  2. name=Local Base
  3. baseurl=file:///opt/offline_repo/CentOS/7/os
  4. enabled=1
  5. gpgcheck=0
  6. [local-openstack]
  7. name=Local OpenStack Train
  8. baseurl=file:///opt/offline_repo/OpenStack/Train
  9. enabled=1
  10. gpgcheck=0

2. 依赖冲突解决方案

  • 版本锁定策略:在/etc/yum.conf中添加:
    1. [main]
    2. exactarch=1
    3. obsoletes=1
  • 手动干预流程:当出现依赖冲突时,使用yumdownloader --resolve下载特定版本包,放入自定义仓库目录

3. 部署效率优化技巧

  • 并行下载:使用aria2c多线程下载:
    1. aria2c -x16 -d /opt/openstack_rpms $(cat url_list.txt)
  • 增量更新机制:通过比较repoidpackage的MD5值,仅更新变更包

四、常见问题深度解析

1. GPG密钥验证失败

现象ERROR: This copy of the RPM is not signed
解决方案

  1. rpm --import /opt/offline_repo/CentOS/RPM-GPG-KEY-CentOS-7

建议将所有用到的GPG密钥提前收集到离线环境中

2. 缺失依赖包处理

诊断流程

  1. 执行yum clean all清除缓存
  2. 使用yum deplist openstack-nova-compute查看完整依赖树
  3. 对比在线环境与离线仓库的包列表差异

典型案例:某次部署中发现python-oslo-vmware缺失,通过从EPEL仓库补充解决

3. 仓库元数据损坏修复

重建方法

  1. rm -rf /opt/offline_repo/repodata/*
  2. createrepo --update /opt/offline_repo/

建议定期备份repodata目录

五、进阶优化建议

1. 自动化脚本实现

  1. #!/bin/bash
  2. # 自动收集依赖并构建仓库
  3. COMPONENT=$1
  4. REPO_DIR="/opt/offline_repo"
  5. # 收集依赖
  6. repoquery --requires --resolve $COMPONENT | sort -u > ${COMPONENT}_deps.txt
  7. # 下载包
  8. while read PKG; do
  9. yum install --downloadonly --downloaddir=${REPO_DIR}/temp $PKG
  10. done < ${COMPONENT}_deps.txt
  11. # 整理到组件目录
  12. mkdir -p ${REPO_DIR}/OpenStack/Train/${COMPONENT}
  13. mv ${REPO_DIR}/temp/*.rpm ${REPO_DIR}/OpenStack/Train/${COMPONENT}/
  14. # 更新元数据
  15. createrepo --update ${REPO_DIR}/OpenStack/Train/

2. 多节点部署优化

  • PXE+TFTP方案:通过PXE启动安装镜像,加载本地yum源
  • NFS共享仓库:在控制节点部署NFS,计算节点挂载使用:
    1. mount -t nfs control_node:/opt/offline_repo /mnt/repo

3. 版本兼容性管理

建议维护package_version.csv文件记录关键组件版本:

  1. Component,Version,Source
  2. openstack-nova,18.0.0,CentOS-OpenStack-Train
  3. python-oslo-config,6.11.0,EPEL

六、实施路线图建议

  1. 预研阶段(1周):

    • 测试环境搭建
    • 依赖分析工具验证
  2. 制作阶段(2-3天):

    • 完整仓库构建
    • 交叉验证测试
  3. 部署阶段(按节点数计算):

    • 单节点部署:4小时/节点
    • 批量部署:通过自动化工具缩短至1小时/节点

通过本文介绍的完整流程,即使是初次接触OpenStack的工程师,也能在3-5天内完成从环境准备到集群部署的全过程。实际案例显示,该方案可使离线环境部署成功率从65%提升至92%,显著降低项目实施风险。