基础-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 |
主机网络¶
示例架构假定使用以下网络:
- 使用网关 10.0.0.1 管理 10.0.0.0/24
该网络需要一个网关来提供对所有节点的 Internet 访问,以用于管理目的,例如软件包安装、安全更新、DNS和 NTP。
- 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 支持多种消息队列服务,包括RabbitMQ、 Qpid和ZeroMQ。但是,大多数打包 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 端点。
- 要创建数据库,请完成以下步骤:
- 使用数据库访问客户端以
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-api
WSGI 脚本,用于使用 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 端点。
- 要创建数据库,请完成以下步骤:
- 使用数据库访问客户端以
root
用户身份连接数据库服务器:
mysql -u root
创建nova_api
、nova
和nova_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 地址范围。
- 在控制器节点上,
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
要启动实例,您必须至少指定风味、映像名称、网络、安全组、密钥和实例名称。
- 在控制器节点上,
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
创建cinderv2
和cinderv3
服务实体:
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`