网络知识 娱乐 ubuntu20.04手动安装Openstack YOGA版本(双节点)

ubuntu20.04手动安装Openstack YOGA版本(双节点)

目录

  • 想说的话
  • 双节点手动安装openstack yoga版本
    • 环境准备
      • 网络配置
      • hostname解析
      • 测试网络连通性
      • NTP时间同步
      • 所有节点安装openstack包
      • controller节点安装SQL数据库
      • controller节点安装消息队列
      • controller节点安装Memcached内存缓存
      • controller节点安装etcd存储器
    • yoga版本最小启动服务
      • 安装keystone
      • Glance安装
      • Placement安装
      • Nova安装
      • Neutron安装
      • Horizon安装
      • Cinder安装(非必要)
    • 利用yoga版的openstack启动一个云服务器(非必要)
      • 创建self-service私有网络
  • 附录1:防火墙与默认端口

想说的话

当一个运维高手初次踏入openstack的世界的时候,首先面临的问题就是快速安装一个openstack然后玩起来。
但是openstack安装过于庞杂,手动安装的学习路线比较漫长。自动化安装工具往往跑到一半就报错。
自动安装openstack往往有一下几个坑:

  1. 网络问题。openstack常见的安装工具,如kolla、devstack、rdo、TripleO等,这些工具都是由老外开发,他们在开发的时候没有考虑到不同国家的下载速度。自动安装的依赖包都是从github上下载,往往安装到一半就404了。
  2. 版本问题。openstack的每个版本都对应centos或者ubuntu的某几个版本。而且还要考虑到发行版的生命周期问题。有的发行版生命周期只有5年。如果过了生命周期,从官方的系统包下载源将无法下载到openstack。比如,你用centos7.9下载不了Mitaka版本的openstack,这在2020年以前都是可以的,这就是过期的问题。
  3. 学习资料问题。网上有很多openstack单节点或者多节点安装的教程。这些教程可能过半年就不能用了。有的教程是质量问题,有的教程是遇到了发行版过期的问题。反正我试了5篇最近一年的、不同安装工具的教程,没有一篇能让我成功安装openstack的。

所以以上这些问题导致安装openstack很恶心人,一度劝退95%的初学者。
如何破这个局:查看英文官方安装文档,下载Installation Guide的PDF反复阅读。注意是英文,不是中文。整个PDF只有100页。
openstack官网: https://docs.openstack.org/
官网上能选择语言,但是中文文档最高只支持Mitaka。想要在最新的linux发行版安装较新的openstack,只能看英文的Installation Guide。英文的安装文档是持续更新的,所以靠谱。
综上,英语不好的同学,读英文文献费劲的同学,建议不要学openstack了,不然你会感受到举步维艰。这就是一个分水岭,把顶级人才和普通工程师区分开了。 网上教程和视频不能用,又看不懂英文文档。培训班不会教你如何安装,那么你想怎样搞定一个千台服务器级别的大型openstack集群的架构设计?

双节点手动安装openstack yoga版本

参考文献(官方文档):https://docs.openstack.org/install-guide/
时间点:2022年4月25日

环境准备

宿主机系统任意,但是保证能安装KVM。
Debian安装KVM方法:

sudo apt update
sudo apt -y install qemu qemu-system qemu-kvm virt-manager bridge-utils vlan

网络配置

KVM安装成功后,创建两个NAT虚拟网卡。

  1. 设备名openstack,类型NAT,地址段10.0.0.0/24 ,网关10.0.0.1,ip范围从5-254。
  2. 设备名provider,类型NAT,地址段203.0.113.0/24,网关203.0.113.1,ip范围从5-254。

然后KVM安装两个虚拟机,操作系统是Ubuntu20.04 Desktop。安装时网络选择设备openstack,硬件要求:
controller控制节点,主机名controller,CPU 2C ,4GB内存 , 50GB硬盘。
compute1控制节点,主机名compute1,CPU 4C ,8GB内存 , 50GB硬盘。
系统安装成功后,需要引入第二个网卡provider,所以两台节点先关机。
KVM下将两台虚拟机都添加网络设备provider,开机。
对controller的两个网口进行配置:
网口1调成静态ip,ip固定是10.0.0.11,子网掩码24,网关10.0.0.1
网口2调成静态ip,ip固定是203.0.113.11,子网掩码24,网关203.0.113.1
对compute1的两个网口进行配置
网口1调成静态ip,ip固定是10.0.0.31,子网掩码24,网关10.0.0.1
网口2调成静态ip,ip固定是203.0.113.31,子网掩码24,网关203.0.113.1

其他节点的ip配置:
如果你有一个Block Storage块存储,则把它加入到openstack的NAT网络中。
ip设置成10.0.0.41
如果你有一个Object storage对象存储,则把它加入到openstack的NAT网络中。
ip设置成10.0.0.51
注意:块存储和对象存储节点只需要一个网口就行了,不需要像控制节点和计算节点那样搞两个网口。(摘自Installation Guide)

hostname解析

两台机器都做。

vim /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

做完主机解析后,将controller和compute1重启。
reboot!

测试网络连通性

# 从controller发送ping命令连通外网
ping -c 4 www.baidu.com
# 从controller发送ping命令连通compute1
ping -c 4 compute1

# 从compute1发送ping命令连通外网
ping -c 4 www.baidu.com
# 从compute1发送ping命令连通ccontroller
ping -c 4 controller

NTP时间同步

在controller上执行以下命令,从阿里云的NTP服务器上同步时间

apt -y install chrony

# 备份NTP服务的原始配置文件
mv /etc/chrony/chrony.conf /etc/chrony/chrony.conf.bak

# 编写一个空的配置文件,文件只有两行配置
vim /etc/chrony/chrony.conf
--------------------
server ntp.aliyun.com iburst
allow 10.0.0.0/24
# 保存退出

#重启系统的ntp服务
service chrony restart

再配置ocmpute1的NTP服务,从controller上拉取时间。

apt -y install chrony

# 备份NTP服务的原始配置文件
mv /etc/chrony/chrony.conf /etc/chrony/chrony.conf.bak

# 编写一个空的配置文件,文件只有一行配置
vim /etc/chrony/chrony.conf
--------------------
server controller iburst

#重启系统的ntp服务
service chrony restart

查看NTP服务是否连上正确的服务器
两台节点都执行一下命令

chronyc sources

如果你还有块存储节点和对象存储节点,则配置方法和compute1一样,都从controller上拉取时间。

所有节点安装openstack包

openstack每半年发布一个新版,版本号从A-Z,截止目前最新版本是yoga,简称Y版。
Ubuntu每两年出一个LTS版本,以下是各个LTS版本对应的可安装的openstack版本。
OpenStack for Ubuntu 20.04 LTS: yoga、xena、wallaby、victoria、Ussuri
OpenStack for Ubuntu 18.04 LTS: ussuri、train、stein、rocky
OpenStack for Ubuntu 16.04 LTS:queen、pike、mitaka
我们的虚拟机是Ubuntu20.04,所以安装最新的yoga版本
以下的命令请在controller和compute1上都执行(所有的openstack节点都要安装openstack包!!!)
官方文档是这样说明的。
Note: The archive enablement described here needs to be done on all nodes that run OpenStack services.

# 添加yoga的官方apt源
add-apt-repository cloud-archive:yoga

# 安装nova计算组件
apt -y install nova-compute

# 安装客户端
apt -y install python3-openstackclient

controller节点安装SQL数据库

官方的安装指南让我们安装的是mariaDB,这一步安装操作只在controller上执行。

# As of Ubuntu 20.04, install the packages
apt -y install mariadb-server python3-pymysql

安装完成后,为openstack在MariaDB中添加一个配置文件。

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

重启mariaDB并设置数据库的root用户密码

# 重启数据库
service mysql restart

# 运行下面这个命令设置root密码,设置完成后还会有一些初始化操作,根据提示一路Y就可以了
mysql_secure_installation
# 我设置了mariaDB的root密码是123456,并取消了mariaDB的远程登录功能(一路Y的时候有一步就是取消远程登录)

controller节点安装消息队列

openstack支持3种消息队列。
OpenStack supports several message queue services including RabbitMQ, Qpid, and ZeroMQ.
推荐使用rabbitMQ。
以下命令在controller上面执行

# 安装rabbitMQ
apt -y install rabbitmq-server

# 给rabbitMQ添加openstack用户和密码(我设置了密码123456)
rabbitmqctl add_user openstack 123456

# 开放openstack用户的设置+读+写权限
rabbitmqctl set_permissions openstack ".*" ".*" ".*"

controller节点安装Memcached内存缓存

controller节点执行以下命令

# 安装mencached
apt -y install memcached python3-memcache

# 把本机ip添加到mencached,让其他节点能访问这个服务
vim /etc/memcached.conf
----------------------------
# 修改文件中已有的-l 127.0.0.1 ,把它改成-l 10.0.0.11
-l 10.0.0.11

# 重启服务
service memcached restart

controller节点安装etcd存储器

以下命令在controller节点上运行。

# 安装etcd
apt -y install etcd

# 配置etcd,将本地ip配置进去
vim /etc/default/etcd
-------------------------
ETCD_NAME="controller"
ETCD_DATA_DIR="/var/lib/etcd"
ETCD_INITIAL_CLUSTER_STATE="new"
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster-01"
ETCD_INITIAL_CLUSTER="controller=http://10.0.0.11:2380"
ETCD_INITIAL_ADVERTISE_PEER_URLS="http://10.0.0.11:2380"
ETCD_ADVERTISE_CLIENT_URLS="http://10.0.0.11:2379"
ETCD_LISTEN_PEER_URLS="http://0.0.0.0:2380"
ETCD_LISTEN_CLIENT_URLS="http://10.0.0.11:2379"

# 重启服务并设置开机自启动
systemctl restart etcd
systemctl enable etcd

至此,基本环境安装完毕。

yoga版本最小启动服务

想要安装一个可用的openstack,至少安装以下几个服务
• Identity service keystone installation for Yoga(Keystone认证服务)
• Image service glance installation for Yoga(Glance镜像服务)
• Placement service placement installation for Yoga(Placement接口服务)
• Compute service nova installation for Yoga(Nova计算服务)
• Networking service neutron installation for Yoga(Neutron网络服务)
其他的推荐安装服务:
• Dashboard horizon installation for Yoga(Horizon用户网页面板服务)
• Block Storage service cinder installation for Yoga(Cinder块存储服务)

所以,以上七个服务我们依次安装完。

安装keystone

参考官方文档:https://docs.openstack.org/keystone/yoga/install/
首先为keystone本身是个网站,网站就需要创建一个数据库。
所以在controller上面执行以下命令创建数据库

mysql -u root -p
Enter Password:  此处输入密码123456(之前安装mariaDB时设置的)

# 创建keystone数据库
MariaDB [(none)]> CREATE DATABASE keystone;
Query OK, 1 row affected (0.001 sec)

# 创建一个keystone用户并设置密码也是keystone,专门用于访问keystone数据库
MariaDB [(none)]> GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'localhost' IDENTIFIED BY 'keystone';
Query OK, 0 rows affected (0.002 sec)
MariaDB [(none)]> GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'%' IDENTIFIED BY 'keystone';
Query OK, 0 rows affected (0.001 sec)

# 退出mysql
exit;
Bye

安装keystone

apt -y install keystone

配置keystone,修改如下两处配置:

vim /etc/keystone/keystone.conf
-----------------------------------
[database]
# ...
connection = mysql+pymysql://keystone:keystone@controller/keystone

[token]
# ...
provider = fernet

同步配置到keystone数据库

su -s /bin/sh -c "keystone-manage db_sync" keystone

初始化fernet秘钥库

keystone-manage fernet_setup --keystone-user keystone --keystone-group keystone
keystone-manage credential_setup --keystone-user keystone --keystone-group keystone

运行keystone API

# 这个admin就是keystone的初始密码,你可以设置成别的。
keystone-manage bootstrap --bootstrap-password admin 
  --bootstrap-admin-url http://controller:5000/v3/ 
  --bootstrap-internal-url http://controller:5000/v3/ 
  --bootstrap-public-url http://controller:5000/v3/ 
  --bootstrap-region-id RegionOne

到此,keystone的三个接口就运行起来了,web server是apache服务器。
还要设置apache

vim /etc/apache2/apache2.conf
---------------------------
ServerName controller

# 修改完后重启apache
service apache2 restart

最后收尾操作:
设置以下环境变量

export OS_USERNAME=admin
export OS_PASSWORD=admin # 这个就是之前运行API时候的bootstrap-password
export OS_PROJECT_NAME=admin
export OS_USER_DOMAIN_NAME=Default
export OS_PROJECT_DOMAIN_NAME=Default
export OS_AUTH_URL=http://controller:5000/v3
export OS_IDENTITY_API_VERSION=3

配置域、项目、用户、角色

openstack domain create --description "An Example Domain" example
openstack project create --domain default --description "Service Project" service
openstack project create --domain default --description "Demo Project" myproject
openstack user create --domain default --password-prompt myuser # 为了方便记忆,密码也设置成myuser
openstack role create myrole
openstack role add --project myproject --user myuser myrole

验证keystone是否安装成功

unset OS_AUTH_URL OS_PASSWORD

# 用admin用户尝试获取一个token
openstack --os-auth-url http://controller:5000/v3 --os-project-domain-name Default --os-user-domain-name Default --os-project-name admin --os-username admin token issue
# 随后提示输入密码,就是之前设置的admin
+------------+-----------------------------------------------------------------+
| Field      | Value                                                           |
+------------+-----------------------------------------------------------------+
| expires    | 2016-02-12T20:14:07.056119Z                                     |
| id         | gAAAAABWvi7_B8kKQD9wdXac8MoZiQldmjEO643d-e_j-XXq9AmIegIbA7UHGPv |
|            | atnN21qtOMjCFWX7BReJEQnVOAj3nclRQgAYRsfSU_MrsuWb4EDtnjU7HEpoBb4 |
|            | o6ozsA_NmFWEpLeKy0uNn_WeKbAhYygrsmQGA49dclHVnz-OMVLiyM9ws       |
| project_id | 343d245e850143a096806dfaefa9afdc                                |
| user_id    | ac3377633149401296f6c0d92d79dc16                                |
+------------+-----------------------------------------------------------------+

# 用myuser用户尝试获取一个token
openstack --os-auth-url http://controller:5000/v3 --os-project-domain-name Default --os-user-domain-name Default --os-project-name myproject --os-username myuser token issue
# 密码是myuser
+------------+-----------------------------------------------------------------+
| Field      | Value                                                           |
+------------+-----------------------------------------------------------------+
| expires    | 2016-02-12T20:15:39.014479Z                                     |
| id         | gAAAAABWvi9bsh7vkiby5BpCCnc-JkbGhm9wH3fabS_cY7uabOubesi-Me6IGWW |
|            | yQqNegDDZ5jw7grI26vvgy1J5nCVwZ_zFRqPiz_qhbq29mgbQLglbkq6FQvzBRQ |
|            | JcOzq3uwhzNxszJWmzGC7rJE_H0A_a3UFhqv8M4zMRYSbS2YF0MyFmp_U       |
| project_id | ed0b60bf607743088218b0a533d5943f                                |
| user_id    | 58126687cbcc4888bfa9ab73a2256f27                                |
+------------+-----------------------------------------------------------------+

在controller上编写两个凭证文件

mkdir ~/openrc

vim ~/openrc/admin-openrc
------------------------------------
export OS_PROJECT_DOMAIN_NAME=Default
export OS_USER_DOMAIN_NAME=Default
export OS_PROJECT_NAME=admin
export OS_USERNAME=admin
export OS_PASSWORD=admin
export OS_AUTH_URL=http://controller:5000/v3
export OS_IDENTITY_API_VERSION=3
export OS_IMAGE_API_VERSION=2

vim ~/openrc/demo-openrc
------------------------------------
export OS_PROJECT_DOMAIN_NAME=Default
export OS_USER_DOMAIN_NAME=Default
export OS_PROJECT_NAME=myproject
export OS_USERNAME=myuser
export OS_PASSWORD=myuser
export OS_AUTH_URL=http://controller:5000/v3
export OS_IDENTITY_API_VERSION=3
export OS_IMAGE_API_VERSION=2

尝试加载admin-openrc试试

. ~/openrc/admin-openrc
openstack token issue
+------------+-----------------------------------------------------------------+
| Field      | Value                                                           |
+------------+-----------------------------------------------------------------+
| expires    | 2022-04-24T16:48:29+0000                                        |
| id         | gAAAAABWvjYj-Zjfg8WXFaQnUd1DMYTBVrKw4h3fIagi5NoEmh21U72SrRv2trl |
|            | JWFYhLi2_uPR31Igf6A8mH2Rw9kv_bxNo1jbLNPLGzW_u5FC7InFqx0yYtTwa1e |
|            | eq2b0f6-18KZyQhs7F3teAta143kJEWuNEYET-y7u29y0be1_64KYkM7E       |
| project_id | 343d245e850143a096806dfaefa9afdc                                |
| user_id    | ac3377633149401296f6c0d92d79dc16                                |
+------------+-----------------------------------------------------------------+

到此,所有的keystone安装结束了,官方文档后面的部分是说明如何安装keystone的。

Glance安装

yoga版本的glance组件的官方安装文档:
https://docs.openstack.org/glance/yoga/install/install-ubuntu.html
首先为Glance创建数据库

mysql -u root -p
Enter password: 123456

MariaDB [(none)]> CREATE DATABASE glance;
Query OK, 1 row affected (0.001 sec)

MariaDB [(none)]> GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'localhost' IDENTIFIED BY 'glance';
Query OK, 0 rows affected (0.002 sec)
MariaDB [(none)]> GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'%' IDENTIFIED BY 'glance';
Query OK, 0 rows affected (0.001 sec)

exit;
Bye

加载admin用户(这个用户在keystone安装时创建,所以不能跳)

. ~/openrc/admin-openrc

创建glance用户和项目

openstack user create --domain default --password-prompt glance # 这里要输入密码,密码也设置成glance
openstack role add --project service --user glance admin
openstack service create --name glance --description "OpenStack Image" image
openstack endpoint create --region RegionOne image public http://controller:9292
openstack endpoint create --region RegionOne image internal http://controller:9292
openstack endpoint create --region RegionOne image admin http://controller:9292

设置资源限制(这一步可做可不做,建议先跳过)

openstack --os-cloud devstack-system-admin registered limit create --service glance --default-limit 1000 --region RegionOne image_size_total
openstack --os-cloud devstack-system-admin registered limit create --service glance --default-limit 1000 --region RegionOne image_stage_total
openstack --os-cloud devstack-system-admin registered limit create --service glance --default-limit 100 --region RegionOne image_count_total
openstack --os-cloud devstack-system-admin registered limit create --service glance --default-limit 100 --region RegionOne image_count_uploading

下载安装并配置Glance

apt -y install glance

vim /etc/glance/glance-api.conf
------------------------------------
[DEFAULT]
use_keystone_quotas = True

[database]
# ... 原先这个database组下的已经有的所有配置删除或注释掉!!!
# 我注释了一行backend
connection = mysql+pymysql://glance:glance@controller/glance

[keystone_authtoken]
# ...
www_authenticate_uri = http://controller:5000
auth_url = http://controller:5000
memcached_servers = controller:11211
auth_type = password
project_domain_name = Default
user_domain_name = Default
project_name = service
username = glance
password = glance

[paste_deploy]
# ...
flavor = keystone

[glance_store]
# ...
stores = file,http
default_store = file
filesystem_store_datadir = /var/lib/glance/images/

[oslo_limit]
auth_url = http://controller:5000
auth_type = password
user_domain_id = default
username = MY_SERVICE
system_scope = all
password = MY_PASSWORD
endpoint_id = ENDPOINT_ID
region_name = RegionOne

给MY_SERVICE添加读权限

openstack role add --user MY_SERVICE --user-domain Default --system all reader

同步配置到数据库

su -s /bin/sh -c "glance-manage db_sync" glance

重启glance服务

service glance-api restart

验证安装是否成功

. ~/openrc/admin-openrc
# 下载一个cirros镜像用于测试,大小12M
apt -y install wget
wget http://download.cirros-cloud.net/0.4.0/cirros-0.4.0-x86_64-disk.img -O ~/cirros-0.4.0-x86_64-disk.img 
# 如果下载太慢,就用迅雷下载,然后scp放到虚拟机里的家目录下

glance image-create --name "cirros" --file ~/cirros-0.4.0-x86_64-disk.img --disk-format qcow2 --container-format bare --visibility=public
+------------------+----------------------------------------------------------------------------------+
| Property         | Value                                                                            |
+------------------+----------------------------------------------------------------------------------+
| checksum         | d41d8cd98f00b204e9800998ecf8427e                                                 |
| container_format | bare                                                                             |
| created_at       | 2022-04-26T05:01:27Z                                                             |
| disk_format      | qcow2                                                                            |
| id               | 76d504e7-8b0b-4fc3-846c-6a14b7f86877                                             |
| min_disk         | 0                                                                                |
| min_ram          | 0                                                                                |
| name             | cirros                                                                           |
| os_hash_algo     | sha512                                                                           |
| os_hash_value    | cf83e1357eefb8bdf1542850d66d8007d620e4050b5715dc83f4a921d36ce9ce47d0d13c5d85f2b0 |
|                  | ff8318d2877eec2f63b931bd47417a81a538327af927da3e                                 |
| os_hidden        | False                                                                            |
| owner            | 21d38e79032b46f5bf2ff1f65cf03b2e                                                 |
| protected        | False                                                                            |
| size             | 0                                                                                |
| status           | active                                                                           |
| tags             | []                                                                               |
| updated_at       | 2022-04-26T05:01:27Z                                                             |
| virtual_size     | Not available                                                                    |
| visibility       | public                                                                           |
+------------------+----------------------------------------------------------------------------------+

# 查看激活的镜像
glance image-list
+--------------------------------------+--------+
| ID                                   | Name   |
+--------------------------------------+--------+
| 76d504e7-8b0b-4fc3-846c-6a14b7f86877 | cirros |
+--------------------------------------+--------+

至此,Glance安装成功了。

Placement安装

参考文档:https://docs.openstack.org/placement/yoga/install/
以下操作在controller节点上执行。Plancement是一个API和端口管理服务
创建数据库

mysql -u root -p
Enter password: 123456

MariaDB [(none)]> CREATE DATABASE placement;
Query OK, 1 row affected (0.001 sec)

MariaDB [(none)]> GRANT ALL PRIVILEGES ON placement.* TO 'placement'@'localhost' IDENTIFIED BY 'placement';
Query OK, 0 rows affected (0.002 sec)
MariaDB [(none)]> GRANT ALL PRIVILEGES ON placement.* TO 'placement'@'%' IDENTIFIED BY 'placement';
Query OK, 0 rows affected (0.001 sec)

exit;
Bye

创建项目和用户

. ~/openrc/admin-openrc
openstack user create --domain default --password-prompt placement # 设置密码也是placement
openstack role add --project service --user placement admin # 将admin用户添加到placement
openstack service create --name placement --description "Placement API" placement
openstack endpoint create --region RegionOne placement public http://controller:8778
openstack endpoint create --region RegionOne placement internal http://controller:8778
openstack endpoint create --region RegionOne placement admin http://controller:8778

下载placement并配置

apt -y install placement-api

vim /etc/placement/placement.conf
------------------------------------
[placement_database]
# ...
connection = mysql+pymysql://placement:placement@controller/placement

[api]
# ...
auth_strategy = keystone

[keystone_authtoken]
# ...
auth_url = http://controller:5000/v3
memcached_servers = controller:11211
auth_type = password
project_domain_name = Default
user_domain_name = Default
project_name = service
username = placement
password = placement

同步配置到数据库

su -s /bin/sh -c "placement-manage db sync" placement

重启apache

service apache2 restart

验证placement是否安装成功

. ~/openrc/admin-openrc
placement-status upgrade check
+-------------------------------------------+
| Upgrade Check Results                     |
+-------------------------------------------+
| Check: Missing Root Provider IDs          |
| Result: Success                           |
| Details: None                             |
+-------------------------------------------+
| Check: Incomplete Consumers               |
| Result: Success                           |
| Details: None                             |
+-------------------------------------------+
| Check: Policy File JSON to YAML Migration |
| Result: Success                           |
| Details: None                             |
+-------------------------------------------+

# 测试placementAPI
apt -y install python3-pip # 安装pip3
pip3 install --upgrade pip -i https://mirrors.aliyun.com/pypi/simple/# 升级pip3
pip3 install osc-placement -i https://mirrors.aliyun.com/pypi/simple/
openstack --os-placement-api-version 1.2 resource class list --sort-column name
+----------------------------------------+
| name                                   |
+----------------------------------------+
| DISK_GB                                |
| FPGA                                   |
| IPV4_ADDRESS                           |
| MEMORY_MB                              |
......

openstack --os-placement-api-version 1.6 trait list --sort-column name
+---------------------------------------+
| name                                  |
+---------------------------------------+
| COMPUTE_ACCELERATORS                  |
| COMPUTE_ARCH_AARCH64                  |
| COMPUTE_ARCH_MIPSEL                   |
| COMPUTE_ARCH_PPC64LE                  |
......

至此,placement安装成功。

Nova安装

参考官方文档:https://docs.openstack.org/nova/yoga/install/controller-install-ubuntu.html
nova组件在controller和compute1上都要安装。
首先在controller上安装nova:
配置数据库:

mysql -u root -p
Enter Password:123456

MariaDB [(none)]> CREATE DATABASE nova_api;
Query OK, 1 row affected (0.001 sec)
MariaDB [(none)]> CREATE DATABASE nova;
Query OK, 1 row affected (0.001 sec)
MariaDB [(none)]> CREATE DATABASE nova_cell0;
Query OK, 1 row affected (0.001 sec)

MariaDB [(none)]> GRANT ALL PRIVILEGES ON nova_api.* TO 'nova'@'localhost' IDENTIFIED BY 'nova';
MariaDB [(none)]> GRANT ALL PRIVILEGES ON nova_api.* TO 'nova'@'%' IDENTIFIED BY 'nova';

MariaDB [(none)]> GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'localhost' IDENTIFIED BY 'nova';
MariaDB [(none)]> GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'%' IDENTIFIED BY 'nova';

MariaDB [(none)]> GRANT ALL PRIVILEGES ON nova_cell0.* TO 'nova'@'localhost' IDENTIFIED BY 'nova';
MariaDB [(none)]> GRANT ALL PRIVILEGES ON nova_cell0.* TO 'nova'@'%' IDENTIFIED BY 'nova';

exit;
Bye

创建项目、用户、角色

. ~/openrc/admin-openrc
openstack user create --domain default --password-prompt nova # 这里设置nova用户的密码也是nova
openstack role add --project service --user nova admin  # 将nova用户添加到admin组中变成管理员
openstack service create --name nova --description "OpenStack Compute" compute # 创建服务实体
openstack endpoint create --region RegionOne compute public http://controller:8774/v2.1 # 提供API服务
openstack endpoint create --region RegionOne compute internal http://controller:8774/v2.1
openstack endpoint create --region RegionOne compute admin http://controller:8774/v2.1

下载安装配置NOVA

apt -y install nova-api nova-conductor nova-novncproxy nova-scheduler

vim /etc/nova/nova.conf
----------------------------
[DEFAULT]
# ...不用注释已有配置
my_ip = 10.0.0.11
transport_url = rabbit://openstack:123456@controller:5672/

[api_database]
# ...该组中已有的配置全部注释掉
connection = mysql+pymysql://nova:nova@controller/nova_api

[database]
# ...该组中已有的配置全部注释掉
connection = mysql+pymysql://nova:nova@controller/nova

[api]
# ...该组中已有的配置全部注释掉
auth_strategy = keystone

[keystone_authtoken]
# ...该组中已有的配置全部注释掉
www_authenticate_uri = http://controller:5000/
auth_url = http://controller:5000/
memcached_servers = controller:11211
auth_type = password
project_domain_name = Default
user_domain_name = Default
project_name = service
username = nova
password = nova

[vnc]
# ...
enabled = true
server_listen = $my_ip
server_proxyclient_address = $my_ip

[glance]
# ...
api_servers = http://controller:9292

[oslo_concurrency]
# ...
lock_path = /var/lib/nova/tmp

[placement]
# ...
region_name = RegionOne
project_domain_name = Default
project_name = service
auth_type = password
user_domain_name = Default
auth_url = http://controller:5000/v3
username = placement
password = placement

将配置同步到数据库中

su -s /bin/sh -c "nova-manage api_db sync" nova
su -s /bin/sh -c "nova-manage cell_v2 map_cell0" nova
su -s /bin/sh -c "nova-manage cell_v2 create_cell --name=cell1 --verbose" nova
su -s /bin/sh -c "nova-manage db sync" nova

验证是否安装成功

su -s /bin/sh -c "nova-manage cell_v2 list_cells" nova
+-------+--------------------------------------+------------------------------------------+-------------------------------------------------+----------+
|  Name |                 UUID                 |              Transport URL               |               Database Connection               | Disabled |
+-------+--------------------------------------+------------------------------------------+----------------