OpenStack 为什么被叫做云操作系统?核心架构深度解析
Openstack架构理论
一、起源
-
2006年亚马逊推出AWS,正式开启云计算的新纪元 基于AWS二次开发的
-
2010年7月美国国家航空航天局(NASA)与Rackspace合作,共同宣布OpenStack开放源码计划,由此开启了属于OpenStack的时代
-
OpenStack从诞生之初对标AWS,一直在向AWS学习,同时开放接口去兼容各种AWS服务
二、openstack是什么?
1、openstack是虚拟机、裸金属和容器的云基础架构
2、openstack可控自己整个数据中心的大型计算、存储和网络资源池
3、所有资源都通告API或Web界面进行管理
三、openstack能做什么?
简单来说就是统一使用不同的服务来实现不同的功能
1、openstack通过一组互联的服务器提供基础设施及服务(IaaS)解决方案。每个服务都提供了相应程序编程接口(API)来促进这种集成
2、openstack项目是一个适用于所有类型云的开源云计算平台,项目目标是提供实施简单、可大规模扩展、丰富、标准统一的云计算管理平台。

四、openstack工作原理概述
-
OpenStack实际上由一系列叫作脚本的命令组成。这些脚本会被捆绑到名为项目的软件包中,这些软件包则用于传递创建云环境的任务
-
为了创建这些环境,OpenStack还会使用 2 种其他类型的软件:
- 虚拟化软件,用于创建从硬件中抽象出来的虚拟资源层
- 基础操作系统(OS),用于执行OpenStack脚本发出的命令
-
OpenStack本身不会虚拟化资源,但会使用虚拟化资源来构建云
-
OpenStack、虚拟化和基础操作系统,这 3 种技术协同工作服务用户
五、openstack设计理念
1、开放:开源,尽最大可能重用已有开源项目
2、灵活:架构可裁剪,大量使用插件化方式进行架构设计与实现
3、可扩展:由多个相互独立的项目组成每个项目包含多个独立服务组件,无中心架构,无状态架构
六、openstack与虚拟化的区别
- open stack本身不是虚拟化,是知识系统的控制面,不包括系统的数据面组件,如Hypervisor、存储、和网络设备等
- 虚拟化是openstack底层的技术实现手段之一,但并非核心关注点
关键的区别:
openstack: 自身不提供虚拟化;调用多种技术实现多资源池管理;对外提供统一管理接口
虚拟化:环境隔离、资源复用;降低隔离损耗,提升运行效率;提供高级虚拟化特性
七、OpenStack与云计算的关系
open stack只是构建云计算的关键组件:内核、骨干、框架、总线
| 对比维度 | OpenStack | 云计算 |
|---|---|---|
| 关系 | 构建云计算的关键组件 | 完整的云计算体系 |
| 角色 | 内核、骨干、框架、总线 | 包含 OpenStack 在内的整套服务 |
OpenStack 只是构建云计算的关键组件
八、openstack架构(重点)
- Horizon:Web 控制面板,可视化管理 OpenStack 所有资源,不用敲命令。
- Neutron:网络组件,软件定义网络,创建虚拟网络、子网、路由器,给虚拟机分配网络。
- Nova:计算服务,核心,管理虚拟机生命周期:创建、启动、关机、销毁,调度 CPU 内存资源。
- Swift:对象存储,存放图片、备份、镜像等非结构化数据,分布式高可靠。
- Cinder:块存储,给虚拟机挂载硬盘卷,虚拟机重启数据保留。
- Manila:文件存储,提供共享文件系统(NFS/CIFS),多台虚拟机可同时读写同一个共享目录。
- Heat:编排服务,通过模板批量自动化部署整套云资源(虚拟机 + 网络 + 存储),一键部署应用环境。
- Ironic:裸金属服务,直接管理物理服务器,像创建虚拟机一样自动部署物理机 OS、开关机。
- Keystone:身份认证,统一账号、权限、角色,所有组件都要在这里鉴权。
- Glance:镜像管理,上传、保存虚拟机操作系统镜像,Nova 创建实例时读取镜像。
- Ceilometer:计量服务,采集云资源使用数据(CPU、流量、磁盘),用于

要设计、部署和配置OpenStack,管理员必须了解其逻辑架构每个OpenStack服务内部是由多个进程组成。
所有服务(Keystone除外)都至少有一个API进程,负责监听API请求,对请求进行预处理并将它们传递给服务的其他部分
每个OpenStack服务的进程之间的通信,使用AMQP消息代理。服务的状态存储在数据库中。在部署和配置OpenStack云时,管理员可以在多种消息代理和数据库解决方案中进行选择,例如RabbitMQ、MySQL、MariaDB和SQLite
用户可以通过Web用户界面、命令行客户端以及通过浏览器插件或curl等工具发出API请求来访问OpenStack
OpenStack生产环境部署架构示例

生产环境中,一般会有专门的OpenStack部署服务节点、控制节点、计算节点、网络节点和存储服务节点等。
生产环境的控制节点建议三台以上,其他节点按需求部署。
如果只是测试,OpenStack服务可以部署在单节点上
提问:创建一个VM需要些什么资源?

OpenStack创建VM,服务间交互示例

九、为什么称Openstack是云操作系统?
它对底层硬件计算、存储、网络资源进行抽象池化管理;对外提供统一 API 接口,向上支撑上层云业务,对下屏蔽底层硬件差异,像操作系统管理计算机硬件一样管理整个数据中心硬件资源。
十、实战:CentOS Stream 8 用 PackStack 部署 OpenStack Victoria
理论讲得再多,不如动手部署一次。本章完整演示如何在 CentOS Stream 8 上用 PackStack 一键部署 OpenStack Victoria(双节点:controller + compute),包含从 yum 源配置到登录 Dashboard 的全部步骤。
前期准备
1、资源清单
CentOS-Stream-8(minimal安装) -CentOS-Stream-8-20240603.0-x86_64-dvd1.iso
https://mirrors.aliyun.com/centos-vault/8-stream/isos/x86_64/CentOS-Stream-8-20240603.0-x86_64-dvd1.iso?spm=a2c6h.25603864.0.0.33e24ee4AiZUTJ
vmware workstation17.5
OpenStack-Victoria
2、虚拟机硬件配置
controller 4CPU 8G内存 1张网卡:NAT 100G系统盘
compute 4CPU 8G内存 1张网卡:NAT 100G系统盘
按照个人情况配置内存
3、网络拓扑
vmware网络设置:
NAT网络,开启DHCP,192.168.108.0/24,网关192.168.108.2,DNS 192.168.108.2
说明:
Windows环境vmware的NAT网络网关为192.168.108.2
Linux环境vmware的NAT网络网关为192.168.108.1
/etc/hosts
192.168.108.10 controller
192.168.108.11 compute
步骤一:准备模板虚拟机
基于CentOS-Stream-8模板制作.pdf 制作的模板,克隆出一个虚拟机(openstack_template),作为openstack模板虚拟机


完整克隆,克隆好后,开机配置
配置yum源
[root@localhost ~]# rm -rf /etc/yum.repos.d/*
[root@localhost ~]# 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/
gpgcheck=0
enabled=1
[highavailability]
name=CentOS Stream 8 - HighAvailability
baseurl=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/
gpgcheck=0
enabled=1
[rt]
name=CentOS Stream 8 - RT
baseurl=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/
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/
gpgcheck=0
enabled=1
[extras]
name=CentOS Stream $releasever - Extras
baseurl=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/
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/
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/
gpgcheck=0
enabled=1
[baseos]
name=CentOS Stream 8 - BaseOS
baseurl=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/
gpgcheck=0
enabled=1
[powertools]
name=CentOS Stream 8 - PowerTools
baseurl=https://mirrors.aliyun.com/centos-vault/8-stream/PowerTools/x86_64/os/
gpgcheck=0
enabled=1
EOF
[root@localhost ~]# yum clean all
0 files removed
[root@localhost ~]# yum makecache
安装方便操作环境包及基础软件包
[root@localhost ~]# yum install -y bash-completion vim open-vm-tools net-tools chrony.x86_64
[root@localhost ~]# source /usr/share/bash-completion/bash_completion
设置/etc/hosts
[root@localhost ~]# echo '192.168.108.10 controller' >> /etc/hosts
[root@localhost ~]# echo '192.168.108.11 compute' >> /etc/hosts
关闭SELinux
[root@localhost ~]# sed -i '/^SELINUX=/cSELINUX=disabled' /etc/selinux/config
编辑网卡信息
[root@localhost ~]# cd /etc/sysconfig/network-scripts/
[root@localhost network-scripts]# vim ifcfg-ens160
TYPE=Ethernet
BOOTPROTO=dhcp
NAME=ens160
DEVICE=ens160
ONBOOT=yes
清除密钥信息
[root@localhost ~]# cd /etc/ssh/
[root@localhost ssh]# rm -rf ssh_host_*
清除Machine ID
[root@localhost ~]# cat /dev/null > /etc/machine-id
[root@localhost ~]# cat /etc/machine-id
关闭操作系统并拍快照。
[root@localhost ~]# poweroff
步骤二:准备openstack节点
克隆虚拟机并修改基础配置
采用完全克隆方法克隆出其他2台虚拟机(openstack_controller , openstack_compute)。






同样的操作克隆计算节点

2节点的CPU需要开启虚拟化支持。

两节点配置不同的IP,主机名
两节点分别开机,做以下配置
配置主机名
controller:
[root@localhost ~]# hostnamectl set-hostname controller
compute:
[root@localhost ~]# hostnamectl set-hostname compute
配置IP地址
controller:
[root@controller ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens160
TYPE=Ethernet
BOOTPROTO=none #这行从dhcp 变更为 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
[root@controller ~]# nmcli connection reload ens160
[root@controller ~]# nmcli connection up ens160
compute:
[root@compute ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens160
TYPE=Ethernet
BOOTPROTO=none #这行从dhcp 变更为 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
[root@controller ~]# nmcli connection reload ens160
[root@controller ~]# nmcli connection up ens160
配置NTP
controller:
[root@controller ~]# vim /etc/chrony.conf
3 # pool 2.centos.pool.ntp.org iburst
4 server ntp.aliyun.com iburst
22 # Allow NTP client access from local network.
23 #allow 192.168.0.0/16
24 allow 192.168.108.0/24
#启动服务
[root@controller ~]# systemctl restart chronyd
[root@controller ~]# systemctl enable chronyd
# 测试
[root@controller ~]# chronyc sources -v
.-- Source mode '^' = server, '=' = peer, '#' = local clock.
/ .- Source state '*' = current best, '+' = combined, '-' = not combined,
| / 'x' = may be in error, '~' = too variable, '?' = unusable.
|| .- xxxx [ yyyy ] +/- zzzz
|| Reachability register (octal) -. | xxxx = adjusted offset,
|| Log2(Polling interval) --. | | yyyy = measured offset,
|| \ | | zzzz = estimated error.
|| | | \
MS Name/IP address Stratum Poll Reach LastRx Last sample
===============================================================================
^* 203.107.6.88 2 6 17 45 -479us[-1323us] +/- 27ms
compute:
[root@compute ~]# vim /etc/chrony.conf
# pool 2.centos.pool.ntp.org iburst
server controller iburst
#启动服务
[root@compute ~]# systemctl restart chronyd
[root@compute ~]# systemctl enable chronyd
# 测试
[root@compute ~]# chronyc sources -v
.-- Source mode '^' = server, '=' = peer, '#' = local clock.
/ .- Source state '*' = current best, '+' = combined, '-' = not combined,
| / 'x' = may be in error, '~' = too variable, '?' = unusable.
|| .- xxxx [ yyyy ] +/- zzzz
|| Reachability register (octal) -. | xxxx = adjusted offset,
|| Log2(Polling interval) --. | | yyyy = measured offset,
|| \ | | zzzz = estimated error.
|| | | \
MS Name/IP address Stratum Poll Reach LastRx Last sample
===============================================================================
^? controller 0 7 0 - +0ns[ +0ns] +/- 0ns
关闭操作系统,拍摄快照
controller:
[root@controller ~]# poweroff
compute:
[root@compute ~]# poweroff
步骤三:安装OpenStack和测试
控制节点安装packstack
controller:
[root@controller ~]# yum install -y openstack-packstack
生成应答文件
controller:
[root@controller ~]# packstack --gen-answer-file=answers.txt
Packstack changed given value to required value /root/.ssh/id_rsa.pub
Additional information:
* Parameter CONFIG_NEUTRON_L2_AGENT: You have chosen OVN Neutron backend. Note that this backend does not support the VPNaaS plugin. Geneve will be used as the encapsulation method for tenant networks
更改应答文件
controller:
[root@controller ~]# vim answers.txt
60 CONFIG_HEAT_INSTALL=y
97 CONFIG_COMPUTE_HOSTS=192.168.108.10,192.168.108.11
909 CONFIG_NEUTRON_OVN_BRIDGE_IFACES=br-ex:ens160
1169 CONFIG_PROVISION_DEMO=n
[root@controller ~]# sed -i.bak -r 's/(.+_PW)=[0-9a-z]+/\1=huawei/g' answers.txt
关闭NetworkManager
controller:
[root@controller ~]# systemctl stop NetworkManager; systemctl disable NetworkManager; systemctl mask NetworkManager
compute:
[root@compute ~]# systemctl stop NetworkManager; systemctl disable NetworkManager; systemctl mask NetworkManager
CentOS 8 版本默认使用 NetworkManager 管理网络,但它会和 openstack 网络组件产生冲突,从而导致告警或错误
根据应答文件配置安装openstack
controller:
[root@controller ~]# packstack --answer-file=answers.txt
Welcome to the Packstack setup utility
The installation log file is available at: /var/tmp/packstack/20240920-102825-fai6j5rg/openstack-setup.log
Installing:
Clean Up [ DONE ]
Discovering ip protocol version [ DONE ]
root@192.168.108.10's password:huawei
root@192.168.108.11's password:huawei
Setting up ssh keys [ DONE ]
Preparing servers [ DONE ]
Pre installing Puppet and discovering hosts' details [ DONE ]
Preparing pre-install entries [ DONE ]
Setting up CACERT [ DONE ]
Preparing AMQP entries [ DONE ]
Preparing MariaDB entries [ DONE ]
Fixing Keystone LDAP config parameters to be undef if empty[ DONE ]
Preparing Keystone entries [ DONE ]
Preparing Glance entries [ DONE ]
Checking if the Cinder server has a cinder-volumes vg[ DONE ]
Preparing Cinder entries [ DONE ]
Preparing Nova API entries [ DONE ]
Creating ssh keys for Nova migration [ DONE ]
Gathering ssh host keys for Nova migration [ DONE ]
Preparing Nova Compute entries [ DONE ]
Preparing Nova Scheduler entries [ DONE ]
Preparing Nova VNC Proxy entries [ DONE ]
Preparing OpenStack Network-related Nova entries [ DONE ]
Preparing Nova Common entries [ DONE ]
Preparing Neutron API entries [ DONE ]
Preparing Neutron L3 entries [ DONE ]
Preparing Neutron L2 Agent entries [ DONE ]
Preparing Neutron DHCP Agent entries [ DONE ]
Preparing Neutron Metering Agent entries [ DONE ]
Checking if NetworkManager is enabled and running [ DONE ]
Preparing OpenStack Client entries [ DONE ]
Preparing Horizon entries [ DONE ]
Preparing Swift builder entries [ DONE ]
Preparing Swift proxy entries [ DONE ]
Preparing Swift storage entries [ DONE ]
Preparing Heat entries [ DONE ]
Preparing Heat CloudFormation API entries [ DONE ]
Preparing Gnocchi entries [ DONE ]
Preparing Redis entries [ DONE ]
Preparing Ceilometer entries [ DONE ]
Preparing Aodh entries [ DONE ]
Preparing Puppet manifests [ DONE ]
Copying Puppet modules and manifests [ DONE ]
Applying 192.168.108.10_controller.pp
Testing if puppet apply is finished: 192.168.108.10_controller.pp [ | ]
安装过程中,会在Testing if …controller.pp步骤停留很长时间,预计40-50分钟,其他步骤很快。
安装完成

登录测试

开启network服务
controller:
[root@controller ~]# systemctl start network
[root@controller ~]# systemctl enable network
network.service is not a native service, redirecting to systemd-sysv-install.
Executing: /usr/lib/systemd/systemd-sysv-install enable network
compute:
[root@compute ~]# systemctl start network
[root@compute ~]# systemctl enable network
network.service is not a native service, redirecting to systemd-sysv-install.
Executing: /usr/lib/systemd/systemd-sysv-install enable network
配置OpenStack命令补全
#将命令写入到/etc/bash_completion.d/,路径一定要写正确
[root@controller ~]# openstack complete >> /etc/bash_completion.d/complete
The 'openstack bgp speaker show dragents' CLI is deprecated and will be removed in the future. Use 'openstack bgp dragent list' CLI instead.
关机拍快照
openstack_controller和openstack_compute两个拍摄快照

至此安装结束
openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐


所有评论(0)