跳转至

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

主机网络

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文件以包含以下内容:

# controller
192.168.1.218       controller

# compute1
192.168.1.219       compute1

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

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

# controller
192.168.1.218       controller

# compute1
192.168.1.219       compute1

验证网络

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需要加载内核模块。有关启用此模块的更多详细信息,请查看您的操作系统文档。

安装部署

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

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

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

安装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.11

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

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

编辑/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

编辑/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.11:2380"
ETCD_LISTEN_CLIENT_URLS="http://10.0.0.11:2379"
ETCD_NAME="controller"
#[Clustering]
ETCD_INITIAL_ADVERTISE_PEER_URLS="http://10.0.0.11:2380"
ETCD_ADVERTISE_CLIENT_URLS="http://10.0.0.11:2379"
ETCD_INITIAL_CLUSTER="controller=http://10.0.0.11: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为合适的密码。

退出数据库访问客户端。

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

yum -y install openstack-keystone httpd mod_wsgi

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

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

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

[token]
provider = fernet

填充身份服务数据库:

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

编辑/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

创建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';

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

source admin-openrc

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

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

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

编辑/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/

填充图像服务数据库:

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 http://download.cirros-cloud.net/0.4.0/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';

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

source admin-openrc

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

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

将 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

编辑/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

填充placement数据库:

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

重启httpd服务:

systemctl restart httpd

验证放置服务的操作。

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

source admin-openrc

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

placement-status upgrade check

安装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';

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

source admin-openrc

创建计算服务凭证:

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

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

编辑/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.11
server_proxyclient_address = 10.0.0.11

在该[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

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

编辑/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.11
novncproxy_base_url = http://controller:6080/vnc_auto.html

服务器组件侦听所有 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

启动 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';

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

source admin-openrc

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

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

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 服务器组件配置包括数据库、身份验证机制、消息队列、拓扑更改通知和插件。

编辑/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

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

  • 编辑/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

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

  • 编辑/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需要加载内核模块。有关启用此模块的更多详细信息,请查看您的操作系统文档。

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

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

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

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

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

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

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

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

编辑/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 通用组件配置包括认证机制、消息队列和插件。

编辑/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 层(桥接和交换)虚拟网络基础架构并处理安全组。

编辑/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需要加载内核模块。有关启用此模块的更多详细信息,请查看您的操作系统文档。

配置计算服务以使用网络服务¶ 编辑/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

配置服务器组件¶ 编辑/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 层(桥接和交换)虚拟网络基础架构。

编辑/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 层(桥接和交换)虚拟网络基础架构并处理安全组。

编辑/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 = OVERLAY_INTERFACE_IP_ADDRESS
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 服务。

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

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

[DEFAULT]
# ...
interface_driver = linuxbridge

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

编辑/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 层(桥接和交换)虚拟网络基础架构并处理安全组。

编辑/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 = OVERLAY_INTERFACE_IP_ADDRESS
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                                                      |
+--------------------------------------------------------------------+

验证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服务是否可用-自服务网络

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

$ 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

最小的默认风格每个实例消耗 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

openstack server create --flavor m1.nano --image cirros \
  --nic net-id=PROVIDER_NET_ID --security-group default \
  --key-name mykey provider-instance

检查您的实例的状态:

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 203.0.113.102

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 命令:

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

列出可用的口味:

 openstack flavor list

列出可用图像:

openstack image list

列出可用网络:

openstack network list

列出可用的安全组:

openstack security group list

启动实例:

替换SELFSERVICE_NET_ID为网络的 ID selfservice

openstack server create --flavor m1.nano --image cirros \
  --nic net-id=SELFSERVICE_NET_ID --security-group default \
  --key-name mykey selfservice-instance

检查您的实例的状态:

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 203.0.113.104

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

openstack server list

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

ping -c 4 203.0.113.104

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

ssh cirros@203.0.113.104

扩展组件

安装dashboard

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

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

安装软件包:

yum -y install openstack-dashboard

编辑 /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,
}

(可选)配置时区:

TIME_ZONE = "TIME_ZONE"

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

WSGIApplicationGroup %{GLOBAL}

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

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

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

source admin-openrc

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

创建cinder用户:

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

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

安装软件包:

yum -y install openstack-cinder-api openstack-cinder-scheduler

编辑/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

编辑/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

创建 LVM 卷组cinder-volumes

vgcreate cinder-volumes /dev/sdb

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

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

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

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

安装软件包:

yum install openstack-cinder targetcli python-keystone

编辑/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

测试区域

配置主机名称

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
192.168.1.218 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
192.168.1.218 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.11#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`