OpenStack Victoria双节点实战|Packstack一键部署(CentOS‑Stream‑8)+华为云ECS实操
引言
本篇适合云计算运维入门新手,分为两大实操部分:第一部分在VMware Workstation环境,使用Packstack工具一键部署OpenStack‑Victoria双节点集群(控制节点+计算节点);第二部分讲解华为云ECS弹性云服务器的创建流程,弄懂公有云实例关键概念。读完本文你将学会:
- 制作OpenStack模板虚拟机,完成模板机环境初始化,学会VMware完整克隆虚拟机;
- 双节点环境配置:静态IP、主机名、hosts解析、chrony时间同步、关闭SELinux;
- Packstack应答文件修改,一键自动化部署OpenStack,访问Horizon仪表盘;
- 理解公有云ECS核心概念:计费模式、区域Region、可用区AZ、镜像、安全组;
- 完整实操:华为云控制台创建ECS实例,登录与基础管理。
全部来自课堂实操,本地电脑安装VMware Workstation即可做OpenStack实验;ECS部分只需要浏览器访问华为云控制台,不需要本地虚拟机。
前置说明
✅ 环境
- OpenStack实验:VMware Workstation17.5;CentOS‑Stream‑8 minimal镜像;至少16G物理内存(控制节点4核8G,计算节点4核8G);
- ECS实操:浏览器访问华为云官网,注册华为云账号即可体验;
✅ 前置知识 :掌握Linux基础命令、vim编辑器、网络IP、虚拟化基础概念;
✅ 新手友好:步骤完整,命令附带注释,遇到的坑全部整理在故障章节。
💡代码块中
#后面是注释,不要复制输入终端 。⚠️OpenStack部署耗时很长,Packstack安装阶段预计40‑50分钟;实验仅用于学习,不适合直接用于生产环境。
一、实验整体规划
1.1 硬件&IP规划
| 虚拟机 | 配置 | IP | 角色 |
|---|---|---|---|
| controller | 4CPU,8G内存,100G硬盘 | 192.168.108.10 | OpenStack控制节点 |
| compute | 4CPU,8G内存,100G硬盘 | 192.168.108.11 | OpenStack计算节点 |
VMware网络:使用NAT模式,网段192.168.108.0/24。
Windows版VMware NAT网关:
192.168.108.2;Linux版本VMware NAT网关:192.168.108.1。
1.2 实验流程总览
- 制作基础模板虚拟机
openstack_template,初始化yum源、基础环境;关机打快照; - 通过完整克隆,克隆出controller控制节点、compute计算节点;
- 两台节点配置主机名、静态IP、hosts、chrony时间同步;关机打快照;
- 控制节点安装packstack,修改应答文件,执行一键部署OpenStack;
- 浏览器访问Horizon仪表盘完成验证;
- 拓展:华为云ECS弹性云服务器实操。
二、制作OpenStack模板虚拟机
模板机的意义:把yum源、软件、系统初始化全部做完,后续直接克隆,避免两台机器重复做大量重复配置。
- 基于CentOS‑Stream‑8 minimal镜像安装基础虚拟机;
- 关机,右键虚拟机选择「管理」→「克隆」,选择完整克隆 ,命名
openstack_template。
❗注意:必须选择完整克隆;链接克隆依赖原模板机,模板损坏克隆机直接失效,不适合OpenStack实验。
2.1 模板机配置yum阿里源
# 清空旧的repo文件
rm -rf /etc/yum.repos.d/*
# 批量写入openstack victoria以及依赖仓库
cat <<EOF > /etc/yum.repos.d/openstack.repo
[centos-openstack-victoria]
name=CentOS 8 - OpenStack victoria
baseurl=[https://mirrors.aliyun.com/centos-vault/8-stream/cloud/x86_64/openstack-victoria/](https://mirrors.aliyun.com/centos-vault/8-stream/cloud/x86_64/openstack-victoria/)
gpgcheck=0
enabled=1
[highavailability]
name=CentOS Stream 8 - HighAvailability
baseurl=[https://mirrors.aliyun.com/centos-vault/8-stream/HighAvailability/x86_64/os/](https://mirrors.aliyun.com/centos-vault/8-stream/HighAvailability/x86_64/os/)
gpgcheck=0
enabled=1
[nfv]
name=CentOS Stream 8 - NFV
baseurl=[https://mirrors.aliyun.com/centos-vault/8-stream/NFV/x86_64/os/](https://mirrors.aliyun.com/centos-vault/8-stream/NFV/x86_64/os/)
gpgcheck=0
enabled=1
[rt]
name=CentOS Stream 8 - RT
baseurl=[https://mirrors.aliyun.com/centos-vault/8-stream/RT/x86_64/os/](https://mirrors.aliyun.com/centos-vault/8-stream/RT/x86_64/os/)
gpgcheck=0
enabled=1
[resilientstorage]
name=CentOS Stream 8 - ResilientStorage
baseurl=[https://mirrors.aliyun.com/centos-vault/8-stream/ResilientStorage/x86_64/os/](https://mirrors.aliyun.com/centos-vault/8-stream/ResilientStorage/x86_64/os/)
gpgcheck=0
enabled=1
[extras-common]
name=CentOS Stream 8 - Extras packages
baseurl=[https://mirrors.aliyun.com/centos-vault/8-stream/extras/x86_64/extras-common/](https://mirrors.aliyun.com/centos-vault/8-stream/extras/x86_64/extras-common/)
gpgcheck=0
enabled=1
[extras]
name=CentOS Stream \$releasever - Extras
baseurl=[https://mirrors.aliyun.com/centos-vault/8-stream/extras/x86_64/os/](https://mirrors.aliyun.com/centos-vault/8-stream/extras/x86_64/os/)
gpgcheck=0
enabled=1
[centos-ceph-pacific]
name=CentOS - Ceph Pacific
baseurl=[https://mirrors.aliyun.com/centos-vault/8-stream/storage/x86_64/ceph-pacific/](https://mirrors.aliyun.com/centos-vault/8-stream/storage/x86_64/ceph-pacific/)
gpgcheck=0
enabled=1
[centos-rabbitmq-38]
name=CentOS-8 - RabbitMQ 38
baseurl=[https://mirrors.aliyun.com/centos-vault/8-stream/messaging/x86_64/rabbitmq-38/](https://mirrors.aliyun.com/centos-vault/8-stream/messaging/x86_64/rabbitmq-38/)
gpgcheck=0
enabled=1
[centos-nfv-openvswitch]
name=CentOS Stream 8 - NFV OpenvSwitch
baseurl=[https://mirrors.aliyun.com/centos-vault/8-stream/nfv/x86_64/openvswitch-2/](https://mirrors.aliyun.com/centos-vault/8-stream/nfv/x86_64/openvswitch-2/)
gpgcheck=0
enabled=1
[baseos]
name=CentOS Stream 8 - BaseOS
baseurl=[https://mirrors.aliyun.com/centos-vault/8-stream/BaseOS/x86_64/os/](https://mirrors.aliyun.com/centos-vault/8-stream/BaseOS/x86_64/os/)
gpgcheck=0
enabled=1
[appstream]
name=CentOS Stream 8 - AppStream
baseurl=[https://mirrors.aliyun.com/centos-vault/8-stream/AppStream/x86_64/os/](https://mirrors.aliyun.com/centos-vault/8-stream/AppStream/x86_64/os/)
gpgcheck=0
enabled=1
[powertools]
name=CentOS Stream 8 - PowerTools
baseurl=[https://mirrors.aliyun.com/centos-vault/8-stream/PowerTools/x86_64/os/](https://mirrors.aliyun.com/centos-vault/8-stream/PowerTools/x86_64/os/)
gpgcheck=0
enabled=1
EOF
# 重建yum缓存
yum clean all
yum makecache
2.2 安装基础工具包
# bash-completion命令补全、vim编辑工具、vmtools虚拟机工具、chrony时间同步
yum install -y bash-completion vim open-vm-tools net-tools chrony.x86_64
source /usr/share/bash-completion/bash_completion
2.3 配置/etc/hosts主机解析
echo '192.168.108.10 controller' >> /etc/hosts
echo '192.168.108.11 compute' >> /etc/hosts
2.4 关闭SELinux
OpenStack环境SELinux容易引发权限故障,实验环境直接关闭
sed -i '/^SELINUX=/cSELINUX=disabled' /etc/selinux/config
2.5 网卡保持DHCP获取
vim /etc/sysconfig/network-scripts/ifcfg-ens160
TYPE=Ethernet
BOOTPROTO=dhcp
NAME=ens160
DEVICE=ens160
ONBOOT=yes
2.6 清除克隆会冲突的标识(关键!)
如果不清除ssh密钥与machine‑id,两台克隆机器ID完全一样,会发生SSH通信异常
# 删除ssh主机密钥,开机自动重新生成
cd /etc/ssh/
rm -rf ssh_host_*
# 清空系统machine‑id
cat /dev/null > /etc/machine-id
cat /etc/machine-id
2.7 关机,拍摄快照
poweroff
虚拟机菜单:快照 → 拍摄快照,模板机准备完成。
三、克隆生成controller、compute两个节点
- 对
openstack_template完整克隆,分别命名openstack_controller、openstack_compute; - 修改虚拟机硬件,CPU选项勾选「虚拟化 Intel VT‑x/EPT or AMD‑V/RVI」。>
compute计算节点需要开启嵌套虚拟化,内部才能运行OpenStack虚拟机实例。
3.1 controller控制节点配置
开机执行:
# 修改主机名
hostnamectl set-hostname controller
# 修改网卡配置静态IP
vim /etc/sysconfig/network-scripts/ifcfg-ens160
TYPE=Ethernet
BOOTPROTO=none
NAME=ens160
DEVICE=ens160
ONBOOT=yes
IPADDR=192.168.108.10
NETMASK=255.255.255.0
GATEWAY=192.168.108.2
DNS1=192.168.108.2
# 重启网卡生效
nmcli connection reload ens160
nmcli connection up ens160
配置chrony时间服务(controller作为内网NTP服务器)
vim /etc/chrony.conf
# pool 2.centos.pool.ntp.org iburst
server ntp.aliyun.com iburst
allow 192.168.108.0/24 # 允许内网网段来同步时间
systemctl restart chronyd
systemctl enable chronyd
chronyc sources -v
3.2 compute计算节点配置
hostnamectl set-hostname compute
vim /etc/sysconfig/network-scripts/ifcfg-ens160
TYPE=Ethernet
BOOTPROTO=none
NAME=ens160
DEVICE=ens160
ONBOOT=yes
IPADDR=192.168.108.11
NETMASK=255.255.255.0
GATEWAY=192.168.108.2
DNS1=192.168.108.2
nmcli connection reload ens160
nmcli connection up ens160
chrony配置,compute同步controller节点时间:
vim /etc/chrony.conf
# pool 2.centos.pool.ntp.org iburst
server controller iburst
systemctl restart chronyd
systemctl enable chronyd
chronyc sources -v
两台节点全部关机,分别拍摄快照。
四、Packstack一键部署OpenStack Victoria
Packstack是OpenStack官方提供的一键部署工具,基于Puppet自动化安装各个组件,只需要修改应答文件即可双节点部署。所有操作在controller控制节点执行。
4.1 安装packstack工具
yum install -y openstack-packstack
4.2 生成应答配置文件answers.txt
packstack --gen-answer-file=answers.txt
4.3 修改应答文件关键参数
编辑answers.txt,修改下面几个核心配置项:
CONFIG_HEAT_INSTALL=y开启heat编排组件;CONFIG_COMPUTE_HOSTS=192.168.108.10,192.168.108.11指定控制+计算节点IP;CONFIG_NEUTRON_OVN_BRIDGE_IFACES=br-ex:ens160外部网桥绑定物理网卡;CONFIG_PROVISION_DEMO=n不自动创建demo测试项目;
一键把所有组件密码统一修改为huawei
sed -i.bak -r 's/(.+_PW)=[0-9a-z]+/\1=huawei/g' answers.txt
4.4 两台节点关闭NetworkManager
NetworkManager会和OpenStack的Neutron网络组件冲突,两台机器都执行!
# controller节点
systemctl stop NetworkManager
systemctl disable NetworkManager
systemctl mask NetworkManager
# compute节点同样执行上面三条命令
systemctl stop NetworkManager
systemctl disable NetworkManager
systemctl mask NetworkManager
4.5 启动部署OpenStack
⏱注意:部署会持续40‑50分钟 ,中间
Testing if puppet apply is finished会卡住很久,属于正常现象,不要中断。
packstack --answer-file=answers.txt
部署成功提示:**** Installation completed successfully ******
4.6 部署后基础配置
两台节点启动传统network服务
systemctl start network
systemctl enable network
配置openstack命令行补全
openstack complete >> /etc/bash_completion.d/complete
4.7 访问Horizon Web仪表盘
浏览器访问:[http://192.168.108.10/dashboard](http://192.168.108.10/dashboard)
- 用户名:
admin - 密码:
huawei
登录成功代表OpenStack双节点集群部署完成。
把controller、compute关机,拍摄快照,方便后续做实验回滚。
五、拓展实操|华为云ECS弹性云服务器创建
比喻:ECS弹性云服务器,就是公有云上的虚拟机。不需要自己准备物理服务器,网页上点选配置,几分钟拿到一台Linux/Windows云主机。
5.1 计费模式三种
- 包年/包月(预付费):一次性买一段时间,适合长期使用,价格优惠;
- 按需计费(后付费):用多久算多久,随时创建、随时删除,适合测试、短期业务;
- 竞价计费 :价格很低,但是库存不足实例会被回收;严禁跑重要业务,一定要做好数据备份。
5.2 区域Region & 可用区AZ
- 区域Region:物理数据中心地理位置,比如上海、北京。不同区域之间网络延迟高,资源互相隔离;优先选择离用户近的区域降低访问延迟。
- 可用区AZ:同一个区域内部,电力、网络互相隔离的机房。>
容灾建议:业务高可用,把多台ECS分散部署同一个Region不同AZ可用区;追求低延迟通信,放在同一个可用区。
5.3 创建ECS关键选项讲解
- 实例规格:X86架构(Intel CPU)、鲲鹏架构(ARM芯片);不同规格对应不同CPU、内存性能。
- 镜像 :就是操作系统模板。
- 公共镜像:云厂商官方提供稳定系统;
- 私有镜像:自己导出保存的系统镜像;
- 共享镜像:别人分享给你的镜像;
- 市场镜像:预装软件的第三方镜像。
- 存储:系统盘,选择磁盘类型、磁盘大小;可以额外添加数据盘。
- 网络 :虚拟私有云VPC、子网;安全组相当于云上防火墙,控制端口访问。
- 登录凭证:两种方式,密码登录 / SSH密钥对登录;Linux推荐密钥对登录,安全性更高。
5.4 登录ECS三种方式
- VNC登录:网页控制台登录,服务器网络故障也可以排错;
- 云堡垒机:多台云主机统一运维审计;
- SSH远程登录:本地终端ssh连接(需要绑定弹性公网IP)。
忘记密码可以在控制台实例操作菜单重置密码,重置密码之后需要重启实例生效。
🚨新手常见坑合集
- ❌OpenStack克隆虚拟机之后两台节点SSH连接异常
✅模板机关机克隆之前,*一定要删除/etc/ssh/ssh_host_密钥,清空/etc/machine‑id,否则两台机器ID重复,SSH通信出错。
- ❌Packstack部署长时间卡住失败
✅①确认yum阿里源全部正常;②两台节点关闭NetworkManager;③主机名解析/etc/hosts双向互通;④虚拟机开启嵌套虚拟化;⑤虚拟机内存CPU资源充足。
- ❌compute节点chrony时间同步失败
✅controller节点chrony配置放开网段允许
allow 192.168.108.0/24;防火墙放行ntp服务;检查网络互通。
- ❌Packstack应答文件部署完,Horizon网页打不开
✅查看packstack部署日志
/var/tmp/packstack/*/openstack‑setup.log;确认controller节点httpd、openstack相关组件服务正常运行。
- ❌混淆链接克隆和完整克隆
✅OpenStack实验必须完整克隆;链接克隆依赖原始模板机,模板机损坏全部克隆机报废。
- ❌ECS竞价实例跑正式业务
✅竞价实例库存不足会被平台强制回收;只适合测试,生产业务不要选择竞价计费模式。
- ❌ECS安全组没放行22端口,SSH连不上云主机
✅安全组是云上防火墙,入方向需要放开SSH 22端口;即使系统内部防火墙放行,安全组拦截依旧访问失败。
- ❌OpenStack实验模板机开机忘记关闭SELinux
✅模板阶段修改
/etc/selinux/config设置SELINUX=disabled,需要重启系统才生效。
总结
- OpenStack‑Victoria双节点实验:先制作干净模板虚拟机,清除ssh密钥、machine‑id,完整克隆出控制节点与计算节点;配置静态IP、hosts解析、chrony内网时间同步;
- Packstack工具通过应答文件自动化部署OpenStack;部署前两台节点必须关闭NetworkManager;部署时间很长耐心等待,部署完成访问Horizon网页仪表盘;
- 公有云ECS弹性云服务器:分清包年包月、按需、竞价三种计费;理解Region区域、AZ可用区容灾思想;熟悉镜像、安全组、登录凭证核心概念;掌握VNC、SSH、堡垒机三种登录方式。
思考题&互动
- OpenStack模板虚拟机克隆前,为什么要删除ssh_host_*密钥、清空machine‑id?
- Packstack部署OpenStack,两台节点为什么要关闭NetworkManager服务?
- 公有云Region区域和AZ可用区分别是什么?高可用业务如何部署ECS实例?
- ECS竞价实例能不能用于正式生产业务?说出你的理由。
欢迎评论区分享踩坑,本地搭建OpenStack对电脑内存要求较高,条件允许建议完整实操一遍!