一、OpenStack 核心组件及作用#
1. HORIZON —— 统一图形界面服务#
- 核心功能:提供基于 Web 的 Dashboard 图形管理控制台,供云管理员和普通租户进行云资源的可视化调配与监控。
2. NOVA —— 计算资源管理服务#
- 核心功能:负责管理和配置云计算环境中的虚拟化算力资源(
nova-compute)。
- 角色分工:
- Controller 控制节点:运行
nova-api、nova-scheduler、nova-conductor 等调度服务。当用户发起创建云主机请求时,nova-api 接收请求并解析,nova-scheduler 根据规格策略选择最佳计算节点进行负载调度;
- Compute 计算节点:实际承载云主机运行的工作节点(支持对接 KVM、VMware ESXi、Xen 等异构虚拟化主机)。
- 控制节点的高可用与性能瓶颈:
- 控制节点承担所有 API 网关、数据库和消息队列,存在高可用与性能压力;
3. GLANCE —— 镜像服务#
- 核心功能:负责操作系统镜像的发现、注册、检索与存储管理。
- 常见磁盘镜像格式:
- KVM 常用格式:
qcow2(支持瘦分配与写时复制 COW);
- VMware 常用格式:
vmdk。
- 部署建议:通常复用并集成部署在控制节点上以实现高可用。
4. SWIFT —— 对象存储服务#
- 核心功能:提供高可用、分布式、最终一致性的对象存储服务(Object Storage),专门用于存储静态无结构数据、云主机系统镜像、数据全量备份等。
5. NEUTRON —— 软件定义网络(SDN)#
- 核心功能:提供云计算环境中的虚拟网络即服务,管理虚拟路由、交换机、安全组、浮动 IP 及跨节点流量打通。
- 网络技术:全面支持 VLAN、VXLAN、Geneve 及分布式虚拟路由(DVR);
- 硬件 SDN 模式:生产环境中通常配备 2 台专用网络节点搭建双活或主备集群。
6. CINDER —— 块存储服务#
- 核心功能:为云主机提供持久化的块存储(云硬盘),可动态挂载、卸载、快照与扩容。
- 底层对接能力:
- 对接传统存储阵列:华为 OceanStor、IBM、EMC 等高端硬件存储;
- 对接开源分布式存储:Ceph RBD、GlusterFS 等。
- 底层机制:当用户申请一块云硬盘时,Cinder 会向下透传指令到后端存储系统,本质上相当于在物理/分布式存储中划分并映射出一个 LUN。
- 对比说明:对象存储(如百度网盘、Swift、S3)无法作为块设备直接格式化挂载为云主机文件系统,而 Cinder 块设备可以直接格式化并进行挂载使用。
7. HEAT —— 基础设施编排服务#
- 核心功能:基于声明式模板(HOT 模板或 AWS CloudFormation 格式),通过图形化编排或编写脚本,一键自动化批量部署多台虚拟机、数据库集群、网络拓扑与监控策略。
8. CEILOMETER —— 计量监控服务#
- 核心功能:采集物理资源与虚拟资源的性能指标、运行时间与使用量。
- 公有云场景:记录 API 调用量、网络流出量、算力时长,对接计费计费系统;
- 私有云场景:监控租户配额水位,识别资源超用或空闲情况,为容量规划提供支撑。
9. KEYSTONE —— 统一身份认证与授权服务#
- 核心功能:OpenStack 整体安全基石,负责全平台的租户(Project)、用户(User)、角色(Role)、服务目录与 Token 鉴权认证。
- 企业级身份联邦对接:
- 可与企业现有的 Windows Active Directory (AD) 或 Linux OpenLDAP 无缝整合,实现企业级统一账号单点登录(SSO);
- 流程审批与权限隔离(以华为云为例):
- 支持云主机多级申请与审批工作流(支持高达 5 级审批);
- 贯彻“三权分立”安全准则(安全员、系统管理员、审计员分权管理);
- 支持对接客户企业自研 OA/BPM 审批流系统。
核心组件功能速查表:#
| 组件名称 |
代码代号 |
核心服务功能 |
| Horizon |
Dashboard |
统一 Web 图形化管理控制台 |
| Nova |
Compute |
计算资源生命周期与实例调度管理 |
| Glance |
Image |
虚拟机镜像存储与版本注册 |
| Swift |
Object |
大规模非结构化对象存储服务 |
| Neutron |
Network |
软件定义网络(SDN)、路由与安全组管理 |
| Cinder |
Block |
云主机持久化块存储(云硬盘)管理 |
| Heat |
Orchestration |
基础设施即代码(IaC)多资源栈编排 |
| Ceilometer |
Metering |
资源使用量统计、监控计量与配额分析 |
| Keystone |
Identity |
统一身份认证、鉴权令牌与服务目录管理 |
二、OpenStack 部署规划(以 Victoria 版为例)#
1. 部署方式比较#
- 开源 OpenStack 手动部署:按组件逐个编译配置,过程繁琐复杂,常用于底层机制深度学习;
- 工具化自动化部署:
- Ansible 部署(如 OpenStack-Ansible、Kolla-Ansible);
- Packstack 部署:RedHat 开源的基于 Puppet 的自动化快速交付工具(本实战采用);
2. 集群节点规格与网络规划#
(1)Controller 控制节点(1 台)#
- 承载组件:
- API 服务:
nova-api、cinder-api、glance-api、neutron-server 等;
- 底层基础服务:MariaDB / MySQL、RabbitMQ 消息队列、Memcached、Keystone;
- 网络与管理服务:网络节点外网路由转发、YUM 本地缓存、Chrony 时间同步服务端。
- 系统配置要求:
- CPU:4 vCPU 起
- 内存:4GB 内存起
- 硬盘:100GB 可用磁盘空间
- 网卡:3 块网卡(网卡 1 配置为桥接模式访问互联网;网卡 2 与网卡 3 配置为仅主机 Host-Only 模式走内网业务)
- IP 地址规划:
- 内部管理 IP:192.168.100.10
- 外部访问 IP:192.168.10.10
(2)Compute 计算节点(1 台)#
- 承载组件:
nova-compute、网络 L2 Agent(Open vSwitch Agent)
- 系统配置要求:
- CPU:4 vCPU 起
- 内存:8GB 内存起(最低 4GB)
- 硬盘:100GB 磁盘空间
- 网卡:3 块网卡(全配置为仅主机 Host-Only 模式)
- IP 地址规划:
(3)YUM 软件源服务器 + Chrony 时间服务器(1 台)#
- 系统配置要求:
- CPU:2 vCPU
- 内存:2GB
- 网卡:2 块(一块桥接连接 Internet 同步公网时间与上游软件源,另一块仅主机模式为内网节点提供服务)
- IP 地址规划:
- 外网 IP:192.168.10.11
- 内网 IP:192.168.100.20
环境降配说明:若个人电脑硬件资源紧张,可最低压缩为 2 台虚拟机(控制节点复用为 YUM 源与时间服务器,另配 1 台计算节点)。注意:各节点系统时间必须保持高度一致,时钟漂移不得超过 5 分钟,否则 Keystone 握手与消息队列通信将全面失效。
三、OpenStack 自动化部署实战全流程#
阶段一:YUM 源服务器与 Chrony 时间服务器搭建#
1. 配置网络接口#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
|
# 1. 配置内部通信网卡 ens160
[root@Cloud ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens160
TYPE=Ethernet
BOOTPROTO=none
NAME=ens160
DEVICE=ens160
ONBOOT=yes
IPADDR=192.168.100.20
PREFIX=24
# 2. 配置可连接外网的网卡 ens192(用于同步公网时钟)
[root@Cloud ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens192
TYPE=Ethernet
BOOTPROTO=none
NAME=ens192
DEVICE=ens192
ONBOOT=yes
PROXY_METHOD=none
BROWSER_ONLY=no
IPADDR=192.168.10.11
PREFIX=24
GATEWAY=192.168.10.1
DNS1=192.168.10.1
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=no
UUID=03da7500-2101-c722-2438-d0d006c28c73
# 重启网卡使配置生效
[root@Cloud ~]# nmcli connection down ens160 ; nmcli connection up ens160
Connection 'ens160' successfully deactivated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/1)
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/4)
[root@Cloud ~]# nmcli connection down ens192 ; nmcli connection up ens192
Connection 'ens192' successfully deactivated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/3)
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/5)
|
2. 配置本地光盘 YUM 源#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
[root@Cloud ~]# cd /etc/yum.repos.d/
[root@Cloud yum.repos.d]# mkdir bak
[root@Cloud yum.repos.d]# mv CentOS-Linux-* bak/
# 挂载操作系统 ISO 光盘
mount /dev/cdrom /media/
# 编写光盘本地源配置文件
[root@Cloud ~]# cat > /etc/yum.repos.d/dvd.repo << 'EOF'
> [BaseOS]
> name=BaseOS
> baseurl=file:///media/BaseOS
> gpgcheck=0
>
> [AppStream]
> name=AppStream
> baseurl=file:///media/AppStream
> gpgcheck=0
> EOF
|
3. 配置 Chrony 时间同步服务端#
由于 OpenStack 对节点间时钟同步要求极其严苛,先配置时间源:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
# 编辑 /etc/chrony.conf
[root@Cloud ~]# vim /etc/chrony.conf
# Use public servers from the pool.ntp.org project.
# Please consider joining the pool (http://www.pool.ntp.org/join.html).
pool ntp.tencent.com iburst
# Allow NTP client access from local network.
allow 192.168.100.0/24
# Serve time even if not synchronized to a time source.
local stratum 10
# 重启并验证时间同步服务
[root@Cloud ~]# systemctl restart chronyd.service
[root@Cloud ~]# chronyc sources
210 Number of sources = 1
MS Name/IP address Stratum Poll Reach LastRx Last sample
===============================================================================
^* 106.55.184.199 2 6 17 2 -224us[ -144us] +/- 54ms
# 关闭防火墙与 SELinux
[root@Cloud ~]# systemctl disable firewalld.service --now
[root@Cloud ~]# setenforce 0
[root@Cloud ~]# sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config
|
4. 搭建 httpd本地web yum仓库#
将 CentOS 8 及 OpenStack Victoria 软件仓库发布为 HTTP 镜像源,供所有集群节点拉取。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
|
# 1. 安装并启动 Apache Web 服务
[root@Cloud ~]# yum -y install httpd
[root@Cloud ~]# systemctl enable httpd --now
# 2. 创建目录并挂载镜像文件
[root@Cloud ~]# mkdir /isos
[root@Cloud ~]# mkdir -p /var/www/html/centos8
[root@Cloud ~]# mkdir -p /var/www/html/openstack
# 挂载基础系统光盘与 OpenStack Victoria 安装镜像
[root@Cloud ~]# mount /dev/cdrom /var/www/html/centos8/
[root@Cloud ~]# mount /isos/26-CentOS8-4-OSP-Victoria.iso /var/www/html/openstack/
# 3. 持久化挂载写入 /etc/fstab
[root@Cloud ~]# vim /etc/fstab
/dev/cdrom /var/www/html/centos8 iso9660 defaults 0 0
/isos/26-CentOS8-4-OSP-Victoria.iso /var/www/html/openstack iso9660 defaults 0 0
# 4. 配置 HTTP YUM 仓库文件
[root@Cloud ~]# vim /etc/yum.repos.d/dvd.repo
[BaseOS]
name=BaseOS
baseurl=http://192.168.100.20/centos8/BaseOS
gpgcheck=0
[AppStream]
name=AppStream
baseurl=http://192.168.100.20/centos8/AppStream
gpgcheck=0
[root@Cloud ~]# vim /etc/yum.repos.d/openstack.repo
[centos-advanced-virtualization]
name=centos-advanced-virtualization
baseurl=http://192.168.100.20/openstack/centos-advanced-virtualization
gpgcheck=0
[centos-nfv-openvswitch]
name=centos-nfv-openvswitch
baseurl=http://192.168.100.20/openstack/centos-nfv-openvswitch
gpgcheck=0
[centos-rabbitmq-38]
name=centos-rabbitmq-38
baseurl=http://192.168.100.20/openstack/centos-rabbitmq-38
gpgcheck=0
[PowerTools]
name=PowerTools
baseurl=http://192.168.100.20/openstack/PowerTools
gpgcheck=0
[centos-ceph-nautilus]
name=centos-ceph-nautilus
baseurl=http://192.168.100.20/openstack/centos-ceph-nautilus
gpgcheck=0
[centos-openstack-victoria]
name=centos-openstack-victoria
baseurl=http://192.168.100.20/openstack/centos-openstack-victoria
gpgcheck=0
[extras]
name=extras
baseurl=http://192.168.100.20/openstack/extras
gpgcheck=0
# 5. 将写好的 repo 文件批量分发至各控制节点与计算节点
[root@Cloud ~]# scp /etc/yum.repos.d/dvd.repo /etc/yum.repos.d/openstack.repo root@192.168.100.10:/etc/yum.repos.d/
[root@Cloud ~]# scp /etc/yum.repos.d/dvd.repo /etc/yum.repos.d/openstack.repo root@192.168.100.11:/etc/yum.repos.d/
|
阶段二:集群各节点系统环境初始化#
1. Controller控制节点初始化(192.168.100.10)#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
|
# 1. 配置管理网络 ens160
[root@Controller ~]# nmcli connection modify ens160 ipv4.addresses 192.168.100.10/24 ipv4.method manual autoconnect yes
[root@Controller ~]# nmcli connection down ens160 ; nmcli connection up ens160
# 2. 配置外部网络网卡 ens224
[root@Controller ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens224
TYPE=Ethernet
BOOTPROTO=none
NAME=ens224
DEVICE=ens224
ONBOOT=yes
[root@Controller ~]# nmcli connection reload
[root@Controller ~]# nmcli connection modify ens224 ipv4.addresses 192.168.10.10/24 ipv4.gateway 192.168.10.1 ipv4.dns 192.168.10.1 ipv4.method manual autoconnect yes
[root@Controller ~]# nmcli connection down ens224 ; nmcli connection up ens224
# 3. 配置 Chrony 时间同步客户端
[root@Controller ~]# vim /etc/chrony.conf
# Use public servers from the pool.ntp.org project.
# Please consider joining the pool (http://www.pool.ntp.org/join.html).
pool 192.168.100.20 iburst
[root@Controller ~]# systemctl restart chronyd.service
[root@Controller ~]# chronyc sources
210 Number of sources = 1
MS Name/IP address Stratum Poll Reach LastRx Last sample
===============================================================================
^* 192.168.100.20 3 6 377 24 -22us[ -46us] +/- 43ms
# 4. 配置主机名
[root@Controller ~]# hostnamectl set-hostname Controller
# 5. 关闭防火墙与 SELinux
[root@Controller ~]# systemctl disable firewalld.service --now
[root@Controller ~]# setenforce 0
[root@Controller ~]# sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config
# 6. 配置集群 /etc/hosts 解析
[root@Controller ~]# vim /etc/hosts
192.168.100.10 Controller
192.168.100.11 Compute
# 7. 清理默认系统 repo 缓存
[root@Controller ~]# cd /etc/yum.repos.d
[root@Controller yum.repos.d]# mkdir -p bak && mv CentOS-Linux-* bak/
|
2. Compute计算节点初始化(192.168.100.11)#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
# 1. 配置管理网络
[root@Compute ~]# nmcli connection modify ens160 ipv4.addresses 192.168.100.11/24 ipv4.method manual autoconnect yes
[root@Compute ~]# nmcli connection down ens160 ; nmcli connection up ens160
# 2. 配置 Chrony 时间同步客户端
[root@Compute ~]# vim /etc/chrony.conf
# Use public servers from the pool.ntp.org project.
# Please consider joining the pool (http://www.pool.ntp.org/join.html).
pool 192.168.100.20 iburst
[root@Compute ~]# systemctl enable chronyd.service --now
# 3. 设置主机名
[root@Compute ~]# hostnamectl set-hostname Compute
# 4. 关闭防火墙与 SELinux
[root@Compute ~]# systemctl disable firewalld.service --now
[root@Compute ~]# setenforce 0
[root@Compute ~]# sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config
# 5. 配置集群 hosts 解析
[root@Compute ~]# vim /etc/hosts
192.168.100.10 Controller
192.168.100.11 Compute
# 6. 清理默认系统 repo
[root@Compute ~]# cd /etc/yum.repos.d
[root@Compute yum.repos.d]# mkdir -p bak && mv CentOS-Linux-* bak/
|
⚠️ 关键检查点:此时建议将所有虚拟机关机,**统一拍摄快照,以便出现异常时快速回退。
阶段三:Packstack 自动化应答部署#
1. 安装 Packstack 部署工具#
在控制节点(Controller)执行:
1
|
[root@Controller ~]# yum -y install openstack-packstack
|
2. 生成默认部署应答文件#
1
|
[root@Controller ~]# packstack --gen-answer-file=/root/answers.txt
|
网络方案说明:OpenStack Victoria 支持 OVN(Open Virtual Network)与传统 OVS(Open vSwitch)。
3. 精准定制修改应答文件参数#
1
2
|
# 将自动探测的外网 IP 统一替换为内网管理 IP 192.168.100.10
[root@Controller ~]# sed -i 's/192.168.10.10/192.168.100.10/g' /root/answers.txt
|
编辑 /root/answers.txt,核对并修改以下核心配置项:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
# 1. 指定计算节点集群 IP 列表(逗号分隔)
CONFIG_COMPUTE_HOSTS=192.168.100.11
# 2. 设置 Keystone 管理员 root 初始密码
CONFIG_KEYSTONE_ADMIN_PW=000000
# 3. 禁用 Demo 演示租户网络(生产化规范)
CONFIG_PROVISION_DEMO=n
# 4. 开启 Heat 编排组件支持
CONFIG_HEAT_INSTALL=y
# 5. Neutron 核心驱动与网络类型配置(ML2 + OVS)
CONFIG_NEUTRON_ML2_TYPE_DRIVERS=geneve,flat,vxlan,vlan
CONFIG_NEUTRON_ML2_MECHANISM_DRIVERS=openvswitch
CONFIG_NEUTRON_ML2_TENANT_NETWORK_TYPES=vxlan
CONFIG_NEUTRON_L2_AGENT=openvswitch
# 6. OVS 外部网络网桥绑定配置(关联物理外部网卡 ens224)
CONFIG_NEUTRON_OVS_BRIDGE_MAPPINGS=extnet:br-ex
CONFIG_NEUTRON_OVS_BRIDGE_IFACES=br-ex:ens224
# 7. 预设存储配额容量
CONFIG_SWIFT_STORAGE_SIZE=20G
CONFIG_CINDER_VOLUMES_SIZE=50G
|
⚠️ 关键检查点:修改完应答文件后,建议再次将所有虚拟机关机拍摄快照。
4. 执行一键自动化部署#
开机后在控制节点运行部署命令:
1
|
[root@Controller ~]# packstack --answer-file=/root/answers.txt
|
部署脚本将基于 Puppet 自动在所有节点完成软件源配置、数据库建表、消息队列集群建立、证书生成以及各组件协同联调。完成后将在终端打印登录 Dashboard 的 URL 及 keystonerc_admin 环境变量文件路径。
四、Linux 系统日志管理与 OpenStack 故障排查#
1. Linux Rsyslog 日志分级与配置架构#
在 Linux 系统中,系统底层与大部分服务的日志均交由 rsyslog 守护进程集中管理。
- 查看配置文件:
1
2
|
rpm -qc rsyslog
# 核心主配置文件: /etc/rsyslog.conf
|
日志规则语法解析:#
1
|
服务类别(Facility).日志等级(Priority) 日志存储路径
|
常见配置示例:
1
2
3
4
5
6
7
8
9
|
# 1. 系统通用常规消息:
# 记录所有服务 >=info 级别的日志,但排除邮件、认证安全和计划任务日志
*.info;mail.none;authpriv.none;cron.none /var/log/messages
# 2. 调试日志:
*.debug /var/log/debug
# 3. 错误级别日志:
*.err /var/log/error.log
|
- 语法规则要点:
mail:服务类别(Facility);
info:日志优先级等级;
.:表示匹配**大于等于(>=)**该优先级的日志消息;
*.info:表示所有服务的 >= info 级别日志均汇聚写入目标文件。
实时动态监控日志命令:#
1
2
3
4
5
|
# 跟踪系统日志末尾输出
tail /var/log/messages
# 持续挂起实时监听日志流
tail -f /var/log/messages
|
2. OpenStack 自定义服务日志排查准则#
排错原则:各组件通常具备独立的自定义日志文件体系(位于 /var/log/<组件名>/ 目录下)。若组件运行异常,优先排查该组件专属日志,无自定义日志时再退回排查系统全局日志 /var/log/messages。
实战案例:以 Neutron 网络服务故障定位为例#
在部署或运行过程中,若虚拟网络创建失败或 OVS 端口未上线,可通过正则匹配直接捕获错误与警告信息:
1
2
3
4
5
|
# 1. 跨文件正则过滤所有 Neutron 日志中的错误与告警
tail -f /var/log/neutron/*.log | grep -iE '(err|warn)'
# 2. 深度排查 neutron-server 核心 API 服务日志,并输出匹配项前后 3 行上下文:
tail -f /var/log/neutron/server.log | grep -iE -A3 -B3 '(err|warn)'
|
参数说明:
-i:忽略大小写;
-E:开启扩展正则表达式匹配 (err|warn);
-A 3 (After):打印匹配行后 3 行;
-B 3 (Before):打印匹配行前 3 行。