镜像服务
描述如何在控制节点上安装和配置镜像服务,即 glance。简单来说,这个配置将镜像保存在本地文件系统中。
先决条件
安装和配置镜像服务之前,你必须创建创建一个数据库、服务凭证和API端点。
完成下面的步骤以创建数据库:
用数据库连接客户端以 root 用户连接到数据库服务器:
java
$ mysql -u root -p
创建 glance 数据库:
java
CREATE DATABASE glance;
对``glance``数据库授予恰当的权限:设置本地和网络都可以登录
java
GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'%' \ IDENTIFIED BY 'GLANCE_DBPASS';
退出数据库客户端
java
exit
创建 glance 用户:prompt可以进行替换任意用户名
java
openstack user create --domain default --password-prompt glance
添加 admin 角色到 glance 用户和 service 项目上。
java
$ openstack role add --project service --user glance admin
创建``glance``服务实体
java
$ openstack service create --name glance \
--description "OpenStack Image" image
创建镜像服务的 API 端点:
java
openstack endpoint create --region RegionOne \
image public http://controller:9292
查询服务端点
java
openstack endpoint list
创建镜像服务的 API 端点:通过查询上面的服务端点 将controller 替换为端点
java
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
删除服务端点
java
openstack endpoint delete 服务端点id
安全并配置组件
java
# yum install openstack-glance
编辑文件 /etc/glance/glance-api.conf 并完成如下动作:
在 [database] 部分,配置数据库访问:
java
[database]
...
connection = mysql+pymysql://glance:GLANCE_DBPASS@controller/glance
将``GLANCE_DBPASS`` 替换为你为镜像服务选择的密码。 controller改为服务端点
在 [keystone_authtoken] 和 [paste_deploy] 部分,配置认证服务访问: controller改为服务端点
将 GLANCE_PASS 替换为你为认证服务中你为 glance 用户选择的密码。
java
[keystone_authtoken]
...
auth_uri = http://controller:5000
auth_url = http://controller:35357
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] 部分,配置本地文件系统存储和镜像文件位置:
java
[glance_store]
...
stores = file,http
default_store = file
filesystem_store_datadir = /var/lib/glance/images/
编辑文件 ++++``++++/etc/glance/glance-registry.conf``并完成如下动作:
在 [database] 部分,配置数据库访问:
java
[database]
...
connection = mysql+pymysql://glance:GLANCE_DBPASS@controller/glance
将``GLANCE_DBPASS`` 替换为你为镜像服务选择的密码。
在 [keystone_authtoken] 和 [paste_deploy] 部分,配置认证服务访问:
java
[keystone_authtoken]
...
auth_uri = http://controller:5000
auth_url = http://controller:35357
memcached_servers = controller:11211
auth_type = password
project_domain_name = default
user_domain_name = default
project_name = service
username = glancepassword = GLANCE_PASS
[paste_deploy]
...
flavor = keystone
将 GLANCE_PASS 替换为你为认证服务中你为 glance 用户选择的密码。
写入镜像服务数据库:将镜像表格导入数据库
java
# su -s /bin/sh -c "glance-manage db_sync" glance
完成安装 ++++¶++++
启动镜像服务、配置他们随机启动:
java
# systemctl enable openstack-glance-api.service \
openstack-glance-registry.service
# systemctl start openstack-glance-api.service \
openstack-glance-registry.service
验证操作
在控制节点上执行这些命令。
下载源镜像:
java
$ wget http://download.cirros-cloud.net/0.3.4/cirros-0.3.4-x86_64-disk.img
查看镜像列表
java
openstack image list 或
glance image list
使用 ++++QCOW2++++ 磁盘格式, ++++bare++++ 容器格式上传镜像到镜像服务并设置公共可见,这样所有的项目都可以访问它:
创建镜像名 / 镜像来自哪个文件 / 镜像格式和镜像类型 / 公共镜像
java
$ openstack image create "cirros" \
--file /root/openstack-ocata cirros-0.3.4-x86_64-disk.img \
--disk-format qcow2 --container-format bare \
--public
删除镜像名称
java
Openstack image delete 镜像id
Nova-计算服务
Nova是OpenStack最核心的服务,负责维护和管理云环境的计算资源。OpenStack 作为laaS的云操作系统,虚拟机生命期管理也就是通过 Nova 来实现的。用途与功能:
- 实例生命周期管理
- 管理计算资源
- 网络和认证管理
- REST 风格的 API
- 异步的一致性通信
- 虚拟化环境:XenServer/XCP、KVM、UML、VMware vSphere和Hyper-V
nova-api是整个Nova组件的门户,接收和响应客户酌API调用。所有对Nova的请求都首先由nova-api处理。nova-api向外界暴露若干HTTP REST API接口在keystone中我们可以查询nova-api的endponits
客户端就可以将请求发送到endponits指定的地址,向nova-api请求操作。当然,作为最终用户的我们不会直接发送Rest AP 1请求。OpenStack CLI , Dashboard和其他需要跟Nova交换的组件会使用这些API。
Nova-api对接收到的HTTP API请求会做如下处理:
- 检查客户端传入的参数是否合法有效
2.调用Nova其他子服务的处理客户端HTTP请求
3.格式化 Nova 其他子服务返回的结果并返回给客户端
nova-scheduler:虚机调度服务,负责决定在哪个计算节点上运行虚机。创建Instance时,用户会提出资源需求,例如CPU、内存、磁盘各需要多少。OpenStack将这些需求定义在flavor中,用户只需要指定用哪个flavor就可以了。
可用的 flavor 在 System->Flavors 中管理。
nova-scheduler如何实现调度
在/ etc /新星nova.conf中,nova通过司机= filter_scheduler这个参数来配置nova-scheduler。
driver= filter_scheduler
Filter scheduler是nova-scheduler默认的调度器调度过程分两步
1,通过过滤器(过滤器)选择满足条件的计算节点(运行nova-compute)
- 通过权重计算选择最优(权重值最大)的计算节点创建虚拟机,空闲内存越多,权重越大,instance将被部署当前空闲内存最多的计算节点上
lova允许使用第三方的过滤器,配置 scheduler driver即可 这又一次体现了OpenStack的开放性。scheduler可以使用多个过滤器依次进行过滤,过滤之后的节点再通过计算权重选出最适合的节点。
- nova-conductor:nova-compute经常需要更新数据库,比如更新和获取虚机的状态。出于安全性和伸缩性的考虑, nova-compute并不会直接访问数据库,而是将这个任务委托给 nova-conductor。
这样做有两个显著好处:
- 更高的系统安全性
- 更好的系统伸缩性
Nova其他组件
nova-console:用户可以通过多种方式访问虚机的控制台
nova-novncproxy :基于Web 浏览器的VNC 访问
nova-spicehtml5proxy :基于 HTML5 浏览器的 SPICE 访问nova-xvpnvncproxy :基于 Java 客户端的 VNC 访问
nova-consoleauth :负责对访问虚机控制台请求提供Token认证
nova-cert :提供 x509 证书支持
nova流程图
计算服务 安装并配置控制节点
描述如何在控制节点上安装和配置 Compute 服务,即 nova。
先决条件 ++++¶++++
在安装和配置 Compute 服务前,你必须创建数据库服务的凭据以及 API endpoints。
为了创建数据库,必须完成这些步骤:
用数据库连接客户端以 root 用户连接到数据库服务器:
java
$ mysql -u root -p
创建 nova_api ,nova,nova证书 数据库:
java
CREATE DATABASE nova_api;
CREATE DATABASE nova;
CREATE DATABASE nova_cell0;
对数据库进行正确的授权
java
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';
用合适的密码代替 NOVA_DBPASS。
退出数据库客户端。
java
exit
获得 admin 凭证来获取只有管理员能执行的命令的访问权限:
java
admin-openrc
要创建服务证书,完成这些步骤:
创建 nova 用户:prompt可以替换成其他的密码
java
$ openstack user create --domain default \
--password-prompt nova
给 nova 用户添加 admin 角色:
java
$ openstack role add --project service --user nova admin
创建 nova 服务实体:
java
$ openstack service create --name nova \
--description "OpenStack Compute" compute
创建 Compute 服务 API 端点 :将controller改为端点名称
java
$ openstack endpoint create --region RegionOne \
compute public http://controller:8774/v2.1/%\(tenant_id\)s
$ openstack endpoint create --region RegionOne \
compute internal http://controller:8774/v2.1/%\(tenant_id\)s
$ openstack endpoint create --region RegionOne \
compute admin http://controller:8774/v2.1/%\(tenant_id\)s
创建一个服务追踪统计服务
java
openstack user create --domain default --password=placement placement
将placement 设置为admin
java
openstack role add --project service --user placement admin
给placement 创建服务
java
openstack service create --name placement --description "placement API" placement
给placement设置服务端点
java
$ openstack endpoint create --region RegionOne \
placement public http://controller:8778
$ openstack endpoint create --region RegionOne \
placement internal http://controller:controller:8778
$ openstack endpoint create --region RegionOne \
placement admin http://controller:controller:8778
安全并配置组件
安装软件包
java
# yum install openstack-nova-api openstack-nova-conductor \
openstack-nova-console openstack-nova-novncproxy \
openstack-nova-scheduler -y
编辑``/etc/nova/nova.conf``文件并完成下面的操作:
在``[DEFAULT]``部分,只启用计算和元数据API:
java
[DEFAULT]
...
enabled_apis = osapi_compute,metadata
在``[api_database]``和``[database]``部分,配置数据库的连接:controller需要替换相应的服务端点
java
[api_database]
...
connection = mysql+pymysql://nova:NOVA_DBPASS@controller/nova_api
[database]
...
connection = mysql+pymysql://nova:NOVA_DBPASS@controller/nova
用你为 Compute 数据库选择的密码来代替 NOVA_DBPASS。
在 "[DEFAULT]" 和 "[oslo_messaging_rabbit]"部分,配置 "RabbitMQ" 消息队列访问:
java
[DEFAULT]
...
rpc_backend = rabbit
[oslo_messaging_rabbit]
...
rabbit_host = controllerrabbit_userid = openstackrabbit_password = RABBIT_PASS
用你在 "RabbitMQ" 中为 "openstack" 选择的密码替换 "RABBIT_PASS"。controller需要替换相应的服务端点
在 "[DEFAULT]" 和 "[keystone_authtoken]" 部分,配置认证服务访问:
java
[DEFAULT]
...
auth_strategy = keystone
[keystone_authtoken]
...
auth_uri = http://controller:5000
auth_url = http://controller:35357
memcached_servers = controller:11211
auth_type = password
project_domain_name = default
user_domain_name = default
project_name = service
username = novapassword = NOVA_PASS
使用你在身份认证服务中设置的``nova`` 用户的密码替换``NOVA_PASS``。controller需要替换相应的服务端点
在 [DEFAULT 部分,配置``my_ip`` 来使用控制节点的管理接口的IP 地址。
java
[DEFAULT]...my_ip = 10.0.0.11
在 [DEFAULT] 部分,使能 Networking 服务:
java
[DEFAULT]
...
use_neutron = Truefirewall_driver = nova.virt.firewall.NoopFirewallDriver
在``[vnc]``部分,配置VNC代理使用控制节点的管理接口IP地址 :
java
[vnc]
...
vncserver_listen = $my_ipvncserver_proxyclient_address = $my_ip
在 [glance] 区域,配置镜像服务 API 的位置:controller需要替换相应的服务端点
java
[glance]
...
api_servers = http://controller:9292
在 [oslo_concurrency] 部分,配置锁路径[placement]中进行配置:controller需要替换相应的服务端点
java
[oslo_concurrency]...lock_path = /var/lib/nova/tmp
[placement]
os_region_name = Regionone
auth_type = password
auth_url = httR://controller:35357/v3
project_name =serviceproject_domain_name = Default
username = placement
password = placement
user_domain_name = Default
同步Compute 数据库:
java
# su -s /bin/sh -c "nova-manage api_db sync" nova# su -s /bin/sh -c "nova-manage db sync" nova
完成安装 ++++¶++++
启动 Compute 服务并将其设置为随系统启动:
java
# systemctl enable openstack-nova-api.service \
openstack-nova-consoleauth.service openstack-nova-scheduler.service \
openstack-nova-conductor.service openstack-nova-novncproxy.service# systemctl start openstack-nova-api.service \
openstack-nova-consoleauth.service openstack-nova-scheduler.service \
openstack-nova-conductor.service openstack-nova-novncproxy.service
安装和配置计算节点
安全并配置组件
安装软件包:
java
# yum install openstack-nova-compute
编辑``/etc/nova/nova.conf``文件并完成下面的操作:
在``[DEFAULT]`` 和 [oslo_messaging_rabbit]部分,配置``RabbitMQ``消息队列的连接:controller需要替换相应的服务端点
java
[DEFAULT]
...
rpc_backend = rabbit
[oslo_messaging_rabbit]
...
rabbit_host = controller
rabbit_userid = openstack
rabbit_password = RABBIT_PASS
用你在 "RabbitMQ" 中为 "openstack" 选择的密码替换 "RABBIT_PASS"。
在 "[DEFAULT]" 和 "[keystone_authtoken]" 部分,配置认证服务访问:controller需要替换相应的服务端点
java
[DEFAULT]
...
auth_strategy = keystone
[keystone_authtoken]
...
auth_uri = http://controller:5000
auth_url = http://controller:35357
memcached_servers = controller:11211
auth_type = password
project_domain_name = default
user_domain_name = default
project_name = service
username = nova
password = NOVA_PASS
使用你在身份认证服务中设置的``nova`` 用户的密码替换``NOVA_PASS``。
在 [DEFAULT] 部分,配置 my_ip 选项:
java
[DEFAULT]...my_ip = MANAGEMENT_INTERFACE_IP_ADDRESS
将其中的 MANAGEMENT_INTERFACE_IP_ADDRESS 替换为计算节点上的管理网络接口的IP 地址,例如 :ref:++++`++++example architecture <overview-example-architectures>`中所示的第一个节点 10.0.0.31 。
在 [DEFAULT] 部分,使能 Networking 服务:
java
[DEFAULT]...use_neutron = Truefirewall_driver = nova.virt.firewall.NoopFirewallDriver
在``[vnc]``部分,启用并配置远程控制台访问:
java
[vnc]
...
enabled = True
vncserver_listen = 0.0.0.0
vncserver_proxyclient_address = $my_ip
novncproxy_base_url = http://controller:6080/vnc_auto.html
服务器组件监听所有的 IP 地址,而代理组件仅仅监听计算节点管理网络接口的 IP 地址。基本的 URL 指示您可以使用 web 浏览器访问位于该计算节点上实例的远程控制台的位置。
在 [glance] 区域,配置镜像服务 API 的位置:
java
[glance]
...
api_servers = http://controller:9292
在 [oslo_concurrency] 部分,配置锁路径:
java
[oslo_concurrency]
...
lock_path = /var/lib/nova/tmp
完成安装
确定您的计算节点是否支持虚拟机的硬件加速。
java
$ egrep -c '(vmx|svm)' /proc/cpuinfo
如果这个命令返回了 one or greater 的值,那么你的计算节点支持硬件加速且不需要额外的配置。
如果这个命令返回了 zero 值,那么你的计算节点不支持硬件加速。你必须配置 libvirt 来使用 QEMU 去代替 KVM
在 /etc/nova/nova.conf 文件的 [libvirt] 区域做出如下的编辑:
java
[libvirt]
...
virt_type = qemu
启动计算服务及其依赖,并将其配置为随系统自动启动:
java
# systemctl enable libvirtd.service openstack-nova-compute.service
# systemctl start libvirtd.service openstack-nova-compute.service
验证操作
获得 admin 凭证来获取只有管理员能执行的命令的访问权限:
java
$ . admin-openrc
列出服务组件,以验证是否成功启动并注册了每个进程:
java
$ openstack compute service list
查看监督着
java
openstack hypervisor list
检查nova状态
java
nova-status upgrade check