跳转至

基础-T版-00-安装部署

https://docs.openstack.org/install-guide/environment.html

环境准备

安全约定

Password name Description
Database password (no variable used) Root password for the database
ADMIN_PASS Password of user admin
CINDER_DBPASS Database password for the Block Storage service
CINDER_PASS Password of Block Storage service user cinder
DASH_DBPASS Database password for the Dashboard
DEMO_PASS Password of user demo
GLANCE_DBPASS Database password for Image service
GLANCE_PASS Password of Image service user glance
KEYSTONE_DBPASS Database password of Identity service
METADATA_SECRET Secret for the metadata proxy
NEUTRON_DBPASS Database password for the Networking service
NEUTRON_PASS Password of Networking service user neutron
NOVA_DBPASS Database password for Compute service
NOVA_PASS Password of Compute service user nova
PLACEMENT_PASS Password of the Placement service user placement
RABBIT_PASS Password of RabbitMQ user openstack
openstack --os-username nova --os-password NOVA_PASS --os-project-name service --os-auth-url http://controller:5000/v3 token issue

openstack --os-username placement --os-password PLACEMENT_PASS --os-project-name service --os-auth-url http://controller:5000/v3 token issue
placement

主机网络

image-20220428115219193

示例架构假定使用以下网络:

  • 使用网关 10.0.0.1 管理 10.0.0.0/24

该网络需要一个网关来提供对所有节点的 Internet 访问,以用于管理目的,例如软件包安装、安全更新、DNSNTP

  • 203.0.113.0/24 上的提供商,网关为 203.0.113.1

该网络需要一个网关来提供对 OpenStack 环境中实例的 Internet 访问。

您可以修改这些范围和网关以使用您的特定网络基础设施。

网络接口名称因分布而异。传统上,接口使用eth后跟一个序列号。为了涵盖所有变体,本指南将第一个接口称为编号最小的接口,将第二个接口称为编号最大的接口。

主机名称

controller节点执行:
hostnamectl set-hostname controller && bash

compute1节点执行:
hostnamectl set-hostname compute1 && bash

hosts文件

将节点的主机名设置为controller.

编辑/etc/hosts文件以包含以下内容:

cat >>/etc/hosts<<EOF
# controller
10.0.0.121       controller

# compute1
10.0.0.122       compute1
EOF

将节点的主机名设置为compute1.

编辑/etc/hosts文件以包含以下内容:

cat >>/etc/hosts<<EOF
# controller
10.0.0.121       controller

# compute1
10.0.0.122       compute1
EOF

验证网络

ping -c 4 controller
ping -c 4 compute1

配置内核

两台机器都需要执行

sysctl通过验证以下所有值都设置为,确保您的 Linux 操作系统内核支持网桥过滤器1

modprobe br_netfilter
cat > /etc/sysctl.conf <<EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sysctl -p

要启用网络桥接支持,通常br_netfilter需要加载内核模块。有关启用此模块的更多详细信息,请查看您的操作系统文档。

开启虚拟化

在cpuinfo中可以查看具体的支持虚拟化的信息

grep -E "svm|vmx" /proc/cpuinfo     #如果过滤没有代表不支持虚拟化

安装部署

安装chrony

对于 RHEL 或 CentOS:

yum -y install chrony

编辑该chrony.conf文件并根据您的环境的需要添加、更改或删除以下键。

对于 RHEL、CentOS 或 SUSE,编辑/etc/chrony.conf文件:

server ntp1.aliyun.com iburst

重启 NTP 服务:

systemctl enable chronyd.service
systemctl start chronyd.service
systemctl status chronyd.service

启用存储库

安装 Train 版本时,运行:

yum -y install centos-release-openstack-train

在 RHEL 上,下载并安装 RDO 存储库 RPM 以启用 OpenStack 存储库。

在 RHEL 7 上:

yum -y install https://rdoproject.org/repos/rdo-release.rpm

为您的版本安装适当的 OpenStack 客户端。

对于 CentOS 7 和 RHEL 7

yum -y install python-openstackclient openstack-selinux

安装软件包

控制节点需要安装的软件包汇总

sed -i "s#keepcache=0#keepcache=1#g" /etc/yum.conf
yum repolist
yum -y install centos-release-openstack-train
yum -y install https://rdoproject.org/repos/rdo-release.rpm
rm -f /etc/yum.repos.d/epel.repo

yum -y install python-openstackclient openstack-selinux
yum -y install mariadb mariadb-server python2-PyMySQL
yum -y install rabbitmq-server
yum -y install memcached python-memcached
yum -y install etcd

yum -y install openstack-keystone httpd mod_wsgi

yum -y install openstack-glance

yum -y install openstack-placement-api

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

yum -y install openstack-neutron openstack-neutron-ml2 \
  openstack-neutron-linuxbridge ebtables
yum -y install openstack-dashboard
yum -y install openstack-cinder

echo 3>/proc/sys/vm/drop_caches ; free -h

计算节点需要安装的软件包汇总

sed -i "s#keepcache=0#keepcache=1#g" /etc/yum.conf
yum repolist
yum -y install centos-release-openstack-train
yum -y install https://rdoproject.org/repos/rdo-release.rpm

rm -f /etc/yum.repos.d/epel.repo
yum -y install python-openstackclient openstack-selinux
yum -y install openstack-nova-compute
yum -y install openstack-neutron-linuxbridge ebtables ipset
yum -y install lvm2 device-mapper-persistent-data
yum -y install openstack-cinder targetcli python-keystone

echo 3>/proc/sys/vm/drop_caches ; free -h

安装mariadb

大多数 OpenStack 服务使用 SQL 数据库来存储信息。数据库通常在控制器节点上运行。本指南中的过程根据发行版使用 MariaDB 或 MySQL。OpenStack 服务还支持其他 SQL 数据库,包括 PostgreSQL

安装软件包:

 yum -y install mariadb mariadb-server python2-PyMySQL

创建和编辑/etc/my.cnf.d/openstack.cnf文件(/etc/my.cnf.d/如果需要,备份现有的配置文件)并完成以下操作:

  • 创建一个[mysqld]section,将bind-address key设置为controller节点的管理IP地址,允许其他节点通过管理网络访问。设置其他键以启用有用的选项和 UTF-8 字符集:
[mysqld]
bind-address = 10.0.0.121

default-storage-engine = innodb
innodb_file_per_table = on
max_connections = 4096
collation-server = utf8_general_ci
character-set-server = utf8

启动数据库服务并将其配置为在系统启动时启动:

systemctl enable mariadb.service
systemctl start mariadb.service
systemctl status mariadb.service

mysql_secure_installation 通过运行脚本保护数据库服务。特别是,为数据库 root帐户选择一个合适的密码:

mysql_secure_installation


NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB
      SERVERS IN PRODUCTION USE!  PLEASE READ EACH STEP CAREFULLY!

In order to log into MariaDB to secure it, we'll need the current
password for the root user.  If you've just installed MariaDB, and
you haven't set the root password yet, the password will be blank,
so you should just press enter here.

Enter current password for root (enter for none): 
OK, successfully used password, moving on...

Setting the root password ensures that nobody can log into the MariaDB
root user without the proper authorisation.

Set root password? [Y/n] n
 ... skipping.

By default, a MariaDB installation has an anonymous user, allowing anyone
to log into MariaDB without having to have a user account created for
them.  This is intended only for testing, and to make the installation
go a bit smoother.  You should remove them before moving into a
production environment.

Remove anonymous users? [Y/n] y
 ... Success!

Normally, root should only be allowed to connect from 'localhost'.  This
ensures that someone cannot guess at the root password from the network.

Disallow root login remotely? [Y/n] n
 ... skipping.

By default, MariaDB comes with a database named 'test' that anyone can
access.  This is also intended only for testing, and should be removed
before moving into a production environment.

Remove test database and access to it? [Y/n] y
 - Dropping test database...
 ... Success!
 - Removing privileges on test database...
 ... Success!

Reloading the privilege tables will ensure that all changes made so far
will take effect immediately.

Reload privilege tables now? [Y/n] y
 ... Success!

Cleaning up...

All done!  If you've completed all of the above steps, your MariaDB
installation should now be secure.

Thanks for using MariaDB!

安装rabbitmq

OpenStack 使用消息队列来协调服务之间的操作和状态信息。消息队列服务通常在控制器节点上运行。OpenStack 支持多种消息队列服务,包括RabbitMQQpidZeroMQ。但是,大多数打包 OpenStack 的发行版都支持特定的消息队列服务。本指南实现了 RabbitMQ 消息队列服务,因为大多数发行版都支持它。如果您更喜欢实现不同的消息队列服务,请查阅与其相关的文档。

消息队列在控制器节点上运行。

安装包:

yum -y install rabbitmq-server

启动消息队列服务并将其配置为在系统启动时启动:

systemctl enable rabbitmq-server.service
systemctl start rabbitmq-server.service
systemctl status rabbitmq-server.service

添加openstack用户:

rabbitmqctl add_user openstack RABBIT_PASS

允许用户进行配置、写入和读取访问 openstack

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

安装Memcached

服务的 Identity 服务认证机制使用 Memcached 来缓存令牌。memcached 服务通常在控制器节点上运行。对于生产部署,我们建议启用防火墙、身份验证和加密的组合来保护它。

安装软件包:

对于 CentOS 7 和 RHEL 7

yum -y install memcached python-memcached

编辑vim /etc/sysconfig/memcached文件并完成以下操作:

  • 将服务配置为使用控制器节点的管理 IP 地址。这是为了允许其他节点通过管理网络访问:
OPTIONS="-l 127.0.0.1,::1,controller"

启动 Memcached 服务并将其配置为在系统启动时启动:

systemctl enable memcached.service
systemctl start memcached.service
systemctl status memcached.service

安装Etcd

OpenStack 服务可以使用 Etcd,这是一种分布式可靠键值存储,用于分布式键锁定、存储配置、跟踪服务活动性和其他场景。

etcd 服务在控制器节点上运行。

安装包:

yum -y install etcd

编辑vim /etc/etcd/etcd.conf文件并将ETCD_INITIAL_CLUSTER, ETCD_INITIAL_ADVERTISE_PEER_URLS, ETCD_ADVERTISE_CLIENT_URLS, 设置ETCD_LISTEN_CLIENT_URLS为控制器节点的管理 IP 地址,以允许其他节点通过管理网络访问:

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

启用并启动 etcd 服务:

systemctl enable etcd
systemctl start etcd
systemctl status etcd

正式部署

安装keystone-控制节点

本节介绍如何在控制器节点上安装和配置 OpenStack Identity 服务,代号为 keystone。出于可扩展性目的,此配置部署了 Fernet 令牌和 Apache HTTP 服务器来处理请求。

在安装和配置身份服务之前,您必须创建一个数据库。

使用数据库访问客户端以root用户身份连接数据库服务器:

mysql -u root 

创建keystone数据库:

CREATE DATABASE keystone;

授予对keystone数据库的适当访问权限:

GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'localhost' \
IDENTIFIED BY 'KEYSTONE_DBPASS';
GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'%' \
IDENTIFIED BY 'KEYSTONE_DBPASS';

替换KEYSTONE_DBPASS为合适的密码。

退出数据库访问客户端。

quit;

运行以下命令来安装软件包:

yum -y install openstack-keystone httpd mod_wsgi

编辑vim /etc/keystone/keystone.conf文件并完成以下操作:

  • 在该[database]部分中,配置数据库访问:
[database]
connection = mysql+pymysql://keystone:KEYSTONE_DBPASS@controller/keystone

在该[token]部分中,配置 Fernet 令牌提供程序:

[token]
provider = fernet

检查修改的配置文件

cat /etc/keystone/keystone.conf|grep -Ev "(^$|^#)"

填充身份服务数据库:

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

编辑vim /etc/httpd/conf/httpd.conf文件并配置 ServerName选项以引用控制器节点:

ServerName controller

如果该ServerName条目尚不存在,则需要添加该条目。

创建/usr/share/keystone/wsgi-keystone.conf文件的链接:

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

启动 Apache HTTP 服务并将其配置为在系统启动时启动:

systemctl enable httpd.service
systemctl start httpd.service

通过设置适当的环境变量来配置管理帐户:

export OS_USERNAME=admin
export OS_PASSWORD=ADMIN_PASS
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

Identity 服务为每个 OpenStack 服务提供身份验证服务。身份验证服务使用域、项目、用户和角色的组合。

尽管本指南中的keystone-manage 引导步骤中已经存在“默认”域,但创建新域的正式方法是:

openstack domain create --description "An Example Domain" example

本指南使用的服务项目包含您添加到环境中的每项服务的唯一用户。创建service 项目:

openstack project create --domain default \
  --description "Service Project" service

常规(非管理员)任务应使用非特权项目和用户。例如,本指南创建myproject项目和myuser 用户。

  • 创建myproject项目:
openstack project create --domain default \
  --description "Demo Project" myproject

创建myuser用户:

openstack user create --domain default \
  --password-prompt myuser   

密码:DEMO_PASS

创建myrole角色:

openstack role create myrole

myrole角色添加到myproject项目和myuser用户:

openstack role add --project myproject --user myuser myrole

为项目和用户admin创建客户端环境脚本。demo本指南的未来部分将参考这些脚本来为客户端操作加载适当的凭据。

创建并编辑demo-openrc文件并添加以下内容:

cat >/root/demo-openrc<<\EOF
export OS_PROJECT_DOMAIN_NAME=Default
export OS_USER_DOMAIN_NAME=Default
export OS_PROJECT_NAME=myproject
export OS_USERNAME=myuser
export OS_PASSWORD=DEMO_PASS
export OS_AUTH_URL=http://controller:5000/v3
export OS_IDENTITY_API_VERSION=3
export OS_IMAGE_API_VERSION=2
EOF
source /root/demo-openrc
openstack token issue

创建并编辑admin-openrc文件并添加以下内容:

cat >/root/admin-openrc<<\EOF
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
EOF
source /root/admin-openrc
openstack token issue

安装glance-控制节点

本节介绍如何在控制器节点上安装和配置镜像服务,代号为glance。为简单起见,此配置将图像存储在本地文件系统上。

在安装和配置映像服务之前,您必须创建数据库、服务凭证和 API 端点。

  1. 要创建数据库,请完成以下步骤:
  2. 使用数据库访问客户端以root用户身份连接数据库服务器:
mysql -u root

创建glance数据库:

CREATE DATABASE glance;

授予对glance数据库的适当访问权限:

GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'localhost' \
  IDENTIFIED BY 'GLANCE_DBPASS';
GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'%' \
  IDENTIFIED BY 'GLANCE_DBPASS';

退出数据库访问客户端。

quit;

获取admin凭据以访问仅限管理员的 CLI 命令:

source admin-openrc

要创建服务凭证,请完成以下步骤:

  • 创建glance用户:
openstack user create --domain default --password-prompt glance

密码:GLANCE_PASS

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

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

创建glance服务实体:

openstack service create --name glance \
  --description "OpenStack Image" image

创建图像服务 API 端点:

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

安装软件包:

yum -y install openstack-glance

编辑vim /etc/glance/glance-api.conf文件并完成以下操作:

  • 在该[database]部分中,配置数据库访问:
[database]
# ...
connection = mysql+pymysql://glance:GLANCE_DBPASS@controller/glance
  • 替换GLANCE_DBPASS为您为图像服务数据库选择的密码。
  • [keystone_authtoken][paste_deploy]部分中,配置身份服务访问:
[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

[paste_deploy]
# ...
flavor = keystone

在该[glance_store]部分中,配置本地文件系统存储和图像文件的位置:

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

检查修改的配置文件

cat /etc/glance/glance-api.conf|grep -Ev "(^$|^#)"

填充图像服务数据库:

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

启动映像服务并将它们配置为在系统启动时启动:

systemctl enable openstack-glance-api.service
systemctl start openstack-glance-api.service
systemctl status openstack-glance-api.service

使用CirrOS验证映像服务的操作,这 是一个小型 Linux 映像,可帮助您测试 OpenStack 部署。

有关如何下载和构建镜像的更多信息,请参阅 OpenStack Virtual Machine Image Guide。有关如何管理映像的信息,请参阅 OpenStack 最终用户指南

获取admin凭据以访问仅限管理员的 CLI 命令:

source admin-openrc

下载源图像:

wget https://chrismyfile.oss-cn-beijing.aliyuncs.com/cirros-0.4.0-x86_64-disk.img

使用QCOW2磁盘格式、 容器格式和公共可见性将图像上传到图像服务 ,以便所有项目都可以访问它:

glance image-create --name "cirros" \
  --file cirros-0.4.0-x86_64-disk.img \
  --disk-format qcow2 --container-format bare \
  --visibility public

确认上传图片并验证属性:

glance image-list

安装placement-控制节点

1.部署API服务

Placement 提供了一个placement-apiWSGI 脚本,用于使用 Apache、nginx 或其他支持 WSGI 的 Web 服务器运行服务。根据用于部署 OpenStack 的打包解决方案,WSGI 脚本可能位于/usr/bin/usr/local/bin.

placement-api,作为标准的 WSGI 脚本,提供了 application大多数 WSGI 服务器期望找到的模块级属性。这意味着可以在许多不同的服务器上运行它,从而在面对不同的部署场景时提供灵活性。常见的场景包括:

在所有这些场景中,应用程序的主机、端口和安装路径(或前缀)都在 Web 服务器的配置中控制,而不是在placement.conf放置应用程序的配置 ( ) 中。

当放置第一次添加到 DevStack时,它使用了mod_wsgi样式。后来它被更新为使用mod_proxy_uwsgi。查看这些更改有助于理解相关选项。

本节介绍如何在使用 Red Hat Enterprise Linux 或 CentOS 软件包时安装和配置放置服务。

要创建数据库,请完成以下步骤:

  • 使用数据库访问客户端以root用户身份连接数据库服务器:
mysql -u root 

创建placement数据库:

CREATE DATABASE placement;

授予对数据库的适当访问权限:

GRANT ALL PRIVILEGES ON placement.* TO 'placement'@'localhost' \
  IDENTIFIED BY 'PLACEMENT_DBPASS';
GRANT ALL PRIVILEGES ON placement.* TO 'placement'@'%' \
  IDENTIFIED BY 'PLACEMENT_DBPASS';

退出数据库访问客户端。

quit;

获取admin凭据以访问仅限管理员的 CLI 命令:

source admin-openrc

使用您选择的创建放置服务用户PLACEMENT_PASS

openstack user create --domain default --password-prompt placement

密码: PLACEMENT_PASS

将 Placement 用户添加到具有管理员角色的服务项目中:

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

在服务目录中创建 Placement API 条目:

openstack service create --name placement \
  --description "Placement API" placement

创建 Placement API 服务端点:

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

安装软件包:

yum -y install openstack-placement-api

编辑vim /etc/placement/placement.conf文件并完成以下操作:

  • 在该[placement_database]部分中,配置数据库访问:
[placement_database]
# ...
connection = mysql+pymysql://placement:PLACEMENT_DBPASS@controller/placement
  • 替换PLACEMENT_DBPASS为您为放置数据库选择的密码。
  • [api][keystone_authtoken]部分中,配置身份服务访问:
[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

检查修改的配置文件

cat /etc/placement/placement.conf|grep -Ev "(^$|^#)"

填充placement数据库:

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

重启httpd服务:

systemctl restart httpd

验证放置服务的操作。

获取admin凭据以访问仅限管理员的 CLI 命令:

source admin-openrc

执行状态检查以确保一切正常:

[root@controller ~]# placement-status upgrade check
+----------------------------------+
| Upgrade Check Results            |
+----------------------------------+
| Check: Missing Root Provider IDs |
| Result: Success                  |
| Details: None                    |
+----------------------------------+
| Check: Incomplete Consumers      |
| Result: Success                  |
| Details: None                    |
+----------------------------------+

安装nova-controller-控制节点

本节介绍如何在控制器节点上安装和配置代号为nova的Compute服务。

在安装和配置计算服务之前,您必须创建数据库、服务凭证和 API 端点。

  1. 要创建数据库,请完成以下步骤:
  2. 使用数据库访问客户端以root用户身份连接数据库服务器:
mysql -u root 

创建nova_apinovanova_cell0数据库:

CREATE DATABASE nova_api;
CREATE DATABASE nova;
CREATE DATABASE nova_cell0;

授予对数据库的适当访问权限:

GRANT ALL PRIVILEGES ON nova_api.* TO 'nova'@'localhost' \
  IDENTIFIED BY 'NOVA_DBPASS';
GRANT ALL PRIVILEGES ON nova_api.* TO 'nova'@'%' \
  IDENTIFIED BY 'NOVA_DBPASS';

GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'localhost' \
  IDENTIFIED BY 'NOVA_DBPASS';
GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'%' \
  IDENTIFIED BY 'NOVA_DBPASS';

GRANT ALL PRIVILEGES ON nova_cell0.* TO 'nova'@'localhost' \
  IDENTIFIED BY 'NOVA_DBPASS';
GRANT ALL PRIVILEGES ON nova_cell0.* TO 'nova'@'%' \
  IDENTIFIED BY 'NOVA_DBPASS';

退出数据库访问客户端。

quit;

获取admin凭据以访问仅限管理员的 CLI 命令:

source admin-openrc

创建计算服务凭证:

  • 创建nova用户:
openstack user create --domain default --password-prompt nova

密码:NOVA_PASS

admin角色添加到nova用户:

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

创建nova服务实体:

openstack service create --name nova \
  --description "OpenStack Compute" compute

创建计算 API 服务端点:

openstack endpoint create --region RegionOne \
  compute public http://controller:8774/v2.1
openstack endpoint create --region RegionOne \
  compute internal http://controller:8774/v2.1
openstack endpoint create --region RegionOne \
  compute admin http://controller:8774/v2.1

安装软件包:

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

编辑vim /etc/nova/nova.conf文件并完成以下操作:

  • 在该[DEFAULT]部分中,仅启用计算和元数据 API:
[DEFAULT]
# ...
enabled_apis = osapi_compute,metadata

[api_database][database]部分中,配置数据库访问:

[api_database]
# ...
connection = mysql+pymysql://nova:NOVA_DBPASS@controller/nova_api

[database]
# ...
connection = mysql+pymysql://nova:NOVA_DBPASS@controller/nova

在该[DEFAULT]部分中,配置RabbitMQ消息队列访问:

[DEFAULT]
# ...
transport_url = rabbit://openstack:RABBIT_PASS@controller:5672/

[api][keystone_authtoken]部分中,配置身份服务访问:

[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

在该[DEFAULT]部分中,启用对网络服务的支持:

[DEFAULT]
# ...
use_neutron = true
firewall_driver = nova.virt.firewall.NoopFirewallDriver
  • 配置*/etc/nova/nova.conf*[neutron]的部分。有关详细信息,请参阅网络服务安装指南
  • 在该[vnc]部分中,将 VNC 代理配置为使用控制器节点的管理接口 IP 地址:
[vnc]
enabled = true
server_listen = 10.0.0.121
server_proxyclient_address = 10.0.0.121

在该[glance]部分中,配置图像服务 API 的位置:

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

在该[oslo_concurrency]部分中,配置锁定路径:

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

在该[placement]部分中,配置对 Placement 服务的访问:

[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

检查修改的配置文件

cat /etc/nova/nova.conf|grep -Ev "(^$|^#)"

填充nova-api数据库:

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

注册cell0数据库:

su -s /bin/sh -c "nova-manage cell_v2 map_cell0" nova

创建cell1单元格:

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

验证 nova cell0 和 cell1 是否正确注册:

su -s /bin/sh -c "nova-manage cell_v2 list_cells" nova

启动计算服务并将它们配置为在系统启动时启动:

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

systemctl start \
    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

安装nova-compute-计算节点

本节介绍如何在计算节点上安装和配置计算服务。该服务支持多个管理程序来部署实例或虚拟机 (VM)。为简单起见,此配置在支持虚拟机硬件加速的计算节点上使用 Quick EMUlator (QEMU) 管理程序和基于内核的 VM (KVM) 扩展。在旧硬件上,此配置使用通用 QEMU 管理程序。您可以按照这些说明稍作修改,以使用额外的计算节点水平扩展您的环境。

安装软件包:

yum -y install openstack-nova-compute

编辑vim /etc/nova/nova.conf文件并完成以下操作:

  • 在该[DEFAULT]部分中,仅启用计算和元数据 API:
[DEFAULT]
# ...
enabled_apis = osapi_compute,metadata

在该[DEFAULT]部分中,配置RabbitMQ消息队列访问:

[DEFAULT]
# ...
transport_url = rabbit://openstack:RABBIT_PASS@controller

[api][keystone_authtoken]部分中,配置身份服务访问:

[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

在该[DEFAULT]部分中,启用对网络服务的支持:

[DEFAULT]
# ...
use_neutron = true
firewall_driver = nova.virt.firewall.NoopFirewallDriver
  • 配置*/etc/nova/nova.conf*[neutron]的部分。有关详细信息,请参阅网络服务安装指南
  • 在该[vnc]部分中,启用和配置远程控制台访问:
[vnc]
# ...
enabled = true
server_listen = 0.0.0.0
server_proxyclient_address = 10.0.0.122
novncproxy_base_url = http://controller:6080/vnc_auto.html

常见报错: 如果填写错误(如用了公网 IP 或不可达的 IP),控制节点的 nova-novncproxy 服务将无法连接到计算节点的 VNC 代理,导致 "Something went wrong, connection is closed" 错误。 这里一定不要填写错误 需要填写计算节点 当前机器的ip地址

服务器组件侦听所有 IP 地址,代理组件仅侦听计算节点的管理接口 IP 地址。基本 URL 指示您可以使用 Web 浏览器访问此计算节点上实例的远程控制台的位置。

在该[glance]部分中,配置图像服务 API 的位置:

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

在该[oslo_concurrency]部分中,配置锁定路径:

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

在该[placement]部分中,配置 Placement API:

[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

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

egrep -c '(vmx|svm)' /proc/cpuinfo

如果此命令返回值,则您的计算节点支持硬件加速,通常不需要额外配置。one or greater

如果此命令返回值zero,则您的计算节点不支持硬件加速,您必须配置libvirt为使用 QEMU 而不是 KVM。

  • 编辑文件中的[libvirt]部分,/etc/nova/nova.conf如下所示:
[libvirt]
# ...
virt_type = qemu

检查修改的配置文件

cat /etc/nova/nova.conf|grep -Ev "(^$|^#)"

启动 Compute 服务及其依赖项,并将它们配置为在系统启动时自动启动:

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

获取管理员凭据以启用仅限管理员的 CLI 命令,然后确认数据库中有计算主机:

source admin-openrc
openstack compute service list --service nova-compute

发现计算主机:

su -s /bin/sh -c "nova-manage cell_v2 discover_hosts --verbose" nova

添加新计算节点时,必须在控制器节点上运行以注册这些新计算节点。或者,您可以在 中设置适当的间隔 :nova-manage cell_v2 discover_hosts``/etc/nova/nova.conf

[scheduler]
discover_hosts_in_cells_interval = 300

安装neutron-controller-供应商网络

在配置 OpenStack Networking (neutron) 服务之前,您必须创建数据库、服务凭证和 API 端点。

要创建数据库,请完成以下步骤:

  • 使用数据库访问客户端以root用户身份连接数据库服务器:
mysql -u root

创建neutron数据库:

CREATE DATABASE neutron;

授予对neutron数据库的适当访问权限,替换 NEUTRON_DBPASS为合适的密码:

GRANT ALL PRIVILEGES ON neutron.* TO 'neutron'@'localhost' \
  IDENTIFIED BY 'NEUTRON_DBPASS';
GRANT ALL PRIVILEGES ON neutron.* TO 'neutron'@'%' \
  IDENTIFIED BY 'NEUTRON_DBPASS';

退出数据库访问客户端。

quit;

获取admin凭据以访问仅限管理员的 CLI 命令:

source admin-openrc

要创建服务凭证,请完成以下步骤:

  • 创建neutron用户:
openstack user create --domain default --password-prompt neutron

密码:NEUTRON_PASS

admin角色添加到neutron用户:

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

创建neutron服务实体:

openstack service create --name neutron \
  --description "OpenStack Networking" network

创建网络服务 API 端点:

openstack endpoint create --region RegionOne \
  network public http://controller:9696
openstack endpoint create --region RegionOne \
  network internal http://controller:9696
openstack endpoint create --region RegionOne \
  network admin http://controller:9696

您可以使用选项 1 和 2 表示的两种架构之一来部署网络服务。

选项 1 部署了最简单的架构,该架构仅支持将实例附加到提供者(外部)网络。没有自助服务(专用)网络、路由器或浮动 IP 地址。只有该admin或其他特权用户可以管理提供商网络。

选项 2 通过支持将实例附加到自助服务网络的第 3 层服务来扩充选项 1。该demo或其他非特权用户可以管理自助服务网络,包括在自助服务和提供商网络之间提供连接的路由器。此外,浮动 IP 地址使用来自外部网络(如 Internet)的自助服务网络提供与实例的连接。

自助服务网络通常使用覆盖网络。VXLAN 等覆盖网络协议包括额外的标头,这些标头会增加开销并减少可用于有效负载或用户数据的空间。在不了解虚拟网络基础架构的情况下,实例会尝试使用 1500 字节的默认以太网最大传输单元 (MTU) 发送数据包。网络服务通过 DHCP 自动为实例提供正确的 MTU 值。但是,某些云映像不使用 DHCP 或忽略 DHCP MTU 选项,并且需要使用元数据或脚本进行配置。

我们先选择 网络选项 1:提供商网络

*在控制器*节点上安装和配置网络组件。

yum -y install openstack-neutron openstack-neutron-ml2 \
  openstack-neutron-linuxbridge ebtables

Networking 服务器组件配置包括数据库、身份验证机制、消息队列、拓扑更改通知和插件。

编辑vim /etc/neutron/neutron.conf文件并完成以下操作:

  • 在该[database]部分中,配置数据库访问:
[database]
# ...
connection = mysql+pymysql://neutron:NEUTRON_DBPASS@controller/neutron

在该[DEFAULT]部分中,启用 Modular Layer 2 (ML2) 插件并禁用其他插件:

[DEFAULT]
# ...
core_plugin = ml2
service_plugins =

在该[DEFAULT]部分中,配置RabbitMQ 消息队列访问:

[DEFAULT]
# ...
transport_url = rabbit://openstack:RABBIT_PASS@controller

[DEFAULT][keystone_authtoken]部分中,配置身份服务访问:

[DEFAULT]
# ...
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

[DEFAULT][nova]部分中,配置 Networking 以通知 Compute 网络拓扑更改:

[DEFAULT]
# ...
notify_nova_on_port_status_changes = true
notify_nova_on_port_data_changes = true

[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

在该[oslo_concurrency]部分中,配置锁定路径:

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

检查修改的配置文件

cat /etc/neutron/neutron.conf|grep -Ev "(^$|^#)"

ML2 插件使用 Linux 桥接机制为实例构建第 2 层(桥接和交换)虚拟网络基础架构。

  • 编辑vim /etc/neutron/plugins/ml2/ml2_conf.ini文件并完成以下操作:
  • 在该[ml2]部分中,启用平面和 VLAN 网络:
[ml2]
# ...
type_drivers = flat,vlan

在该[ml2]部分中,禁用自助服务网络:

[ml2]
# ...
tenant_network_types =

在该[ml2]部分中,启用 Linux 桥接机制:

[ml2]
# ...
mechanism_drivers = linuxbridge

在该[ml2]部分中,启用端口安全扩展驱动程序:

[ml2]
# ...
extension_drivers = port_security

在该[ml2_type_flat]部分中,将提供者虚拟网络配置为平面网络:

[ml2_type_flat]
# ...
flat_networks = provider

在该[securitygroup]部分中,启用 ipset 以提高安全组规则的效率:

[securitygroup]
# ...
enable_ipset = true

检查修改的配置文件

cat  /etc/neutron/plugins/ml2/ml2_conf.ini|grep -Ev "(^$|^#)"

Linux 桥接代理为实例构建第 2 层(桥接和交换)虚拟网络基础架构并处理安全组。

  • 编辑vim /etc/neutron/plugins/ml2/linuxbridge_agent.ini文件并完成以下操作:
  • 在该[linux_bridge]部分中,将提供者虚拟网络映射到提供者物理网络接口:
[linux_bridge]
physical_interface_mappings = provider:eth1

在该[vxlan]部分中,禁用 VXLAN 覆盖网络:

[vxlan]
enable_vxlan = false

在该[securitygroup]部分中,启用安全组并配置 Linux 网桥 iptables 防火墙驱动程序:

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

检查修改的配置文件

cat /etc/neutron/plugins/ml2/linuxbridge_agent.ini|grep -Ev "(^$|^#)"

sysctl通过验证以下所有值都设置为,确保您的 Linux 操作系统内核支持网桥过滤器1

modprobe br_netfilter
cat > /etc/sysctl.conf <<EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sysctl -p

要启用网络桥接支持,通常br_netfilter需要加载内核模块。有关启用此模块的更多详细信息,请查看您的操作系统文档。

DHCP 代理为虚拟网络提供 DHCP 服务。

编辑vim /etc/neutron/dhcp_agent.ini文件并完成以下操作:

在该[DEFAULT]部分中,配置 Linux 网桥接口驱动程序、Dnsmasq DHCP 驱动程序,并启用隔离元数据,以便提供商网络上的实例可以通过网络访问元数据:

[DEFAULT]
# ...
interface_driver = linuxbridge
dhcp_driver = neutron.agent.linux.dhcp.Dnsmasq
enable_isolated_metadata = true

检查修改的配置文件

cat /etc/neutron/dhcp_agent.ini|grep -Ev "(^$|^#)"

元数据代理向实例提供配置信息,例如凭据。

编辑/etc/neutron/metadata_agent.ini文件并完成以下操作:

在该[DEFAULT]部分中,配置元数据主机和共享密钥:

[DEFAULT]
# ...
nova_metadata_host = controller
metadata_proxy_shared_secret = METADATA_SECRET

检查修改的配置文件

cat /etc/neutron/metadata_agent.ini|grep -Ev "(^$|^#)"

元数据代理向实例提供配

编辑vim /etc/nova/nova.conf文件并执行以下操作:

  • 在该[neutron]部分中,配置访问参数、启用元数据代理和配置密钥:
[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

网络服务初始化脚本需要一个 /etc/neutron/plugin.ini指向 ML2 插件配置文件的符号链接,/etc/neutron/plugins/ml2/ml2_conf.ini. 如果此符号链接不存在,请使用以下命令创建它:

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

重启计算 API 服务:

systemctl restart openstack-nova-api.service

启动网络服务并将它们配置为在系统启动时启动。

对于两种网络选项:

systemctl enable neutron-server.service \
  neutron-linuxbridge-agent.service neutron-dhcp-agent.service \
  neutron-metadata-agent.service
systemctl start neutron-server.service \
  neutron-linuxbridge-agent.service neutron-dhcp-agent.service \
  neutron-metadata-agent.service
systemctl status neutron-server.service \
  neutron-linuxbridge-agent.service neutron-dhcp-agent.service \
  neutron-metadata-agent.service

对于网络选项 2,还要启用并启动第 3 层服务:

systemctl enable neutron-l3-agent.service
systemctl start neutron-l3-agent.service

安装neutron-compute-供应商网络

计算节点处理实例的连接和安全组。

安装组件¶

yum -y install openstack-neutron-linuxbridge ebtables ipset

Networking 通用组件配置包括认证机制、消息队列和插件。

编辑vim /etc/neutron/neutron.conf文件并完成以下操作:

  • 在该[database]部分中,注释掉任何connection选项,因为计算节点不直接访问数据库。
  • 在该[DEFAULT]部分中,配置RabbitMQ 消息队列访问:
[DEFAULT]
# ...
transport_url = rabbit://openstack:RABBIT_PASS@controller

[DEFAULT][keystone_authtoken]部分中,配置身份服务访问:

[DEFAULT]
# ...
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

在该[oslo_concurrency]部分中,配置锁定路径

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

选择您为控制器节点选择的相同网络选项以配置特定于它的服务。之后,返回此处并继续 配置计算服务以使用网络服务

选择 网络选项 1:提供商网络

*在计算*节点上配置网络组件。

Linux 桥接代理为实例构建第 2 层(桥接和交换)虚拟网络基础架构并处理安全组。

编辑vim /etc/neutron/plugins/ml2/linuxbridge_agent.ini文件并完成以下操作:

在该[linux_bridge]部分中,将提供者虚拟网络映射到提供者物理网络接口:

[linux_bridge]
physical_interface_mappings = provider:eth1

在该[vxlan]部分中,禁用 VXLAN 覆盖网络:

[vxlan]
enable_vxlan = false

在该[securitygroup]部分中,启用安全组并配置 Linux 网桥 iptables 防火墙驱动程序:

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

sysctl通过验证以下所有值都设置为,确保您的 Linux 操作系统内核支持网桥过滤器1

modprobe br_netfilter
cat > /etc/sysctl.conf <<EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sysctl -p

要启用网络桥接支持,通常br_netfilter需要加载内核模块。有关启用此模块的更多详细信息,请查看您的操作系统文档。

配置计算服务以使用网络服务¶ 编辑 vim /etc/nova/nova.conf文件并完成以下操作:

在该[neutron]部分中,配置访问参数:

[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

重启计算服务:

systemctl restart openstack-nova-compute.service

启动 Linux 网桥代理并将其配置为在系统引导时启动:

systemctl enable neutron-linuxbridge-agent.service
systemctl start neutron-linuxbridge-agent.service
systemctl status neutron-linuxbridge-agent.service

安装neutron-controller-自服务网络

*在控制器*节点上安装和配置网络组件。

yum -y install openstack-neutron openstack-neutron-ml2 \
  openstack-neutron-linuxbridge ebtables

配置服务器组件¶ 编辑 vim /etc/neutron/neutron.conf 文件并完成以下操作:

在该[database]部分中,配置数据库访问:

[database]
# ...
connection = mysql+pymysql://neutron:NEUTRON_DBPASS@controller/neutron

在该[DEFAULT]部分中,启用模块化第 2 层 (ML2) 插件、路由器服务和重叠 IP 地址:

[DEFAULT]
# ...
core_plugin = ml2
service_plugins = router
allow_overlapping_ips = true

在该[DEFAULT]部分中,配置RabbitMQ 消息队列访问:

[DEFAULT]
# ...
transport_url = rabbit://openstack:RABBIT_PASS@controller

[DEFAULT][keystone_authtoken]部分中,配置身份服务访问:

[DEFAULT]
# ...
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

[DEFAULT][nova]部分中,配置 Networking 以通知 Compute 网络拓扑更改:

[DEFAULT]
# ...
notify_nova_on_port_status_changes = true
notify_nova_on_port_data_changes = true

[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

在该[oslo_concurrency]部分中,配置锁定路径:

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

ML2 插件使用 Linux 桥接机制为实例构建第 2 层(桥接和交换)虚拟网络基础架构。

编辑vim /etc/neutron/plugins/ml2/ml2_conf.ini文件并完成以下操作:

在该[ml2]部分中,启用平面、VLAN 和 VXLAN 网络:

[ml2]
# ...
type_drivers = flat,vlan,vxlan

在该[ml2]部分中,启用 VXLAN 自助服务网络:

[ml2]
# ...
tenant_network_types = vxlan

在该[ml2]部分中,启用 Linux 桥接和第 2 层填充机制:

[ml2]
# ...
mechanism_drivers = linuxbridge,l2population

在该[ml2]部分中,启用端口安全扩展驱动程序:

[ml2]
# ...
extension_drivers = port_security

在该[ml2_type_flat]部分中,将提供者虚拟网络配置为平面网络:

[ml2_type_flat]
# ...
flat_networks = provider

在该[ml2_type_vxlan]部分中,为自助服务网络配置 VXLAN 网络标识符范围:

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

在该[securitygroup]部分中,启用 ipset 以提高安全组规则的效率:

[securitygroup]
# ...
enable_ipset = true

Linux 桥接代理为实例构建第 2 层(桥接和交换)虚拟网络基础架构并处理安全组。

编辑vim /etc/neutron/plugins/ml2/linuxbridge_agent.ini文件并完成以下操作:

在该[linux_bridge]部分中,将提供者虚拟网络映射到提供者物理网络接口:

[linux_bridge]
physical_interface_mappings = provider:eth1

在该[vxlan]部分中,启用 VXLAN 覆盖网络,配置处理覆盖网络的物理网络接口的 IP 地址,并启用第 2 层填充:

[vxlan]
enable_vxlan = true
local_ip = 10.0.0.121
l2_population = true
  • 替换OVERLAY_INTERFACE_IP_ADDRESS为处理覆盖网络的底层物理网络接口的 IP 地址。示例架构使用管理接口将流量通过隧道传输到其他节点。因此,替换OVERLAY_INTERFACE_IP_ADDRESS为控制器节点的管理IP地址。有关详细信息,请参阅 主机网络
  • 在该[securitygroup]部分中,启用安全组并配置 Linux 网桥 iptables 防火墙驱动程序:
[securitygroup]
# ...
enable_security_group = true
firewall_driver = neutron.agent.linux.iptables_firewall.IptablesFirewallDriver

第 3 层 (L3) 代理为自助服务虚拟网络提供路由和 NAT 服务。

编辑vim /etc/neutron/l3_agent.ini文件并完成以下操作:

在该[DEFAULT]部分中,配置 Linux 桥接接口驱动程序:

[DEFAULT]
# ...
interface_driver = linuxbridge

DHCP 代理为虚拟网络提供 DHCP 服务。

编辑vim /etc/neutron/dhcp_agent.ini文件并完成以下操作:

在该[DEFAULT]部分中,配置 Linux 网桥接口驱动程序、Dnsmasq DHCP 驱动程序,并启用隔离元数据,以便提供商网络上的实例可以通过网络访问元数据:

[DEFAULT]
# ...
interface_driver = linuxbridge
dhcp_driver = neutron.agent.linux.dhcp.Dnsmasq
enable_isolated_metadata = true

重启计算 API 服务:

# systemctl restart openstack-nova-api.service

启动网络服务并将它们配置为在系统启动时启动。

对于两种网络选项:

systemctl restart neutron-server.service \
  neutron-linuxbridge-agent.service neutron-dhcp-agent.service \
  neutron-metadata-agent.service

对于网络选项 2,还要启用并启动第 3 层服务:

systemctl enable neutron-l3-agent.service
systemctl start neutron-l3-agent.service

安装neutron-compute-自服务网络

Linux 桥接代理为实例构建第 2 层(桥接和交换)虚拟网络基础架构并处理安全组。

编辑vim /etc/neutron/plugins/ml2/linuxbridge_agent.ini文件并完成以下操作:

在该[linux_bridge]部分中,将提供者虚拟网络映射到提供者物理网络接口:

[linux_bridge]
physical_interface_mappings = provider:eth1

在该[vxlan]部分中,启用 VXLAN 覆盖网络,配置处理覆盖网络的物理网络接口的 IP 地址,并启用第 2 层填充:

[vxlan]
enable_vxlan = true
local_ip = 10.0.0.122
l2_population = true

替换OVERLAY_INTERFACE_IP_ADDRESS为处理覆盖网络的底层物理网络接口的 IP 地址。示例架构使用管理接口将流量通过隧道传输到其他节点。因此,替换OVERLAY_INTERFACE_IP_ADDRESS为计算节点的管理IP地址。有关详细信息,请参阅 主机网络

在该[securitygroup]部分中,启用安全组并配置 Linux 网桥 iptables 防火墙驱动程序:

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

重启计算服务:

systemctl restart openstack-nova-compute.service

启动 Linux 网桥代理并将其配置为在系统引导时启动:

systemctl restart neutron-linuxbridge-agent.service

服务验证

验证nova服务是否可用

验证计算服务的操作。

获取admin凭据以访问仅限管理员的 CLI 命令:

source admin-openrc

列出服务组件以验证每个进程的成功启动和注册:

$ openstack compute service list

+----+--------------------+------------+----------+---------+-------+----------------------------+
| Id | Binary             | Host       | Zone     | Status  | State | Updated At                 |
+----+--------------------+------------+----------+---------+-------+----------------------------+
|  1 | nova-scheduler     | controller | internal | enabled | up    | 2016-02-09T23:11:15.000000 |
|  2 | nova-conductor     | controller | internal | enabled | up    | 2016-02-09T23:11:16.000000 |
|  3 | nova-compute       | compute1   | nova     | enabled | up    | 2016-02-09T23:11:20.000000 |
+----+--------------------+------------+----------+---------+-------+----------------------------+

列出身份服务中的 API 端点以验证与身份服务的连接:

$ openstack catalog list

+-----------+-----------+-----------------------------------------+
| Name      | Type      | Endpoints                               |
+-----------+-----------+-----------------------------------------+
| keystone  | identity  | RegionOne                               |
|           |           |   public: http://controller:5000/v3/    |
|           |           | RegionOne                               |
|           |           |   internal: http://controller:5000/v3/  |
|           |           | RegionOne                               |
|           |           |   admin: http://controller:5000/v3/     |
|           |           |                                         |
| glance    | image     | RegionOne                               |
|           |           |   admin: http://controller:9292         |
|           |           | RegionOne                               |
|           |           |   public: http://controller:9292        |
|           |           | RegionOne                               |
|           |           |   internal: 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   |
|           |           |                                         |
| placement | placement | RegionOne                               |
|           |           |   public: http://controller:8778        |
|           |           | RegionOne                               |
|           |           |   admin: http://controller:8778         |
|           |           | RegionOne                               |
|           |           |   internal: http://controller:8778      |
|           |           |                                         |
+-----------+-----------+-----------------------------------------+

列出图像服务中的图像以验证与图像服务的连接性:

$ openstack image list

+--------------------------------------+-------------+-------------+
| ID                                   | Name        | Status      |
+--------------------------------------+-------------+-------------+
| 9a76d9f9-9620-4f2e-8c69-6c5691fae163 | cirros      | active      |
+--------------------------------------+-------------+-------------+

检查单元格和放置 API 是否成功运行,以及其他必要的先决条件是否到位:

# nova-status upgrade check

+--------------------------------------------------------------------+
| Upgrade Check Results                                              |
+--------------------------------------------------------------------+
| Check: Cells v2                                                    |
| Result: Success                                                    |
| Details: None                                                      |
+--------------------------------------------------------------------+
| Check: Placement API                                               |
| Result: Success                                                    |
| Details: None                                                      |
+--------------------------------------------------------------------+
| Check: Ironic Flavor Migration                                     |
| Result: Success                                                    |
| Details: None                                                      |
+--------------------------------------------------------------------+
| Check: Cinder API                                                  |
| Result: Success                                                    |
| Details: None                                                      |
+--------------------------------------------------------------------+

验证nova报错403解决

[root@controller ~]# vim /etc/httpd/conf.d/00-placement-api.conf

在最后一行填写如下内容:

<Directory /usr/bin>
   <IfVersion >= 2.4>
      Require all granted
   </IfVersion>
   <IfVersion < 2.4>
      Order allow,deny
      Allow from all
   </IfVersion>
</Directory>

systemctl restart httpd

验证neutron服务是否可用-供应商网络

获取admin凭据以访问仅限管理员的 CLI 命令:

source admin-openrc

列出加载的扩展以验证 neutron-server进程是否成功启动:

$ openstack extension list --network

+---------------------------+---------------------------+----------------------------+
| Name                      | Alias                     | Description                |
+---------------------------+---------------------------+----------------------------+
| Default Subnetpools       | default-subnetpools       | Provides ability to mark   |
|                           |                           | and use a subnetpool as    |
|                           |                           | the default                |
| Availability Zone         | availability_zone         | The availability zone      |
|                           |                           | extension.                 |
| Network Availability Zone | network_availability_zone | Availability zone support  |
|                           |                           | for network.               |
| Port Binding              | binding                   | Expose port bindings of a  |
|                           |                           | virtual port to external   |
|                           |                           | application                |
| agent                     | agent                     | The agent management       |
|                           |                           | extension.                 |
| Subnet Allocation         | subnet_allocation         | Enables allocation of      |
|                           |                           | subnets from a subnet pool |
| DHCP Agent Scheduler      | dhcp_agent_scheduler      | Schedule networks among    |
|                           |                           | dhcp agents                |
| Neutron external network  | external-net              | Adds external network      |
|                           |                           | attribute to network       |
|                           |                           | resource.                  |
| Neutron Service Flavors   | flavors                   | Flavor specification for   |
|                           |                           | Neutron advanced services  |
| Network MTU               | net-mtu                   | Provides MTU attribute for |
|                           |                           | a network resource.        |
| Network IP Availability   | network-ip-availability   | Provides IP availability   |
|                           |                           | data for each network and  |
|                           |                           | subnet.                    |
| Quota management support  | quotas                    | Expose functions for       |
|                           |                           | quotas management per      |
|                           |                           | tenant                     |
| Provider Network          | provider                  | Expose mapping of virtual  |
|                           |                           | networks to physical       |
|                           |                           | networks                   |
| Multi Provider Network    | multi-provider            | Expose mapping of virtual  |
|                           |                           | networks to multiple       |
|                           |                           | physical networks          |
| Address scope             | address-scope             | Address scopes extension.  |
| Subnet service types      | subnet-service-types      | Provides ability to set    |
|                           |                           | the subnet service_types   |
|                           |                           | field                      |
| Resource timestamps       | standard-attr-timestamp   | Adds created_at and        |
|                           |                           | updated_at fields to all   |
|                           |                           | Neutron resources that     |
|                           |                           | have Neutron standard      |
|                           |                           | attributes.                |
| Neutron Service Type      | service-type              | API for retrieving service |
| Management                |                           | providers for Neutron      |
|                           |                           | advanced services          |
| resources: subnet,        |                           | more L2 and L3 resources.  |
| subnetpool, port, router  |                           |                            |
| Neutron Extra DHCP opts   | extra_dhcp_opt            | Extra options              |
|                           |                           | configuration for DHCP.    |
|                           |                           | For example PXE boot       |
|                           |                           | options to DHCP clients    |
|                           |                           | can be specified (e.g.     |
|                           |                           | tftp-server, server-ip-    |
|                           |                           | address, bootfile-name)    |
| Resource revision numbers | standard-attr-revisions   | This extension will        |
|                           |                           | display the revision       |
|                           |                           | number of neutron          |
|                           |                           | resources.                 |
| Pagination support        | pagination                | Extension that indicates   |
|                           |                           | that pagination is         |
|                           |                           | enabled.                   |
| Sorting support           | sorting                   | Extension that indicates   |
|                           |                           | that sorting is enabled.   |
| security-group            | security-group            | The security groups        |
|                           |                           | extension.                 |
| RBAC Policies             | rbac-policies             | Allows creation and        |
|                           |                           | modification of policies   |
|                           |                           | that control tenant access |
|                           |                           | to resources.              |
| standard-attr-description | standard-attr-description | Extension to add           |
|                           |                           | descriptions to standard   |
|                           |                           | attributes                 |
| Port Security             | port-security             | Provides port security     |
| Allowed Address Pairs     | allowed-address-pairs     | Provides allowed address   |
|                           |                           | pairs                      |
| project_id field enabled  | project-id                | Extension that indicates   |
|                           |                           | that project_id field is   |
|                           |                           | enabled.                   |
+---------------------------+---------------------------+----------------------------+

列出代理以验证成功启动中子代理:

$ openstack network agent list

+--------------------------------------+--------------------+------------+-------------------+-------+-------+--
| ID                                   | Agent Type         | Host       | Availability Zone | Alive | State | Binary                    |
+--------------------------------------+--------------------+------------+-------------------+-------+-------+--
| 0400c2f6-4d3b-44bc-89fa-99093432f3bf | Metadata agent     | controller | None              | True  | UP    | neutron-metadata-agent    |
| 83cf853d-a2f2-450a-99d7-e9c6fc08f4c3 | DHCP agent         | controller | nova              | True  | UP    | neutron-dhcp-agent        |
| ec302e51-6101-43cf-9f19-88a78613cbee | Linux bridge agent | compute    | None              | True  | UP    | neutron-linuxbridge-agent |
| fcb9bc6e-22b1-43bc-9054-272dd517d025 | Linux bridge agent | controller | None              | True  | UP    | neutron-linuxbridge-agent |
+--------------------------------------+--------------------+------------+-------------------+-------+-------+--

输出应指示控制器节点上的三个代理和每个计算节点上的一个代理。

验证neutron服务是否可用-自服务网络

列出代理以验证成功启动中子代理:

$ source admin-openrc
$ openstack network agent list

+--------------------------------------+--------------------+------------+-------------------+-------+-------+--
| ID                                   | Agent Type         | Host       | Availability Zone | Alive | State | Binary                    |
+--------------------------------------+--------------------+------------+-------------------+-------+-------+--
| f49a4b81-afd6-4b3d-b923-66c8f0517099 | Metadata agent     | controller | None              | True  | UP    | neutron-metadata-agent    |
| 27eee952-a748-467b-bf71-941e89846a92 | Linux bridge agent | controller | None              | True  | UP    | neutron-linuxbridge-agent |
| 08905043-5010-4b87-bba5-aedb1956e27a | Linux bridge agent | compute1   | None              | True  | UP    | neutron-linuxbridge-agent |
| 830344ff-dc36-4956-84f4-067af667a0dc | L3 agent           | controller | nova              | True  | UP    | neutron-l3-agent          |
| dd3644c9-1a3a-435a-9282-eb306b4b0391 | DHCP agent         | controller | nova              | True  | UP    | neutron-dhcp-agent        |
+--------------------------------------+--------------------+------------+-------------------+-------+-------+--

输出应指示控制器节点上有四个代理,每个计算节点上有一个代理。

启动实例

启动供应商网络的虚拟机

本节创建必要的虚拟网络以支持启动实例。网络选项 1 包括一个提供商(外部)网络和一个使用它的实例。网络选项 2 包括一个提供商网络和一个使用它的实例,以及一个自助服务(专用)网络和一个使用它的实例。

本节中的说明使用控制器节点上的命令行界面 (CLI) 工具。但是,您可以按照安装了这些工具的任何主机上的说明进行操作。

在启动实例之前,您必须创建必要的虚拟网络基础架构。对于网络选项 1,实例使用通过第 2 层(桥接/交换)连接到物理网络基础设施的提供商(外部)网络。该网络包括一个 DHCP 服务器,可为实例提供 IP 地址。

admin或其他特权用户必须创建此网络,因为它直接连接到物理网络基础设施。

在控制器节点上,admin获取凭据以访问仅限管理员的 CLI 命令:

source admin-openrc

创建网络:

openstack network create  --share --external \
  --provider-physical-network provider \
  --provider-network-type flat provider

--share选项允许所有项目使用虚拟网络。

--external选项将虚拟网络定义为外部网络。如果你想创建一个内部网络,你可以使用--internal。默认值为internal

和 选项使用以下文件中的信息将平面虚拟网络连接到主机接口上的平面(本机/未标记)物理网络:--provider-physical-network provider``--provider-network-type flat``eth1

在网络上创建子网:

openstack subnet create --network provider \
  --allocation-pool start=203.0.113.101,end=203.0.113.250 \
  --dns-nameserver 8.8.4.4 --gateway 203.0.113.1 \
  --subnet-range 203.0.113.0/24 provider

本人自己的环境创建子网如下命令
openstack subnet create --network provider \
  --allocation-pool start=10.0.0.200,end=10.0.0.250 \
  --dns-nameserver 8.8.8.8 --gateway 10.0.0.2 \
  --subnet-range 10.0.0.0/24 provider

最小的默认风格每个实例消耗 512 MB 内存。对于计算节点包含少于 4 GB 内存的环境,我们建议创建m1.nano每个实例仅需要 64 MB 的风味。仅将此风格与 CirrOS 映像一起用于测试目的。

openstack flavor create --id 0 --vcpus 1 --ram 64 --disk 1 m1.nano

大多数云镜像支持公钥认证,而不是传统的密码认证。在启动实例之前,您必须向计算服务添加一个公钥。

获取demo项目凭据:

source demo-openrc

生成密钥对并添加公钥:

ssh-keygen -q -N ""
openstack keypair create --public-key ~/.ssh/id_rsa.pub mykey

验证密钥对的添加:

openstack keypair list

默认情况下,default安全组适用于所有实例,并包含拒绝远程访问实例的防火墙规则。对于 CirrOS 等 Linux 映像,我们建议至少允许 ICMP (ping) 和安全 shell (SSH)。

default向安全组添加规则:

允许ICMP(ping):

openstack security group rule create --proto icmp default

允许安全外壳 (SSH) 访问:

openstack security group rule create --proto tcp --dst-port 22 default

要启动实例,您必须至少指定风味、映像名称、网络、安全组、密钥和实例名称。

在控制器节点上,demo获取凭据以访问仅限用户的 CLI 命令:

source demo-openrc

风味指定了包括处理器、内存和存储的虚拟资源分配配置文件。

列出可用的口味:

openstack flavor list

列出可用图像:

openstack image list

列出可用网络:

openstack network list

列出可用的安全组:

openstack security group list

启动实例:

替换为提供商网络PROVIDER_NET_ID的 ID 。provider

PROVIDER_NET_ID=$(openstack network list|grep " provider "|awk -F "|" '{print $2}'|xargs)
openstack server create --flavor m1.nano --image cirros \
  --nic net-id=${PROVIDER_NET_ID} --security-group default \
  --key-name mykey provider-instance

虚拟机账号密码: cirros gocubsgo

检查您的实例的状态:

openstack server list

获取实例的虚拟网络计算 (VNC) 会话 URL 并从 Web 浏览器访问它:

openstack console url show provider-instance

验证对提供商物理网络网关的访问:

ping -c 4 203.0.113.1

使用 SSH 从控制器节点或提供商物理网络上的任何主机访问您的实例:

ssh cirros@203.0.113.103

启动自服务网络的虚拟机

如果您选择网络选项 2,您还可以创建一个通过 NAT 连接到物理网络基础设施的自助(专用)网络。该网络包括一个 DHCP 服务器,可为实例提供 IP 地址。此网络上的实例可以自动访问外部网络,例如 Internet。但是,从 Internet 等外部网络访问此网络上的实例需要浮动 IP 地址

demo或其他非特权用户可以创建此网络,因为它demo仅提供与项目内实例的连接。

在控制器节点上,demo获取凭据以访问仅限用户的 CLI 命令:

source demo-openrc

创建网络:

openstack network create selfservice

非特权用户通常不能为该命令提供额外的参数。该服务使用以下文件中的信息自动选择参数:

ml2_conf.ini:

[ml2]
tenant_network_types = vxlan

[ml2_type_vxlan]
vni_ranges = 1:1000

在网络上创建子网:

openstack subnet create --network selfservice \
  --dns-nameserver 8.8.4.4 --gateway 172.16.1.1 \
  --subnet-range 172.16.1.0/24 selfservice

创建路由器:

openstack router create router

将自助服务网络子网添加为路由器上的接口:

openstack router add subnet router selfservice

在路由器的提供商网络上设置网关:

openstack router set router --external-gateway provider

我们建议您在继续之前验证操作并修复任何问题。以下步骤使用网络和子网创建示例中的 IP 地址范围。

  1. 在控制器节点上,admin获取凭据以访问仅限管理员的 CLI 命令:
source admin-openrc

列出网络命名空间。您应该看到一个qrouter命名空间和两个 qdhcp命名空间。

$ ip netns

qrouter-89dd2083-a160-4d75-ab3a-14239f01ea0b
qdhcp-7c6f9b37-76b4-463e-98d8-27e5686ed083
qdhcp-0e62efcd-8cee-46c7-b163-d8df05c3c5ad

列出路由器上的端口以确定提供商网络上的网关 IP 地址:

$ openstack port list --router router

+--------------------------------------+------+-------------------+-------------------------------------------------------------------------------+--------+
| ID                                   | Name | MAC Address       | Fixed IP Addresses                                                            | Status |
+--------------------------------------+------+-------------------+-------------------------------------------------------------------------------+--------+
| bff6605d-824c-41f9-b744-21d128fc86e1 |      | fa:16:3e:2f:34:9b | ip_address='172.16.1.1', subnet_id='3482f524-8bff-4871-80d4-5774c2730728'     | ACTIVE |
| d6fe98db-ae01-42b0-a860-37b1661f5950 |      | fa:16:3e:e8:c1:41 | ip_address='203.0.113.102', subnet_id='5cc70da8-4ee7-4565-be53-b9c011fca011'  | ACTIVE |
+--------------------------------------+------+-------------------+-------------------------------------------------------------------------------+--------+

从控制器节点或物理提供商网络上的任何主机 ping 此 IP 地址:

$ ping -c 4 10.0.0.2

PING 203.0.113.102 (203.0.113.102) 56(84) bytes of data.
64 bytes from 203.0.113.102: icmp_req=1 ttl=64 time=0.619 ms
64 bytes from 203.0.113.102: icmp_req=2 ttl=64 time=0.189 ms
64 bytes from 203.0.113.102: icmp_req=3 ttl=64 time=0.165 ms
64 bytes from 203.0.113.102: icmp_req=4 ttl=64 time=0.216 ms

--- 203.0.113.102 ping statistics ---
rtt min/avg/max/mdev = 0.165/0.297/0.619/0.187 ms

要启动实例,您必须至少指定风味、映像名称、网络、安全组、密钥和实例名称。

  1. 在控制器节点上,demo获取凭据以访问仅限用户的 CLI 命令:
source demo-openrc

风味指定了包括处理器、内存和存储的虚拟资源分配配置文件。

列出可用的口味:

 openstack flavor list

列出可用图像:

openstack image list

列出可用网络:

openstack network list

列出可用的安全组:

openstack security group list

启动实例:

替换SELFSERVICE_NET_ID为网络的 ID selfservice

SELFSERVICE_NET_ID=$(openstack network list|grep " selfservice "|awk -F "|" '{print $2}'|xargs)
openstack server create --flavor m1.nano --image cirros \
  --nic net-id=${SELFSERVICE_NET_ID} --security-group default \
  --key-name mykey selfservice-instance


虚拟机账号密码: cirros gocubsgo

检查您的实例的状态:

openstack server list

获取实例的虚拟网络计算 (VNC) 会话 URL 并从 Web 浏览器访问它:

openstack console url show selfservice-instance

在提供者虚拟网络上创建一个浮动 IP 地址:

openstack floating ip create provider

将浮动 IP 地址与实例关联:

openstack server add floating ip selfservice-instance 10.0.0.242

检查您的浮动 IP 地址的状态

openstack server list

通过控制器节点或提供商物理网络上的任何主机的浮动 IP 地址验证与实例的连接:

ping -c 4 10.0.0.242

使用 SSH 从控制器节点或提供商物理网络上的任何主机访问您的实例:

ssh cirros@10.0.0.242

验证服务

验证openstack服务器是否正常

source /root/admin-openrc 
nova service-list
neutron agent-list

扩展组件

安装dashboard-控制节点

本节介绍如何在控制器节点上安装和配置仪表板。

仪表板所需的唯一核心服务是身份服务。您可以将仪表板与其他服务结合使用,例如图像服务、计算和网络。您还可以在具有独立服务(如对象存储)的环境中使用仪表板。

安装软件包:

yum -y install openstack-dashboard

编辑 vim /etc/openstack-dashboard/local_settings 文件并完成以下操作:

  • controller配置仪表板以在节点上使用 OpenStack 服务 :
OPENSTACK_HOST = "controller"

允许您的主机访问仪表板:

ALLOWED_HOSTS = ['one.example.com', '*']

配置memcached会话存储服务:

SESSION_ENGINE = 'django.contrib.sessions.backends.cache'

CACHES = {
    'default': {
         'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
         'LOCATION': 'controller:11211',
    }
}

启用身份 API 版本 3:

OPENSTACK_KEYSTONE_URL = "http://%s:5000/v3" % OPENSTACK_HOST

启用对域的支持:

OPENSTACK_KEYSTONE_MULTIDOMAIN_SUPPORT = True

配置 API 版本:

OPENSTACK_API_VERSIONS = {
    "identity": 3,
    "image": 2,
    "volume": 3,
}

配置Default为您通过仪表板创建的用户的默认域:

OPENSTACK_KEYSTONE_DEFAULT_DOMAIN = "Default"

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

OPENSTACK_KEYSTONE_DEFAULT_ROLE = "user"

如果您选择网络选项 1,请禁用对第 3 层网络服务的支持:

OPENSTACK_NEUTRON_NETWORK = {
    ...
    'enable_router': False,
    'enable_quotas': False,
    'enable_distributed_router': False,
    'enable_ha_router': False,
    'enable_lb': False,
    'enable_firewall': False,
    'enable_vpn': False,
    'enable_fip_topology_check': False,
}

如果您选择网络选项 1和2,请开启对第 3 层网络服务的支持:

OPENSTACK_NEUTRON_NETWORK = {
    ...
    'enable_router': True,
    'enable_quotas': True,
    'enable_distributed_router': True,
    'enable_ha_router': True,
    'enable_lb': False,
    'enable_firewall': False,
    'enable_vpn': False,
    'enable_fip_topology_check': False,
}

(可选)配置时区:

TIME_ZONE = "Asia/Shanghai"

vim /etc/httpd/conf.d/openstack-dashboard.conf如果不包括,则添加以下行 。

WSGIApplicationGroup %{GLOBAL}

重启 Web 服务器和会话存储服务:

systemctl restart httpd.service memcached.service

然后打开浏览器web界面进行访问: http://10.0.0.121/

域:default 账号:myuser 密码:DEMO_PASS

如果访问web界面出现的报错:

Not Found
The requested URL /auth/login/ was not found on this server.

解决方法:

分析相关的配置文件/etc/httpd/conf.d/openstack-dashboard.conf和/etc/openstack-dashboard/local_settings。

发现vim /etc/httpd/conf.d/openstack-dashboard.conf文件里的有相关的路径设置,做了如下改动(去掉了路径中的dashboard):

#WSGIScriptAlias /dashboard /usr/share/openstack-dashboard/openstack_dashboard/wsgi/django.wsgi
#Alias /dashboard/static /usr/share/openstack-dashboard/static
WSGIScriptAlias / /usr/share/openstack-dashboard/openstack_dashboard/wsgi/django.wsgi
Alias /static /usr/share/openstack-dashboard/static

重启httpd服务后,使用http://服务地址/ 访问网站,恢复正常:

systemctl restart httpd.service memcached.service

安装cinder-controller-控制节点

块存储服务 (cinder) 为来宾实例提供块存储设备。配置和使用存储的方法由块存储驱动程序或多后端配置情况下的驱动程序确定。有多种可用的驱动程序:NAS/SAN、NFS、iSCSI、Ceph 等。

块存储 API 和调度程序服务通常在控制器节点上运行。根据使用的驱动程序,卷服务可以在控制器节点、计算节点或独立存储节点上运行。

本节介绍如何在控制节点上安装和配置块存储服务,代号为cinder。该服务至少需要一个额外的存储节点来为实例提供卷。

在安装和配置块存储服务之前,您必须创建数据库、服务凭证和 API 端点。

要创建数据库,请完成以下步骤:

使用数据库访问客户端以root用户身份连接数据库服务器:

mysql -u root

创建cinder数据库:

CREATE DATABASE cinder;

授予对cinder数据库的适当访问权限:

GRANT ALL PRIVILEGES ON cinder.* TO 'cinder'@'localhost' \
  IDENTIFIED BY 'CINDER_DBPASS';
GRANT ALL PRIVILEGES ON cinder.* TO 'cinder'@'%' \
  IDENTIFIED BY 'CINDER_DBPASS';

退出数据库访问客户端。

quit;

填充数据块存储数据库:

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

获取admin凭据以访问仅限管理员的 CLI 命令:

source admin-openrc

要创建服务凭证,请完成以下步骤:

创建cinder用户:

openstack user create --domain default --password-prompt cinder

密码:CINDER_PASS

admin角色添加到cinder用户:

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

创建cinderv2cinderv3服务实体:

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

创建块存储服务 API 端点:

openstack endpoint create --region RegionOne \
  volumev2 public http://controller:8776/v2/%\(project_id\)s
openstack endpoint create --region RegionOne \
  volumev2 internal http://controller:8776/v2/%\(project_id\)s
openstack endpoint create --region RegionOne \
  volumev2 admin http://controller:8776/v2/%\(project_id\)s

openstack endpoint create --region RegionOne \
  volumev3 public http://controller:8776/v3/%\(project_id\)s
openstack endpoint create --region RegionOne \
  volumev3 internal http://controller:8776/v3/%\(project_id\)s
openstack endpoint create --region RegionOne \
  volumev3 admin http://controller:8776/v3/%\(project_id\)s

编辑vim /etc/cinder/cinder.conf文件并完成以下操作:

在该[database]部分中,配置数据库访问:

[database]
# ...
connection = mysql+pymysql://cinder:CINDER_DBPASS@controller/cinder

在该[DEFAULT]部分中,配置RabbitMQ 消息队列访问:

[DEFAULT]
# ...
transport_url = rabbit://openstack:RABBIT_PASS@controller

[DEFAULT][keystone_authtoken]部分中,配置身份服务访问:

[DEFAULT]
# ...
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 = cinder
password = CINDER_PASS

在该[oslo_concurrency]部分中,配置锁定路径:

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

编辑vim /etc/nova/nova.conf文件并将以下内容添加到其中:

[cinder]
os_region_name = RegionOne

重启计算 API 服务:

systemctl restart openstack-nova-api.service

启动块存储服务并将它们配置为在系统启动时启动:

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

安装cinder-storage-计算节点

安装支持的实用程序包:

  • 安装 LVM 包:
yum -y install lvm2 device-mapper-persistent-data

启动 LVM 元数据服务并将其配置为在系统引导时启动:

systemctl enable lvm2-lvmetad.service
systemctl start lvm2-lvmetad.service

创建 LVM 物理卷/dev/sdb

pvcreate /dev/sdb
pvcreate /dev/sdc
pvcreate /dev/sdd
pvcreate /dev/sde

创建 LVM 卷组cinder-volumes

vgcreate cinder-volumes /dev/sdb /dev/sdc /dev/sdd /dev/sde

只有实例可以访问块存储卷。但是,底层操作系统管理与卷关联的设备。默认情况下,LVM 卷扫描工具会在 /dev目录中扫描包含卷的块存储设备。如果项目在其卷上使用 LVM,扫描工具会检测到这些卷并尝试缓存它们,这可能会导致底层操作系统和项目卷出现各种问题。您必须重新配置 LVM 以仅扫描包含cinder-volumes卷组的设备。编辑 vim /etc/lvm/lvm.conf文件并完成以下操作:

  • 在该devices部分中,添加一个接受 /dev/sdb设备并拒绝所有其他设备的过滤器:
devices {
...
filter = [ "a/sdb/", "r/.*/"]

筛选器数组中的每个项都以a开头表示接受,以r开头表示拒绝,并包含一个用于设备名称的正则表达式。阵列必须以r/.*/结尾,以拒绝任何剩余设备。您可以使用vgs -vvvv命令来测试过滤器。

如果您的存储节点在操作系统磁盘上使用 LVM,您还必须将关联的设备添加到过滤器中。例如,如果/dev/sda设备包含操作系统:

filter = [ "a/sda/", "a/sdb/", "r/.*/"]

安装软件包:

yum install openstack-cinder targetcli python-keystone

编辑vim /etc/cinder/cinder.conf文件并完成以下操作:

  • 在该[database]部分中,配置数据库访问:
[database]
# ...
connection = mysql+pymysql://cinder:CINDER_DBPASS@controller/cinder

在该[DEFAULT]部分中,配置RabbitMQ 消息队列访问:

[DEFAULT]
# ...
transport_url = rabbit://openstack:RABBIT_PASS@controller

[DEFAULT][keystone_authtoken]部分中,配置身份服务访问:

[DEFAULT]
# ...
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 = cinder
password = CINDER_PASS

在该部分中,使用 LVM 驱动程序、卷组、iSCSI 协议和适当的 iSCSI 服务[lvm]配置 LVM 后端。cinder-volumes如果该[lvm]部分不存在,请创建它:

[lvm]
volume_driver = cinder.volume.drivers.lvm.LVMVolumeDriver
volume_group = cinder-volumes
target_protocol = iscsi
target_helper = lioadm

在该[DEFAULT]部分中,启用 LVM 后端:

[DEFAULT]
# ...
enabled_backends = lvm

在该[DEFAULT]部分中,配置图像服务 API 的位置:

[DEFAULT]
# ...
glance_api_servers = http://controller:9292
[oslo_concurrency]
# ...
lock_path = /var/lib/cinder/tmp

启动块存储卷服务,包括其依赖项,并将它们配置为在系统启动时启动:

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

验证cinder服务

获取admin凭据以访问仅限管理员的 CLI 命令:

source admin-openrc

列出服务组件以验证每个进程的成功启动:

$ openstack volume service list

+------------------+------------+------+---------+-------+----------------------------+
| Binary           | Host       | Zone | Status  | State | Updated_at                 |
+------------------+------------+------+---------+-------+----------------------------+
| cinder-scheduler | controller | nova | enabled | up    | 2016-09-30T02:27:41.000000 |
| cinder-volume    | block@lvm  | nova | enabled | up    | 2016-09-30T02:27:46.000000 |
| cinder-backup    | controller | nova | enabled | up    | 2016-09-30T02:27:41.000000 |
+------------------+------------+------+---------+-------+----------------------------+

创建cinder卷

获取demo凭据以作为非管理项目执行以下步骤:

source demo-openrc

创建一个 1 GB 的卷:

openstack volume create --size 1 volume1

片刻后,音量状态应从creating 变为available

openstack volume list

将卷附加到实例:

openstack server add volume provider-instance volume1

列出卷:

openstack volume list

使用 SSH 访问您的实例并使用fdisk命令验证卷是否作为/dev/vdb块存储设备存在:

$ sudo fdisk -l

 Disk /dev/vda: 1073 MB, 1073741824 bytes
 255 heads, 63 sectors/track, 130 cylinders, total 2097152 sectors
 Units = sectors of 1 * 512 = 512 bytes
 Sector size (logical/physical): 512 bytes / 512 bytes
 I/O size (minimum/optimal): 512 bytes / 512 bytes
 Disk identifier: 0x00000000

    Device Boot      Start         End      Blocks   Id  System
/dev/vda1   *       16065     2088449     1036192+  83  Linux

 Disk /dev/vdb: 1073 MB, 1073741824 bytes
 16 heads, 63 sectors/track, 2080 cylinders, total 2097152 sectors
 Units = sectors of 1 * 512 = 512 bytes
 Sector size (logical/physical): 512 bytes / 512 bytes
 I/O size (minimum/optimal): 512 bytes / 512 bytes
 Disk identifier: 0x00000000

 Disk /dev/vdb doesn't contain a valid partition table

快速克隆节点

快速克隆计算节点

计算节点如果是虚拟机,那么就满足快速克隆计算节点的要求

首先需要将openstack集群中的虚拟机和卷都清理干净

1.修改主机名称

2.修改IP地址

3.修改nova配置文件
vim /etc/nova/nova.conf 
server_listen = 10.0.0.123
server_proxyclient_address = 10.0.0.123

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

4.修改neutron配置文件
vim /etc/neutron/plugins/ml2/linuxbridge_agent.ini
local_ip = 10.0.0.123

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


5.启动cinder服务
systemctl enable openstack-cinder-volume.service target.service
systemctl start openstack-cinder-volume.service target.service
systemctl enable openstack-cinder-backup
systemctl start openstack-cinder-backup


解决pymysql.err.OperationalError: (1040, ‘Too many connections‘)
https://blog.csdn.net/LelemamaAnne/article/details/113585805

获取管理员凭据以启用仅限管理员的 CLI 命令,然后确认数据库中有计算主机:

source admin-openrc
openstack compute service list --service nova-compute

发现计算主机:

su -s /bin/sh -c "nova-manage cell_v2 discover_hosts --verbose" nova

添加新计算节点时,必须在控制器节点上运行以注册这些新计算节点。或者,您可以在 中设置适当的间隔 :nova-manage cell_v2 discover_hosts``/etc/nova/nova.conf

[scheduler]
discover_hosts_in_cells_interval = 300

创建虚拟机测试

source /root/demo-openrc
openstack network list

openstack server create --flavor m1.nano --image cirros \
  --nic net-id=8547b120-8083-432f-a5f9-8ea7beeda429 --security-group default \
  --key-name mykey selfservice-instance

验证所有服务是否正常

source /root/admin-openrc 
nova service-list
neutron agent-list
cinder service-list

创建虚拟机验证扩容

source /root/demo-openrc
SELFSERVICE_NET_ID=$(openstack network list|grep " selfservice "|awk -F "|" '{print $2}'|xargs)
openstack server create --flavor m1.nano --image cirros \
  --nic net-id=${SELFSERVICE_NET_ID} --security-group default \
  --key-name mykey selfservice-instance01
source /root/admin-openrc 
openstack server list --all --long


虚拟机账号密码: cirros gocubsgo

停止服务

关闭所有租户的虚拟机

在控制节点执行如下命令

source demo-openrc
openstack server stop provider-instance
openstack server stop selfservice-instance
openstack server stop selfservice-instance01
sleep 10
openstack server list

source /root/admin-openrc 
nova service-list
neutron agent-list
cinder service-list
echo

关闭计算节点服务

分别在compute1 compute2机器上执行

systemctl stop neutron-linuxbridge-agent.service
systemctl stop libvirtd.service openstack-nova-compute.service
systemctl stop openstack-cinder-volume.service target.service

systemctl disable neutron-linuxbridge-agent.service
systemctl disable libvirtd.service openstack-nova-compute.service
systemctl disable openstack-cinder-volume.service target.service
poweroff

关闭控制节点服务

在控制节点执行如下命令

systemctl stop openstack-cinder-api.service openstack-cinder-scheduler.service
systemctl stop neutron-l3-agent.service
systemctl stop neutron-server.service   neutron-linuxbridge-agent.service neutron-dhcp-agent.service   neutron-metadata-agent.service
systemctl stop     openstack-nova-api.service     openstack-nova-scheduler.service     openstack-nova-conductor.service     openstack-nova-novncproxy.service
systemctl stop openstack-glance-api.service
systemctl stop httpd.service
systemctl stop etcd
systemctl stop memcached.service
systemctl stop rabbitmq-server.service
systemctl stop mariadb.service

systemctl disable openstack-cinder-api.service openstack-cinder-scheduler.service
systemctl disable neutron-l3-agent.service
systemctl disable neutron-server.service   neutron-linuxbridge-agent.service neutron-dhcp-agent.service   neutron-metadata-agent.service
systemctl disable     openstack-nova-api.service     openstack-nova-scheduler.service     openstack-nova-conductor.service     openstack-nova-novncproxy.service
systemctl disable openstack-glance-api.service
systemctl disable httpd.service
systemctl disable etcd
systemctl disable memcached.service
systemctl disable rabbitmq-server.service
systemctl disable mariadb.service
poweroff

恢复服务

开启控制节点服务

在控制节点执行如下命令

systemctl start mariadb.service
systemctl start rabbitmq-server.service
systemctl start memcached.service
systemctl start etcd
systemctl start httpd.service
sleep 5
systemctl start openstack-glance-api.service
systemctl start     openstack-nova-api.service     openstack-nova-scheduler.service     openstack-nova-conductor.service     openstack-nova-novncproxy.service
sleep 5
systemctl start neutron-server.service   neutron-linuxbridge-agent.service neutron-dhcp-agent.service   neutron-metadata-agent.service
systemctl start neutron-l3-agent.service
sleep 5
systemctl start openstack-cinder-api.service openstack-cinder-scheduler.service

echo 3 > /proc/sys/vm/drop_caches &>/dev/null ; free -h

sleep 10
source /root/admin-openrc 
nova service-list
neutron agent-list
cinder service-list
echo 3 > /proc/sys/vm/drop_caches &>/dev/null ; free -h

开启计算节点服务

分别在compute1 compute2机器上执行

systemctl start libvirtd.service openstack-nova-compute.service
systemctl start neutron-linuxbridge-agent.service
systemctl start openstack-cinder-volume.service target.service

echo 3 > /proc/sys/vm/drop_caches &>/dev/null ; free -h

验证所有服务是否正常

在控制节点执行如下命令

sleep 10
source /root/admin-openrc 
nova service-list
neutron agent-list
cinder service-list
echo &>/dev/null

开启所有租户的虚拟机

在控制节点执行如下命令

source demo-openrc
openstack server start provider-instance
openstack server start selfservice-instance
openstack server start selfservice-instance01
sleep 10
openstack server list

测试区域

配置主机名称

controller节点执行:
hostnamectl set-hostname controller && bash

compute1节点执行:
hostnamectl set-hostname compute1 && bash

compute2节点执行:
hostnamectl set-hostname compute2 && bash

配置hosts文件

cat >>/etc/hosts<<\EOF
192.168.1.216 controller
192.168.1.217 compute1
10.0.0.121 compute2
EOF

验证网络

ping -c 4 controller
ping -c 4 compute1
ping -c 4 compute2

安装阿里云的base源与EPEL源 仓库和常用命令

rm -f /etc/yum.repos.d/*.repo
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
curl -o /etc/yum.repos.d/epel.repo 
yum clean all
yum repolist
cat >>/etc/hosts<<\EOF
192.168.1.216 controller
192.168.1.217 compute1
10.0.0.121 compute2
EOF
ping -c 4 controller
ping -c 4 compute1
ping -c 4 compute2
rm -f /etc/yum.repos.d/*.repo
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
sed -i "/mirrors.aliyuncs.com/d" /etc/yum.repos.d/CentOS-Base.repo
sed -i "/mirrors.cloud.aliyuncs.com/d" /etc/yum.repos.d/CentOS-Base.repo
yum clean all
yum repolist

环境准备

客户端

配置openstack的yum仓库

cat >/etc/yum.repos.d/CentOS-OpenStack-train.repo<<\EOF
[centos-openstack-train]
name=CentOS-7 - OpenStack train
baseurl=https://mirrors.aliyun.com/centos/7/cloud/x86_64/openstack-train/
gpgcheck=0
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-SIG-Cloud
exclude=sip,PyQt4
EOF
yum repolist


cat >/etc/yum.repos.d/CentOS-OpenStack-train.repo<<\EOF
[centos-openstack-train]
name=CentOS-7 - OpenStack train
baseurl=https://mirrors.tuna.tsinghua.edu.cn/centos/7/cloud/x86_64/openstack-train/
gpgcheck=0
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-SIG-Cloud
exclude=sip,PyQt4
EOF
yum repolist

安装适当的 OpenStack 客户端

yum -y install python-openstackclient openstack-selinux

数据库

yum -y install mariadb mariadb-server python2-PyMySQL

配置文件

systemctl enable mariadb.service
systemctl start mariadb.service
systemctl status mariadb.service
mysql_secure_installation

消息队列

yum -y install rabbitmq-server

systemctl enable rabbitmq-server.service
systemctl start rabbitmq-server.service
rabbitmqctl add_user openstack RABBIT_PASS
rabbitmqctl set_permissions openstack ".*" ".*" ".*"

memcached

yum -y install memcached python-memcached

systemctl enable memcached.service
systemctl start memcached.service
systemctl status memcached.service

etcd

yum -y install etcd

\cp /etc/etcd/etcd.conf /etc/etcd/etcd.conf_bak

sed -i "s#10.0.0.121#192.168.1.216#g" /etc/etcd/etcd.conf

systemctl enable etcd
systemctl start etcd
systemctl status etcd
curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo

yum -y install python-pip
mkdir -p ~/.pip/
cat > ~/.pip/pip.conf<<EOF

[global]
index-url = https://mirrors.cloud.tencent.com/pypi/simple
trusted-host = mirrors.cloud.tencent.com
EOF
pip install osc-placement




<Directory /usr/bin>
   <IfVersion >= 2.4>
      Require all granted
   </IfVersion>
   <IfVersion < 2.4>
      Order allow,deny
      Allow from all
   </IfVersion>
</Directory>

systemctl restart httpd
systemctl restart \
    openstack-nova-api.service \
    openstack-nova-scheduler.service \
    openstack-nova-conductor.service \
    openstack-nova-novncproxy.service

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

认证服务

cat /etc/keystone/keystone.conf |grep -Ev "(^#|^$)"

cat /etc/glance/glance-api.conf |grep -Ev "(^#|^$)"

cat /etc/placement/placement.conf |grep -Ev "(^#|^$)"

cat /etc/nova/nova.conf|grep -Ev "(^#|^$)"

cat /etc/neutron/neutron.conf |grep -Ev "(^#|^$)"

cat /etc/neutron/plugins/ml2/ml2_conf.ini|grep -Ev "(^#|^$)"

cat /etc/neutron/plugins/ml2/linuxbridge_agent.ini|grep -Ev "(^#|^$)"

cat /etc/neutron/dhcp_agent.ini|grep -Ev "(^#|^$)"

cat /etc/neutron/metadata_agent.ini|grep -Ev "(^#|^$)"
cat /etc/nova/nova.conf|grep -Ev "(^#|^$)"

cat /etc/neutron/neutron.conf |grep -Ev "(^#|^$)"

cat /etc/neutron/plugins/ml2/linuxbridge_agent.ini|grep -Ev "(^#|^$)"
systemctl restart neutron-server.service \
  neutron-linuxbridge-agent.service neutron-dhcp-agent.service \
  neutron-metadata-agent.service
modprobe br_netfilter
cat > /etc/sysctl.conf <<EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sysctl -p

创建虚拟机

 glance image-create --name "cirros" \
  --file cirros-0.3.5-x86_64-disk.img \
  --disk-format qcow2 --container-format bare \
  --visibility public
 source admin-openrc
openstack network create  --share --external \
  --provider-physical-network provider \
  --provider-network-type flat provider

openstack subnet create --network provider \
  --allocation-pool start=192.168.57.101,end=192.168.57.250 \
  --dns-nameserver 114.114.114.114 --gateway 192.168.57.1 \
  --subnet-range 192.168.57.0/24 provider

source admin-openrc
openstack subnet delete provider
openstack network delete provider



ip addr add 192.168.57.216/24 dev eth1

ip addr add 192.168.57.217/24 dev eth1
ping -c 4 192.168.57.216

ping -c 4 192.168.57.217

ip addr del 192.168.1.216/24 dev eth1
ip addr del 192.168.1.217/24 dev eth1
openstack server create --flavor m1.nano --image cirros \
  --nic net-id=2c3f5b67-947b-4b4b-98b1-cf06f869845b --security-group default \
  --key-name mykey provider-instance


openstack server create --flavor m1.nano --image cirros \
  --nic net-id=667c3eb8-3162-4794-966d-0b9d591df566 --security-group default \
  --key-name mykey selfservice-instance

openstack server create --flavor m1.nano --image cirros \
  --nic net-id=667c3eb8-3162-4794-966d-0b9d591df566 --security-group default \
  --key-name mykey selfservice-instance01


openstack console url show provider-instance

VCenter中嵌套openstack VM不能ping通外部网络问题解决办法

https://blog.csdn.net/jiahaojie1984/article/details/47835787

上传镜像

curl -O http://124.236.120.248:50001//ctyun/images/images-os/base/centos76-220310-0e43.qcow2

source admin-openrc

 glance image-create --name "centos76181020220408" \
  --file centos76181020220408.qcow2 \
  --disk-format qcow2 --container-format bare \
  --property hw_qemu_guest_agent=yes \
  --visibility public \
  --progress


 glance image-create --name "CS76-DOCKER-20220216" \
  --file CS76-DOCKER-20220216.raw \
  --disk-format qcow2 --container-format bare \
  --property hw_qemu_guest_agent=yes \
  --visibility public \
  --progress

openstack flavor create --id 1 --vcpus 2 --ram 2048  --disk 200 2C2G

openstack image list

source demo-openrc 
openstack server create --flavor 2C2G --image centos76-chris \
  --nic net-id=667c3eb8-3162-4794-966d-0b9d591df566 --security-group default \
  --key-name mykey centos76001

openstack server create --flavor 2C2G --image centos76-chris \
  --nic net-id=667c3eb8-3162-4794-966d-0b9d591df566 --security-group default \
  --key-name mykey centos76002

source demo-openrc 
openstack server create --flavor 2C2G --image centos76181020220408 \
  --nic net-id=667c3eb8-3162-4794-966d-0b9d591df566 --security-group default \
  --key-name mykey centos76003

source demo-openrc 
openstack server create --flavor 2C2G --image centos76181020220408 \
  --nic net-id=667c3eb8-3162-4794-966d-0b9d591df566 --security-group default \
  --key-name mykey centos76004

source demo-openrc 
openstack volume create --size 100 centos76005-sda
openstack server create --flavor 2C2G \
  --nic net-id=667c3eb8-3162-4794-966d-0b9d591df566 --security-group default \
  --key-name mykey \
  --block-device id=f93bceca-aded-4fa5-b47c-b5ca6fedefec,source=image,dest=volume,bootindex=0,size=100,shutdown=remove \
  centos76005


openstack server create --flavor 2C2G --image CS76-DOCKER-20220216 \
  --nic net-id=667c3eb8-3162-4794-966d-0b9d591df566 --security-group default \
  --key-name mykey docker01


openstack volume create --size 500 docker03-sdb
openstack server create --flavor 2C2G --image CS76-DOCKER-20220216 \
  --nic net-id=667c3eb8-3162-4794-966d-0b9d591df566 --security-group default \
  --key-name mykey docker03
openstack server add volume docker03 docker03-sdb
openstack server add volume docker03 docker03-sdc


openstack volume create --size 100 centos76006-sda

openstack volume create --image centos76181020220408-raw --size 2 centos76006-raw-sda
openstack server create --flavor 2C2G  \
     --image centos76181020220408  \
     --volume  68774b61-41ca-445f-9aca-999b2d0c02ac  \
     --nic net-id=667c3eb8-3162-4794-966d-0b9d591df566  \
     --key-name mykey \
     --security-group default \
     centos76006


source demo-openrc 
openstack server create --flavor 2C2G --image centos76181020220408-raw \
  --nic net-id=667c3eb8-3162-4794-966d-0b9d591df566 --security-group default \
  --key-name mykey centos76009

openstack console url show centos76001


绑定浮动IP
openstack floating ip create provider
openstack server add floating ip selfservice-instance 203.0.113.104


将qcow2 镜像转换为raw格式(ceph不支持qcow2)

qemu-img convert -f qcow2 -O raw /root/linux-node2.qcow2   /var/lib/glance/images/linux-node2.raw


 glance image-create --name "centos76-raw" \
  --file /var/lib/glance/images/linux-node2.raw \
  --disk-format raw --container-format bare \
  --visibility public \
  --progress

挂载目录

修改挂载的虚拟机磁盘

mkfs.xfs -f /dev/sdb
mount /dev/sdb /mnt/
\cp -arf /var/lib/nova/instances/* /mnt/
umount -lf /mnt/
mount /dev/sdb /var/lib/nova/instances/
chown nova.nova /var/lib/nova/instances
echo "/dev/sdb                                 /var/lib/nova/instances  xfs     defaults        0 0" >>/etc/fstab


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

修改挂载的镜像磁盘

mkfs.xfs -f /dev/sdb
mount /dev/sdb /mnt/
\cp -arf /var/lib/glance/images/* /mnt/
umount -lf /mnt/
 mount /dev/sdb /var/lib/glance/images/

chown glance.glance /var/lib/glance/images
chmod 750 /var/lib/glance/images

echo "/dev/sdb                                 /var/lib/glance/images  xfs     defaults        0 0" >>/etc/fstab

qemu-guest-agent

在OpenStack kilo版本中使用qemu-guest-agent

https://blog.51cto.com/u_15127625/2758221

卷扩容

cinder extend 1347c1a9-484b-43e2-8e02-8519683c2ac0 2

问题汇总

openstack创建实例计算节点报错403

https://blog.csdn.net/hutiewei2008/article/details/87971379

VCenter中嵌套openstack VM不能ping通外部网络问题解决办法

https://blog.csdn.net/jiahaojie1984/article/details/47835787

在OpenStack kilo版本中使用qemu-guest-agent

https://blog.51cto.com/u_15127625/2758221

openstack错误-dashboard-not found

https://www.cnblogs.com/learn2teach/p/12443185.html

openstack开启kvm虚拟机嵌套 https://blog.csdn.net/dylloveyou/article/details/81267690

Openstack的cpu和内存超算比例配置

https://www.csdn.net/tags/NtzacgzsMjc4ODAtYmxvZwO0O0OO0O0O.html

openstack -配额管理

https://blog.csdn.net/weixin_46767505/article/details/111572746

openstack 用cloud-init制作的镜像root无法登陆问题

https://blog.csdn.net/xiangjai/article/details/105787823

OpenStack使用卷启动虚拟机

https://blog.csdn.net/weixin_40548182/article/details/112347395

修改虚拟机镜像大小(qcow2/raw resize)

http://www.vjiot.net/typecho/index.php/archives/111/

openstack------块存储服务cinder,磁盘(卷)扩容,使用 NFS---后端存储

https://blog.csdn.net/weixin_45697293/article/details/115822488

network_name="p5p1"
ip addr add 192.168.1.223/24 dev $network_name
ping -c 4 192.168.1.1
ip addr del 192.168.1.223/24 dev $network_name


network_name="p5p2"
ip addr add 192.168.1.223/24 dev $network_name
ping -c 4 192.168.1.1
ip addr del 192.168.1.223/24 dev $network_name


openstack server create --flavor 2C2G --image centos76-chris \
  --nic net-id=2c3f5b67-947b-4b4b-98b1-cf06f869845b --security-group default \
  --key-name mykey centos76003


nova delete  `nova list|grep ERROR|awk -F '|' '{print $2}'|xargs`