openstack云计算平台

简介

OpenStack是一款开源的云计算管理平台项目,它允许企业或组织在自己的硬件基础设施上搭建和管理私有云或混合云环境,提供类似公有云(如AWS、Azure)的弹性计算、存储和网络资源服务

开源云计算操作系统:OpenStack并非单一软件,而是一系列开源项目的集合,它像“云操作系统”一样,将分散的物理服务器、存储设备和网络资源整合成一个统一的、可灵活调度的资源池
基础设施即服务(IaaS)实现:它主要提供IaaS层能力,让用户可以通过Web界面、命令行或API来创建和管理虚拟机、云硬盘、虚拟网络等计算资源,无需直接操作底层硬件

环境与组OpenStack采用模块化设计,各组件分工协作,共同构建完整的云服务:
计算服务(Nova):负责虚拟机的生命周期管理,支持多种虚拟化技术(如KVM、VMware)
网络服务(Neutron):提供软件定义网络(SDN)功能,管理虚拟网络、IP地址、防火墙和安全组
存储服务:包括块存储(Cinder,为虚拟机提供持久化磁盘)和对象存储(Swift,用于存储海量非结构化数据)
身份认证(Keystone):统一管理用户身份、权限和服务目录,保障平台安全
镜像服务(Glance):存储和管理虚拟机模板镜像,方便快速部署新实例
仪表盘(Horizon):提供图形化Web管理界面,降低使用门槛件准备

部署

环境配置

新建centos虚拟机,最低4G内存,打开虚拟化引擎

添加网络适配器

禁用网络管理器

修改网卡配置

名字与设备名改为eth0

以eth0和eth1做标识

重启使服务生效

查看,成功添加网卡

设置主机名

添加解析

下载chrony确保时间同步(同样还有selinux,firewalld都需要关闭)

启动服务

验证

open stack库

下载openstack的mitaka版本

解压到opt

修改配置文件,指定安装软件的路径

升级所有软件包

重启,查看,确认内核版本

验证是否生效

数据库

下载依赖组件

修改配置文件

绑定到控制节点 IP,允许其他节点远程连接
使用 InnoDB 引擎(OpenStack 各组件数据库的强制要求)
最大连接数设为 4096(OpenStack 组件多,连接数需求大)
utf8 字符集    确保数据存储不出现中文/特殊字符乱码

启动服务

执行 MariaDB 的安全初始化脚本,选项全部选择Y,需要记住自己设定的新密码

进入mysql

数据库已就绪

消息队列

下载消息队列rabbitmq

启动服务

添加用户,用户名与密码相同

给予open stack用户全部权限

启动管理器插件,消息队列就绪

查看端口

浏览器访问,出现登录界面

默认使用guest guest登录

进入主页

可以看到刚才创建的openstack用户

缓存

下载memcache分布式内存对象缓存系统

启动服务,缓存就绪

查看端口,发现为回环地址,需要修改

修改配置

将option改为空,则memcache将默认监听所有网卡

重启服务

查看端口,成功

keystone身份认证服务

进入mysql新建数据库,给予新用户keystone所有权限,本地和远程连接,密码与用户名相同

下载keystone服务

生成一个随机值在初始的配置中作为管理员的令牌

修改keystone的配置文件

这里填入刚才生成的令牌,Keystone 刚装好时还没有任何用户,需要用这个 token 作为钥匙完成第一次登录,创建出第一个 admin 用户

设定 Keystone连接keystone数据库,keystone/keystone账号/密码,主机名是 controller

指定使用 Fernet 算法来生成和管理用户的 Token

初始化身份认证服务的数据库

进入mysql验证,成功

初始化Fernet keys

出现fernet-keys

配置 Apache HTTP 服务器

修改 Apache Web 服务器的配置文件

指定服务器名称

新建文件指定Apache监听 5000 端口(供外部和普通服务使用的 Public API)和 35357 端口(供管理员使用的 Admin API)

当有用户或其他 OpenStack 组件访问这两个端口时,Apache 会把接收到的 HTTP 请求,通过 WSGI 协议转交给后台的 Keystone 程序去处理

直接粘贴以下文本

Listen 5000
Listen 35357

<VirtualHost *:5000>
    WSGIDaemonProcess keystone-public processes=5 threads=1 user=keystone group=keystone display-name=%{GROUP}
    WSGIProcessGroup keystone-public
    WSGIScriptAlias / /usr/bin/keystone-wsgi-public
    WSGIApplicationGroup %{GLOBAL}
    WSGIPassAuthorization On
    ErrorLogFormat "%{cu}t %M"
    ErrorLog /var/log/httpd/keystone-error.log
    CustomLog /var/log/httpd/keystone-access.log combined

    <Directory /usr/bin>
        Require all granted
    </Directory>
</VirtualHost>

<VirtualHost *:35357>
    WSGIDaemonProcess keystone-admin processes=5 threads=1 user=keystone group=keystone display-name=%{GROUP}
    WSGIProcessGroup keystone-admin
    WSGIScriptAlias / /usr/bin/keystone-wsgi-admin
    WSGIApplicationGroup %{GLOBAL}
    WSGIPassAuthorization On
    ErrorLogFormat "%{cu}t %M"
    ErrorLog /var/log/httpd/keystone-error.log
    CustomLog /var/log/httpd/keystone-access.log combined

    <Directory /usr/bin>
        Require all granted
    </Directory>
</VirtualHost>

启动apache服务

查看端口验证

创建服务实体和API端点

使用刚才生成的token,指定命令行连接 Keystone 的 Admin API(35357端口),走 v3 版本,明确使用 Identity API v3 协议

创建服务实体和身份认证服务

创建认证服务的 API 端点

从上至下分别为公共,内部,管理员

总览接口

查看服务列表

创建域、项目、用户和角色

创建默认域

创建管理员项目

创建管理员用户,密码为admin

创建管理员角色

添加``admin`` 角色到 admin 项目和用户上,用以管理

新创建service项目

常规(非管理)任务应该使用无特权的项目和用户,以下面的demo为例

创建demo项目

创建demo用户,密码为demo

创建user用户,普通角色

添加user角色到demo项目和用户

验证

重置``OS_TOKEN``和``OS_URL`` 环境变量,切换为正常认证模式

作为 admin 用户,请求认证令牌,输入密码,成功

作为``demo`` 用户,请求认证令牌,可以发现用户,项目id不同,代表不同用户与项目

创建 OpenStack 客户端环境脚本

创建admin-openrc文件

内容如下

创建demo-openrc文件

内容如下

给两个文件加上可执行权限

加载并执行脚本里的环境变量,通过执行不同脚本切换不同角色从而获得不同的权限,同一条命令admin可执行,而demo普通用户没有得到授权

glance镜像服务

配置

用数据库连接客户端以 root 用户连接到数据库服务器

创建 glance 数据库

对``glance``数据库授予恰当的权限

先执行admin脚本以获得权限,创建 glance 用户

添加 admin 角色到 glance 用户和 service 项目上

创建``glance``服务实体

创建镜像服务的 API 端点,公共,内部,管理员

安装软件包

编辑文件

配置数据库访问

配置认证服务访问

配置本地文件系统存储和镜像文件位置

编辑文件

配置数据库访问

配置认证服务访问

写入镜像服务数据库,出现不推荐使用的提示为正常情况

启动镜像服务

验证

保证处于admin脚本运行状态,下载镜像源

使用 QCOW2 磁盘格式, bare 容器格式上传镜像到镜像服务并设置公共可见,这样所有的项目都可以访问

确认镜像的上传并验证属性

nova计算服务

加入计算节点

新虚拟机,前置工作与controller相同,做到open stack库配置完成

控制节点配置

用数据库连接客户端以 root 用户连接到数据库服务器

创建 nova_api 和 nova 数据库

对数据库进行正确的授权

保证admin脚本运行,创建 nova 用户

给 nova 用户添加 admin 角色

创建 nova 服务实体

创建 Compute 服务 API 端点,公共,内部,管理员

下载软件包

编辑文件

只启用计算和元数据API

配置数据库的连接

配置 “RabbitMQ” 消息队列访问

配置认证服务访问

配置``my_ip`` 来使用控制节点的管理接口的IP 地址

使能 Networking 服务(注意:这里的use少了一个u,之后排查会很麻烦

use_neutron = Ture

配置VNC代理使用控制节点的管理接口IP地址

配置镜像服务 API 的位置

配置锁路径

同步compute数据库,忽略出现的警告

启动服务

计算节点配置

转到新建的计算节点

安装软件包

编辑文件

配置``RabbitMQ``消息队列的连接

配置认证服务访问

配置 my_ip 选项

使能 Networking 服务

启用并配置远程控制台访问

配置镜像服务 API 的位置

配置锁路径

确定计算节点是否支持虚拟机的硬件加速

如果这个命令返回了大于等于1的值,则计算节点支持硬件加速且不需要额外的配置。

如果这个命令返回了0,则计算节点不支持硬件加速,必须配置 libvirt 来使用 QEMU 去代替 KVM

在 /etc/nova/nova.conf 文件的 [libvirt] 区域做出如下的编辑:

[libvirt]
...
virt_type = qemu

KVM(硬件加速,速度快)
Kernel-based Virtual Machine(基于内核的虚拟机),将 Linux 内核变成一个 Hypervisor,利用 CPU 硬件本身的虚拟化功能(Intel 叫 vmx,AMD 叫 svm)来跑虚拟机。
特点:因为直接调用了硬件,所以性能极高,和物理机几乎没区别

QEMU(纯软件模拟,速度慢)
Quick Emulator,一个纯软件模拟器
特点:当 CPU 不支持硬件虚拟化(比如在虚拟机里安装 OpenStack,或者版本低的物理机),或者返回值为 0 时,QEMU 就会用纯代码去“模拟”出一套 CPU、内存和硬盘,性能差

启动服务

回到控制节点,列出服务组件,以验证是否成功启动并注册了每个进程

neutron网络服务

控制节点配置

用数据库连接客户端以 root 用户连接到数据库服务器

创建``neutron`` 数据库

对``neutron`` 数据库授予合适的访问权限

创建``neutron``用户

添加``admin`` 角色到``neutron`` 用户

创建``neutron``服务实体

创建网络服务API端点

配置公共网络

controller

安装组件

修改配置文件

配置数据库访问

启用ML2插件并禁用其他插件

配置 “RabbitMQ” 消息队列的连接

配置认证服务访问

配置网络服务来通知计算节点的网络拓扑变化

配置锁路径

修改文件

启用flat和VLAN网络

禁用私有网络

启用Linuxbridge机制

启用端口安全扩展驱动

配置公共虚拟网络为flat网络

启用 ipset 增加安全组规则的高效性

修改文件

将公共虚拟网络和公共物理网络接口对应起来

禁止VXLAN覆盖网络

启用安全组并配置 Linuxbridge iptables firewall driver

修改文件

配置Linuxbridge驱动接口,DHCP驱动并启用隔离元数据,这样在公共网络上的实例就可以通过网络来访问元数据

配置元数据代理

修改文件

配置元数据主机以及共享密码

为控制节点配置网络服务

修改文件

配置访问参数,启用元数据代理并设置密码

创建软链接

同步数据库,结果为ok则正常

重启计算api服务

启动服务

计算节点配置

安装软件包

修改文件

配置 “RabbitMQ” 消息队列的连接

配置认证服务访问

配置锁路径

配置公共网络

compute

修改文件

将公共虚拟网络和公共物理网络接口对应起来

禁止VXLAN覆盖网络

启用安全组并配置 Linuxbridge iptables firewall driver

为计算节点配置网络服务

修改文件

配置访问参数

重启计算服务

启动Linuxbridge代理并配置开机自启动

验证

因为使用了公共网络,所以可以以下面的命令验证

启动实例

创建虚拟网络


创建provider网络

保证admin脚本运行,创建网络

在网络上创建一个子网

创建m1.nano规格主机

默认的最小规格的主机需要512 MB内存。对于环境中计算节点内存不足4 GB的,我们推荐创建只需要64 MB的``m1.nano``规格的主机。若单纯为了测试的目的,请使用``m1.nano``规格的主机来加载CirrOS镜像

查看

生成键值对

运行demo脚本,使用普通用户身份

生成和添加秘钥对

验证

增加安全组规则

允许icmp(ping)

允许ssh

在公有网络上创建实例

确保demo脚本运行

查看可用的镜像,网络,安全规则(若使用了公共网络,则网络这一栏中无selfservice)

启动实例

检查状态

使用虚拟控制台访问实例

获取实例的 Virtual Network Computing (VNC) 会话URL并从web浏览器访问,如果windows上没有controller的解析,可以用controller的ip替换controller

查看

检查能否ping通网关

检查能否ping通互联网

回到controller,查看能否ping通实例,ssh链接是否正常,若此步骤失败,在计算节点清空iptables规则,重启服务再次尝试

修复过程

horizon仪表盘服务

部署

下载软件包

编辑文件

配置仪表盘以使用 OpenStack 服务

许所有主机访问仪表板

配置 memcached 会话存储服务

启用第3版认证API

通过仪表盘创建的用户默认角色配置为 user

启用对域的支持

配置API版本

过仪表盘创建用户时的默认域配置为 default

禁用支持3层网络服务(如果选择网络参数1)

选择时区(可选)

重启服务

浏览器访问controller/dashboard

默认域,admin登录,密码也为admin

进入界面

可以看到项目,用户,使用情况等

再以demo用户登录,密码为demo

使用

可以再dashboard上进行删除,添加云主机的操作

这里删除之前在虚拟机上创建的云主机

查看是否删除成功

再以admin登录,admin状态下可以删除网络

删除成功

再来创建一个网络

创建成功

再创建一个子网

创建成功

还可以创建云主机类型

创建成功

还可以创建镜像

再进入demo用户下的云主机,创建一个新云主机

成功创建

回到controller查看,验证是否成功创建

Logo

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

更多推荐