开始前必读
自动化镜像构建需要对Linux系统和shell、python有一定了解,具备一定的shell、python编程能力。
搭建编译构建环境
网络规划
开始之前,先对virtualbox的网络模式做一个简单介绍。
VirtualBox网络模式比较
VM<->VM | VM->Host | VM<-Host | VM->LAN | VM<-LAN | |
---|---|---|---|---|---|
NAT | - | + | Port Forward | + | Port Forward |
NAT-Network | + | + | Port Forward | + | Port Forward |
Host-only | + | + | + | - | - |
Bridged | + | + | + | + | + |
通过对比,本例采用NAT-Network和Host-only网络结合的方式搭建Openstack集群。
单机版(本例采用)
集群版
virtualbox网络创建
-
File
->Tools
->Network Manager
->NAT Networks
->Create
-
Create Host-only Networks
,参照网络规划创建网络Host-only Networks
NAT Networks
准备虚拟机
新建openstack-allinone
操作系统:Debian12.6,内核:6.1.0-23-amd64
-
规格信息如下
hostname vCPU memory disk net openstack-allinone 8C 8G 256G switch1,switch2,switch3 -
开启EFI支持,采用uefi的方式安装Debian,分区信息如下
格式 大小 挂载点 efi 256M /boot/efi xfs ALL /
网络配置
参考网络规划完成网络的静态配置,switch1为控制面网络,switch2所在的网络不配置IP,为openstack的外部网络,switch3为数据面网络。
Debian12采用NetworkManager网络管理工具,它将所有的网卡都存储在同一个连接中。
-
通过如下命令查看设备状态
nmcli device status
-
通过如下命令查看连接状态
nmcli connection show
-
通过如下命令新建连接
Wired connection 2
和Wired connection 3
nmcli connection add con-name 'Wired connection 2' ifname enp0s8 type ethernet
nmcli connection add con-name 'Wired connection 3' ifname enp0s9 type ethernet
-
通过如下命令重建连接
Wired connection 1
nmcli connection del 'Wired connection 1' nmcli connection add con-name 'Wired connection 1' ifname enp0s3 type ethernet
-
之后通过
nmtui
配置连接的静态IP地址 -
nmtui
、nmcli
的更多用法可查阅使用手册
安装virtualbox additions
-
使用如下命令更新apt缓存
apt update && apt upgrade -y
-
安装依赖包
apt install build-essential gcc make dkms linux-headers-`uname -r`
-
将
C:\Program Files\Oracle\VirtualBox\VBoxGuestAdditions.iso
挂载到虚拟机mount /dev/cdrom /mnt
-
执行安装命令
bash /mnt/VBoxLinuxAdditions.run
基础配置
关闭防火墙
-
使用如下命令关闭防火墙,并禁止防火墙开机启动(debian为ufw,fedora为firewalld)
systemctl stop ufw && systemctl disable ufw
显示如下信息,说明防火墙服务ufw不存在
Failed to stop ufw.service: Unit ufw.service not loaded.
-
检查防火墙状态,状态如下所示则表示修改成功
systemctl status ufw
修改源
-
使用如下命令在
/etc/apt/
创建bak
目录mkdir -p /etc/apt/bak/
-
备份原配置,使用如下命令备份原配置
mv /etc/apt/sources.list /etc/apt/bak/
-
添加中科大源配置文件,使用
vi
打开/etc/apt/sources.list
,添加如下内容:#deb cdrom:[Debian GNU/Linux 12.6.0 _Bookworm_ - Official amd64 DVD Binary-1 with firmware 20240629-10:19]/ bookworm contrib main non-free-firmware deb http://mirrors.ustc.edu.cn/debian/ bookworm main non-free-firmware deb-src http://mirrors.ustc.edu.cn/debian/ bookworm main non-free-firmware deb http://security.debian.org/debian-security bookworm-security main non-free-firmware deb-src http://mirrors.ustc.edu.cn/debian-security bookworm-security main non-free-firmware # bookworm-updates, to get updates before a point release is made; # see https://www.debian.org/doc/manuals/debian-reference/ch02.en.html#_updates_and_backports deb http://mirrors.ustc.edu.cn/debian/ bookworm-updates main non-free-firmware deb-src http://mirrors.ustc.edu.cn/debian/ bookworm-updates main non-free-firmware
-
使用如下命令更新apt缓存
apt update && apt upgrade -y
软件安装
基础软件
-
安装vim、python3、python3-venv、lsof、net-tools、git、gcc、make等软件
apt install -y vim python3 python3-pip python3-dev python3-venv libffi-dev openssl libssl-dev lsof net-tools git gcc make zip unzip
-
安装virt-manager、libvirt、libguestfs-tools、jq等软件
apt install -y virt-manager libvirt-dev libguestfs-tools jq neofetch
-
修改pip仓库地址,使用
vim
打开~/.pip/pip.conf
,添加如下内容:[global] index-url = http://mirrors.aliyun.com/pypi/simple/ [install] trusted-host=mirrors.aliyun.com timeout=90
docker
-
卸载旧版本
for pkg in docker.io docker-doc docker-compose podman-docker containerd runc; do sudo apt-get remove $pkg; done
-
安装必要的一些系统工具
apt-get update && apt install -y ca-certificates curl
-
安装GPG证书
install -m 0755 -d /etc/apt/keyrings curl -fsSL https://download.docker.com/linux/debian/gpg -o /etc/apt/keyrings/docker.asc chmod a+r /etc/apt/keyrings/docker.asc
-
写入软件源信息
echo \ "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/debian \ $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \ tee /etc/apt/sources.list.d/docker.list > /dev/null && apt-get update
-
通过apt安装docker-ce
apt-get update && apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
-
配置国内docker源代理
自行寻找配置国内镜像加速源
-
重启docker,并设置开机启动
systemctl daemon-reload systemctl enable docker && systemctl restart docker
kolla-ansible
Quick Start for deployment/evaluation — kolla-ansible 18.1.0.dev217 documentation (openstack.org)
准备python虚拟环境
-
准备python虚拟环境
mkdir -p /opt/kolla-ansible/pyenv/ python3 -m venv /opt/kolla-ansible/pyenv/
-
激活python虚拟环境
tips:info 以后每次使用kolla-ansible,都要使用如下命令激活kolla-ansible的python虚拟环境cd /opt/kolla-ansible/ && source /opt/kolla-ansible/pyenv/bin/activate
-
升级pip
pip3 install -U pip
-
安装ansible
pip install 'ansible-core>=2.16,<2.17.99'
-
修改ansible配置
mkdir -p /etc/ansible vi /etc/ansible/ansible.cfg
在
/etc/ansible/ansible.cfg
写入如下内容:[defaults] host_key_checking=False pipelining=True forks=100
安装kolla-ansible
通过pip安装
-
安装docker的python库
pip3 install docker
-
安装kolla的python库
pip3 install kolla-ansible
从源代码安装(推荐)
-
安装docker的python库
pip3 install docker
-
使用pip从git代码仓安装
pip3 install git+https://opendev.org/openstack/kolla-ansible.git
-
检查安装结果
kolla-ansible --version
-
使用pip从git代码仓升级
pip3 install -U git+https://opendev.org/openstack/kolla-ansible.git
准备部署配置文件
-
准备节点配置文件
all-in-one
cp /opt/kolla-ansible/pyenv/share/kolla-ansible/ansible/inventory/all-in-one /opt/kolla-ansible/
-
准备组件配置文件
globals.yml
和密码配置文件passwords.yml
mkdir -p /etc/kolla && chown $USER:$USER /etc/kolla
cp -r /opt/kolla-ansible/pyenv/share/kolla-ansible/etc_examples/kolla/* /etc/kolla
部署openstack组件
初始化
ansible
-
检查节点连通性
ansible -i all-in-one common -m ping
-
激活python虚拟环境
cd /opt/kolla-ansible/ && source /opt/kolla-ansible/pyenv/bin/activate
-
安装ansible依赖
kolla-ansible -i all-in-one install-deps
/etc/kolla/passwords.yml
- 密码生成
/etc/kolla/passwords.yml
kolla-genpwd
/etc/kolla/globals.yml
网络配置
组件配置
使用kolla-ansible部署
-
激活python虚拟环境
cd /opt/kolla-ansible/ && source /opt/kolla-ansible/pyenv/bin/activate
-
环境安装,自动安装依赖,如docker等
kolla-ansible -i all-in-one bootstrap-servers
-
环境和配置参数预检查
kolla-ansible -i all-in-one prechecks
-
部署openstack
kolla-ansible -i all-in-one deploy
-
升级openstack(可选)
kolla-ansible -i all-in-one reconfigure
openstack客户端
- 安装openstack client
pip3 install python-openstackclient -c https://releases.openstack.org/constraints/upper/master
- 生成openstack client的客户端令牌
/etc/kolla/admin-openrc.sh
kolla-ansible post-deploy
- 使用令牌
/etc/kolla/admin-openrc.sh
source /etc/kolla/admin-openrc.sh
销毁openstack集群
使用kolla-ansible销毁
-
激活python虚拟环境
cd /opt/kolla-ansible/ && source /opt/kolla-ansible/pyenv/bin/activate
-
销毁openstack集群
tips:warn 销毁集群将删除所有数据,请谨慎操作 一般仅在部署遇到报错时进行销毁操作kolla-ansible -i all-in-one destroy --yes-i-really-really-mean-it
附录
dbus模块找不到
-
执行prechecks时报错如下
-
执行如下命令安装dbus的python库
pip3 install dbus-python
-
上述命令报错找不到CMake、pkg-config
-
执行如下命令安装CMake、pkg-config
apt install -y cmake pkg-config
-
ERROR: Dependency "dbus-1" not found, tried pkgconfig and cmake
apt install -y libdbus-1-dev
-
ERROR: Dependency "glib-2.0" not found, tried pkgconfig and cmake
apt install -y libglib2.0-dev
-
再次安装dbus的python库
pip3 install dbus-python