自定义kolla-ansible镜像
背景
出于项目定制化的需求需要对kolla-ansible部署的OpenStack部分组件镜像做二次开发。官方手册请参考:https://docs.openstack.org/kolla/2024.1/admin/image-building.html ,本随笔基本上为官方手册实验后的流程复述。
准备材料
1. git服务一个(gitlab/github都行),此处使用 gitlab
2. Linux 主机一台(版本不要过于老旧,需要安装较新版本的docker-ce与python),此处使用 centos8.5 stream版本
前期环境搭建
1. 安装较新版本的 docker-ce
2. 安装 python 3.10以上,如果 Linux 自带的 Python 3.10 以上的版本则不用安装
获取源代码
此处以 zun-compute 组件为例,从 https://opendev.org/openstack OpenStack 官方仓库中获取你需要定制化开发组件的源代码,克隆到你自己的 gitlab 服务上,并在一需要基于修改的分支上另开一条分支,提交你修改的代码。
安装 kolla
# 安装 Python 虚拟环境,装的慢的话记得换国内的 pipy 源
pip install virtualenv
# 构建工作目录
mkdir -p /home/kolla-build && cd /home/kolla-build && virtualenv /home/kolla-build/venv
# 安装 kolla
source /home/kolla-build/venv/bin/activate
# 此处需要注意, 指明你需要安装的 kolla 版本,此处使用 18.0.0
pip install kolla==18.0.0
配置 kolla-build.conf 配置文件
除了我们定开的组件外,其余组件我们还是使用默认的官方源构建,所以我们可以在配置中仅修改单个组件的源。如下。创建 /etc/kolla/kolla-build.conf 配置文件并写入下属内容,注意分支和 git 地址替换为自己的。
# /etc/kolla/kolla-build.conf
[zun-base]
type = git
location = http://*.*.*.*/openstack/zun
reference = stable/2024.1-self-dev
此处细心的同学可能会抱有疑问,为什么构建的是 zun-compute 组件但是此处写的是 zun-base 。此处我们需要翻开 kolla 相关的代码实现与 kolla 生成的 Dockerfile 配置,参考 kolla/common/sources.py 文件查看默认的 kolla-build.conf 内容与通过 kolla-build --template-only 生成的 Dockerfile。如果你对于 jinja2 的模版语言足够熟悉的话也可以直读代码发现。zun-base 代码仓库时已经包含了 zun 后端相关实现的。
开始构建
如果大量组件依赖于默认仓库源的话最好配置下代理,不然构建容易失败或者进度拉的非常长
export http_proxy="http://127.0.0.1:3456"
export https_proxy="http://127.0.0.1:3456"
可以参考一下构建参数
kolla-build -b ubuntu --openstack-branch=stable-2024.1 --cache --debug --tag=2024.1-self-ubuntu22 zun-compute
简单解释下参数
-b ubuntu # 基础镜像选择
--openstack-branch=stable-2024.1 # openstack 版本,注意 stable/2024.1 需要写成 stable-2024.1
--cache # 启用容器缓存,防止构建失败冲就要重头再来
--debug # 更详细的日志
--tag=2024.1-self-ubuntu22 # 构建出来镜像的 tag
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 单元测试从入门到精通
2022-06-28 importlib.metadata.version无法在pyinstaller打包后正常工作?