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
相关推荐
容器魔方1 天前
Bloomberg 正式加入 Karmada 用户组!
云原生·容器·云计算
AKAMAI2 天前
Sport Network 凭借 Akamai 实现卓越成就
人工智能·云原生·云计算
感哥2 天前
OpenStack Cinder 创建卷
openstack
感哥2 天前
OpenStack Cinder 架构
openstack
10岁的博客2 天前
《云计算如何驱动企业数字化转型:关键技术与实践案例》
云计算
感哥2 天前
OpenStack Nova Scheduler 计算节点选择机制
openstack
m0_694845573 天前
教你使用服务器如何搭建数据库
linux·运维·服务器·数据库·云计算
shinelord明3 天前
【数据行业发展】可信数据空间~数据价值的新型基础设施
大数据·架构·云计算·创业创新
XINVRY-FPGA3 天前
XCKU15P-2FFVA1760I AMD 赛灵思 Xilinx Kintex UltraScale+ FPGA
arm开发·嵌入式硬件·阿里云·fpga开发·云计算·硬件工程·fpga
王道长服务器 | 亚马逊云3 天前
一个迁移案例:从传统 IDC 到 AWS 的真实对比
java·spring boot·git·云计算·github·dubbo·aws