目录
1.停用 NetworkManager 并启用 network 服务:
A.1 综合环境准备
A.1.1 确定云部署目标
本次综合实训旨在通过手动安装方式,在 CentOS 7 操作系统上搭建一个由两个节点组成的实验性质的 OpenStack 云平台,采用的是 OpenStack Train 版本。在这个双节点平台上,我们将部署以下7个核心服务:
- Keystone (身份认证服务)
- Glance (镜像服务)
- Placement (资源放置服务;从Stein版本开始独立)
- Nova (计算服务)
- Neutron (网络服务)
- Horizon (Web控制面板)
- Cinder (块存储服务)
按照服务间的依赖关系,安装时应遵循以上列出的顺序。
A.1.2 设计云部署架构
依据实训目标,将在两个节点上分配角色,其中一个节点作为控制节点,运行除计算服务外的所有核心服务;另一个节点作为计算节点,运行Nova服务,并结合Open vSwitch代理实现L2自服务网络方案,如图A-1所示。
A.2 配置 OpenStack 云平台环境
A.2.1 准备两个节点主机
本次实训中,我们需要准备两台分别作为控制节点和计算节点的 CentOS 7 主机。为了简化实验,可以通过VMware Workstation创建两台虚拟机,推荐安装带有图形界面的CentOS 7操作系统。控制节点配置为:4GB内存,双核CPU,60GB硬盘,网卡采用桥接模式连接宿主机网络以接入Internet。计算节点配置为:8GB内存,双核CPU,两个硬盘分别具有200GB和100GB容量,同样以桥接模式接入宿主机网络。
环境初始化:
- 关闭防火墙:
1,sudo systemctl disable firewalld
2,sudo systemctl stop firewalld
- 设置时区为中国上海:
1,timedatectl set-timezone "Asia/Shanghai"
A.2.2 配置节点主机网络
针对每个节点主机,配置两个网卡。第一个网卡设为仅主机模式(管理网络),第二个网卡设为桥接模式(接入Internet)。参考网络拓扑如图A-2所示。
网络配置步骤:
1.停用 NetworkManager 并启用 network 服务:
systemctl disable NetworkManager
systemctl stop NetworkManager
systemctl enable network
systemctl start network
2.配置网卡
控制节点:假设第一个网卡名为 ens33,配置管理网络
echo "IPADDR=10.0.0.11" >> /etc/sysconfig/network-scripts/ifcfg-ens33
echo "PREFIX=24" >> /etc/sysconfig/network-scripts/ifcfg-ens33
# 不设置 GATEWAY 和 DNS
第二个网卡 ens37,配置接入Internet:
echo "IPADDR=192.168.199.51" >> /etc/sysconfig/network-scripts/ifcfg-ens37
echo "PREFIX=24" >> /etc/sysconfig/network-scripts/ifcfg-ens37
echo "GATEWAY=192.168.199.1" >> /etc/sysconfig/network-scripts/ifcfg-ens37
echo "DNS1=114.114.114.114" >> /etc/sysconfig/network-scripts/ifcfg-ens37
配置完成后,重启网络服务以使更改生效:
systemctl restart network
计算节点:按照相似的方式配置网卡,只是管理网络的IP地址为10.0.0.21,接入Internet的IP地址为192.168.199.52。这里就教给同学们自己动手。
更改并同步主机名:
将控制节点主机名更改为 controller:
hostnamectl set-hostname controller
将计算节点主机名更改为 compute1。
接着,在两个节点的 /etc/hosts 文件中添加对方的主机名和IP地址记录:
# /etc/hosts 示例
10.0.0.11 controller
10.0.0.21 compute1
3.测试连通性:
从控制节点测试到计算节点的连通性:
[root@controller ~]# ping -c 2 compute1
从控制节点测试到Internet的连通性:
[root@controller ~]# ping -c 2 www.163.com
从计算节点分别测试到控制节点和Internet的连通性。
A.2.3 设置时间同步
在OpenStack环境中,确保所有节点的时间同步至关重要,以免因时间差异导致各种问题。在CentOS 7操作系统中,推荐使用Chrony作为时间同步服务,若尚未安装,可以通过以下命令进行安装:
yum install chrony
假设系统中已经预装了Chrony,接下来需要配置Chrony以同步到特定的NTP服务器。在此案例中,我们将使用IP地址为192.168.199.201的物理主机作为NTP服务器。为此,打开Chrony的配置文件:
vi /etc/chrony.conf
在文件中加入以下配置行,指示Chrony使用该NTP服务器进行时间同步,并使用iburst模式提高初次同步的速度和准确性:
server 192.168.199.201 iburst
保存并退出编辑器后,重启Chrony服务以应用新的配置:
systemctl restart chronyd.service
这样,控制节点和计算节点都将通过Chrony服务与指定的NTP服务器进行时间同步,确保整个OpenStack环境中的时间一致性。此外,还需确认其他节点也按照类似方式进行配置和同步。
A.2.4 安装 OpenStack 软件包
在双节点环境中,无论是控制节点还是计算节点,都需要按照以下步骤安装必要的OpenStack软件包:
启用OpenStack软件库 为了安装OpenStack Train版本,首先需要在每个节点上启用对应的软件源:
yum install -y centos-release-openstack-train
升级系统软件包 确保系统软件包是最新的,执行全局升级:
yum -y upgrade
安装OpenStack客户端 安装Python OpenStack客户端,以便在命令行中管理和操作OpenStack服务:
yum -y install python-openstackclient
安装SELinux策略 由于CentOS系统默认启用了SELinux,为了更好地配合OpenStack服务的安全策略,需要安装openstack-selinux软件包:
yum -y install openstack-selinux
验证安装 完成上述安装步骤后,可以在控制节点上运行以下命令来验证openstack-clients包是否成功安装,并查看其版本号:
[root@controller ~]# openstack --version
如果输出类似于openstack 4.0.1这样的版本信息,则说明OpenStack客户端已成功安装。
请注意,此处仅安装了OpenStack客户端及相关SELinux策略,接下来还需要在控制节点上安装和配置诸如数据库、消息队列、身份认证服务等核心服务,而在计算节点上则主要安装和配置计算服务等相关组件。这些服务的安装和配置通常涉及更多具体的步骤和交互式配置过程。
A.2.5 安装SQL数据库
在OpenStack环境中,大部分服务依赖于SQL数据库来存储数据。本教程中,将在控制节点上安装MariaDB数据库,并对其进行初始化配置。
安装MariaDB数据库及其Python适配器 在控制节点上执行以下命令安装MariaDB数据库及其Python适配器:
[root@controller ~]# yum -y install mariadb mariadb-server python2-PyMySQL
配置数据库 编辑 /etc/my.cnf.d/openstack.cnf
配置文件,在 [mysqld]
部分添加以下配置项,确保数据库可以被其他节点通过管理网络访问:
[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
其中,bind-address
设置为控制节点的管理IP地址(本例中为10.0.0.11)
启动MariaDB服务并设置开机启动 运行以下命令将MariaDB设置为开机自动启动,并启动数据库服务:
systemctl enable mariadb.service
systemctl start mariadb.service
加强数据库安全性 运行 mysql_secure_installation
脚本来增强数据库的安全性:
[root@controller ~]# mysql_secure_installation
# 按提示操作
Enter current password for root (enter for none): # 默认root密码为空,初次运行直接回车
Set root password? [Y/n] y # 是否设置root用户密码,输入y并回车设置
New password: # 输入要设置的root用户密码
Re-enter new password: # 再次输入相同的密码以确认
...
Remove anonymous users? [Y/n] y # 是否移除匿名用户,直接回车以移除
...
Disallow root login remotely? [Y/n] y # 是否禁止root远程登录,直接回车以禁止
...
Remove test database and access to it? [Y/n] y # 是否移除test数据库,直接回车以移除
...
Reload privilege tables now? [Y/n] y # 是否立即重新加载权限表,直接回车以应用更改
完成上述步骤后,MariaDB数据库已经被正确安装并进行了安全加固,为OpenStack服务提供稳定可靠的数据库支持。
A.2.6 安装消息队列服务
在OpenStack环境中,消息队列服务是必不可少的一部分,它通常部署在控制节点上。本节中,我们将采用广泛支持的RabbitMQ作为消息队列服务,并在控制节点上执行以下操作:
安装RabbitMQ服务 在控制节点上运行以下命令安装RabbitMQ服务器软件包:
yum -y install rabbitmq-server
设置RabbitMQ服务为开机自动启动并启动服务 执行以下命令确保RabbitMQ服务能够在系统启动时自动启动,并启动该服务:
systemctl enable rabbitmq-server.service
systemctl start rabbitmq-server.service
创建并配置RabbitMQ用户 为OpenStack服务创建一个专用用户,并设置密码。这里将用户名设为openstack,密码设置为RABBIT_PASS(请在实际操作中替换为强密码):
[root@controller ~]# rabbitmqctl add_user openstack RABBIT_PASS
Creating user "openstack"
赋予openstack用户访问权限 接下来,给openstack用户授予在默认虚拟主机("/")下的全部读写权限:
[root@controller ~]# rabbitmqctl set_permissions openstack ".*" ".*" ".*"
Setting permissions for user "openstack" in vhost "/"
通过以上步骤,已经在控制节点上成功安装并配置了RabbitMQ消息队列服务,为OpenStack服务提供了消息传递能力。接下来可以继续安装和配置OpenStack的其他核心服务。
A.2.7 安装 Memcached 服务
在OpenStack环境中,Memcached服务常用于缓存令牌以提高身份验证性能,通常部署在控制节点上。以下是安装和配置Memcached服务的步骤: 安装Memcached及Python适配器 在控制节点上运行以下命令安装Memcached服务及其Python适配器:
yum -y install memcached python-memcached
编辑配置文件vim /etc/sysconfig/memcached 配置文件,修改 OPTIONS 行以指定Memcached监听的IP地址,使其不仅监听本地回环地址,还监听控制节点的管理IP地址。例如,如果控制节点的管理IP地址是 10.0.0.11,那么应该修改为:
OPTIONS="-l 127.0.0.1,::1,10.0.0.11"
注意:在真实场景中,你需要将 10.0.0.11 替换成实际的控制节点管理IP地址。
注意,上述示例中 -l 参数后面跟着的是允许Memcached监听的IP地址列表,用逗号隔开。这样其他节点就可以通过管理网络访问Memcached服务。
设置Memcached服务开机自动启动并启动服务 执行以下命令将Memcached服务设置为开机自动启动,并立即启动该服务:
systemctl enable memcached.service
systemctl start memcached.service
经过以上步骤,Memcached服务已在控制节点上成功安装并配置完毕,能够为OpenStack服务提供缓存支持。接下来,可以继续进行其他服务的安装与配置。
A.2.8 安装Etcd服务
虽然Etcd在某些OpenStack部署中可能作为服务发现、共享配置和分布式锁服务的角色存在,但在标准OpenStack安装流程中并不总是必需的组件。然而,如果您决定使用Etcd来增强OpenStack环境的可靠性与分布式协调能力,可以按照以下步骤在控制节点上安装和配置Etcd服务:
安装Etcd软件包 在控制节点上运行以下命令安装Etcd服务:
yum -y install etcd
配置Etcd服务 编辑 /etc/etcd/etcd.conf
配置文件,确保Etcd服务监听正确的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"
[cluster]
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"
在这里,将 10.0.0.11 替换为控制节点的实际管理IP地址,确保其他节点可通过管理网络访问Etcd服务。
设置Etcd服务自动启动并启动服务 为了让Etcd在系统启动时自动启动,并立即启动该服务,执行以下命令:
systemctl enable etcd
systemctl start etcd
请注意,如果Etcd作为OpenStack环境的一部分使用,可能还需要进一步集成到OpenStack服务的相关配置中,确保各服务能够正常地利用Etcd的功能。在大规模多节点部署中,您可能还需要配置其他Etcd节点以构建集群。
A.3 安装和部署 Keystone身份管理服务
A.3.1 创建 Keystone 数据库
为了安装Keystone服务,首先需要在数据库服务器上创建一个专用的Keystone数据库,并赋予适当的访问权限。
使用数据库客户端以root用户身份登录到数据库服务器,并输入root用户的密码。mysql -u root -p
创建名为keystone的数据库:
MariaDB [(none)]> CREATE DATABASE keystone;
授予keystone账户对本地及任意来源访问keystone数据库的全部权限,并设置密码为KEYSTONE_DBPASS:
MariaDB [(none)]> GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'localhost' IDENTIFIED BY 'KEYSTONE_DBPASS';
MariaDB [(none)]> GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'%' IDENTIFIED BY 'KEYSTONE_DBPASS';
退出数据库客户端。
A.3.2 安装和配置 Keystone 及相关组件
安装Keystone、Apache HTTP服务器以及mod_wsgi模块:
yum -y install openstack-keystone httpd mod_wsgi
配置Keystone服务的/etc/keystone/keystone.conf文件:设置数据库连接信息:
[database]
connection = mysql+pymysql://keystone:KEYSTONE_DBPASS@controller/keystone
在[token]节启用Fernet令牌提供者:
[token]
provider = fernet
初始化Keystone数据库结构:
su -s /bin/sh -c "keystone-manage db_sync" keystone
初始化Fernet密钥库和凭据库:
keystone-manage fernet_setup --keystone-user keystone --keystone-group keystone
keystone-manage credential_setup --keystone-user keystone --keystone-group keystone
执行Keystone服务的基本初始化操作,设置管理员密码和API端点:
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
A.3.3 配置Apache HTTP服务器
修改/etc/httpd/conf/httpd.conf,设置ServerName指向控制节点IP或域名:
ServerName controller
为Apache配置Keystone的WSGI接口,创建符号链接或复制配置文件:
ln -s /usr/share/keystone/wsgi-keystone.conf /etc/httpd/conf.d/
A.3.4 完成 Keystone 安装
启动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
验证Keystone安装:
使用curl命令访问Keystone API以确认服务是否可用。
[root@controller ~]# curl http:// controller:5000/v3
{"version": {"status": "stable", "updated": "2019-07- 19T00:00:00Z", "media-types": [{"base": "application/json", "type": "application/vnd.openstack.identity-v3+json"}], "id":
"v3.13", "links": [{"href": "http:// 192.168.199.51:5000/v3/", "rel": "self"}]}}
使用openstack service list命令检查服务列表。
openstack service list
A.3.5 创建域、项目、用户和角色
在OpenStack环境中,Keystone服务负责提供认证和授权功能,而这依赖于正确配置的域、项目、用户和角色。
创建域 在初始Keystone安装时,系统会自动创建一个默认域。通过运行openstack domain list
命令可以查看已存在的域信息。默认域ID通常为"default",名称为"Default"。若有必要,可以根据组织架构或其他要求创建额外的域。
创建项目 使用openstack project list
命令可以查看现有的项目。默认情况下,Keystone会创建一个名为“admin”的项目,供管理员使用。为了支持其他OpenStack服务通过Keystone进行集中统一认证,通常需要为每个服务创建一个服务项目。在这个案例中,综合实训云环境创建一个名为“service”的项目,用以包含所有服务对应的唯一用户。创建命令如下所示:
openstack project create --domain default --description "Service Project" service
创建用户 使用openstack user list
命令列出已存在的用户。在实际操作中,除了管理员账户外,通常还需要创建用于日常操作和测试的非特权项目和用户。例如,在本实训场景中,创建一个名为“demo”的项目和相应的“demo”用户,用于演示和测试目的。创建“demo”项目:
openstack project create --domain default --description "Service Project" service
接着创建“demo”用户并设置密码为(DEMO_PASS)。在命令行中执行:
[root@controller ~]# openstack user create --domain default --password-prompt demo
这里会提示输入密码和再次确认密码。
创建角色 Keystone默认提供了三个预定义的角色:admin、member和reader。可以通过openstack role list命令查看现有角色列表。为了满足实训需求或者更细致的权限划分,可以创建自定义角色。这里创建一个名为“demo”的新角色:
openstack role create demo
管理员可以将不同角色分配给具体的项目、域或全局范围内的用户及用户组。在这个实训场景中,为了给“demo”项目中的“demo”用户赋予一定的权限,我们将“member”角色分配给该用户:
openstack role add --project demo --user demo member
通过以上步骤,完成了在Keystone中创建自定义域、项目、用户以及角色分配的基本流程,确保了OpenStack环境中的用户管理和权限控制得以实现。
A.3.6 验证 Keystone 服务的安装
在安装其他服务之前,在控制节点上验证 Keystone 身份管理服务的操作。
(1)如果当前已经设置了 admin 用户的环境变量, 则执行以下命令取消临时设置的 OS_AUTH_URL 和 OS_PASSWORD 环境变量。
unset OS_AUTH_URLOS_PASSWORD
执行命令以 admin 用户身份请求认证令牌,这里 admin 的密码是ADMIN_PASS。有回显即可。
[root@controller~]# openstack --os-auth-url http://controller:5000/v3 --os-project-domain-name Default --os-user-domain-name Default --os-project-name admin --os-username admin token issue
A.3.7 创建 OpenStack 客户端环境脚本
在控制节点上,进入root用户的主目录,并分别创建两个环境脚本文件,一个是针对admin管理员用户,另一个是针对demo普通用户。
对于admin用户,创建文件/root/admin-openrc
,并插入以下内容:
#!/bin/bash
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
对于demo用户,创建文件/root/demo-openrc
,并填入以下内容:
#!/bin/bash
export OS_PROJECT_DOMAIN_NAME=Default
export OS_USER_DOMAIN_NAME=Default
export OS_PROJECT_NAME=demo
export OS_USERNAME=demo
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
在需要以特定项目和用户身份执行OpenStack客户端命令时,只需提前执行对应的环境脚本文件,以加载所需的身份凭据。具体操作如下:
# 加载admin用户的环境变量
source /root/admin-openrc
# 现在可以以admin用户身份执行OpenStack命令
openstack server list
# 若要切换到demo用户执行命令,先清除当前环境变量,然后加载demo-openrc脚本
unset OS_*
source /root/demo-openrc
# 现在可以以demo用户身份执行OpenStack命令
openstack server list
这样,通过简单的脚本加载,您可以便捷且准确地在不同用户身份间切换,执行相应的OpenStack命令操作。
A.4.1 安装和部署Glance镜像服务
1.在控制节点上部署Glance镜像服务之前,需要先完成一些安装准备,主要包括创建数据库、服务凭据和API端点。
创建Glance数据库
(1)以root用户身份通过数据库访问客户端连接至数据库服务器:
mysql -u root -p
(2)在MySQL客户端中创建名为glance的数据库:
MariaDB [(none)]> CREATE DATABASE glance;
(3)为glance数据库用户赋予对glance数据库的全部权限,这里的glance账户密码设为GLANCE_DBPASS:
MariaDB [(none)]> GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'localhost' IDENTIFIED BY 'GLANCE_DBPASS';
MariaDB [(none)]> GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'%' IDENTIFIED BY 'GLANCE_DBPASS';
(4)最后,退出MySQL客户端:
MariaDB [(none)]> exit
Bye
为了确保Glance镜像服务的正确安装和配置,以下是详细的步骤说明:
2. 获取管理员凭据 在继续进行服务凭据创建和API端点配置前,首先需要加载管理员的环境变量脚本,以便以管理员身份执行命令:
. admin-openrc
3. 创建Glance服务凭据 (1)创建名为glance的用户,并提示输入密码(此处设为GLANCE_PASS):
openstack user create --domain default --password-prompt glance
(2)将admin角色分配给glance用户和服务项目:
openstack role add --project service --user glance admin
(3)在服务目录中创建Glance服务实体:
openstack service create --name glance --description "OpenStack Image Service" image
4. 创建镜像服务的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
A.4.2 安装和配置Glance组件
(1)安装Glance软件包:
yum -y install openstack-glance
(2)编辑/etc/glance/glance-api.conf配置文件:
设置数据库连接:
[database]
connection = mysql+pymysql://glance:GLANCE_DBPASS@controller/glance
配置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 = glance
password = GLANCE_PASS
[paste_deploy]
flavor = keystone
配置镜像存储:
[glance_store]
stores = file,http
default_store = file
filesystem_store_datadir = /var/lib/glance/images/
(3)初始化镜像服务数据库:
su -s /bin/sh -c "glance-manage db_sync" glance
A.4.3 完成Glance服务安装
启用并启动Glance服务:
systemctl enable openstack-glance-api.service
systemctl start openstack-glance-api.service
A.4.4 验证Glance镜像操作
(1)下载CirrOS镜像源文件:
wget http://download.cirros-cloud.net/0.4.0/cirros-0.4.0-x86_64-disk.img
(2)再次加载admin用户环境变量脚本:
. admin-openrc
(3)将镜像上传到Glance服务并设置为公共可见:
openstack image create "cirros" --file cirros-0.4.0-x86_64-disk.img --disk-format qcow2 --container-format bare --public
(4)列出已上传的镜像以确认操作成功:
openstack image list
A.5.1 完成Placement服务安装的前期准备
1.创建Placement数据库:
通过MySQL客户端以root用户身份登录数据库服务器:
mysql -u root -p
在数据库中创建名为“placement”的数据库:
MariaDB [(none)]> CREATE DATABASE placement;
授予placement用户对数据库的访问权限:
MariaDB [(none)]> GRANT ALL PRIVILEGES ON placement.* TO 'placement'@'localhost' IDENTIFIED BY 'PLACEMENT_DBPASS';
MariaDB [(none)]> GRANT ALL PRIVILEGES ON placement.* TO 'placement'@'%' IDENTIFIED BY 'PLACEMENT_DBPASS';
退出数据库访问客户端:
exit
2.创建用户和端点:
加载管理员环境变量脚本以获取管理员权限:
. admin-openrc
创建名为placement的用户,并提示输入密码(此处设为PLACEMENT_PASS):
openstack user create --domain default --password-prompt placement
将admin角色授予placement用户和服务项目:
openstack role add --project service --user placement admin
在服务目录中创建Placement服务实体:
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
请注意,在实际部署环境中,端口号可能不同于8778(例如可能是8780或其他指定的端口),并且主机名也需要与实际控制器节点的地址相符。务必检查您的部署环境文档以获取准确的端口和主机信息。接下来,您将继续安装和配置Placement服务的相关软件包和配置文件。
A.5.2 安装和配置Placement服务组件
安装软件包 在控制节点上安装Placement API服务的软件包:
yum -y install openstack-placement-api
编辑配置文件 编辑/etc/placement/placement.conf文件,完成以下配置:
在[placement_database]节中配置数据库连接:
[placement_database]
connection = mysql+pymysql://placement:PLACEMENT_DBPASS@controller/placement
在[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数据库:
su -s /bin/sh -c "placement-manage db sync" placement
A.5.3 完成放置服务安装并进行验证
重启HTTP服务 重启Apache HTTPD服务以应用配置更改:
systemctl restart httpd
执行状态检查 加载admin用户的环境变量以获取管理员权限,然后运行placement-status upgrade check
命令验证服务配置是否正确:
[root@controller ~]# . admin-openrc
[root@controller ~]# placement-status upgrade check
+----------------------------------+
| Upgrade Check Results |
+----------------------------------+
| Check: Missing Root Provider IDs |
| Result: Success |
| Details: None |
+----------------------------------+
| Check: Incomplete Consumers |
| Result: Success |
| Details: None |
A.6 安装和部署 Nova
Nova 由多个组件和服务组成,可以部署在计算节点和控制节点这两类节点上。 Nova 部署必须初始化 Cell 架构。控制节点如果不同时作为计算节点,无须安装 nova-compute, 但要安装其他 Nova 组件和服务。计算服务支持多种虚拟机管理器来部署实例或虚拟机, 综合实训中在计算节点上使用带 KVM 扩展的 QEMU 来支持虚拟机的硬件加速。
A.6.1 在控制节点上完成Nova的安装准备
1. 创建数据库
登录数据库服务器并以root用户身份执行SQL命令:
mysql -u root -p
创建名为nova_api、nova和nova_cell0的三个数据库:
MariaDB [(none)]> CREATE DATABASE nova_api;
MariaDB [(none)]> CREATE DATABASE nova;
MariaDB [(none)]> CREATE DATABASE nova_cell0;
授予nova用户对这三个数据库的所有权限,密码设为NOVA_DBPASS:
MariaDB [(none)]> GRANT ALL PRIVILEGES ON nova_api.* TO 'nova'@'localhost' IDENTIFIED BY 'NOVA_DBPASS';
MariaDB [(none)]> GRANT ALL PRIVILEGES ON nova_api.* TO 'nova'@'%' IDENTIFIED BY 'NOVA_DBPASS';
MariaDB [(none)]> GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'localhost' IDENTIFIED BY 'NOVA_DBPASS';
MariaDB [(none)]> GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'%' IDENTIFIED BY 'NOVA_DBPASS';
MariaDB [(none)]> GRANT ALL PRIVILEGES ON nova_cell0.* TO 'nova'@'localhost' IDENTIFIED BY 'NOVA_DBPASS';
MariaDB [(none)]> GRANT ALL PRIVILEGES ON nova_cell0.* TO 'nova'@'%' IDENTIFIED BY 'NOVA_DBPASS';
退出数据库访问客户端:
exit
获取管理员凭据
加载admin用户的环境变量脚本,以便以管理员权限执行后续命令:
. admin-openrc
创建计算服务凭据
创建名为nova的用户,并设置其密码为NOVA_PASS:
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
A.6.2 在控制节点上安装和配置Nova组件
安装软件包 在控制节点上安装必要的Nova组件:
yum -y install openstack-nova-api openstack-nova-conductor openstack-nova-novncproxy openstack-nova-scheduler
编辑配置文件 /etc/nova/nova.conf
vim etc/nova/nova.conf
在 [DEFAULT] 节中只启用compute和metadata 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] 节中配置控制节点的管理网络接口IP地址:
[DEFAULT]
my_ip=10.0.0.11
启用对网络服务的支持,并配置计算服务的防火墙驱动:
[DEFAULT]
use_neutron=true
firewall_driver=nova.virt.firewall.NoopFirewallDriver
在 [vnc] 节中配置VNC代理监听地址:
[vnc]
enabled=true
server_listen=$my_ip
server_proxyclient_address=$my_ip
在 [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
初始化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
初始化nova数据库
su -s /bin/sh -c "nova-manage db sync" nova
完成以上步骤后,控制节点上的Nova服务组件已基本安装和配置完毕,但仍需进一步配置网络服务相关的选项,并确保其他服务(如Neutron)已正确安装和配置,以实现各组件之间的协同工作。
A.6.3 在控制节点上完成 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
A.6.4 在计算节点上安装和配置Nova组件
安装软件
yum install openstack-nova-compute
编辑配置文件 /etc/nova/nova.conf
在 [DEFAULT] 节中启用compute和metadata API:
[DEFAULT]
enabled_apis=osapi_compute,metadata
配置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] 节中配置计算节点的管理网络接口IP地址:
[DEFAULT]
my_ip=10.0.0.21
启用对网络服务的支持并配置计算服务防火墙驱动:
[DEFAULT]
use_neutron=true
firewall_driver=nova.virt.firewall.NoopFirewallDriver
在 [vnc] 节中启用并配置远程控制台访问:
[vnc]
enabled=true
server_listen=0.0.0.0
server_proxyclient_address=$my_ip
novncproxy_base_url=http://controller:6080/vnc_auto.html
在 [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
A.6.5 在计算节点上完成Nova安装
检查硬件加速支持情况:
[root@compute1 ~]# egrep -c '(vmx|svm)' /proc/cpuinfo
如果结果大于等于1,说明支持硬件加速,无需额外配置;否则应配置libvirt使用QEMU而非KVM:
[libvirt]
virt_type = qemu
启动计算服务及其依赖服务,并设置开机自动启动:
systemctl enable libvirtd.service openstack-nova-compute.service
systemctl start libvirtd.service openstack-nova-compute.service
如果nova-compute服务启动失败,查看日志文件/var/log/nova/nova-compute.log排查问题。遇到类似“AMQP server on controller:5672 is unreachable likely”错误时,需要检查控制节点的防火墙设置,确保5672端口对计算节点开放。
A.6.6 将计算节点添加到cell数据库
当一个新的计算节点加入到OpenStack环境中时,需要在控制节点上通过命令行工具将其注册到cell数据库中。具体步骤如下:
首先,切换至控制节点并加载admin用户的环境变量脚本来获取管理员权限:
[root@controller ~]# . admin-openrc
查看当前已注册的计算节点主机:
[root@controller ~]# openstack compute service list --service nova-compute
这一步是为了确认计算节点已经被识别为服务的一部分,如示例所示,有一个计算节点主机compute1已经在服务列表中。
注册新发现的计算节点到cell数据库:
[root@controller ~]# su -s /bin/sh -c "nova-manage cell_v2 discover_hosts --verbose" nova
此命令会自动检测未注册的计算节点,并将其添加到cell数据库中。
A.6.7 验证Nova计算服务的安装
在完成了计算节点的注册之后,可以通过以下步骤验证Nova计算服务是否成功安装和启动:
再次加载admin用户的环境变量脚本:
[root@controller ~]# . admin-openrc
列出所有计算服务组件的状态,以确认它们是否已成功启动并注册:
[root@controller ~]# openstack compute service list
示例输出显示了包括conductor、scheduler和compute在内的各个服务组件都在运行且状态为"up"。
查询hypervisor列表,确认计算节点compute1的虚拟机管理器类型是否正确显示为QEMU:
[root@controller ~]# openstack hypervisor list
如果输出表明compute1节点的Hypervisor类型是QEMU,并且状态为"up",则意味着Nova计算服务在计算节点上的安装和配置是成功的。
A.7 安装部署 Neutron
这里部署的是自服务网络,Neutron 的的 L2 代理选择是 OVS(Open vSwitch)代理, 由 OVS 交换机作为网络提供者。如果规模不大,无须部署专用的网络节点,只需在控制节 点和计算节点上部署所需的 Neutron 服务组件即可。这里控制节点兼作网络节点。控制节 点和计算节点都要安装 Neutron 的 OVS 代理组件。
A.7.1 控制节点上的网络服务安装准备
创建Neutron数据库
mysql -u root -p
MariaDB [(none)]> CREATE DATABASE neutron;
MariaDB [(none)]> GRANT ALL PRIVILEGES ON neutron.* TO 'neutron'@'localhost' IDENTIFIED BY 'NEUTRON_DBPASS';
MariaDB [(none)]> GRANT ALL PRIVILEGES ON neutron.* TO 'neutron'@'%' IDENTIFIED BY 'NEUTRON_DBPASS';
exit
加载admin用户环境变量
. admin-openrc
创建Neutron服务凭据
openstack user create --domain default --password-prompt neutron
openstack role add --project service --user neutron admin
openstack service create --name neutron --description "OpenStack Networking" network
创建Neutron服务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
A.7.2 在控制节点上配置网络选项
安装Neutron所需的网络组件: 使用yum命令一次性安装Neutron核心服务、ML2插件、Open vSwitch代理服务以及其他相关工具,如ebtables。
# yum -y install openstack-neutron openstack-neutron-ml2 openstack-neutron-openvswitch ebtables
检验Open vSwitch服务状态: 在CentOS 7系统中,Open vSwitch服务通常预装并已启动。运行以下命令以确认服务状态:
[root@controller ~]# systemctl status openvswitch
配置Neutron服务器组件(编辑/etc/neutron/neutron.conf文件):
数据库访问:在[database]节中配置Neutron连接数据库的信息,确保只保留有效的数据库连接配置。
[database]
connection = mysql+pymysql://neutron:NEUTRON_DBPASS@controller/neutron
启用ML2插件与相关服务:在[DEFAULT]节中启用ML2插件作为核心插件,并启用路由服务和IP地址重叠功能。
[DEFAULT]
core_plugin = ml2
service_plugins = router
allow_overlapping_ips = true
RabbitMQ消息队列访问:同样在[DEFAULT]节中设置RabbitMQ的消息队列访问地址。
[DEFAULT]
transport_url = rabbit://openstack:RABBIT_PASS@controller
Keystone身份认证服务配置:在[DEFAULT]和[keystone_authtoken]节中配置Keystone身份验证服务访问参数。
[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
与Nova计算服务的通知:在[DEFAULT]和[nova]节中设置网络拓扑变动时通知Nova服务的相关参数。
[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插件(编辑/etc/neutron/plugins/ml2/ml2_conf.文件):
启用网络类型:在[ml2]节中启用flat、VLAN和VXLAN网络类型。
[ml2]
type_drivers = flat,vlan,vxlan
启用VXLAN自服务网络:设置VXLAN作为租户网络类型。
[ml2]
tenant_network_types = vxlan
启用OVS代理与L2 Population:同样在[ml2]节中启用Open vSwitch代理和L2 Population机制。
[ml2]
mechanism_drivers = openvswitch,l2population
启用端口安全扩展驱动:在[ml2]节中启用端口安全扩展驱动。
[ml2]
extension_drivers = port_security
配置Flat网络:在[ml2_type_flat]节中,列出可用于创建Flat类型提供者网络的物理网络名称。默认使用通配符"*"允许任何物理网络名称。
[ml2_type_flat]
flat_networks = *
配置VXLAN网络ID范围:在[ml2_type_vxlan]节中,为自服务网络配置VXLAN网络ID范围。
[ml2_type_vxlan]
vni_ranges = 10:1000
安全组效率优化:在[securitygroup]节中启用ipset,以提高安全组规则执行效率。
[securitygroup]
enable_ipset = true
配置 OVS 代理
(1) 创建 OVS 提供者网桥
首先,我们需要创建一个OVS提供者网桥(外部网桥),并将提供者网络的网卡添加到该网桥的一个端口上。尽管可以通过命令(如ovs-vsctl add-br和ovs-vsctl add-port)实现,但这种方式在重启后会丢失配置。因此,我们建议使用网卡配置文件来实现。
步骤如下:
将OVS外部网桥命名为br-ex。
修改提供者网络的网卡(例如ens37)的配置文件/etc/sysconfig/network-scripts/ifcfg-ens37,内容如下:
NAME=ens37
DEVICE=ens37
TYPE=OVSPort
DEVICETYPE=ovs
OVS_BRIDGE=br-ex
ONBOOT=yes
创建一个新的网卡配置文件/etc/sysconfig/network-scripts/ifcfg-br-ex用于OVS外部网桥,内容如下:
NAME=br-ex
DEVICE=br-ex
DEVICETYPE=ovs
TYPE=OVSBridge
BOOTPROTO=static
IPADDR=192.168.199.51
PREFIX=24
GATEWAY=192.168.199.1
DNS1=114.114.114.114
ONBOOT=yes
重启network服务使上述修改生效,并验证网桥的设置。
(2) 配置 OVS 代理
接下来,我们需要配置OVS代理。这主要通过编辑/etc/neutron/plugins/ml2/openvswitch_agent.ini文件来实现。关键配置如下:
[ovs]
bridge_mappings = extnet:br-ex
local_ip = 10.0.0.11
[agent]
tunnel_types = vxlan
l2_population = True
[securitygroup]
firewall_driver = iptables_hybrid
其中,bridge_mappings定义物理网络到OVS网桥的映射;local_ip定义本地覆盖网络端点的IP地址;tunnel_types指定隧道类型;firewall_driver用于安全组防火墙。
6. 配置 L3 代理
L3代理为虚拟网络提供路由和NAT服务。编辑/etc/neutron/l3_agent.ini文件,在[DEFAULT]节中配置OVS接口驱动:
[DEFAULT]
# ...
interface_driver = openvswitch
配置 DHCP 代理
DHCP代理为虚拟网络提供DHCP服务。编辑/etc/neutron/dhcp_agent.ini文件,在[DEFAULT]节中配置OVS接口驱动,并启用元数据隔离:
[DEFAULT]
interface_driver = openvswitch
enable_isolated_metadata = True
force_metadata = True
A.7.3 在控制节点上配置元数据代理
元数据代理允许虚拟机通过网络访问元数据服务。具体配置步骤和参数可能会根据具体的OpenStack版本和部署方式有所不同,但通常涉及编辑相关的配置文件和启动元数据代理服务。
元 数 据 代 理 为 实 例 提 供 像 安 全 凭 据 这 样 的 配 置 信 息 。 编 辑 /etc/neutron/metadata_agent.ini 文件, 在[DEFAULT]节中配置元数据主机和共享密码(可根 据需要替换 METADATA_SECRET 密码)。
[DEFAULT]
# ...
nova_metadata_host = controller
metadata_proxy_shared_secret = METADATA_SECRET
A.7.4 在控制节点上配置计算服务使用网络服务
编辑/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
A.7.5 在控制节点上完成网络服务安装
( 1 ) 网 络 服 务 初 始 化 脚 本 需 要 一 个 指 向 ML2 插 件 配 置 文 件 /etc/neutron/plugins/ml2/ml2_conf.ini 的符号连接/etc/neutron/plugin.ini。如果该符号连接未创 建,执行以下命令创建。
ln -s /etc/neutron/plugins/ml2/ml2_conf.ini /etc/neutron/plugin.ini
(2)初始化数据库。
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
(3)重启计算 API 服务。
systectl restart openstack-nova-api.service
(4)启动网络服务并将其配置为开机自动启动。
systemctl enable neutron-server.service \
neutron-openvswitch-agent.service neutron-dhcp-agent.service \
neutron-metadata-agent.service neutron-l3-agent.service
systemctl start neutron-server.service \
neutron-openvswitch-agent.service neutron-dhcp-agent.service \
neutron-metadata-agent.service neutron-l3-agent.service
A.7.6 在计算节点上安装 Neutron 组件
计算节点负责实例的连接和安全组, 需要安装 Neutron 的 OVS 代理组件。执行以下命 令安装所需的软件包。
yum -y install openstack-neutron-openvswitch ebtables ipset
A.7.7 在计算节点上配置网络通用组件
网络通用组件配置包括认证机制、消息队列和插件。编辑/etc/neutron/neutron.conf 配置 文件, 设置以下选项。
(1)在[database]节中将连接设置语句注释掉, 因为计算节点不访问 neutron 数据库。 (2)在[DEFAULT]节中配置 RabbitMQ 消息队列访问。
(3 ) 在 [DEFAULT] 和 [keystone_authtoken] 节 中 配 置 身 份 管 理 服 务 访 问 。 将 [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
(4)在[oslo_concurrency]节中配置锁定路径。
[oslo_concurrency]
# ...
lock_path = /var/lib/neutron/tmp
A.7.8 在计算节点上配置网络选项
选择与控制节点相同的网络选项,即自服务网络。这里计算节点仅安装有 OVS 代理, 通过编辑/etc/neutron/plugins/ml2/openvswitch_agent.ini 文件进行配置, 具体配置如下。
[ovs]
local_ip = 10.0.0.21
[agent]
tunnel_types = vxlan
l2_population = True
[securitygroup]
firewall_driver = iptables_hybrid
这里 local_ip 选项设置为计算节点管理网络接口 IP 地址。在[vxlan]节中启用 VXLAN 覆盖网络和 L2 population。在[securitygroup]节中配置安全组混合 iptables 防火墙驱动。
A.7.9 在计算节点上配置计算服务使用网络服务
编辑/etc/nova/nova.conf file 文件,在[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
其中 password 选项设置身份管理服务中的 neutron 用户的密码。
A.7.10 在计算节点上完成网络服务安装
执行以下命令重启计算服务。
systemctl restart openstack-nova-compute.service
执行以下命令启动 OVS 代理服务并将其配置为开机自动启动。
systemctl enable neutron-openvswitch-agent.service
systemctl start neutron-openvswitch-agent.service
A.7.11 验证网络服务运行
在控制节点上加载 admin 用户的环境脚本。
source admin-openrc
查看网络代理列表
openstack network agent list
A.7.12 创建初始网络
为了简化实验,我们将创建一个Flat类型的提供者网络、一个自服务网络和一个路由器,路由器将使用NAT转发IPv4网络流量。以下是在控制节点上执行的具体操作:
(1) 加载admin用户的环境脚本
source admin-openrc
(2) 创建一个名为public1的提供者网络
openstack network create --project admin --share --external \
--availability-zone-hint nova --provider-physical-network extnet \
--provider-network-type flat public1
(3) 在提供者网络上创建一个名为public1_subnet的IPv4子网
openstack subnet create --network public1 \
--allocation-pool start=192.168.199.61,end=192.168.199.90 \
--dns-nameserver 114.114.114.114 --gateway 192.168.199.1 \
--subnet-range 192.168.199.0/24 public1_subnet
(4) 加载普通用户demo的环境脚本
source demo-openrc
(5) 创建一个名为private1的自服务网络
openstack network create private1
(6) 基于自服务网络创建名为private1_subnet的IPv4子网
openstack subnet create --subnet-range 172.16.1.0/24 \
--network private1 --dns-nameserver 114.114.114.114 private1_subnet
注意:这里有个小错误,--network private 1 应更正为 --network private1。
(7) 创建一个名为router1的路由器
openstack router create router1
(8) 将private1_subnet子网添加到路由器的接口
openstack router add subnet router1 private1_subnet
(9) 设置路由器的外部网关为提供者网络public1
openstack router set --external-gateway public1 router1
A.7.13 验证网络操作
(1) 验证qrouter名称空间的创建
[root@controller ~]# ip netns
qrouter-xxxxxxxxxxxx (id: 1)
qdhcp-xxxxxxxxxxxx (id: 0)
你应该能看到类似上面的输出,其中qrouter-和qdhcp-后面的xxxxxxxxxxxx是UUID。
(2) 加载admin的环境脚本并创建实例类型
[root@controller ~]# source admin-openrc
[root@controller ~]# openstack flavor create --id 1 --ram 512 --disk 1 --vcpus 1 --rxtx-factor 1 public m1.tiny
注意:这里加载的是admin-openrc,而不是demo-openrc。
(3) 加载普通用户demo的环境脚本
source demo-openrc
(4) 创建安全组规则
[root@controller ~]# openstack security group rule create --proto icmp default
[root@controller ~]# openstack security group rule create --proto tcp --dst-port 22 default
(5) 基于自服务网络创建虚拟机实例
[root@controller ~]# openstack server create --flavor m1.tiny --image cirros --nic net-id=<private1_network_id> --security-group default my-instance
在上面的命令中,你需要将<private1_network_id>替换为private1网络的实际ID。同样,my-instance是你给虚拟机实例取的名字。
6)执行openstack server list 命令查看实例列表,可以发现该实例的IP 地址来自private1 自服务网络。
(7)为虚拟机实例分配浮动 IP 地址以解决外部网络访问问题。
在提供者网络中创建一个浮动 IP 地址。
[root@controller ~]# openstack floating ip create public1
+-------------------+--------------------+
| Field | Value |
+-------------------+--------------------+
| created_at | 2020- 10- 17T12:12:07Z |
| description | |
| dns_domain | None
| dns_name | None |
| fixed_ip_address | None |
| floating_ip_address | 192.168.199.63
这里创建的浮动 IP 地址为 192.168.199.63。
为该实例分配该 IP 地址。
[root@controller ~]# openstack server add floating ip testVM1 192.168.199.63 在控制节点上 ping 该实例的浮动 IP,测试到该实例的通信,结果正常。
[root@controller ~]# ping -c 2 192.168.199.63
PING 192.168.199.63 ( 192.168.199.63) 56(84) bytes of data.
64 bytes from 192.168.199.63: icmp_seq=1 ttl=63 time=2.56 ms
64 bytes from 192.168.199.63: icmp_seq=2 ttl=63 time=1.32 ms
(8)根据需要登录到该实例,测试到 Internet 或外部网络的通信。
A.8 安装和部署 Horizon
在控制节点上安装 Horizon。确认使用 Apache HTTP 服务器和 Memcached 服务的 Keystone 身份管理服务已经安装和配置好,并在正常运行。
A.8.1 安装和配置 Horizon 组件
1 .安装软件包
yum -y install openstack-dashboard
2 .编辑/etc/openstack-dashboard/local_settings 配置文件
(1)配置仪表板使用控制节点上的 OpenStack 服务。
OPENSTACK_HOST = "controller"
(2)设置允许访问 Dashboard 的主机。
ALLOWED_HOSTS = ['*']
这里使用通配符“*”来代表所有的主机。
(3)配置 Memcached 会话存储服务。注意将除以下选项的其他会话存储配置选项全部 注释掉。
SESSION_ENGINE = 'django.contrib.sessions.backends.cache'
CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache', 'LOCATION': 'controller:11211',
}
}
(4)启用 Identity API v3 支持,此为默认设置。
OPENSTACK_KEYSTONE_URL = "http://%s:5000/v3" % OPENSTACK_HOST
(5)启用对多个域的支持。
OPENSTACK_KEYSTONE_MULTIDOMAIN_SUPPORT = True
(6)配置 API 版本。
OPENSTACK_API_VERSIONS = {
"identity": 3,
"image": 2,
"volume": 2,
}
(7)配置通过仪表板创建的用户的默认域。
OPENSTACK_KEYSTONE_DEFAULT_DOMAIN = "Default"
(8)配置过仪表板创建的用户的默认角色。
OPENSTACK_KEYSTONE_DEFAULT_ROLE = "reader"
(9)根据需要配置时区, 这里将时区改为上海。
TIME_ZONE = "Asia/Shanghai"
(10)添加以下设置。
# WEBROOT 定义访问仪表板访问路径(相对于 Web 服务器根目录),注意路径末尾 要加斜杠
WEBROOT = '/dashboard/'
# 以下两个选项分别定义登录和退出登录(注销) 的路径
LOGIN_URL = '/dashboard/auth/login/'
LOGOUT_URL = '/dashboard/auth/logout/'
# LOGIN_REDIRECT_URL 选项定义登录重定向路径
LOGIN_REDIRECT_URL = '/dashboard/'
3 .调整其他配置
如果/etc/httpd/conf.d/openstack-dashboard.conf 文件中没有包含以下定义,将该定义语 句添加到该文件中。
WSGIApplicationGroup %{GLOBAL}
A.8.2 完成 Horizon 安装并进行验证
重启 Web 服务和会话存储服务。
systemctl restart httpd.service memcached.service
在控制节点上通过浏览器访问 http://controller/dashboard 网址, 出现正常的登录界面, 输入 admin 账户和密码, 如图 所示。
A.9 安装和部署 Cinder
块存储 API(cinder-api)和调度服务(cinder-scheduler)通常部署在控制节点上。根 据所用的存储驱动,卷服务(cinder-volume)可以部署在控制节点、计算节点或者专门的 存储节点上。综合实训的双节点系统中由计算节点兼作存储节点, 为实例提供卷服务。
A.9.1 在控制节点上完成 Cinder 的安装准备
安装和配置块存储服务之前,必须创建数据库、服务凭据和 API 端点。
(1)创建 Cinder 数据库
使用数据库访问客户端, 以 root 用户身份连接到数据库服务器。
mysql -u root -p
依次执行以下命令创建数据库并设置访问权限,完成之后退出数据库访问客户端。这 里 cinder 用户的密码设为 CINDER_DBPASS。
MariaDB [(none)]> CREATE DATABASE cinder;
MariaDB [(none)]> GRANT ALL PRIVILEGES ON cinder.* TO 'cinder'@'localhost' \ IDENTIFIED BY 'CINDER_DBPASS';
MariaDB [(none)]> GRANT ALL PRIVILEGES ON cinder.* TO 'cinder'@'%' \
IDENTIFIED BY 'CINDER_DBPASS';
MariaDB [(none)]> exit;
(2)加载 admin 的环境脚本。后续命令行操作需要云管理员身份。
. admin-openrc
(3)创建 cinder 服务凭据。依次执行以下命令创建 cinder 用户,将 admin 角色授予该 用户, 并创建 cinderv2 和 cinderv3 的服务实体。
openstack user create --domain default --password-prompt cinder
openstack role add --project service --user cinder admin
openstack service create --name cinderv2 --description "OpenStack Block Storage"
volumev2
openstack service create --name cinderv3 --description "OpenStack Block Storage" volumev3
(4)创建块存储服务的 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
A.9.2 在控制节点上安装和配置 Cinder 组件
1 .安装软件包
yum -y install openstack-cinder
2 .编辑/etc/cinder/cinder.conf 文件以完成相关设置
(1)在[database]节中配置数据库访问。
[database]
# ...
connection = mysql+pymysql://cinder:CINDER_DBPASS@controller/cinder
(2)在[DEFAULT]节中配置 RabbitMQ 消息队列访问。
[DEFAULT]
# ...
transport_url = rabbit://openstack:RABBIT_PASS@controller
(3 )在 [DEFAULT] 和 [keystone_authtoken] 节 中配置 身份 管理服务访 问 。注 意将 [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
(4)在[DEFAULT]节中配置 my_ip 选项(其值为控制节点上管理网络接口的 IP 地址)。
[DEFAULT]
# ...
my_ip = 10.0.0.11
(5)在[oslo_concurrency]节中配置锁定路径。
[oslo_concurrency]
# ...
lock_path = /var/lib/cinder/tmp
3 .初始化块存储数据库
su -s /bin/sh -c "cinder-manage db sync" cinder
A.9.3 在控制节点上配置计算服务使用块存储服务
编辑/etc/nova/nova.conf 配置文件,在[cinder]节中添加以下设置:
[cinder]
os_region_name = RegionOne
A.9.4 在控制节点上完成 Cinder 安装
(1)重启计算 API 服务
systemctl restart openstack-nova-api.service
(2)启动块存储服务并将其配置为开机自动启动
systemctl enable openstack-cinder-api.service openstack-cinder-scheduler.service systemctl start openstack-cinder-api.service openstack-cinder-scheduler.service
A.9.5 在存储节点上完成 Cinder 的安装准备
安装和配置块存储服务之前,必须准备好存储设备。
(1)在存储节点主机上增加一块硬盘
为便于实验,本例通过为 CentOS 7 虚拟机增加一块硬盘。可查看当前的磁盘设备列表。
[root@compute1 ~]# fdisk -l
Disk /dev/sda: 214.7 GB, 214748364800 bytes, 419430400 sectors
……
Device Boot Start End Blocks Id System
/dev/sda1 * 2048 2099199 1048576 83 Linux
/dev/sda2 2099200 419430399 208665600 8e Linux LVM
(2)安装支持工具包
CentOS 7 操作系统默认已安装 LVM 包。如果没有安装,执行以下命令安装 LVM 包, 启动 LVM 元数据服务并将其配置为开机自动启动。
yum -y install lvm2 device-mapper-persistent-data
systemctl enable lvm2-lvmetad.service
systemctl start lvm2-lvmetad.service
(3)创建 LVM 物理卷/dev/sdb
[root@compute1 ~]# pvcreate /dev/sdb
Physical volume "/dev/sdb" successfully created.
(4)基于该物理卷创建 LVM 卷组 cinder-volumes
[root@compute1 ~]# vgcreate cinder-volumes /dev/sdb
Volume group "cinder-volumes" successfully created
vgcreate cinder-volumes /dev/sdb
Cinder 块存储服务在这个卷组中创建逻辑卷。
(5)编辑/etc/lvm/lvm.conf 文件
在“devices”节中添加一个过滤器来接受/dev/sdb 设备并拒绝所有其他设备。
devices {
...
filter = [ "a/sda/", "a/sdb/", "r/.*/"]
只有实例能够访问块存储卷。但是, 底层的操作系统管理与卷关联的设备。默认情况 下,LVM 卷扫描工具扫描/dev 目录以获取那些包括卷的块存储设备。如果项目在其卷上使 用 LVM,扫描工具探测这些卷并试图缓存它们,这会导致底层操作系统和项目卷的多种问 题。因此, 必须重新配置 LVM 使得仅扫描包括卷组的设备。
过滤器中的每项以 a 表示接受, 以 r 开头表示拒绝,设备名使用正则表达式。数组必 须以 r/.*/结尾表示拒绝任何其余的设备。本例中/dev/sda 设备包含操作系统,必须将该设备 也加入到过滤器中。
A.9.6 在存储节点上安装和配置 Cinder 组件
首先安装软件包。
yum -y install openstack-cinder targetcli python-keystone
然后编辑/etc/cinder/cinder.conf 文件并完成相应设置
(1)在[database]节中配置数据库访问。
[database]
# ...
connection = mysql+pymysql://cinder:CINDER_DBPASS@controller/cinder
(2)在[DEFAULT]节中配置 RabbitMQ 消息队列访问。
[DEFAULT]
# ...
transport_url = rabbit://openstack:RABBIT_PASS@controller
(3 )在 [DEFAULT] 和 [keystone_authtoken] 节 中配置 身份 管理服务访 问 。注 意将 [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
(4)在[DEFAULT]节中配置 my_ip 选项(其值为存储节点上管理网络接口的 IP 地址)。
[DEFAULT]
# ...
my_ip = 10.0.0.21
(5)在[lvm]节中配置 LVM 后端,包括 LVM 驱动、 cinder-volumes 卷组、 iSCSI 协议 和适当的 iSCSI 服务。如果[lvm]节不存在,需要添加该节。
[lvm]
volume_driver = cinder.volume.drivers.lvm.LVMVolumeDriver
volume_group = cinder-volumes
target_protocol = iscsi
target_helper = lioadm
(6)在[DEFAULT]节中启用 LVM 后端。
[DEFAULT]
# ...
enabled_backends = lvm
后端可随意命名,此例中使用驱动名称作为后端的名称。
(7)在[DEFAULT]节中配置镜像服务 API 的位置。
[DEFAULT]
# ...
glance_api_servers = http://controller:9292
(8)在[oslo_concurrency]节中配置锁定路径。
[oslo_concurrency]
# ...
lock_path = /var/lib/cinder/tmp
A.9.7 在存储节点上完成 Cinder 安装
(1). 启动块存储卷服务及其依赖组件,并配置它们开机自动启动。
systemctl enable openstack-cinder-volume.service target.service
systemctl start openstack-cinder-volume.service target.service
A.9.8 验证 Cinder 服务操作
(1)检查 Cinder 服务运行情况
在控制节点上加载 admin 凭据, 以获取管理员权限。
. admin-openrc
执行以下命令列出 Cinder 块存储服务组件。
[root@controller ~]# openstack volume service list
+--------------+------------+-----+-------+-----+------------------------+
| Binary | Host | Zone | Status | State | Updated At |
+--------------+------------+-----+-------+-----+------------------------+
| cinder-scheduler | controller | nova | enabled | up | 2020- 10- 18T02:49:09.000000 |
| cinder-volume | compute1@lvm | nova | enabled | up | 2020- 10- 18T02:49:08.000000 |
结果表明 Cinder 块存储服务正常运行,控制节点上运行 cinder-scheduler 子服务, 存储 节点(这里由计算节点主机兼任)上运行 cinder-volume 子服务。
(2)创建卷进行要测试
在控制节点上创建一个卷,并指定可用域、卷大小。
[root@controller ~]# openstack volume create --size 5 --availability-zone nova testVol
创建完毕, 查看卷列表, 可发现该卷已成功创建。
[root@controller ~]# openstack volume list
+-----------------------------------+-------+-------+----+-------------+
| ID | Name | Status | Size | Attached to |
+-----------------------------------+-------+-------+----+-------------+
| e1c25033-c3d4-49e2-8e7d-bc19ab4e768b | testVol | available | 5 |