OpenStack 是一个开源的云计算管理平台,由几个主要的组件组合起来完成具体工作。OpenStack 支持几乎所有类型的云环境,项目目标是提供实施简单、可大规模扩展、丰富、标准统一的云计算管理平台。OpenStack通过各种互补的服务提供了基础设施即服务(IaaS)的解决方案,每个服务提供API以进行集成。
什么是 OpenStack?OpenStack 是一个可控制大型的计算、存储、网络等资源池的数据中心的云操作系统,管理元可以通过控制面板对所有的资源进行统一管理,且可以使用 Web 界面进行资源控制及修改。
What is OpenStack? OpenStack is a cloud operating system that controls large pools of compute, storage, and networking resources throughout a datacenter, all managed through a dashboard that gives administrators control while empowering their users to provision resources through a web interface.
OpenStack 由 Rackspace(全球三大云计算中心之一) 和 NASA(美国国家航空航天局)发起的一个试点项目,该项目在 2010 年 7 月立项,此项目旨在提供开源软件,使得任何组织都能在标准化的硬件上建立和提供云计算服务。
OpenStack 主体由 Python 语言编写,使用 Apache 2.0 License 开源协议。
组件
前面说过 OpenStack 只是一个平台,因此具体功能是由其内部的组件提供的,常用组件有以下几种。
名称 | 作用 | 介绍 |
---|---|---|
Nova | 计算服务 | 虚机管理服务。包括创建、管理、销毁虚拟机。 |
Zun | 容器服务 | 容器调度服务。用于启动和管理由不同容器技术支持的容器。 |
Qingling | 功能服务 | 提供一个平台用于无服务功能,如 AWS Lambda。 |
Neutron | 网络服务 | 为实例提供网络连接,为用户提供 API 修改网络和配置。 |
Glance | 镜像服务 | 为实例提供系统镜像,为虚拟机安装系统。 |
Keystore | 认证服务 | 全部服务和接口必须经过此身份认证服务后才能执行。 |
Horizon | 界面服务 | 为管理员操作提供 Web 入口,实现底层交互服务。 |
Cinder | 块存储服务 | 为实例提供持续的快存储服务,可插入驱动程序体系结构促进块存储设备的创建和管理。 |
Swift | 对象存储服务 | 通过RESTful HTTP API存储和检索任意非结构化数据对象。它是高度容错数据复制和扩展架构。它的实现并不是像一个文件服务器挂载目录。 |
Ceilometer | 计费服务 | 通过检测实例状态来实现计费,基准测试、可伸缩性和统计目的。 |
Heat | 编排服务 | 协调多个组合云应用程序通过使用AWS CloudFormation原生热模板格式或模板格式,通过OpenStack-native REST API和CloudFormation-compatible查询API。 |
Trove | 数据库服务 | 提供可伸缩的、可靠的云Database-as-a-Service关系和非关系数据库引擎的功能。 |
Sahara | 数据处理服务 | 通过指定参数如Hadoop版本,集群拓扑和节点硬件细节。提供功能来提供和规模在OpenStack Hadoop集群 |
小贴士:更多服务组件可在官网查阅文档,不同版本的服务组件可能存在区别(增删或改名)。
版本
OpenStack 每年推出一个新版本,版本号为英文单词,单词首字母按字母表顺序进行排序(A-Z),截至 2018 年 11 月,OpenStack 最新版为 Rocky 。
说明:为了描述简单,每个大版本号都以首字母为简称,比如 Mitaka 简称 M 版, Rocky 简称 R 版。
版本一览表
版本 | 时间 |
---|---|
Austin | October 2010 |
Bexar | February 2011 |
Cactus | April 2011 |
Diablo | September 2011 |
Essex | April 2012 |
Folsom | September 2012 |
Grizzly | April 2013 |
Havana | October 2013 |
Icehouse | April 2014 |
Juno | October 2014 |
Kilo | April 2015 |
Liberty | October 2015 |
Mitaka | April 2016 |
Newton | October 2016 |
Ocata | February 2017 |
Pike | August 2017 |
Queens | March 2018 |
Rocky | August 2018 |
Stein | April 2019 |
Train | September 2019 |
预览
适配的系统
- openSUSE and SUSE Linux Enterprise Server
- Red Hat Enterprise Linux and CentOS
- Ubuntu
架构图
网络模型
供应商网络(二层网络 VLAN)
供应商网络是最简单的 OpenStack 网络模型,本质上说将虚拟机网络桥接至物理网络。并依赖物理网络设施来实现三层网络(路由)服务,此外, DHCP 服务来为虚拟机实例来提供 IP 地址。
自助服务网络(三层网络 VXLAN)
自助服务网络也称为私有网络,类似于阿里云等云服务厂商的 私有网络 VPC 。此种网络实质上使用 NAT 技术将虚拟网络路由至物理网络。
环境
为保证集群的性能及能开放出具有最简系统 CirrOS 示例,建议控制节点和计算节点都应符合以下条件。
- 控制节点:1 处理器, 4 GB 内存, 5 GB 磁盘空间
- 计算节点:1 处理器, 2 GB 内存, 10 GB 磁盘空间
控制节点和计算节点应如何理解,控制节点即是操作中心,用户通过面板或者命令将指令下发至控制节点,控制节点去统筹并调度计算节点孕育出实际对外服务的虚机。控制节点实际上也可作为计算节点使用,但是不推荐这样操作。
安全
OpenStack 服务的各个组件之间通讯都需要进行授权,因此不同服务间需要交换密令,建议安装配置组件时使用具有一定密码安全性的密码。但数据库等不支持 '@' 等特殊字符。
可以使用例如 pwgen 等生成密码。或者使用以下命令
openssl rand -hex 10
密码清单
Password name | Description |
---|---|
Database password (no variable used) | Root password for the database |
ADMIN_PASS | Password of user admin |
CINDER_DBPASS | Database password for the Block Storage service |
CINDER_PASS | Password of Block Storage service user cinder |
DASH_DBPASS | Database password for the Dashboard |
DEMO_PASS | Password of user demo |
GLANCE_DBPASS | Database password for Image service |
GLANCE_PASS | Password of Image service user glance |
KEYSTONE_DBPASS | Database password of Identity service |
METADATA_SECRET | Secret for the metadata proxy |
NEUTRON_DBPASS | Database password for the Networking service |
NEUTRON_PASS | Password of Networking service user neutron |
NOVA_DBPASS | Database password for Compute service |
NOVA_PASS | Password of Compute service user nova |
PLACEMENT_PASS | Password of the Placement service user placement |
RABBIT_PASS | Password of RabbitMQ user openstack |
主机网络
部署 OpenStack 时必须使用网络,因为系统的服务部署、更新,DNS 和 NTP 等需要依赖网络,本文以官网部署方法为准,以私有网络为例进行部署,假设物理网络通过 NAT 方式提供网络连接。
示例使用以下网络:
- 私有网络 10.0.0.0/24 与网关 10.0.0.1
- 公有网络 203.0.113.0/24 与网关 203.0.113.1
注意:请注意 hosts 解析,若使用主机名连接其他节点,必须在全部节点中进行添加 hosts 记录。
控制节点
控制节点的网络地址规划如下:
- 地址:10.0.0.11
- 子网掩码:255.255.255.0(或 /24)
- 默认网关:10.0.0.1
RHEL / CentOS:
修改默认配置文件 /etc/sysconfig/network-scripts/ifcfg-xxx
DEVICE=INTERFACE_NAME
TYPE=Ethernet
ONBOOT="yes"
BOOTPROTO="none"
注意:若是物理机请勿修改HWADDR
与UUID
项,若是虚拟机(特别是克隆产生的机器)需要删除这些项,防止地址冲突。
SUSE:
修改默认配置文件 /etc/sysconfig/network/ifcfg-xxx ,添加以下内容。
STARTMODE='auto'
BOOTPROTO='static'
Ubuntu:
修改默认配置文件 /etc/network/interfaces
# The provider network interface
auto INTERFACE_NAME
iface INTERFACE_NAME inet manual
up ip link set dev $IFACE up
down ip link set dev $IFACE down
主机名解析
修改控制节点 主机名为 controller
sudo hostnamectl set-hostname controller
修改主机配置 /etc/hosts 文件
# controller
10.0.0.11 controller
# compute1
10.0.0.31 compute1
# block1
10.0.0.41 block1
# object1
10.0.0.51 object1
# object2
10.0.0.52 object2
计算节点
计算节点的网络地址规划如下:
- 地址:10.0.0.31
- 子网掩码:255.255.255.0(或 /24)
- 默认网关:10.0.0.1
注意:其他计算节点的名称依次为 .32 .33 .34 等。
RHEL / CentOS:
修改默认配置文件 /etc/sysconfig/network-scripts/ifcfg-xxx
DEVICE=INTERFACE_NAME
TYPE=Ethernet
ONBOOT="yes"
BOOTPROTO="none"
注意:若是物理机请勿修改HWADDR
与UUID
项,若是虚拟机(特别是克隆产生的机器)需要删除这些项,防止地址冲突。
SUSE:
修改默认配置文件 /etc/sysconfig/network/ifcfg-xxx ,添加以下内容。
STARTMODE='auto'
BOOTPROTO='static'
Ubuntu:
修改默认配置文件 /etc/network/interfaces
# The provider network interface
auto INTERFACE_NAME
iface INTERFACE_NAME inet manual
up ip link set dev $IFACE up
down ip link set dev $IFACE down
主机名解析
修改控制节点 主机名为 compute1
sudo hostnamectl set-hostname compute1
修改主机配置 /etc/hosts 文件
# controller
10.0.0.11 controller
# compute1
10.0.0.31 compute1
10.0.0.32 compute2
10.0.0.33 compute3
# block1
10.0.0.41 block1
# object1
10.0.0.51 object1
# object2
10.0.0.52 object2
块存储节点(可选)
块存储节点的网络地址规划如下:
- 地址:10.0.0.41
- 子网掩码:255.255.255.0(或 /24)
- 默认网关:10.0.0.1
注意:其他块存储节点的名称依次为 .42 .43 .44 等。
主机名解析
修改控制节点 主机名为 block1
sudo hostnamectl set-hostname block1
修改主机配置 /etc/hosts 文件
# controller
10.0.0.11 controller
# compute1
10.0.0.31 compute1
# block1
10.0.0.41 block1
10.0.0.42 block2
10.0.0.43 block3
# object1
10.0.0.51 object1
# object2
10.0.0.52 object2
网络验证
从控制节点测试网络:
# ping -c 4 openstack.org
PING openstack.org (174.143.194.225) 56(84) bytes of data.
64 bytes from 174.143.194.225: icmp_seq=1 ttl=54 time=18.3 ms
64 bytes from 174.143.194.225: icmp_seq=2 ttl=54 time=17.5 ms
64 bytes from 174.143.194.225: icmp_seq=3 ttl=54 time=17.5 ms
64 bytes from 174.143.194.225: icmp_seq=4 ttl=54 time=17.4 ms
--- openstack.org ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3022ms
rtt min/avg/max/mdev = 17.489/17.715/18.346/0.364 ms
从控制节点测试内网计算节点:
# ping -c 4 compute1
PING compute1 (10.0.0.31) 56(84) bytes of data.
64 bytes from compute1 (10.0.0.31): icmp_seq=1 ttl=64 time=0.263 ms
64 bytes from compute1 (10.0.0.31): icmp_seq=2 ttl=64 time=0.202 ms
64 bytes from compute1 (10.0.0.31): icmp_seq=3 ttl=64 time=0.203 ms
64 bytes from compute1 (10.0.0.31): icmp_seq=4 ttl=64 time=0.202 ms
--- compute1 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3000ms
rtt min/avg/max/mdev = 0.202/0.217/0.263/0.030 ms
从计算节点测试网络访问:
# ping -c 4 openstack.org
PING openstack.org (174.143.194.225) 56(84) bytes of data.
64 bytes from 174.143.194.225: icmp_seq=1 ttl=54 time=18.3 ms
64 bytes from 174.143.194.225: icmp_seq=2 ttl=54 time=17.5 ms
64 bytes from 174.143.194.225: icmp_seq=3 ttl=54 time=17.5 ms
64 bytes from 174.143.194.225: icmp_seq=4 ttl=54 time=17.4 ms
--- openstack.org ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3022ms
rtt min/avg/max/mdev = 17.489/17.715/18.346/0.364 ms
从计算节点测试控制节点的访问:
# ping -c 4 controller
PING controller (10.0.0.11) 56(84) bytes of data.
64 bytes from controller (10.0.0.11): icmp_seq=1 ttl=64 time=0.263 ms
64 bytes from controller (10.0.0.11): icmp_seq=2 ttl=64 time=0.202 ms
64 bytes from controller (10.0.0.11): icmp_seq=3 ttl=64 time=0.203 ms
64 bytes from controller (10.0.0.11): icmp_seq=4 ttl=64 time=0.202 ms
--- controller ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3000ms
rtt min/avg/max/mdev = 0.202/0.217/0.263/0.030 ms
时间同步
时间同步在云计算集群中很重要,涉及到脑裂等问题,因此必须在网络中搭建时间同步服务。
控制节点
安装服务
sudo apt install chrony ## Ubuntu/Debian
sudo yum install chrony ## RHEL/CentOS
sudo dnf install chrony ## Fedora/CentOS 8+
sudo zypper install chrony ## SUSE
修改配置
sudo vim /etc/chrony.conf ## SUSE/RHEL/CentOS
sudo vim /etc/chrony/chrony.conf ## Debian/Ubuntu
推荐时间同步逻辑为配置控制节点向外部 NTP 服务器同步,控制节点为计算集群中的其他节点提供同步服务。
server ntp1.aliyun.com minpoll 4 maxpoll 10 iburst
server ntp2.aliyun.com minpoll 4 maxpoll 10 iburst
server ntp3.aliyun.com minpoll 4 maxpoll 10 iburst
server ntp4.aliyun.com minpoll 4 maxpoll 10 iburst
server ntp5.aliyun.com minpoll 4 maxpoll 10 iburst
server ntp6.aliyun.com minpoll 4 maxpoll 10 iburst
小贴士:默认情况下此配置中 server 段无需修改,海外机器直接可以使用,若机器在国内推荐修改为上述阿里云时间同步服务,提高准确率。
加入此段可以让内网的机器连接使用。
allow 10.0.0.0/24
重启服务
sudo systemctl restart chronyd ## SUSE/RHEL/CentOS
sudo systemctl restart chrony ## Debian/Ubuntu
计算节点
安装服务同上,注意配置修改处不同。
修改配置
sudo vim /etc/chrony.conf ## SUSE/RHEL/CentOS
sudo vim /etc/chrony/chrony.conf ## Debian/Ubuntu
修改此段配置如下,内网机器全部与控制节点进行同步,不与外网进行同步。
server controller iburst
注释掉如下字段
pool 2.debian.pool.ntp.org offline iburst
重启服务
sudo systemctl restart chronyd ## SUSE/RHEL/CentOS
sudo systemctl restart chrony ## Debian/Ubuntu
启用开机自启
sudo systemctl enable chronyd.service ## SUSE/RHEL/CentOS
sudo systemctl enable chrony.service ## Debian/Ubuntu
OpenStack 包管理
不同发行版的包管理器策略不同,因此需要根据发行版进行修改。
For SUSE
SUSE 系列有多个发行版,请根据其种类进行选择。
- openSUSE
OpenStack Stein
sudo zypper addrepo -f obs://Cloud:OpenStack:Stein/openSUSE_Leap_15.0 Stein
OpenStack Rocky
sudo zypper addrepo -f obs://Cloud:OpenStack:Rocky/openSUSE_Leap_15.0 Rocky
OpenStack Queens
sudo zypper addrepo -f obs://Cloud:OpenStack:Queens/openSUSE_Leap_42.3 Queens
OpenStack Pike
sudo zypper addrepo -f obs://Cloud:OpenStack:Pike/openSUSE_Leap_42.3 Pike
小贴士:openSUSE 的包使用模式的概念来区分组合包,若使用的是 Minimal Server Selection (Text Mode) ,则在安装 OpenStack 时可能会报错,因此请先 移除 以下包。
sudo zypper rm patterns-openSUSE-minimal_base-conflicts
- SLES
OpenStack Stein
sudo zypper addrepo -f obs://Cloud:OpenStack:Stein/SLE_15 Stein
OpenStack Rocky
sudo zypper addrepo -f obs://Cloud:OpenStack:Rocky/SLE_12_SP4 Rocky
OpenStack Queens
sudo zypper addrepo -f obs://Cloud:OpenStack:Queens/SLE_12_SP3 Queens
OpenStack Pike
sudo zypper addrepo -f obs://Cloud:OpenStack:Pike/SLE_12_SP3 Pike
完成安装
在所有节点上升级安装包
sudo zypper refresh && zypper dist-upgrade
安装 OpenStack 客户端
sudo zypper install python-openstackclient
For RHEL/CentOS
- RHEL
RHEL 包管理器需要授权才能使用,因此步骤与 CentOS 略有不同。
sudo subscription-manager repos --enable=rhel-7-server-optional-rpms \
--enable=rhel-7-server-extras-rpms --enable=rhel-7-server-rh-common-rpms
安装需要先去红帽官网的订阅系统中进行订阅然后才能开启 rhel-7-server-rpms
,查看更多信息请点击 Red Hat Enterprise Linux 7 System Administrator’s Guide 。
配置完成后需要下载 RDO 仓库才能完成安装。
sudo yum install https://rdoproject.org/repos/rdo-release.rpm
配置完成后与 CentOS 操作步骤相同。
- CentOS
启用 OpenStack 仓库
CentOS 系统需要 extras 仓库才能正常使用,若仓库配置不正确请使用官方镜像等方式恢复仓库配置文件。
OpenStack Rocky
sudo yum install centos-release-openstack-rocky
OpenStack Queens
sudo yum install centos-release-openstack-queens
OpenStack Pike
sudo yum install centos-release-openstack-pike
完成安装
sudo yum upgrade
安装 OpenStack 客户端
sudo yum install python-openstackclient
RHEL/CentOS 系统都默认启动 SELinux 。若启动了此服务,请安装以下包进行自动配置。
sudo yum install openstack-selinux
For Ubuntu
Ubuntu 在每个版本库中都包含了最新的 OpenStack ,Ubuntu LTS 版本每两年更新一次。OpenStack 软件包通过 Ubuntu Cloud Archive 提供给过时的 Ubuntu LTS。
注意:官方仓库并不支持 Debian ,因此不保证兼容性。
Ubuntu 18.04 LTS 仓库中直接提供了 OpenStack Queens 版本,不需要使用额外的仓库。
启用 Ubuntu Cloud Archive 仓库
OpenStack Stein for Ubuntu 18.04 LTS
sudo add-apt-repository cloud-archive:stein
OpenStack Rocky for Ubuntu 18.04 LTS
sudo add-apt-repository cloud-archive:rocky
OpenStack Queens for Ubuntu 16.04 LTS
sudo apt install software-properties-common
sudo add-apt-repository cloud-archive:queens
OpenStack Pike for Ubuntu 16.04 LTS
sudo apt install software-properties-common
sudo add-apt-repository cloud-archive:pike
完成安装
sudo apt update && apt dist-upgrade
安装 OpenStack 客户端
sudo apt install python-openstackclient
SQL 数据库
大部分的 OpenStack 服务都需要使用数据库存储数据才能实现其功能。数据库一般运行在控制节点上,本文与官方文档相同,使用 MySQL 或 MariaDB 实现。实际上 OpenStack 支持多种数据库,包括 PostgreSQL 。
小贴士:如果看到 OpenStack 的报错日志中存在Too many connections
或Too many open files
则需要修改数据库的最大连接数参数。
SQL 数据库 for SUSE
安装数据库
sudo zypper install mariadb-client mariadb python-PyMySQL
创建配置文件
sudo vim /etc/my.cnf.d/openstack.cnf
添加如下参数
[mysqld]
bind-address = 10.0.0.11
default-storage-engine = innodb
innodb_file_per_table = on
max_connections = 4096
collation-server = utf8_general_ci
character-set-server = utf8
小贴士:监听地址请替换为控制节点的地址,若使用者的网络配置与本文不同,请自行修改。
启动数据库服务并配置自启动
sudo systemctl enable mysql.service
sudo systemctl start mysql.service
初始化数据库并设置
sudo mysql_secure_installation
SQL 数据库 for RHEL and CentOS
安装数据库
sudo yum install mariadb mariadb-server python2-PyMySQL
创建配置文件
sudo vim /etc/my.cnf.d/openstack.cnf
小贴士:创建 /etc/my.cnf.d/openstack.cnf 并备份 /etc/my.cnf.d/ 文件夹内的文件(如果有的话),以便保证配置生效。
添加如下参数
[mysqld]
bind-address = 10.0.0.11
default-storage-engine = innodb
innodb_file_per_table = on
max_connections = 4096
collation-server = utf8_general_ci
character-set-server = utf8
小贴士:监听地址请替换为控制节点的地址,若使用者的网络配置与本文不同,请自行修改。
启动数据库服务并配置自启动
sudo systemctl enable mysql.service
sudo systemctl start mysql.service
初始化数据库并设置
sudo mysql_secure_installation
SQL 数据库 for Ubuntu
从 Ubuntu 18.04 LTS 后在默认仓库中不再提供 MariaDB ,请根据官方文档添加仓库(也可以参考数据库从入门到放弃 MySQL 篇 - VVavE)或者使用 Universe 仓库进行安装。
安装数据库
sudo apt install mariadb-server python-pymysql
创建配置文件
sudo vim /etc/mysql/mariadb.conf.d/99-openstack.cnf
添加如下参数
[mysqld]
bind-address = 10.0.0.11
default-storage-engine = innodb
innodb_file_per_table = on
max_connections = 4096
collation-server = utf8_general_ci
character-set-server = utf8
小贴士:监听地址请替换为控制节点的地址,若使用者的网络配置与本文不同,请自行修改。
启动数据库服务并配置自启动
sudo systemctl enable mysqld.service
sudo systemctl start mysqld.service
初始化数据库并设置
sudo mysql_secure_installation
附录
相关链接
参考链接
本文由 柒 创作,采用 知识共享署名4.0
国际许可协议进行许可。
转载本站文章前请注明出处,文章作者保留所有权限。
最后编辑时间: 2023-12-05 18:00 PM