OpenStack云计算(二)镜像和计算

镜像服务

描述如何在控制节点上安装和配置镜像服务,即 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 来实现的。用途与功能:

  1. 实例生命周期管理
  2. 管理计算资源
  3. 网络和认证管理
  4. REST 风格的 API
  5. 异步的一致性通信
  6. 虚拟化环境: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请求会做如下处理:

  1. 检查客户端传入的参数是否合法有效

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)

  1. 通过权重计算选择最优(权重值最大)的计算节点创建虚拟机,空闲内存越多,权重越大,instance将被部署当前空闲内存最多的计算节点上

lova允许使用第三方的过滤器,配置 scheduler driver即可 这又一次体现了OpenStack的开放性。scheduler可以使用多个过滤器依次进行过滤,过滤之后的节点再通过计算权重选出最适合的节点。

  • nova-conductor:nova-compute经常需要更新数据库,比如更新和获取虚机的状态。出于安全性和伸缩性的考虑, nova-compute并不会直接访问数据库,而是将这个任务委托给 nova-conductor。

这样做有两个显著好处:

  1. 更高的系统安全性
  2. 更好的系统伸缩性

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
相关推荐
九河云4 小时前
AWS账号注册费用详解:新用户是否需要付费?
服务器·云计算·aws
神一样的老师4 小时前
利用亚马逊AWS IoT核心和MQTT进行数据采集的综合指南
云计算·aws
昔我往昔10 小时前
阿里云文本内容安全处理
安全·阿里云·云计算
写代码的学渣13 小时前
Linux云计算个人学习总结(一)
linux·运维·云计算
林农15 小时前
C02S11-Linux系统的安全与控制
linux·云计算
danns88818 小时前
什么是 AWS PrivateLink
云计算·aws
shiran小坚果21 小时前
AWS RDS MySQL内存使用
数据库·mysql·云计算·database·aws
武汉唯众智创1 天前
职业院校关于大数据、云计算和物联网传感器技术的结合与应用探讨
大数据·云计算·物联网传感器技术
小安运维日记1 天前
Linux云计算 |【第五阶段】CLOUD-DAY8
linux·运维·docker·云计算·k8s·学习方法