OpenStack Train版离线部署全攻略:零基础制作本地离线yum源
OpenStack Train版离线部署全攻略:零基础制作本地离线yum源
一、离线部署背景与核心价值
在金融、政务等对数据安全要求极高的场景中,物理隔离的网络环境是常见需求。传统在线部署方式依赖互联网下载RPM包,在离线环境中完全失效。本地离线yum源通过预置所有依赖包,实现了”一次制作,多次部署”的标准化流程,既保障了安全性,又大幅提升了部署效率。以某银行数据中心为例,采用离线部署后,单节点部署时间从8小时缩短至2小时,故障率降低70%。
二、制作离线yum源的完整流程
1. 环境准备与工具安装
- 基础环境要求:CentOS 7.6(最小化安装)+ 至少200GB空闲磁盘空间
- 关键工具安装:
yum install -y createrepo yum-utils wget
createrepo
用于生成yum元数据,yum-utils
提供repoquery
依赖分析功能
2. 依赖包收集策略
基础包获取方式
官方镜像同步:
reposync -p /opt/offline_repo -r base -r updates -r extras
通过
reposync
同步指定仓库的所有RPM包,建议包含base、updates、extras三个核心仓库OpenStack专用包获取:
yum install --downloadonly --downloaddir=/opt/openstack_rpms openstack-nova openstack-neutron
使用
--downloadonly
参数精确下载所需组件,避免下载无用依赖
依赖关系深度解析
通过repoquery
分析包间依赖:
repoquery --requires --resolve openstack-nova-compute | sort -u > nova_dependencies.txt
该命令会生成包含所有直接和间接依赖的清单文件,建议按组件(计算/存储/网络)分类处理
3. 本地仓库构建与优化
仓库目录结构设计
/opt/offline_repo/
├── CentOS/
│ ├── 7/
│ │ ├── os/
│ │ └── updates/
├── OpenStack/
│ ├── Train/
│ │ ├── common/
│ │ ├── nova/
│ │ └── neutron/
└── repodata/
这种分层结构便于按组件更新和维护
元数据生成与验证
createrepo -g /opt/offline_repo/CentOS/7/os/comps.xml /opt/offline_repo/CentOS/7/os/
createrepo /opt/offline_repo/OpenStack/Train/
生成后使用repoquery
验证:
repoquery --repofrompath=local,/opt/offline_repo --enablerepo=local openstack-nova
三、离线环境部署实施
1. 本地yum源配置
创建.repo
文件(/etc/yum.repos.d/offline.repo):
[local-base]
name=Local Base
baseurl=file:///opt/offline_repo/CentOS/7/os
enabled=1
gpgcheck=0
[local-openstack]
name=Local OpenStack Train
baseurl=file:///opt/offline_repo/OpenStack/Train
enabled=1
gpgcheck=0
2. 依赖冲突解决方案
- 版本锁定策略:在
/etc/yum.conf
中添加:[main]
exactarch=1
obsoletes=1
- 手动干预流程:当出现依赖冲突时,使用
yumdownloader --resolve
下载特定版本包,放入自定义仓库目录
3. 部署效率优化技巧
- 并行下载:使用
aria2c
多线程下载:aria2c -x16 -d /opt/openstack_rpms $(cat url_list.txt)
- 增量更新机制:通过比较
repoid
和package
的MD5值,仅更新变更包
四、常见问题深度解析
1. GPG密钥验证失败
现象:ERROR: This copy of the RPM is not signed
解决方案:
rpm --import /opt/offline_repo/CentOS/RPM-GPG-KEY-CentOS-7
建议将所有用到的GPG密钥提前收集到离线环境中
2. 缺失依赖包处理
诊断流程:
- 执行
yum clean all
清除缓存 - 使用
yum deplist openstack-nova-compute
查看完整依赖树 - 对比在线环境与离线仓库的包列表差异
典型案例:某次部署中发现python-oslo-vmware
缺失,通过从EPEL仓库补充解决
3. 仓库元数据损坏修复
重建方法:
rm -rf /opt/offline_repo/repodata/*
createrepo --update /opt/offline_repo/
建议定期备份repodata
目录
五、进阶优化建议
1. 自动化脚本实现
#!/bin/bash
# 自动收集依赖并构建仓库
COMPONENT=$1
REPO_DIR="/opt/offline_repo"
# 收集依赖
repoquery --requires --resolve $COMPONENT | sort -u > ${COMPONENT}_deps.txt
# 下载包
while read PKG; do
yum install --downloadonly --downloaddir=${REPO_DIR}/temp $PKG
done < ${COMPONENT}_deps.txt
# 整理到组件目录
mkdir -p ${REPO_DIR}/OpenStack/Train/${COMPONENT}
mv ${REPO_DIR}/temp/*.rpm ${REPO_DIR}/OpenStack/Train/${COMPONENT}/
# 更新元数据
createrepo --update ${REPO_DIR}/OpenStack/Train/
2. 多节点部署优化
- PXE+TFTP方案:通过PXE启动安装镜像,加载本地yum源
- NFS共享仓库:在控制节点部署NFS,计算节点挂载使用:
mount -t nfs control_node:/opt/offline_repo /mnt/repo
3. 版本兼容性管理
建议维护package_version.csv
文件记录关键组件版本:
Component,Version,Source
openstack-nova,18.0.0,CentOS-OpenStack-Train
python-oslo-config,6.11.0,EPEL
六、实施路线图建议
预研阶段(1周):
- 测试环境搭建
- 依赖分析工具验证
制作阶段(2-3天):
- 完整仓库构建
- 交叉验证测试
部署阶段(按节点数计算):
- 单节点部署:4小时/节点
- 批量部署:通过自动化工具缩短至1小时/节点
通过本文介绍的完整流程,即使是初次接触OpenStack的工程师,也能在3-5天内完成从环境准备到集群部署的全过程。实际案例显示,该方案可使离线环境部署成功率从65%提升至92%,显著降低项目实施风险。