OpenStack Yoga 三节点部署指南

头盘

版本选择

OpenStack Yoga
本指南部分图片来自 OpenStack 官方 OpenStack

本指南以CentOS作为底层系统,OpenStack同样支持多种Linux系统,具体系统要求参考:https://docs.openstack.org/install-guide/preface.html
近五年时间内,CentOS相继发布了多个版本,8、Stream 8、9,以至于时间段内的OpenStack大版本对底层系统的要求有极大不同。
具体版本对照见下表

OpenStack 版本CentOS 版本
Train 以及更早7
Ussuri and Victoria8
Wallaby 到 YogaStream 8

后续将选择 CentOS-Stream-8-x86_64-20220712-boot作为底层系统安部署OpenStack Yoga
OpenStack 版本发布时间表

节点准备

使用三节点规格最小化部署 OpenStack Yoga
具体节点规格见下表

节点名称主机名处理器核心数内存(GB)硬盘 1(GB)硬盘 2 (GB)网卡 1 地址网卡 2 地址
控制节点controller4820010.0.0.10192.168.0.10
计算节点computer163210010.0.0.20192.168.0.20
块存储节点block24100100010.0.0.30

网络架构

物理网络
以官方给出的最小化安装架构为蓝图构建网络拓扑
https://img-blog.csdnimg.cn/10914ef642034bbba554d8ed9862b3b5.png
设定 10.0.0.0/24 为 OpenStack 管理网络的网段,三节点的网卡 1 均以固定 IP 的形式接入该网段。
设定 192.168.0.0/24 为 OpenStack 对外提供服务的网段,三节点的网卡 2 均以固定 IP 的形式接入该网段,由于 yum 安装 OpenStack 服务需连接互联网下载相关包,则网卡 2 设定时指定网关以连接至互联网。

虚拟网络
OpenStack 提供两种虚拟网络结构供用户选择:网络选项 1(提供商网络),该选项将将虚拟网络连接到物理网络,并依赖物理网络基础设施提供第 3 层(路由)服务,是最简单的部署方式;网络选项 2(自助服务网络),该选项增强了提供商网络选项,并使用例如 VXLAN 等上层分段方式将本地网络划分为多个虚拟网络而不需要依赖于物理网络的基础架构(NAT 等),可将实例网络分为内部网络与外部网络,互不相关联。
提供商网络
网络选项 1
自助服务网络
网络选项 2

后续部署默认将选择网络选项 2(自助服务网络)进行安装,不再赘述缘由。

各节点所需安装的服务

以官方给出的最小化安装架构为蓝图,选择网络选项 2 进行安装,这样部署云平台即可创建内部网络,为不同项目、组织划分不同网络,更贴近于实际私有云环境。
https://img-blog.csdnimg.cn/8d5bceec50d846968bb81330edb6e902.png
具体节点所安装服务见下表

节点名称OpenStack 服务
控制节点MariaDB RabbitMQ Memcache Etcd Keystone Placement Glance Nova Neutron Cinder Horizon
计算节点Nova Neutron
块存储节点Cinder

安全性

OpenStack 各组件都需要在控制节点数据库中注册专属账户以存放数据信息,故需要设置密码,强烈建议各组件的密码以及宿主机密码各不相同。
具体密码设置见下表

OpenStack 组件密码
控制节点 rootROOT_PASS_controller
计算节点 rootROOT_PASS_computer
块存储节点 rootROOT_PASS_block
Mariadb root 账户MARIADB_PASS
RabbitMQ 服务RABBIT_PASS
OpenStack adminADMIN_PASS
Placement 服务PLACEMENT_PASS
Keystone 数据库KEYSTONE_DBPASS
Glance 服务GLANCE_PASS
Glance 数据库GLANCE_DBPASS
Nova 服务NOVA_PASS
Nova 数据库NOVA_DBPASS
Neutron 服务NEUTRON_PASS
Neutron 数据库NEUTRON_DBPASS
Cinder 服务CINDER_PASS
Cinder 数据库CINDER_DBPASS
Horizon 数据库DASH_DBPASS
Metadata 元数据密钥METADATA_SECRET

云环境

云创建时将需要键入初始域名与项目名(OpenStack 域名特指数据中心区域而非互联网 DNS 解析域名
本指南后续配置域名及项目名等如下表所示

系统默认项目名Yoga
系统默认域名default
admin 用户所属域名RegionOne
项目域名RegionOne
Keystone 服务 URLhttp://controller:5000/v3
Keystone 服务 API 版本3
Glance 服务 API 版本2

不建议将云实例部署在 default 域名,此域名用以 OpenStack 服务间通信

控制节点管理 OpenStack 服务时需要进行身份认证,可将认证信息导入到控制节点环境变量中,方便后续安装配置使用。
admin-openrc.sh 文件需提前编写并放入控制节点中,后续安装将不再说明由来

vi admin-openrc.sh
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_PASS
export OS_AUTH_URL=http://controller:5000/v3
export OS_IDENTITY_API_VERSION=3
export OS_IMAGE_API_VERSION=2

vi user_dog-openrc.sh
export OS_USERNAME=user_dog
export OS_PASSWORD=DOG_PASS
export OS_PROJECT_NAME=Yoga
export OS_USER_DOMAIN_NAME=RegionOne
export OS_PROJECT_DOMAIN_NAME=RegionOne
export OS_AUTH_URL=http://controller:5000/v3
export OS_IDENTITY_API_VERSION=3
export OS_IMAGE_API_VERSION=2


# OS_USERNAME  登录 OpenStack 服务的用户名
# OS_PASSWORD  登录 OpenStack 服务的用户密码
# OS_PROJECT_NAME 登录时进入的项目名
# OS_USER_DOMAIN_NAME  登录时进入的域名
# OS_PROJECT_DOMAIN_NAME  登录时进入的项目域名
# OS_AUTH_URL 指定 Keystone(身份认证服务)的 URL  
# 如未部署 DNS 服务器,则需要在 hosts中指定 controller 映射,或将 controller 用控制节点 IP 替代
# OS_IDENTITY_API_VERSION 身份认证服务的 API 版本号 
# OS_IMAGE_API_VERSION 镜像服务的 API 版本号

用户

全部部署过程将创建两个账户:admin、user_dog,admin 为全局最高权限账户,user_dog 为普通权限账户用于模拟租户使用云服务。
用户名及密码对照表如下表

用户名密码
adminADMIN_PASS
user_dogDOG_PASS

副菜

本章节内容:各个节点的基础环境配置。
指南默认以最小化安装 CentOS Stream 8 为基础进行后续安装,具体系统安装方法自行搜索获取不再赘述

  1. 设置主机名
# 控制节点
hostnamectl set-hostname controller

# 计算节点
hostnamectl set-hostname computer

# 块存储节点
hostnamectl set-hostname block
  1. 配置网卡
# 各节点
ip address
# 确定网卡 1 2 的网卡名称    以 eth0   eth1 为例

# 控制节点
# 网卡 1
vi /etc/sysconfig/network-scripts/ifcfg-eth0
BOOTPROTO=static
DEFROUTE=no
IPADDR=10.0.0.10
NETMASK=255.255.255.0
GATEWAY=10.0.0.1

# 网卡2
vi /etc/sysconfig/network-scripts/ifcfg-eth1
BOOTPROTO=static
IPADDR=192.168.0.10
NETMASK=255.255.255.0
GATEWAY=192.168.0.1

# 计算节点
# 网卡 1
vi /etc/sysconfig/network-scripts/ifcfg-eth0
BOOTPROTO=static
DEFROUTE=no
IPADDR=10.0.0.20
NETMASK=255.255.255.0
GATEWAY=10.0.0.1

# 网卡2
vi /etc/sysconfig/network-scripts/ifcfg-eth1
BOOTPROTO=static
IPADDR=192.168.0.20
NETMASK=255.255.255.0
GATEWAY=192.168.0.1

# 块存储节点
# 网卡 1
vi /etc/sysconfig/network-scripts/ifcfg-eth0
BOOTPROTO=static
DEFROUTE=no
IPADDR=10.0.0.30
NETMASK=255.255.255.0
GATEWAY=10.0.0.1

# 网卡2  用以 yum 安装服务包
vi /etc/sysconfig/network-scripts/ifcfg-eth0
BOOTPROTO=dhcp


# 各节点
reboot

ping baidu.com

# 如无法连接至互联网则检查 NAT 服务以及默认路由优先级
ip address

ip route
  1. 配置 Hosts
# 各节点
vi /etc/hosts
10.0.0.10   controller
10.0.0.20   computer
10.0.0.30   block

ping controller
ping computer
ping block

  1. SSH 免密
# 控制节点
ssh-keygen -t rsa -P "" -f /root/.ssh/id_rsa
ssh-copy-id -i /root/.ssh/id_rsa.pub root@computer
# /usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub"
# The authenticity of host 'computer (10.0.0.20)' can't be established.
# ECDSA key fingerprint is SHA256:9wGS0ZxFE0TAqu8jOUlvCUDoF55pr47Ci5fUC3pS8vQ.
# Are you sure you want to continue connecting (yes/no/[fingerprint])? yes    输入 yes
# /usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
# /usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
# root@computer's password:   输入节点 root 密码
# Number of key(s) added: 1
# Now try logging into the machine, with:   "ssh 'root@computer'"
# and check to make sure that only the key(s) you wanted were added.

ssh-copy-id -i /root/.ssh/id_rsa.pub root@block
# /usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub"
# The authenticity of host 'block (10.0.0.30)' can't be established.
# ECDSA key fingerprint is SHA256:9wGS0ZxFE0TAqu8jOUlvCUDoF55pr47Ci5fUC3pS8vQ.
# Are you sure you want to continue connecting (yes/no/[fingerprint])? yes    输入 yes
# /usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
# /usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
# root@block's password:   输入节点 root 密码
# Number of key(s) added: 1
# Now try logging into the machine, with:   "ssh 'root@block'"
# and check to make sure that only the key(s) you wanted were added.

ssh computer
ssh block
  1. 更改 Yum 源为清华源
# 各节点
cp /etc/yum.repos.d/CentOS-Stream-BaseOS.repo /etc/yum.repos.d/CentOS-Stream-BaseOS.repo.bak

sed -i 's/mirrorlist/#mirrorlist/' /etc/yum.repos.d/CentOS-Stream-BaseOS.repo

sed -i 's/#baseurl=http:\/\/mirror.centos.org/baseurl=http:\/\/mirrors.tuna.tsinghua.edu.cn/' /etc/yum.repos.d/CentOS-Stream-BaseOS.repo

yum makecache
  1. 关闭防火墙
# 各节点
systemctl stop firewalld

systemctl disable firewalld
  1. 关闭 SELinux
# 各节点
setenforce 0

sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config
  1. 修改时区,配置时间同步
# 控制节点
timedatectl set-timezone Asia/Shanghai

# 各节点
yum install chrony -y

cp /etc/chrony.conf  /etc/chrony.conf.bak

# 控制节点
vi /etc/chrony.conf 
#pool 2.centos.pool.ntp.org iburst
server time1.aliyun.com iburst
allow 10.0.0.0/24

# 计算节点 块存储节点
vi /etc/chrony.conf 
#pool 2.centos.pool.ntp.org iburst
server controller iburst

# 各节点
systemctl enable --now chronyd

systemctl status chronyd

chronyc sources
# 控制节点
# MS Name/IP address         Stratum Poll Reach LastRx Last sample               
# ===============================================================================
# ^* 203.107.6.88                  2   6    17     1   +250us[ +296us] +/-   36ms
# 计算节点及块存储节点
# MS Name/IP address         Stratum Poll Reach LastRx Last sample               
# ===============================================================================
# ^* controller                    3   6    17     3  -2592ns[  -21us] +/-   35ms
# ^* 代表同步成功

  1. 安装 OpenStack packages
yum install centos-release-openstack-yoga -y

yum config-manager --set-enabled powertools

yum upgrade -y

yum install python3-openstackclient -y

yum install openstack-selinux -y

主菜

本章节内容:各个节点的所需服务的安装步骤。

控制节点

  1. 数据库
yum install mariadb mariadb-server python3-PyMySQL  -y

cp /etc/my.cnf.d/openstack.cnf /etc/my.cnf.d/openstack.cnf.bak
# 没有则新建

vi /etc/my.cnf.d/openstack.cnf
[mysqld]
bind-address = 10.0.0.10
# 根据控制节点管理网络 IP 修改
default-storage-engine = innodb
innodb_file_per_table = on
max_connections = 4096
collation-server = utf8_general_ci
character-set-server = utf8

:wq


systemctl enable mariadb --now

systemctl status mariadb

mysql_secure_installation

Enter current password for root (enter for none): 回车
Set root password? [Y/n] y
# 将要求输入数据库 root 账户密码 MARIADB_PASS
Remove anonymous users? [Y/n] y
Disallow root login remotely? [Y/n] n
Remove test database and access to it? [Y/n] y
Reload privilege tables now? [Y/n] y

# 验证
mysql -u root -p

  1. 消息队列
yum install rabbitmq-server -y

systemctl enable rabbitmq-server --now

systemctl status rabbitmq-server
 
rabbitmqctl add_user openstack RABBIT_PASS
# 注意将 RABBIT_PASS  修改为 消息队列密码

rabbitmqctl set_permissions openstack ".*" ".*" ".*"

  1. 内存对象缓存
yum install memcached python3-memcached -y

cp /etc/sysconfig/memcached /etc/sysconfig/memcached.bak

vi /etc/sysconfig/memcached
OPTIONS="-l 127.0.0.1,::1,controller"
# 如启动出现绑定失败问题,则修改为
# OPTIONS="-l 127.0.0.1,::1,管理网络IP地址"

:wq


systemctl enable memcached --now

systemctl status memcached

  1. 环境数据一致性同步
yum install etcd -y

cp /etc/etcd/etcd.conf /etc/etcd/etcd.conf.bak

vi /etc/etcd/etcd.conf
#[Member]
ETCD_DATA_DIR="/var/lib/etcd/default.etcd"
ETCD_LISTEN_PEER_URLS="http://10.0.0.10:2380"
ETCD_LISTEN_CLIENT_URLS="http://10.0.0.10:2379"
ETCD_NAME="controller"
#[Clustering]
ETCD_INITIAL_ADVERTISE_PEER_URLS="http://10.0.0.10:2380"
ETCD_ADVERTISE_CLIENT_URLS="http://10.0.0.10:2379"
ETCD_INITIAL_CLUSTER="controller=http://10.0.0.10:2380"
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster-01"
ETCD_INITIAL_CLUSTER_STATE="new"

# 注意 controller 为 控制节点的 hostname   10.0.0.10 为控制节点管理网络的 IP  确保一致性

systemctl enable etcd --now

systemctl status etcd
  1. 认证服务 Keystone
mysql -u root -p
#  MARIADB_PASS

MariaDB [(none)]> CREATE DATABASE keystone;

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

MariaDB [(none)]> GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'%' \
IDENTIFIED BY 'KEYSTONE_DBPASS';
# KEYSTONE_DBPASS  为 Keystone 数据库密码

MariaDB [(none)]> exit

yum install openstack-keystone httpd python3-mod_wsgi -y

cp /etc/keystone/keystone.conf /etc/keystone/keystone.conf.bak

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

# KEYSTONE_DBPASS  为 Keystone 数据库账户密码

[token]
# ...
provider = fernet

:wq


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

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

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

keystone-manage bootstrap --bootstrap-password ADMIN_PASS \
  --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

# ADMIN_PASS 为 admin 账户密码

cp /etc/httpd/conf/httpd.conf /etc/httpd/conf/httpd.conf.bak

vi /etc/httpd/conf/httpd.conf
ServerName controller


ln -s /usr/share/keystone/wsgi-keystone.conf /etc/httpd/conf.d/

systemctl enable httpd  --now

systemctl status httpd

source admin-openrc.sh

# service 项目 创建在 default 用于 OpenStack 服务
openstack project create --domain default \
  --description "Service Project" service
# +-------------+----------------------------------+
# | Field       | Value                            |
# +-------------+----------------------------------+
# | description | Service Project                  |
# | domain_id   | default                          |
# | enabled     | True                             |
# | id          | 9696d33d99334266a7dcc735ad068550 |
# | is_domain   | False                            |
# | name        | service                          |
# | options     | {}                               |
# | parent_id   | default                          |
# | tags        | []                               |
# +-------------+----------------------------------+

# 创建一个 RegionOne 域名作为后续云实例创建域名
openstack domain create --description "RegionOne Domain" RegionOne

#  在 RegionOne 域中创建一个 Yoga 项目
openstack project create --domain RegionOne \
  --description "Yoga Project" Yoga

# 在 RegionOne 域中创建普通用户 user_dog 
openstack user create --domain RegionOne \
  --password-prompt user_dog

# 创建普通用户 user_dog  的规则 user_dog_role
openstack role create user_dog_role

# 将规则与用户绑定
openstack role add --project Yoga --user user_dog user_dog_role


# 注:可以重复上边步骤以创建更多项目、用户及规则

# 验证服务可用性
# 卸载 admin 用户的环境
unset OS_AUTH_URL OS_PASSWORD

# 验证 admin 用户可用性
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 的密码
# 返回  token 信息则服务正常


# 验证 user_dog 用户可用性
openstack --os-auth-url http://controller:5000/v3 \
  --os-project-domain-name RegionOne --os-user-domain-name RegionOne \
  --os-project-name Yoga --os-username user_dog token issue


source admin-openrc.sh

# 列举当前所有域名
openstack domain list
# +----------------------------------+-----------+---------+--------------------+
# | ID                               | Name      | Enabled | Description        |
# +----------------------------------+-----------+---------+--------------------+
# | d1eb84f97aa14741a3911f76e0bad1e7 | RegionOne | True    | RegionOne Domain   |
# | default                          | Default   | True    | The default domain |
# +----------------------------------+-----------+---------+--------------------+

  1. 镜像服务 Glance
mysql -u root -p
#  MARIADB_PASS

MariaDB [(none)]> CREATE DATABASE glance;

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

MariaDB [(none)]> GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'%' \
  IDENTIFIED BY 'GLANCE_DBPASS';
将 GLANCE_DBPASS 替换为 glance 服务的密码

MariaDB [(none)]> exit

source admin-openrc.sh

openstack user create --domain default --password-prompt glance
# User Password: GLANCE_PASS
# Repeat User Password: GLANCE_PASS

# 为 Glance 用户添加 admin 规则到系统项目 service
openstack role add --project service --user glance admin
# 没有输出内容

# 为 Glance 添加管理镜像的服务
openstack service create --name glance \
  --description "OpenStack Image" image
# +-------------+----------------------------------+
# | Field       | Value                            |
# +-------------+----------------------------------+
# | description | OpenStack Image                  |
# | enabled     | True                             |
# | id          | 97a0f2713e504751a263d852bca8c5c6 |
# | name        | glance                           |
# | type        | image                            |
# +-------------+----------------------------------+

# 为 RegionOne 域名添加服务接口
openstack endpoint create --region RegionOne \
  image public http://controller:9292
# +--------------+----------------------------------+
# | Field        | Value                            |
# +--------------+----------------------------------+
# | enabled      | True                             |
# | id           | aadbbde7bd9948258dc5f35acdbee92a |
# | interface    | public                           |
# | region       | RegionOne                        |
# | region_id    | RegionOne                        |
# | service_id   | 97a0f2713e504751a263d852bca8c5c6 |
# | service_name | glance                           |
# | service_type | image                            |
# | url          | http://controller:9292           |
# +--------------+----------------------------------+

openstack endpoint create --region RegionOne \
  image internal http://controller:9292
# +--------------+----------------------------------+
# | Field        | Value                            |
# +--------------+----------------------------------+
# | enabled      | True                             |
# | id           | 4a3ca38a9f50426d9fa215e4277ad4d6 |
# | interface    | internal                         |
# | region       | RegionOne                        |
# | region_id    | RegionOne                        |
# | service_id   | 97a0f2713e504751a263d852bca8c5c6 |
# | service_name | glance                           |
# | service_type | image                            |
# | url          | http://controller:9292           |
# +--------------+----------------------------------+

openstack endpoint create --region RegionOne \
  image admin http://controller:9292
# +--------------+----------------------------------+
# | Field        | Value                            |
# +--------------+----------------------------------+
# | enabled      | True                             |
# | id           | 155f303412c44aad8e375ef982e505da |
# | interface    | admin                            |
# | region       | RegionOne                        |
# | region_id    | RegionOne                        |
# | service_id   | 97a0f2713e504751a263d852bca8c5c6 |
# | service_name | glance                           |
# | service_type | image                            |
# | url          | http://controller:9292           |
# +--------------+----------------------------------+

# 指定 glance 服务的限额
# 每个上传镜像的大小  不大于 1000 MB
openstack registered limit create \
  --service glance --default-limit 1000 --region RegionOne image_size_total

openstack registered limit create \
  --service glance --default-limit 1000 --region RegionOne image_stage_total

# 镜像的总数
openstack registered limit create \
  --service glance --default-limit 100 --region RegionOne image_count_total

# 镜像的上传数量
openstack registered limit create \
  --service glance --default-limit 100 --region RegionOne image_count_uploading

pip3 install boto3

yum install openstack-glance -y

cp /etc/glance/glance-api.conf  /etc/glance/glance-api.conf.bak

vi /etc/glance/glance-api.conf
[DEFAULT]
use_keystone_quotas = True
log_file = /var/log/glance/glance.log

[database]
# ...
connection = mysql+pymysql://glance:GLANCE_DBPASS@controller/glance
# GLANCE_DBPASS 为 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_PASS
service_token_roles_required = true
# GLANCE_DBPASS 为 Glance 服务的数据库账户密码

[paste_deploy]
# ...
flavor = keystone

[glance_store]
# ...
# stores = file,http
# default_store = file
default_backend = {'store_one': 'http', 'store_two': 'file'}
filesystem_store_datadir = /var/lib/glance/images/

# 具体多后端配置信息见官方链接 https://docs.openstack.org/glance_store/yoga/reference/api/glance_store.multi_backend.html 

# 注:可忽略
[oslo_limit]
auth_url = http://controller:5000
auth_type = password
user_domain_id = default
username = admin
# 使用 admin
system_scope = all
password = ADMIN_PASS
# 使用 admin  用户的密码
endpoint_id = ENDPOINT_ID    
# 使用 openstack endpoint list 查询  glance 服务 对应 admin 用户的 endpoint_id
region_name = RegionOne

:wq


# 同步 Glance 数据到数据库
su -s /bin/sh -c "glance-manage db_sync" glance

systemctl enable openstack-glance-api  --now

systemctl status openstack-glance-api


# 验证服务可用性
source admin-openrc.sh

wget http://download.cirros-cloud.net/0.5.2/cirros-0.5.2-x86_64-disk.img

glance image-create --name "cirros" \
  --file cirros-0.5.2-x86_64-disk.img \
  --disk-format qcow2 --container-format bare \
  --visibility=public
# +------------------+----------------------------------------------------------------------------------+
# | Property         | Value                                                                            |
# +------------------+----------------------------------------------------------------------------------+
# | checksum         | b874c39491a2377b8490f5f1e89761a4                                                 |
# | container_format | bare                                                                             |
# | created_at       | 2022-07-24T17:50:11Z                                                             |
# | disk_format      | qcow2                                                                            |
# | id               | 4e022193-03c2-40c4-872f-0adb606f31e4                                             |
# | min_disk         | 0                                                                                |
# | min_ram          | 0                                                                                |
# | name             | cirros                                                                           |
# | os_hash_algo     | sha512                                                                           |
# | os_hash_value    | 6b813aa46bb90b4da216a4d19376593fa3f4fc7e617f03a92b7fe11e9a3981cbe8f0959dbebe3622 |
# |                  | 5e5f53dc4492341a4863cac4ed1ee0909f3fc78ef9c3e869                                 |
# | os_hidden        | False                                                                            |
# | owner            | e4bf08c8bd814c288852ec8bd48936d4                                                 |
# | protected        | False                                                                            |
# | size             | 16300544                                                                         |
# | status           | active                                                                           |
# | tags             | []                                                                               |
# | updated_at       | 2022-07-24T17:50:11Z                                                             |
# | virtual_size     | 117440512                                                                        |
# | visibility       | public                                                                           |
# +------------------+----------------------------------------------------------------------------------+

openstack image list
# +--------------------------------------+--------+--------+
# | ID                                   | Name   | Status |
# +--------------------------------------+--------+--------+
# | 4e022193-03c2-40c4-872f-0adb606f31e4 | cirros | active |
# +--------------------------------------+--------+--------+

  1. 安置服务Placement
mysql -u root -p
# MARIADB_PASS

MariaDB [(none)]> CREATE DATABASE placement;

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

MariaDB [(none)]> GRANT ALL PRIVILEGES ON placement.* TO 'placement'@'%' \
  IDENTIFIED BY 'PLACEMENT_DBPASS';
#PLACEMENT_DBPASS 为 placement 服务的密码

MariaDB [(none)]> exit


openstack user create --domain default --password-prompt placement
# 执行后将要求输入 placement 服务的密码  PLACEMENT_PASS
# User Password: PLACEMENT_PASS
# Repeat User Password: PLACEMENT_PASS
# +---------------------+----------------------------------+
# | Field               | Value                            |
# +---------------------+----------------------------------+
# | domain_id           | default                          |
# | enabled             | True                             |
# | id                  | d6257b9730fd45c6864a5092d237a6a5 |
# | name                | placement                        |
# | options             | {}                               |
# | password_expires_at | None                             |
# +---------------------+----------------------------------+

openstack role add --project service --user placement admin

openstack service create --name placement \
  --description "Placement API" placement
# +-------------+----------------------------------+
# | Field       | Value                            |
# +-------------+----------------------------------+
# | description | Placement API                    |
# | enabled     | True                             |
# | id          | 3fe738e12ef24c59ad98fab578b263ca |
# | name        | placement                        |
# | type        | placement                        |
# +-------------+----------------------------------+

openstack endpoint create --region RegionOne \
  placement public http://controller:8778
# +--------------+----------------------------------+
# | Field        | Value                            |
# +--------------+----------------------------------+
# | enabled      | True                             |
# | id           | ece91ac8a6054ce8920392fd88c88c1a |
# | interface    | public                           |
# | region       | RegionOne                        |
# | region_id    | RegionOne                        |
# | service_id   | 3fe738e12ef24c59ad98fab578b263ca |
# | service_name | placement                        |
# | service_type | placement                        |
# | url          | http://controller:8778           |
# +--------------+----------------------------------+

openstack endpoint create --region RegionOne \
  placement internal http://controller:8778
# +--------------+----------------------------------+
# | Field        | Value                            |
# +--------------+----------------------------------+
# | enabled      | True                             |
# | id           | 1d3931e0d4ad47ee9e38c0c66736f87f |
# | interface    | internal                         |
# | region       | RegionOne                        |
# | region_id    | RegionOne                        |
# | service_id   | 3fe738e12ef24c59ad98fab578b263ca |
# | service_name | placement                        |
# | service_type | placement                        |
# | url          | http://controller:8778           |
# +--------------+----------------------------------+

openstack endpoint create --region RegionOne \
  placement admin http://controller:8778
# +--------------+----------------------------------+
# | Field        | Value                            |
# +--------------+----------------------------------+
# | enabled      | True                             |
# | id           | 37bd6f1c52454a87909f039c7ff5b4fb |
# | interface    | admin                            |
# | region       | RegionOne                        |
# | region_id    | RegionOne                        |
# | service_id   | 3fe738e12ef24c59ad98fab578b263ca |
# | service_name | placement                        |
# | service_type | placement                        |
# | url          | http://controller:8778           |
# +--------------+----------------------------------+

yum install openstack-placement-api -y

cp /etc/placement/placement.conf /etc/placement/placement.conf.bak

vi /etc/placement/placement.conf
[placement_database]
# ...
connection = mysql+pymysql://placement:PLACEMENT_DBPASS@controller/placement
# PLACEMENT_DBPASS 为 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_PASS
# PLACEMENT_PASS 为 placement 服务的密码

:wq


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

systemctl restart httpd

systemctl status httpd

cp /etc/placement/policy.json /etc/placement/policy.json.bak

oslopolicy-convert-json-to-yaml --namespace placement \
  --policy-file /etc/placement/policy.json \
  --output-file /etc/placement/policy.yaml

rm -f /etc/placement/policy.json

# 验证服务
source admin-openrc.sh

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                             |
# +-------------------------------------------+

yum install python3-osc-placement -y

cp /etc/httpd/conf.d/00-placement-api.conf /etc/httpd/conf.d/00-placement-api.conf.bak

vi /etc/httpd/conf.d/00-placement-api.conf
# 在 listen 8778 下一行处添加
<Files "placement-api">
    Require all granted
</Files>

:wq


systemctl restart httpd

systemctl status httpd

# 验证
openstack --os-placement-api-version 1.2 resource class list --sort-column name
# +----------------------------------------+
# | name                                   |
# +----------------------------------------+
# | DISK_GB                                |
# | FPGA                                   |
# | IPV4_ADDRESS                           |
# | MEMORY_MB                              |
# | MEM_ENCRYPTION_CONTEXT                 |
# | NET_BW_EGR_KILOBIT_PER_SEC             |
# | NET_BW_IGR_KILOBIT_PER_SEC             |
# | NET_PACKET_RATE_EGR_KILOPACKET_PER_SEC |
# | NET_PACKET_RATE_IGR_KILOPACKET_PER_SEC |
# | NET_PACKET_RATE_KILOPACKET_PER_SEC     |
# | NUMA_CORE                              |
# | NUMA_MEMORY_MB                         |
# | NUMA_SOCKET                            |
# | NUMA_THREAD                            |
# | PCI_DEVICE                             |
# | PCPU                                   |
# | PGPU                                   |
# | SRIOV_NET_VF                           |
# | VCPU                                   |
# | VGPU                                   |
# | VGPU_DISPLAY_HEAD                      |
# +----------------------------------------+

openstack --os-placement-api-version 1.6 trait list --sort-column name
# +---------------------------------------+
# | name                                  |
# +---------------------------------------+
# | COMPUTE_ACCELERATORS                  |
# | COMPUTE_ARCH_AARCH64                  |
# | COMPUTE_ARCH_MIPSEL                   |
# | COMPUTE_ARCH_PPC64LE                  |
# | COMPUTE_ARCH_RISCV64                  |
# | COMPUTE_ARCH_S390X                    |
# | COMPUTE_ARCH_X86_64                   |
# | COMPUTE_DEVICE_TAGGING                |
# ...


  1. 计算服务Nova
mysql -u root -p
# MARIADB_PASS

MariaDB [(none)]> CREATE DATABASE nova_api;
MariaDB [(none)]> CREATE DATABASE nova;
MariaDB [(none)]> CREATE DATABASE nova_cell0;

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

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

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

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

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

MariaDB [(none)]> GRANT ALL PRIVILEGES ON nova_cell0.* TO 'nova'@'%' \
  IDENTIFIED BY 'NOVA_DBPASS';
# NOVA_DBPASS 为 nova 服务的密码

MariaDB [(none)]> exit

source admin-openrc.sh

openstack user create --domain default --password-prompt nova
# 将要求输入 nova 服务的密码  NOVA_PASS
# User Password: NOVA_PASS
# Repeat User Password: NOVA_PASS
# +---------------------+----------------------------------+
# | Field               | Value                            |
# +---------------------+----------------------------------+
# | domain_id           | default                          |
# | enabled             | True                             |
# | id                  | ea8cc01ac5094751bdac3c49ead28bec |
# | name                | nova                             |
# | options             | {}                               |
# | password_expires_at | None                             |
# +---------------------+----------------------------------+

openstack role add --project service --user nova admin

openstack service create --name nova \
  --description "OpenStack Compute" compute
# +-------------+----------------------------------+
# | Field       | Value                            |
# +-------------+----------------------------------+
# | description | OpenStack Compute                |
# | enabled     | True                             |
# | id          | b427b5b5434f4edba1dd157a01a45d12 |
# | name        | nova                             |
# | type        | compute                          |
# +-------------+----------------------------------+

openstack endpoint create --region RegionOne \
  compute public http://controller:8774/v2.1
# +--------------+----------------------------------+
# | Field        | Value                            |
# +--------------+----------------------------------+
# | enabled      | True                             |
# | id           | e8689643fe714c459c2b7d1b885ec72d |
# | interface    | public                           |
# | region       | RegionOne                        |
# | region_id    | RegionOne                        |
# | service_id   | b427b5b5434f4edba1dd157a01a45d12 |
# | service_name | nova                             |
# | service_type | compute                          |
# | url          | http://controller:8774/v2.1      |
# +--------------+----------------------------------+

openstack endpoint create --region RegionOne \
  compute internal http://controller:8774/v2.1
# +--------------+----------------------------------+
# | Field        | Value                            |
# +--------------+----------------------------------+
# | enabled      | True                             |
# | id           | d6ac010e63c8455f98ea04f6886adfb5 |
# | interface    | internal                         |
# | region       | RegionOne                        |
# | region_id    | RegionOne                        |
# | service_id   | b427b5b5434f4edba1dd157a01a45d12 |
# | service_name | nova                             |
# | service_type | compute                          |
# | url          | http://controller:8774/v2.1      |
# +--------------+----------------------------------+

openstack endpoint create --region RegionOne \
  compute admin http://controller:8774/v2.1
# +--------------+----------------------------------+
# | Field        | Value                            |
# +--------------+----------------------------------+
# | enabled      | True                             |
# | id           | 695e0d4dba934af2844fef47488630bc |
# | interface    | admin                            |
# | region       | RegionOne                        |
# | region_id    | RegionOne                        |
# | service_id   | b427b5b5434f4edba1dd157a01a45d12 |
# | service_name | nova                             |
# | service_type | compute                          |
# | url          | http://controller:8774/v2.1      |
# +--------------+----------------------------------+


yum install -y \
    openstack-nova-api \
    openstack-nova-scheduler \
    openstack-nova-conductor \
    openstack-nova-novncproxy \
    iptables

cp /etc/nova/nova.conf /etc/nova/nova.conf.bak

vi /etc/nova/nova.conf

[DEFAULT]
# …
enabled_apis = osapi_compute,metadata
transport_url = rabbit://openstack:RABBIT_PASS@controller:5672/
# RABBIT_PASS rabbitmq 密码
my_ip = 10.0.0.10
# 控制节点控制网络的 IP
log_file = /var/log/nova/nova-controller.log
rootwrap_config = /etc/nova/rootwrap.conf

[api_database]
# ...
connection = mysql+pymysql://nova:NOVA_DBPASS@controller/nova_api
# NOVA_DBPASS 为数据库 Nova 账户密码

[database]
# ...
connection = mysql+pymysql://nova:NOVA_DBPASS@controller/nova
# NOVA_DBPASS 为数据库 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_PASS
# NOVA_PASS 为 Nova 服务的密码

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

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

[oslo_concurrency]
# ...
lock_path = /var/run/nova

[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_PASS
# PLACEMENT_PASS 为 placement 服务的密码

:wq


su -s /bin/sh -c "nova-manage api_db sync" nova

cp /etc/nova/policy.json /etc/nova/policy.json.bak

oslopolicy-convert-json-to-yaml --namespace nova \
  --policy-file /etc/nova/policy.json \
  --output-file /etc/nova/policy.yaml

rm -f /etc/nova/policy.json

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
# --transport-url not provided in the command line, using the value [DEFAULT]/transport_url from the configuration file
# --database_connection not provided in the command line, using the value [database]/connection from the configuration file
# ab6ff38c-d05a-40b9-bbb6-8306a048e38e
# 如有以上提示请忽略,cell 将以 nova.conf 配置文件内的地址进行创建

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 |
+-------+--------------------------------------+------------------------------------------+-------------------------------------------------+----------+
| cell0 | 00000000-0000-0000-0000-000000000000 |                  none:/                  | mysql+pymysql://nova:****@controller/nova_cell0 |  False   |
| cell1 | ab6ff38c-d05a-40b9-bbb6-8306a048e38e | rabbit://openstack:****@controller:5672/ |    mysql+pymysql://nova:****@controller/nova    |  False   |
+-------+--------------------------------------+------------------------------------------+-------------------------------------------------+----------+

systemctl enable --now \
    openstack-nova-api.service \
    openstack-nova-scheduler.service \
    openstack-nova-conductor.service \
    openstack-nova-novncproxy.service

systemctl status \
    openstack-nova-api.service \
    openstack-nova-scheduler.service \
    openstack-nova-conductor.service \
    openstack-nova-novncproxy.service
    
  1. 网络服务Neutron
mysql -u root -p
# MARIADB_PASS

MariaDB [(none)] CREATE DATABASE neutron;

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

MariaDB [(none)]> GRANT ALL PRIVILEGES ON neutron.* TO 'neutron'@'%' \
  IDENTIFIED BY 'NEUTRON_DBPASS';
# NEUTRON_DBPASS 为数据库 neutron 账户的密码

MariaDB [(none)]> exit

source admin-openrc.sh

openstack user create --domain default --password-prompt neutron
# 将要求输入密码 此密码为 neutron 服务的密码  NEUTRON_PASS
User Password:
Repeat User Password:
+---------------------+----------------------------------+
| Field               | Value                            |
+---------------------+----------------------------------+
| domain_id           | default                          |
| enabled             | True                             |
| id                  | 33703cb73a484af4b6ec741e2c02e348 |
| name                | neutron                          |
| options             | {}                               |
| password_expires_at | None                             |
+---------------------+----------------------------------+

openstack role add --project service --user neutron admin

openstack service create --name neutron \
  --description "OpenStack Networking" network
+-------------+----------------------------------+
| Field       | Value                            |
+-------------+----------------------------------+
| description | OpenStack Networking             |
| enabled     | True                             |
| id          | 76470167718f4710a721374a929ab204 |
| name        | neutron                          |
| type        | network                          |
+-------------+----------------------------------+

openstack endpoint create --region RegionOne \
  network public http://controller:9696
+--------------+----------------------------------+
| Field        | Value                            |
+--------------+----------------------------------+
| enabled      | True                             |
| id           | 1b706912b617465892e1a7e1e5d3a924 |
| interface    | public                           |
| region       | RegionOne                        |
| region_id    | RegionOne                        |
| service_id   | 76470167718f4710a721374a929ab204 |
| service_name | neutron                          |
| service_type | network                          |
| url          | http://controller:9696           |
+--------------+----------------------------------+

openstack endpoint create --region RegionOne \
  network internal http://controller:9696
+--------------+----------------------------------+
| Field        | Value                            |
+--------------+----------------------------------+
| enabled      | True                             |
| id           | 27a6cddb66e443fa801a72b56bacb5c4 |
| interface    | internal                         |
| region       | RegionOne                        |
| region_id    | RegionOne                        |
| service_id   | 76470167718f4710a721374a929ab204 |
| service_name | neutron                          |
| service_type | network                          |
| url          | http://controller:9696           |
+--------------+----------------------------------+

openstack endpoint create --region RegionOne \
  network admin http://controller:9696
+--------------+----------------------------------+
| Field        | Value                            |
+--------------+----------------------------------+
| enabled      | True                             |
| id           | 9fbeeec5c30a4c7e86ad3052c78c4084 |
| interface    | admin                            |
| region       | RegionOne                        |
| region_id    | RegionOne                        |
| service_id   | 76470167718f4710a721374a929ab204 |
| service_name | neutron                          |
| service_type | network                          |
| url          | http://controller:9696           |
+--------------+----------------------------------+


# 选择安装 大二层 网络
yum install openstack-neutron openstack-neutron-ml2 \
  openstack-neutron-linuxbridge ebtables -y

cp /etc/neutron/neutron.conf /etc/neutron/neutron.conf.bak

vi /etc/neutron/neutron.conf
[database]
# ...
connection = mysql+pymysql://neutron:NEUTRON_DBPASS@controller/neutron
# NEUTRON_DBPASS为 数据库 neutron 账户密码

[DEFAULT]
# ...
core_plugin = ml2
service_plugins = router
allow_overlapping_ips = true
transport_url = rabbit://openstack:RABBIT_PASS@controller
auth_strategy = keystone
notify_nova_on_port_status_changes = true
notify_nova_on_port_data_changes = true
# RABBIT_PASS 为 消息队列密码

[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 = neutron
password = NEUTRON_PASS
# NEUTRON_PASS为 neutron 服务密码

[nova]
# ...
auth_url = http://controller:5000
auth_type = password
project_domain_name = default
user_domain_name = default
region_name = RegionOne
project_name = service
username = nova
password = NOVA_PASS
# [nova]  没有则添加
# NOVA_PASS 为 Nova 服务密码

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

:wq


cp /etc/neutron/plugins/ml2/ml2_conf.ini /etc/neutron/plugins/ml2/ml2_conf.ini.bak

vi /etc/neutron/plugins/ml2/ml2_conf.ini
[ml2]
# ...
type_drivers = flat,vlan,vxlan
tenant_network_types = vxlan
mechanism_drivers = linuxbridge,l2population
extension_drivers = port_security

[ml2_type_flat]
# ...
flat_networks = provider

[ml2_type_vxlan]
# ...
vni_ranges = 1:1000

[securitygroup]
# ...
enable_ipset = true

# 没有则添加
:wq


cp /etc/neutron/plugins/ml2/linuxbridge_agent.ini /etc/neutron/plugins/ml2/linuxbridge_agent.ini.bak

vi /etc/neutron/plugins/ml2/linuxbridge_agent.ini
[linux_bridge]
physical_interface_mappings = provider:PROVIDER_INTERFACE_NAME
# PROVIDER_INTERFACE_NAME 为 服务提供网络所对应的网卡编号

[vxlan]
enable_vxlan = true
local_ip = OVERLAY_INTERFACE_IP_ADDRESS
l2_population = true
# OVERLAY_INTERFACE_IP_ADDRESS 为管理网络 控制节点的 IP  即 controller IP

[securitygroup]
# ...
enable_security_group = true
firewall_driver = neutron.agent.linux.iptables_firewall.IptablesFirewallDriver

# 没有则添加
:wq

modprobe br_netfilter

cat >>/etc/rc.sysinit<<EOF
#!/bin/bash
for file in /etc/sysconfig/modules/*.modules ; do
[ -x $file ] && $file
done
EOF

echo "modprobe br_netfilter" >/etc/sysconfig/modules/br_netfilter.modules

chmod 755 /etc/sysconfig/modules/br_netfilter.modules

sysctl -a | grep net.bridge.bridge-nf-call
# net.bridge.bridge-nf-call-arptables = 1
# net.bridge.bridge-nf-call-ip6tables = 1
# net.bridge.bridge-nf-call-iptables = 1

cp /etc/neutron/l3_agent.ini /etc/neutron/l3_agent.ini.bak

vi /etc/neutron/l3_agent.ini
[DEFAULT]
# ...
interface_driver = linuxbridge


cp /etc/neutron/dhcp_agent.ini /etc/neutron/dhcp_agent.ini.bak

vi /etc/neutron/dhcp_agent.ini
[DEFAULT]
# ...
interface_driver = linuxbridge
dhcp_driver = neutron.agent.linux.dhcp.Dnsmasq
enable_isolated_metadata = true


cp /etc/neutron/metadata_agent.ini /etc/neutron/metadata_agent.ini.bak

vi /etc/neutron/metadata_agent.ini
[DEFAULT]
# ...
nova_metadata_host = controller
metadata_proxy_shared_secret = METADATA_SECRET
# METADATA_SECRET 为 元数据 的密钥


vi /etc/nova/nova.conf
[neutron]
auth_url = http://controller:5000
auth_type = password
project_domain_name = default
user_domain_name = default
region_name = RegionOne
project_name = service
username = neutron
password = NEUTRON_PASS
service_metadata_proxy = true
metadata_proxy_shared_secret = METADATA_SECRET
# NEUTRON_PASS  为 neutron 服务的密码
# METADATA_SECRET 为上边设置的元数据密钥

:wq


ln -s /etc/neutron/plugins/ml2/ml2_conf.ini /etc/neutron/plugin.ini

su -s /bin/sh -c "neutron-db-manage --config-file /etc/neutron/neutron.conf \
  --config-file /etc/neutron/plugins/ml2/ml2_conf.ini upgrade head" neutron

systemctl restart openstack-nova-api

systemctl status openstack-nova-api

systemctl enable  --now neutron-server.service \
  neutron-linuxbridge-agent.service neutron-dhcp-agent.service \
  neutron-metadata-agent.service  neutron-l3-agent.service

systemctl status neutron-server.service  neutron-linuxbridge-agent.service neutron-dhcp-agent.service   neutron-metadata-agent.service  neutron-l3-agent.service


# 等待 计算节点 安装 neutron 后进行验证


  1. 块存储服务Cinder
mysql -u root -p
# MARIADB_PASS

MariaDB [(none)]> CREATE DATABASE cinder;

MariaDB [(none)]> GRANT ALL PRIVILEGES ON cinder.* TO 'cinder'@'localhost' \
  IDENTIFIED BY 'CINDER_DBPASS';
MariaDB [(none)]> GRANT ALL PRIVILEGES ON cinder.* TO 'cinder'@'%' \
  IDENTIFIED BY 'CINDER_DBPASS';
# CINDER_DBPASS 为 cinder 数据库账户密码

MariaDB [(none)]> exit


source admin-openrc.sh

openstack user create --domain default --password-prompt cinder
# 将要求输入 cinder 服务的密码 CINDER_PASS
User Password:
Repeat User Password:
+---------------------+----------------------------------+
| Field               | Value                            |
+---------------------+----------------------------------+
| domain_id           | default                          |
| enabled             | True                             |
| id                  | 6aebd9fadf2d4d1fa16a6dd87ed704c5 |
| name                | cinder                           |
| options             | {}                               |
| password_expires_at | None                             |
+---------------------+----------------------------------+

openstack role add --project service --user cinder admin

openstack service create --name cinderv3 \
  --description "OpenStack Block Storage" volumev3

openstack endpoint create --region RegionOne \
  volumev3 public http://controller:8776/v3/%\(project_id\)s
+-------------+----------------------------------+
| Field       | Value                            |
+-------------+----------------------------------+
| description | OpenStack Block Storage          |
| enabled     | True                             |
| id          | fef484b5fc364720a7bd613fc60eb814 |
| name        | cinderv3                         |
| type        | volumev3                         |
+-------------+----------------------------------+

openstack endpoint create --region RegionOne \
  volumev3 internal http://controller:8776/v3/%\(project_id\)s
+--------------+------------------------------------------+
| Field        | Value                                    |
+--------------+------------------------------------------+
| enabled      | True                                     |
| id           | fa2322b2a3014d8a9b23932978330f4b         |
| interface    | public                                   |
| region       | RegionOne                                |
| region_id    | RegionOne                                |
| service_id   | fef484b5fc364720a7bd613fc60eb814         |
| service_name | cinderv3                                 |
| service_type | volumev3                                 |
| url          | http://controller:8776/v3/%(project_id)s |
+--------------+------------------------------------------+

openstack endpoint create --region RegionOne \
  volumev3 admin http://controller:8776/v3/%\(project_id\)s
+--------------+------------------------------------------+
| Field        | Value                                    |
+--------------+------------------------------------------+
| enabled      | True                                     |
| id           | 34f4c7d3a2714a4ab9be1e42c319de98         |
| interface    | admin                                    |
| region       | RegionOne                                |
| region_id    | RegionOne                                |
| service_id   | fef484b5fc364720a7bd613fc60eb814         |
| service_name | cinderv3                                 |
| service_type | volumev3                                 |
| url          | http://controller:8776/v3/%(project_id)s |
+--------------+------------------------------------------+


yum install openstack-cinder -y

cp /etc/cinder/cinder.conf /etc/cinder/cinder.conf.bak

vi /etc/cinder/cinder.conf
[DEFAULT]
# ...
transport_url = rabbit://openstack:RABBIT_PASS@controller
auth_strategy = keystone
my_ip = 10.0.0.10
# 控制节点管理网络 IP

[database]
# ...
connection = mysql+pymysql://cinder:CINDER_DBPASS@controller/cinder
# CINDER_DBPASS 为数据库 Cinder 账户密码

[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 = cinder
password = CINDER_PASS
# CINDER_PASS 为 Cinder 服务密码

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

:wq


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

vi /etc/nova/nova.conf
[cinder]
os_region_name = RegionOne


systemctl restart openstack-nova-api.service

systemctl status openstack-nova-api.service

systemctl enable --now openstack-cinder-api.service openstack-cinder-scheduler.service

systemctl status openstack-cinder-api.service openstack-cinder-scheduler.service

# 等待块存储节点 Cinder 安装完成后进行验证
 
  1. Web 管理页面(Dashboard)horizon
yum install openstack-dashboard -y

cp /etc/openstack-dashboard/local_settings /etc/openstack-dashboard/local_settings.bak

vi /etc/openstack-dashboard/local_settings
OPENSTACK_HOST = "controller"
ALLOWED_HOSTS = ['*']
SESSION_ENGINE = 'django.contrib.sessions.backends.cache'

CACHES = {
    'default': {
         'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
         'LOCATION': 'controller:11211',
    }
}
OPENSTACK_KEYSTONE_URL = "http://%s:5000/identity/v3" % OPENSTACK_HOST
OPENSTACK_KEYSTONE_MULTIDOMAIN_SUPPORT = True
OPENSTACK_API_VERSIONS = {
    "identity": 3,
    "image": 2,
    "volume": 3,
}
OPENSTACK_KEYSTONE_DEFAULT_DOMAIN = "Default"
OPENSTACK_KEYSTONE_DEFAULT_ROLE = "user"
TIME_ZONE = "Asia/Shanghai"
# 有则修改没有则添加

:wq


cp /etc/httpd/conf.d/openstack-dashboard.conf /etc/httpd/conf.d/openstack-dashboard.conf.bak

python3 /usr/share/openstack-dashboard/manage.py make_web_conf --apache > /etc/httpd/conf.d/openstack-dashboard.conf

systemctl restart httpd

systemctl status httpd


# 验证
# 访问 http://部署 Dashboard 的控制节点 ip
# 登录用户密码 可使用 admin 或 user_dog
# 域名 使用 RegionOne


计算节点

  1. 计算服务Nova
yum install openstack-nova-compute -y

cp /etc/nova/nova.conf /etc/nova/nova.conf.bak

vi /etc/nova/nova.conf
[DEFAULT]
# ...
enabled_apis = osapi_compute,metadata
transport_url = rabbit://openstack:RABBIT_PASS@controller
my_ip = MANAGEMENT_INTERFACE_IP_ADDRESS
compute_driver=libvirt.LibvirtDriver
log_file = /var/log/nova/nova-computer.log
# MANAGEMENT_INTERFACE_IP_ADDRESS 替换为 管理网络 IP 地址

[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_PASS

[vnc]
# ...
enabled = true
server_listen = 0.0.0.0
server_proxyclient_address = $my_ip
novncproxy_base_url = http://ManagementIP:6080/vnc_auto.html
# 将 ManagementIP 修改为控制节点管理网络 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_PASS
# PLACEMENT_PASS 为 Placement 服务密码

[neutron]
# ...
auth_url = http://controller:5000
auth_type = password
project_domain_name = default
user_domain_name = default
region_name = RegionOne
project_name = service
username = neutron
password = NEUTRON_PASS
# NEUTRON_PASS 为 Neutron 服务密码

:wq


egrep -c '(vmx|svm)' /proc/cpuinfo
# 如果返回值大于 1 则说明已经开启硬件虚拟化,无需配置 qemu
# 如等于 0 ,则需要配置 qemu 以代替默认的 kvm
vi /etc/nova/nova.conf
[libvirt]
# ...
virt_type = qemu

# 以上配置仅当 egrep -c '(vmx|svm)' /proc/cpuinfo 结果为 0 时才进行配置

mkdir -p /usr/lib/python3.6/site-packages/instances

chmod +777 /usr/lib/python3.6/site-packages/instances

systemctl enable libvirtd.service openstack-nova-compute.service --now

systemctl status libvirtd.service openstack-nova-compute.service


# 在控制节点执行验证
source admin-openrc.sh
openstack compute service list --service nova-compute
+--------------------------------------+--------------+----------+------+---------+-------+----------------------------+
| ID                                   | Binary       | Host     | Zone | Status  | State | Updated At                 |
+--------------------------------------+--------------+----------+------+---------+-------+----------------------------+
| 542d6911-ba76-450a-b235-014bb722097b | nova-compute | computer | nova | enabled | up    | 2022-07-27T08:34:59.000000 |
+--------------------------------------+--------------+----------+------+---------+-------+----------------------------+

su -s /bin/sh -c "nova-manage cell_v2 discover_hosts --verbose" nova
# Found 2 cell mappings.
# Skipping cell0 since it does not contain hosts.
# Getting computes from cell 'cell1': ab6ff38c-d05a-40b9-bbb6-8306a048e38e
# Checking host mapping for compute host 'computer': f5c0a1d3-4380-4d5d-8579-4667998ca06a
# Creating host mapping for compute host 'computer': f5c0a1d3-4380-4d5d-8579-4667998ca06a
# Found 1 unmapped computes in cell: ab6ff38c-d05a-40b9-bbb6-8306a048e38e

openstack compute service list
+--------------------------------------+----------------+------------+----------+---------+-------+----------------------------+
| ID                                   | Binary         | Host       | Zone     | Status  | State | Updated At                 |
+--------------------------------------+----------------+------------+----------+---------+-------+----------------------------+
| 36fcb09d-1ef3-4e18-b5f5-26671d900e39 | nova-conductor | controller | internal | enabled | up    | 2022-07-27T08:37:13.000000 |
| 8f2e62b2-92cd-4a19-a25a-cbdebac5670f | nova-scheduler | controller | internal | enabled | up    | 2022-07-27T08:37:13.000000 |
| 542d6911-ba76-450a-b235-014bb722097b | nova-compute   | computer   | nova     | enabled | up    | 2022-07-27T08:37:09.000000 |
+--------------------------------------+----------------+------------+----------+---------+-------+----------------------------+

openstack catalog list
+-----------+-----------+----------------------------------------------------------------------+
| Name      | Type      | Endpoints                                                            |
+-----------+-----------+----------------------------------------------------------------------+
| placement | placement | RegionOne                                                            |
|           |           |   internal: http://controller:8778                                   |
|           |           | RegionOne                                                            |
|           |           |   admin: http://controller:8778                                      |
|           |           | RegionOne                                                            |
|           |           |   public: http://controller:8778                                     |
|           |           |                                                                      |
| keystone  | identity  | RegionOne                                                            |
|           |           |   admin: http://controller:5000/v3/                                  |
|           |           | RegionOne                                                            |
|           |           |   internal: http://controller:5000/v3/                               |
|           |           | RegionOne                                                            |
|           |           |   public: http://controller:5000/v3/                                 |
|           |           |                                                                      |
| neutron   | network   | RegionOne                                                            |
|           |           |   public: http://controller:9696                                     |
|           |           | RegionOne                                                            |
|           |           |   internal: http://controller:9696                                   |
|           |           | RegionOne                                                            |
|           |           |   admin: http://controller:9696                                      |
|           |           |                                                                      |
| glance    | image     | RegionOne                                                            |
|           |           |   admin: http://controller:9292                                      |
|           |           | RegionOne                                                            |
|           |           |   internal: http://controller:9292                                   |
|           |           | RegionOne                                                            |
|           |           |   public: http://controller:9292                                     |
|           |           |                                                                      |
| nova      | compute   | RegionOne                                                            |
|           |           |   admin: http://controller:8774/v2.1                                 |
|           |           | RegionOne                                                            |
|           |           |   internal: http://controller:8774/v2.1                              |
|           |           | RegionOne                                                            |
|           |           |   public: http://controller:8774/v2.1                                |
|           |           |                                                                      |
| cinderv3  | volumev3  | RegionOne                                                            |
|           |           |   admin: http://controller:8776/v3/e4bf08c8bd814c288852ec8bd48936d4  |
|           |           | RegionOne                                                            |
|           |           |   public: http://controller:8776/v3/e4bf08c8bd814c288852ec8bd48936d4 |
|           |           |                                                                      |
+-----------+-----------+----------------------------------------------------------------------+

openstack image list
+--------------------------------------+--------+--------+
| ID                                   | Name   | Status |
+--------------------------------------+--------+--------+
| 4e022193-03c2-40c4-872f-0adb606f31e4 | cirros | active |
+--------------------------------------+--------+--------+


nova-status upgrade check
+-------------------------------------------+
| Upgrade Check Results                     |
+-------------------------------------------+
| Check: Cells v2                           |
| Result: Success                           |
| Details: None                             |
+-------------------------------------------+
| Check: Placement API                      |
| Result: Success                           |
| Details: None                             |
+-------------------------------------------+
| Check: Cinder API                         |
| Result: Success                           |
| Details: None                             |
+-------------------------------------------+
| Check: Policy Scope-based Defaults        |
| Result: Success                           |
| Details: None                             |
+-------------------------------------------+
| Check: Policy File JSON to YAML Migration |
| Result: Success                           |
| Details: None                             |
+-------------------------------------------+
| Check: Older than N-1 computes            |
| Result: Success                           |
| Details: None                             |
+-------------------------------------------+
| Check: hw_machine_type unset              |
| Result: Success                           |
| Details: None                             |
+-------------------------------------------+


  1. 网络服务Neutron
yum install openstack-neutron-linuxbridge ebtables ipset -y 

cp /etc/neutron/neutron.conf /etc/neutron/neutron.conf.bak

vi /etc/neutron/neutron.conf
[DEFAULT]
# ...
transport_url = rabbit://openstack:RABBIT_PASS@controller
# RABBIT_PASS  为 控制节点 消息队列 密码
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 = neutron
password = NEUTRON_PASS
# NEUTRON_PASS  为控制节点 neutron 服务密码

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

:wq


cp /etc/neutron/plugins/ml2/linuxbridge_agent.ini /etc/neutron/plugins/ml2/linuxbridge_agent.ini.bak

vi /etc/neutron/plugins/ml2/linuxbridge_agent.ini
[linux_bridge]
physical_interface_mappings = provider:PROVIDER_INTERFACE_NAME
# PROVIDER_INTERFACE_NAME 为 计算节点 服务提供网络对应的网卡名

[vxlan]
enable_vxlan = true
local_ip = OVERLAY_INTERFACE_IP_ADDRESS
l2_population = true
# OVERLAY_INTERFACE_IP_ADDRESS  为 计算节点 管理网络的 IP 地址

[securitygroup]
# ...
enable_security_group = true
firewall_driver = neutron.agent.linux.iptables_firewall.IptablesFirewallDriver

:wq


modprobe br_netfilter

cat >>/etc/rc.sysinit<<EOF
#!/bin/bash
for file in /etc/sysconfig/modules/*.modules ; do
[ -x $file ] && $file
done
EOF

echo "modprobe br_netfilter" >/etc/sysconfig/modules/br_netfilter.modules

chmod 755 /etc/sysconfig/modules/br_netfilter.modules

sysctl -a | grep net.bridge.bridge-nf-call
# net.bridge.bridge-nf-call-arptables = 1
# net.bridge.bridge-nf-call-ip6tables = 1
# net.bridge.bridge-nf-call-iptables = 1

vi /etc/nova/nova.conf
[neutron]
# ...
auth_url = http://controller:5000
auth_type = password
project_domain_name = default
user_domain_name = default
region_name = RegionOne
project_name = service
username = neutron
password = NEUTRON_PASS
# NEUTRON_PASS 为 Neutron 服务密码


systemctl restart openstack-nova-compute.service

systemctl enable neutron-linuxbridge-agent.service --now

systemctl status neutron-linuxbridge-agent.service

# 验证
# 控制节点执行
source admin-openrc.sh

openstack network agent list
+--------------------------------------+--------------------+------------+-------------------+-------+-------+---------------------------+
| ID                                   | Agent Type         | Host       | Availability Zone | Alive | State | Binary                    |
+--------------------------------------+--------------------+------------+-------------------+-------+-------+---------------------------+
| 17ad640e-4133-4cb7-b6b0-ad8fe928d2ef | Linux bridge agent | computer   | None              | :-)   | UP    | neutron-linuxbridge-agent |
| 935d609d-2a90-4c3c-8676-a577d5f755a4 | DHCP agent         | controller | nova              | :-)   | UP    | neutron-dhcp-agent        |
| af61a325-8aee-41b5-9997-6ff9a92e928e | L3 agent           | controller | nova              | :-)   | UP    | neutron-l3-agent          |
| c4ad2fee-93b7-4dd8-813f-0fbc2ec9dd2e | Linux bridge agent | controller | None              | :-)   | UP    | neutron-linuxbridge-agent |
| e4889820-19b4-4fd3-a5af-98f8586c2882 | Metadata agent     | controller | None              | :-)   | UP    | neutron-metadata-agent    |
+--------------------------------------+--------------------+------------+-------------------+-------+-------+---------------------------+
# 确保以上五个 Agent 都为 :-) 及 UP

块存储节点

  1. 块存储服务Cinder
yum install lvm2 device-mapper-persistent-data -y

systemctl enable lvm2-lvmetad.service --now
# 如显示不存在则说明系统默认安装了 lvm  以上步骤可忽略

fdisk -l
# 查看 块存储 所部署的 磁盘 代号

pvcreate /dev/sdb
# Physical volume "/dev/sdb" successfully created.

vgcreate cinder-volumes /dev/sdb
# Volume group "cinder-volumes" successfully created
# sdb 为划分给块存储使用的磁盘
# 如有多个磁盘,则需重复以上两个命令


cp /etc/lvm/lvm.conf /etc/lvm/lvm.conf.bak

vi /etc/lvm/lvm.conf
devices {
	...
	filter = [ "a/sdb/", "r/.*/"]
}
# 如有多个磁盘,则将磁盘编号以固定格式添加到过滤设备中,例如有两个磁盘 sdb sdc ,则为 filter = [ "a/sdb/", "a/sdc/","r/.*/"]


yum install openstack-cinder targetcli -y

cp /etc/cinder/cinder.conf /etc/cinder/cinder.conf.bak

vi /etc/cinder/cinder.conf
[DEFAULT]
# ...
transport_url = rabbit://openstack:RABBIT_PASS@controller
auth_strategy = keystone
my_ip = MANAGEMENT_INTERFACE_IP_ADDRESS
enabled_backends = lvm
glance_api_servers = http://controller:9292
# MANAGEMENT_INTERFACE_IP_ADDRESS  为块存储节点 管理网络 的接口IP

[database]
# ...
connection = mysql+pymysql://cinder:CINDER_DBPASS@controller/cinder
# CINDER_DBPASS 为数据库 Cinder 账户密码

[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 = cinder
password = CINDER_PASS
# CINDER_PASS 为 cinder 数据库账户密码

[lvm]
volume_driver = cinder.volume.drivers.lvm.LVMVolumeDriver
volume_group = cinder-volumes
target_protocol = iscsi
target_helper = lioadm
# [lvm]  没有则新建

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

:wq


systemctl enable openstack-cinder-volume.service target.service --now


systemctl status openstack-cinder-volume.service target.service

# 验证
# 控制节点执行
source admin-openrc.sh

openstack volume service list
+------------------+------------+------+---------+-------+----------------------------+
| Binary           | Host       | Zone | Status  | State | Updated At                 |
+------------------+------------+------+---------+-------+----------------------------+
| cinder-scheduler | controller | nova | enabled | up    | 2022-07-27T08:54:07.000000 |
| cinder-volume    | block@lvm  | nova | enabled | up    | 2022-07-27T08:54:04.000000 |
+------------------+------------+------+---------+-------+----------------------------+

蔬菜

本章节内容:检查所有组件日志,确保正常运行。

控制节点

  1. 身份认证服务 Keystone
tail -10 /var/log/keystone/keystone.log | grep ERROR

  1. 镜像服务 Glance
tail -10 /var/log/glance/glance.log | grep ERROR

  1. 安置服务 Placement
tail -10 /var/log/placement/placement-api.log | grep ERROR

  1. 计算服务 Nova
tail -10 /var/log/nova/nova-controller.log | grep ERROR

  1. 网络服务 Neutron
# dhcp 服务
tail -10 /var/log/neutron/dhcp-agent.log | grep ERROR

# Linux 网桥服务
tail -10 /var/log/neutron/linuxbridge-agent.log | grep ERROR

# Neutron 服务
tail -10 /var/log/neutron/server.log | grep ERROR

# 三层服务
tail -10 /var/log/neutron/l3-agent.log | grep ERROR

# 元数据服务
tail -10 /var/log/neutron/metadata-agent.log | grep ERROR


  1. 块存储服务 Cinder
tail -10 /var/log/cinder/api.log | grep ERROR

tail -10 /var/log/cinder/scheduler.log | grep ERROR

  1. Dashboard Horizon
# Apache 登录日志
tail -100 /var/log/httpd/access_log

# Apache 错误日志
tail -100 /var/log/httpd/error_log

# Keystone 登录日志
tail -10 /var/log/httpd/keystone_access.log | grep ERROR

# Keystone 日志
tail -10 /var/log/httpd/keystone.log | grep ERROR

# Dashboard 登录日志
tail -10 /var/log/httpd/openstack_dashboard-access.log | grep ERROR

# Dashboard 错误日志
tail -10 /var/log/httpd/openstack_dashboard-error.log | grep ERROR

计算节点

  1. 计算服务 Nova
# Nova 服务
tail -10 /var/log/nova/nova-computer.log | grep ERROR

# libvirt 服务 连接底层虚拟化
ll /var/log/libvirt/

  1. 网络服务 Neutron
tail -10 /var/log/cinder/volume.log | grep ERROR

块存储节点

tail -10 /var/log/cinder/volume.log | grep ERROR

甜点

本章节内容:使用 Dashboard 部署一个实例。
1. 登录Dashboard

将管理计算机接入 OpenStack 管理网络,通过浏览器打开控制节点 IP 地址,此处为 10.0.0.10
http://10.0.0.10
登录页面1
如严格按照以上步骤部署 OpenStack ,那么目前系统中包含两个账户、两个域名及一个项目,分别为 admin 与 user_dog 账户、default 与 RegionOne 域名、Yoga 项目,后续将演示使用 admin 账户进行云实例创建。
注意:admin 默认在 default 域中,如有需要可以将其添加入 RegionOne 域
登录页面2

2. 创建一个最小实例规格

创建一个最小实例规格1
左侧选择管理员,点击计算,点击实例类型,右侧点击创建实例类型

创建一个最小实例规格2

根据以上图片步骤依次填入:实例名称VCPU数量内存大小根磁盘大小,确认无误后点击创建实例类型

创建一个最小实例规格3

创建完成。

3. 上传系统镜像

上传系统镜像1

左侧选择管理员,点击计算,点击镜像,右侧点击创建镜像

上传系统镜像2

根据以上图片步骤依次填入:镜像名称、选择文件镜像格式最小磁盘最低内存,确认无误后点击创建镜像
:演示上传的 img 镜像格式需选用 QCOW2 - QEMU模拟器 才可正常加载。

上传系统镜像3

4. 创建虚拟网络
:演示仅创建内部网络
创建虚拟网络1

左侧选择管理员,点击网络,点击网络,右侧点击创建网络

创建虚拟网络2

根据以上图片步骤依次填入:名称项目供应商网络类型段ID共享的,确认无误后点击下一步

创建虚拟网络3

根据以上图片步骤依次填入:子网名称网络地址网关IP,确认无误后点击下一步

创建虚拟网络4

根据以上图片步骤填入:分配地址池,然后点击创建。

创建虚拟网络5

5. 创建虚拟机实例
创建虚拟机实例1
左侧选择项目,点击计算,点击实例,右侧点击创建实例

创建虚拟机实例2
填写实例名称
创建虚拟机实例3
选择大小,将删除实例时删除卷选上(否者删除实例后系统不会自行删除旧卷,照成空间浪费),选择可用的镜像
创建虚拟机实例4
选择可用的实例类型

创建虚拟机实例5
选择可用的内部网络,并点击创建实例,等待系统调度部署实例。

创建虚拟机实例6

6. 连接虚拟机实例
连接云内虚拟机实例有两种常用方式:远程连接协议 与 VNC。
方式一,远程连接协议
使用远程连接协议管理虚拟机需要为虚拟机所在网络添加通向外部的路由,以下演示将虚拟机网络与 OpenStack 服务提供网络打通,实现通过外网管理虚拟机且能向互联网提供服务。

方式二,VNC
VNC常用于外网无法连接到虚拟机,通过 OpenStack 平台页面管理,修复问题。

热饮

OpenStack 命令查询表
用法

source admin-openrc.sh

openstack 命令
服务命令说明
openstack.clicommand list命令列表
module list模块列表
openstack.commonavailability zone list可用域列表
configuration show显示配置信息
extension list拓展列表
extension show拓展配置信息
limits show限额信息
project cleanup清空项目
project purge项目清理
quota list限额列表
quota set设置限额
quota show限额信息
versions show版本信息
openstack.compute.v2aggregate add host聚合添加主机
aggregate cache image聚合缓存镜像
aggregate create添加聚合
aggregate delete删除聚合
aggregate list聚合列表
aggregate remove host聚合移除主机
aggregate set设置聚合
aggregate show显示聚合信息
aggregate unset聚合取消设置
compute agent create创建计算节点
compute agent delete删除计算节点
compute agent list计算节点列表
compute agent set设置计算节点
compute service delete删除计算服务
compute service list计算服务列表
compute service set设置计算服务
console log show显示终端日志
console url show显示终端 URL
flavor create创建风格
flavor delete删除风格
flavor list风格列表
flavor set设置风格
flavor show风格信息
flavor unset取消设置风格
host list主机列表
host set主机设置
host show主机信息
hypervisor listhypervisor 列表
hypervisor showhypervisor 信息
hypervisor stats showhypervisor 状态信息
keypair create创建密钥对
keypair delete删除密钥对
keypair list密钥对列表
keypair show密钥对信息
server add fixed ip实例添加静态IP
server add floating ip实例添加浮动IP
server add network实例添加网络
server add port实例添加端口
server add security group实例添加安全组
server add volume实例添加卷
server backup create实例添加备份
server create创建实例
server delete删除实例
server dump create创建实例转储
server evacuate实例撤离
server event list实例事件列表
server event show实例事件信息
server group create创建实例组
server group delete删除实例组
server group list实例组列表
server group show实例组信息
server image create创建实例镜像
server list实例列表
server lock锁定实例
server migrate实例迁移
server migrate confirm实例迁移确认
server migrate revert实例迁移还原
server migration abort实例迁移终止
server migration confirm实例迁移确认
server migration force complete强制完成实例迁移
server migration list实例迁移列表
server migration revert实例迁移还原
server migration show实例迁移信息
server pause暂停实例
server reboot重启实例
server rebuild重建实例
server remove fixed ip实例移除静态IP
server remove floating ip实例移除浮动IP
server remove network实例移除网络
server remove port实例移除端口
server remove security group实例移除安全组
server remove volume实例移除卷
server rescue实例救援
server resize实例修改规格
server resize confirm实例修改规格确认
server resize revert实例修改规格还原
server restore实例还原
server resume实例恢复
server set设置实例
server shelve搁置实例
server show实例信息
server sshSSH 连接实例
server start启动实例
server stop停止实例
server suspend挂起实例
server unlock解锁实例
server unpause实例取消暂停
server unrescue实例取消救援
server unset取消设置实例
server unshelve下架实例
server volume list实例卷列表
server volume update实例卷更新
usage list用法列表
usage show用法信息
openstack.identity.v3access rule delete删除访问规则
access rule list访问规则列表
access rule show访问规则信息
access token create创建访问 Token
application credential create创建应用凭证
application credential delete删除应用凭证
application credential list应用凭证列表
application credential show应用凭证信息
catalog list目录列表
catalog show目录信息
consumer create创建消费者
consumer delete删除消费者
consumer list消费者列表
consumer set设置消费者
consumer show消费者信息
credential create创建凭证
credential delete删除凭证
credential list凭证列表
credential set设置凭证
credential show凭证信息
domain create创建域
domain delete删除域
domain list域列表
domain set设置域
domain show域信息
ec2 credentials create创建 ec2 凭证
ec2 credentials delete删除 ec2 凭证
ec2 credentials listec2 凭证列表
ec2 credentials showec2 凭证信息
endpoint add project终端添加项目
endpoint create创建终端
endpoint delete删除终端
endpoint group add project终端组添加项目
endpoint group create创建终端组
endpoint group delete删除终端组
endpoint group list终端组列表
endpoint group remove project终端组移除项目
endpoint group set设置终端组
endpoint group show终端组信息
endpoint list终端列表
endpoint remove project终端移除项目
endpoint set设置终端
endpoint show终端信息
federation domain list联合域列表
federation project list联合项目列表
federation protocol create创建联合项目
federation protocol delete删除联合项目
federation protocol list联合项目列表
federation protocol set设置联合项目
federation protocol show联合项目信息
group add user组添加用户
group contains user组包含用户
group create创建组
group delete删除组
group list组列表
group remove user组移除用户
group set设置组
group show组信息
identity provider create创建身份提供者
identity provider delete删除身份提供者
identity provider list身份提供者列表
identity provider set设置身份提供者
identity provider show身份提供者信息
implied role create创建隐含角色
implied role delete删除隐含角色
implied role list隐含角色列表
limit create创建限制
limit delete删除限制
limit list限制列表
limit set设置限制
limit show限制信息
mapping create创建映射
mapping delete删除映射
mapping list映射列表
mapping set设置映射
mapping show映射信息
policy create创建政策
policy delete删除政策
policy list政策列表
policy set设置政策
policy show政策信息
project create创建项目
project delete删除项目
project list项目列表
project set设置项目
project show项目信息
region create创建区域
region delete删除区域
region list区域列表
region set设置区域
region show区域信息
registered limit create创建注册限制
registered limit delete注册限制
registered limit list注册限制
registered limit set注册限制
registered limit show注册限制
request token authorize请求 Token 授权
request token create创建请求 Token
role add添加角色
role assignment list角色分配列表
role create创建角色
role delete删除角色
role list角色列表
role remove移除角色
role set设置角色
role show角色信息
service create创建服务
service delete删除服务
service list服务列表
service provider create创建服务提供者
service provider delete删除服务提供者
service provider list服务提供者列表
service provider set设置服务提供者
service provider show服务提供者信息
service set设置服务
service show服务信息
token issueToken 颁发
token revokeToken 回收
trust create创建信任
trust delete删除信任
trust list信任列表
trust show信任信息
user create创建用户
user delete删除用户
user list用户列表
user password set设置用户密码
user set设置用户
user show用户信息
openstack.image.v2image add project镜像添加项目
image create创建镜像
image delete删除镜像
image list镜像列表
image member list镜像成员列表
image remove project镜像移除项目
image save镜像保存
image set设置镜像
image show镜像信息
image unset镜像取消设置
openstack.network.v2address group create创建地址组
address group delete删除地址组
address group list地址组列表
address group set设置地址组
address group show地址组信息
address group unset地址组取消设置
address scope create创建地址范围
address scope delete删除地址范围
address scope list地址范围列表
address scope set设置地址范围
address scope show地址范围信息
floating ip create创建浮动 IP
floating ip delete删除浮动 IP
floating ip list浮动 IP列表
floating ip pool list浮动 IP列表
floating ip port forwarding create创建浮动 IP 端口转发
floating ip port forwarding delete删除浮动 IP 端口转发
floating ip port forwarding list浮动 IP 端口转发列表
floating ip port forwarding set设置浮动 IP 端口转发
floating ip port forwarding show浮动 IP 端口转发信息
floating ip set设置浮动 IP
floating ip show浮动 IP
floating ip unset浮动 IP取消设置
ip availability listip 可用性列表
ip availability showip 可用性信息
local ip association create创建本地 ip 关联
local ip association delete删除本地 ip 关联
local ip association list本地 ip 关联列表
local ip create创建本地 ip
local ip delete删除本地 ip
local ip list本地 ip列表
local ip set设置本地 ip
local ip show本地 ip信息
network agent add network网络实例
network agent add router网络实例
network agent delete删除网络实例
network agent list网络实例列表
network agent remove network网络实例
network agent remove router网络实例
network agent set设置网络实例
network agent show网络实例信息
network auto allocated topology create创建网络自动分配拓扑
network auto allocated topology delete删除网络自动分配拓扑
network create创建网络
network delete删除网络
network flavor add profile网络风味添加配置文件
network flavor create创建网络风味
network flavor delete删除网络风味
network flavor list网络风味列表
network flavor profile create创建网络风味配置文件
network flavor profile delete删除网络风味配置文件
network flavor profile list网络风味配置文件列表
network flavor profile set设置网络风味配置文件
network flavor profile show网络风味配置文件信息
network flavor remove profile移除网络风味配置文件
network flavor set设置网络风味
network flavor show网络风味信息
network l3 conntrack helper create创建三层网络连接跟踪助手
network l3 conntrack helper delete删除三层网络连接跟踪助手
network l3 conntrack helper list三层网络连接跟踪助手列表
network l3 conntrack helper set设置三层网络连接跟踪助手
network l3 conntrack helper show三层网络连接跟踪助手信息
network list网络列表
network meter create创建网络流量监测器
network meter delete删除网络流量监测器
network meter list网络流量监测器列表
network meter rule create创建网络流量监测器规则
network meter rule delete删除网络流量监测器规则
network meter rule list网络流量监测器规则列表
network meter rule show网络流量监测器规则信息
network meter show网络流量监测器信息
network qos policy create创建网络服务质量策略
network qos policy delete删除网络服务质量策略
network qos policy list网络服务质量策略列表
network qos policy set设置网络服务质量策略
network qos policy show网络服务质量策略信息
network qos rule create创建网络服务质量规则
network qos rule delete删除网络服务质量规则
network qos rule list网络服务质量规则列表
network qos rule set设置网络服务质量规则
network qos rule show网络服务质量规则西悉
network qos rule type list网络服务质量规则类型列表
network qos rule type show网络服务质量规则类型信息
network rbac create创建网络基于角色的访问控制
network rbac delete删除网络基于角色的访问控制
network rbac list网络基于角色的访问控制列表
network rbac set设置网络基于角色的访问控制
network rbac show网络基于角色的访问控制信息
network segment create创建网段
network segment delete删除网段
network segment list网段列表
network segment range create创建网段范围
network segment range delete删除网段范围
network segment range list网段范围列表
network segment range set网段范围设置
network segment range show网段范围信息
network segment set设置网段
network segment show网段信息
network service provider list网络服务提供商列表
network set设置网络
network show网络
network unset网络取消设置
port create创建端口
port delete删除端口
port list端口列表
port set设置端口
port show端口信息
port unset端口取消设置
router add port路由器添加端口
router add route路由器添加路由
router add subnet路由器添加子网
router create创建路由器
router delete删除路由器
router list路由器列表
router remove port路由器移除端口
router remove route路由器移除路由
router remove subnet路由器移除子网
router set设置路由器
router show路由器信息
router unset路由器取消设置
security group create创建安全组
security group delete删除安全组
security group list安全组列表
security group rule create创建安全组规则
security group rule delete删除安全组规则
security group rule list安全组规则列表
security group rule show安全组规则信息
security group set设置安全组
security group show安全组信息
security group unset安全组取消设置
subnet create创建子网
subnet delete删除子网
subnet list子网列表
subnet pool create创建子网池
subnet pool delete删除子网池
subnet pool list子网池列表
subnet pool set设置子网池
subnet pool show子网池信息
subnet pool unset子网池取消设置
subnet set子网设置
subnet show子网信息
subnet unset子网取消设置
openstack.neutronclient.v2bgp dragent add speakerbgp DRAgent 添加发言人
bgp dragent listBGP DRAgent 列表
bgp dragent remove speakerBGP DRAgent 移除发言人
bgp peer create创建 BGP 邻居
bgp peer delete删除BGP 邻居
bgp peer listBGP 邻居列表
bgp peer set设置BGP 邻居
bgp peer showBGP 邻居信息
bgp speaker add networkBGP 发言人添加网络
bgp speaker add peerBGP 发言人添加邻居
bgp speaker create创建 BGP 发言人
bgp speaker delete删除 BGP 发言人
bgp speaker listBGP 发言人列表
bgp speaker list advertised routesBGP 发言人通告路由条目列表
bgp speaker remove networkBGP 发言人移除网络
bgp speaker remove peerBGP 发言人移除邻居
bgp speaker set设置BGP 发言人
bgp speaker showBGP 发言人信息
bgp speaker show dragentsBGP 发言人 DRAgent 信息
bgpvpn create创建 BGP VPN
bgpvpn delete删除 BGP VPN
bgpvpn listBGP VPN 列表
bgpvpn network association create创建 BGP VPN 网络关联
bgpvpn network association delete删除 BGP VPN 网络关联
bgpvpn network association listBGP VPN 网络关联列表
bgpvpn network association showBGP VPN 网络关联信息
bgpvpn port association create创建 BGP VPN 端口关联
bgpvpn port association delete删除 BGP VPN 端口关联
bgpvpn port association listBGP VPN 端口关联列表
bgpvpn port association set设置 BGP VPN 端口关联
bgpvpn port association showBGP VPN 端口关联信息
bgpvpn port association unset取消设置 BGP VPN 端口关联
bgpvpn router association create创建 BGP VPN 路由关联
bgpvpn router association delete删除 BGP VPN 路由关联
bgpvpn router association listBGP VPN 路由关联列表
bgpvpn router association set设置 BGP VPN 路由关联
bgpvpn router association showBGP VPN 路由关联信息
bgpvpn router association unset取消设置 BGP VPN 路由关联
bgpvpn set设置 BGP VPN
bgpvpn showBGP VPN 信息
bgpvpn unset取消设置 BGP VPN
firewall group create创建防火墙组
firewall group delete删除防火墙组
firewall group list防火墙组列表
firewall group policy add rule防火墙组策略添加规则
firewall group policy create创建防火墙组策略
firewall group policy delete删除防火墙组策略
firewall group policy list防火墙组策略列表
firewall group policy remove rule防火墙组策略移除规则
firewall group policy set设置防火墙组策略
firewall group policy show防火墙组策略信息
firewall group policy unset取消设置防火墙组策略
firewall group rule create创建防火墙组规则
firewall group rule delete删除防火墙组规则
firewall group rule list防火墙组规则列表
firewall group rule set设置防火墙组规则
firewall group rule show防火墙组规则信息
firewall group rule unset取消设置防火墙组规则
firewall group set设置防火墙组
firewall group show防火墙组信息
firewall group unset取消设置防火墙组
network log create创建网络日志
network log delete删除网络日志
network log list网络日志 列表
network log set设置网络日志
network log show网络日志信息
network loggable resources list网络可记录资源列表
network onboard subnets网络板载子网
network subport list网络子接口列表
network trunk create创建网络中继
network trunk delete删除网络中继
network trunk list网络中继列表
network trunk set设置网络中继
network trunk show网络中继信息
network trunk unset取消设置网络中继
sfc flow classifier create创建服务功能链流分类器
sfc flow classifier delete删除服务功能链流分类器
sfc flow classifier list服务功能链流分类器列表
sfc flow classifier set设置服务功能链流分类器
sfc flow classifier show服务功能链流分类器信息
sfc port chain create创建服务功能链端口链
sfc port chain delete删除服务功能链端口链
sfc port chain list服务功能链端口链列表
sfc port chain set设置服务功能链端口链
sfc port chain show服务功能链端口链信息
sfc port chain unset取消设置服务功能链端口链
sfc port pair create创建服务功能链端口对
sfc port pair delete删除服务功能链端口对
sfc port pair group create创建服务功能链端口对组
sfc port pair group delete删除服务功能链端口对组
sfc port pair group list服务功能链端口对组列表
sfc port pair group set设置服务功能链端口对组
sfc port pair group show服务功能链端口对组信息
sfc port pair group unset取消设置服务功能链端口对组
sfc port pair list服务功能链端口对列表
sfc port pair set设置服务功能链端口对
sfc port pair show服务功能链端口对信息
sfc service graph create创建服务功能链服务图
sfc service graph delete删除服务功能链服务图
sfc service graph list服务功能链服务图列表
sfc service graph set设置服务功能链服务图
sfc service graph show服务功能链服务图信息
vpn endpoint group create创建 VPN 终端组
vpn endpoint group delete删除 VPN 终端组
vpn endpoint group listVPN 终端组列表
vpn endpoint group set设置 VPN 终端组
vpn endpoint group showVPN 终端组信息
vpn ike policy create创建 VPN IKE 策略
vpn ike policy delete删除 VPN IKE 策略
vpn ike policy listVPN IKE 策略列表
vpn ike policy set设置 VPN IKE 策略
vpn ike policy showVPN IKE 策略信息
vpn ipsec policy create创建 VPN IPSEC 策略
vpn ipsec policy delete删除 VPN IPSEC 策略
vpn ipsec policy listVPN IPSEC 策略列表
vpn ipsec policy set设置 VPN IPSEC 策略
vpn ipsec policy showVPN IPSEC 策略信息
vpn ipsec site connection create创建 VPN IPSEC 站点连接
vpn ipsec site connection delete删除 VPN IPSEC 站点连接
vpn ipsec site connection listVPN IPSEC 站点连接列表
vpn ipsec site connection set设置 VPN IPSEC 站点连接
vpn ipsec site connection showVPN IPSEC 站点连接信息
vpn service create创建 VPN 服务
vpn service delete删除 VPN 服务
vpn service listVPN 服务列表
vpn service set设置 VPN 服务
vpn service showVPN 服务信息
openstack.object_store.v1container create创建容器
container delete删除容器
container list容器列表
container save保存容器
container set设置容器
container show容器信息
container unset取消设置容器
object create创建对象
object delete删除对象
object list对象列表
object save保存对象
object set设置对象
object show对象信息
object store account set设置对象存储账户
object store account show对象存储账户信息
object store account unset取消设置对象存储账户
object unset取消设置对象
openstack.volume.v3consistency group add volume一致性组添加卷
consistency group create创建一致性组
consistency group delete删除一致性组
consistency group list一致性组列表
consistency group remove volume一致性组移除卷
consistency group set设置一致性组
consistency group show一致性组信息
consistency group snapshot create创建一致性组快照
consistency group snapshot delete删除一致性组快照
consistency group snapshot list一致性组快照列表
consistency group snapshot show一致性组快照信息
volume attachment complete完成卷绑定
volume attachment create创建卷绑定
volume attachment delete删除卷绑定
volume attachment list卷绑定列表
volume attachment set设置卷绑定
volume attachment show卷绑定信息
volume backup create创建卷备份
volume backup delete删除卷备份
volume backup list卷备份列表
volume backup record export导出卷备份记录
volume backup record import导入卷备份记录
volume backup restore卷备份还原
volume backup set设置卷备份
volume backup show卷备份信息
volume backup unset取消设置卷备份
volume create创建卷
volume delete删除卷
volume group create创建卷组
volume group delete删除卷组
volume group failover卷组故障转移
volume group list卷组列表
volume group set设置卷组
volume group show卷组信息
volume group snapshot create创建卷组快照
volume group snapshot delete删除卷组快照
volume group snapshot list卷组快照列表
volume group snapshot show卷组快照信息
volume group type create创建卷组类型
volume group type delete删除卷组类型
volume group type list卷组类型列表
volume group type set设置卷组类型
volume group type show卷组类型信息
volume host set设置卷主机
volume list卷列表
volume message delete删除卷信息
volume message list卷信息列表
volume message show卷信息信息
volume migrate卷迁移
volume qos associate卷 QOS 关联
volume qos create创建卷 QOS
volume qos delete删除卷 QOS
volume qos disassociate卷 QOS
volume qos list卷 QOS 列表
volume qos set设置卷 QOS
volume qos show卷 QOS 信息
volume qos unset取消设置卷 QOS
volume service list卷服务列表
volume service set设置卷服务
volume set设置卷
volume show卷信息
volume snapshot create创建卷快照
volume snapshot delete删除卷快照
volume snapshot list卷快照列表
volume snapshot set设置卷快照
volume snapshot show卷快照信息
volume snapshot unset取消设置卷快照
volume transfer request accept卷转移请求接受
volume transfer request create创建卷转移请求
volume transfer request delete删除卷转移请求
volume transfer request list卷转移请求列表
volume transfer request show卷转移请求信息
volume type create创建卷类型
volume type delete删除卷类型
volume type list卷类型列表
volume type set设置卷类型
volume type show卷类型信息
volume type unset取消设置卷类型
volume unset取消设置卷
  • 11
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 11
    评论
OpenStack 是一个分布式系统,可以在多个节点部署以实现高可用性和可伸缩性。以下是 OpenStack节点部署的一般步骤: 1. 确定 OpenStack 组件的部署需求。根据实际需求选择需要部署的组件,如 Nova、Neutron、Cinder 等。 2. 配置网络。为每个节点配置 IP 地址和网络接口,并确保所有节点可以相互通信。建议使用一个 DHCP 服务器为每个节点分配 IP 地址。 3. 安装 OpenStack 组件。在每个节点安装所需的 OpenStack 组件。可以使用包管理器(如 yum 或 apt)或源码安装。 4. 配置数据库。为 OpenStack 组件配置数据库,建议使用 MySQL 或 MariaDB。 5. 配置消息队列。为 OpenStack 组件配置消息队列,建议使用 RabbitMQ。 6. 配置身份认证服务。为 OpenStack 配置身份认证服务 Keystone。 7. 配置计算节点。如果需要将计算节点分离出来,需要在计算节点安装 Nova 组件,并将其连接到其他节点。 8. 配置存储节点。如果需要将存储节点分离出来,需要在存储节点安装 Cinder 组件,并将其连接到其他节点。 9. 配置网络节点。如果需要将网络节点分离出来,需要在网络节点安装 Neutron 组件,并将其连接到其他节点。 10. 配置 Web 控制台。为 OpenStack 配置 Web 控制台 Horizon。 以上是 OpenStack节点部署的一般步骤,具体步骤会根据实际情况而有所不同。在部署过程中,建议参考官方文档或相关教程。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值