puppet-glance
0. 项目简介
Glance 是 OpenStack Image Service 项目,用于注册、管理和检索虚拟机镜像。 Glance 并不负责实际的镜像存储。它提供了对接简单文件系统,对象存储,块存储等多种存储后端的能力。除了磁盘镜像信息,它还能够存储描述镜像的元数据和状态信息。
1. 先睹为快
不想看下面大段的代码解析,已经跃跃欲试了?
OK,我们开始吧!
创建 puppet_glance.pp 文件并输入:
class { 'glance::api':
verbose => true,
keystone_tenant => 'services',
keystone_user => 'glance',
keystone_password => '12345',
database_connection => 'mysql://glance:12345@127.0.0.1/glance',
}
class { 'glance::registry':
verbose => true,
keystone_tenant => 'services',
keystone_user => 'glance',
keystone_password => '12345',
database_connection => 'mysql://glance:12345@127.0.0.1/glance',
}
class { 'glance::backend::file': }
class { 'glance::db::mysql':
password => '12345',
allowed_hosts => '%',
}
class { 'glance::keystone::auth':
password => '12345'
email => 'glance@example.com',
public_address => '127.0.0.1',
admin_address => '127.0.0.1',
internal_address => '172.17.1.3',
region => 'example-west-1',
}
rabbitmq_user { 'glance':
admin => true,
password => 'an_even_bigger_secret',
provider => 'rabbitmqctl',
require => Class['::rabbitmq'],
}
rabbitmq_user_permissions { 'glance@/':
configure_permission => '.*',
write_permission => '.*',
read_permission => '.*',
provider => 'rabbitmqctl',
require => Class['::rabbitmq'],
}
在终端执行以下命令:
$ puppet apply -v puppet_glance.pp
2. 核心代码讲解
2.1 class glance
class glance
用于管理 Glance 软件包和 Openstackclient 软件包:
include ::glance::params
if ( $glance::params::api_package_name == $glance::params::registry_package_name ) {
package { $::glance::params::api_package_name :
ensure => $package_ensure,
name => $::glance::params::api_package_name,
tag => ['openstack', 'glance-package'],
}
include '::openstacklib::openstackclient'
}
2.2 class glance::api
glance::api
类用于管理以下配置:
- policy\db\logging\cache
include ::glance::policy include ::glance::api::db include ::glance::api::logging include ::glance::cache::logging
- /etc/glance/glance-api.conf
3. 管理/etc/glance/glance-cache.conf# basic service config glance_api_config { 'DEFAULT/bind_host': value => $bind_host; 'DEFAULT/bind_port': value => $bind_port; 'DEFAULT/backlog': value => $backlog; 'DEFAULT/show_image_direct_url': value => $show_image_direct_url; ... 'DEFAULT/image_cache_dir': value => $image_cache_dir; 'DEFAULT/auth_region': value => $auth_region; 'glance_store/os_region_name': value => $os_region_name; }
在 Glance-api 中,启用 Glance 的缓存功能可以加速镜像的二次下载速度(注:在使用 Ceph 作为 Glance, Cinder, Nova 的后端时,此功能无效)
glance_cache_config {
'DEFAULT/image_cache_stall_time': value => $image_cache_stall_time;
'DEFAULT/image_cache_max_size': value => $image_cache_max_size;
'glance_store/os_region_name': value => $os_region_name;
}
4. glance-api 服务的管理
service { 'glance-api':
ensure => $service_ensure,
name => $::glance::params::api_service_name,
enable => $enabled,
hasstatus => true,
hasrestart => true,
tag => 'glance-service',
}
5. 验证 glance-api 服务部署是否成功 通过调用 glance image-list
命令来验证 glance-api 的返回值是否符合预期。
if $validate {
$defaults = {
'glance-api' => {
'command' => "glance --os-auth-url ${auth_uri} --os-tenant-name ${keystone_tenant} --os-username ${keystone_user} --os-password ${keystone_password} image-list",
}
}
$validation_options_hash = merge ($defaults, $validation_options)
create_resources('openstacklib::service_validation', $validation_options_hash, {'subscribe' => 'Service[glance-api]'})
}
2.3 Class glance::registry
glance::registry
用于安装和配置 glance-registry
服务,其代码结构与 glance::api
类似,在此不做赘述。
Class glance::notify::rabbitmq
在 glance-api 和 glance-registry 中启用 notifications 功能可以在创建镜像,更新镜像源数据等事件发生时发送通知到 rabbitmq 给其他服务使用。
调用 puppet-oslo 来配置 glance-api.conf 和 glance-registry
oslo::messaging::rabbit { ['glance_api_config', 'glance_registry_config']:
rabbit_password => $rabbit_password,
rabbit_userid => $rabbit_userid,
rabbit_host => $rabbit_host,
rabbit_port => $rabbit_port,
rabbit_hosts => $rabbit_hosts,
rabbit_virtual_host => $rabbit_virtual_host,
rabbit_ha_queues => $rabbit_ha_queues,
heartbeat_timeout_threshold => $rabbit_heartbeat_timeout_threshold,
heartbeat_rate => $rabbit_heartbeat_rate,
rabbit_use_ssl => $rabbit_use_ssl,
kombu_ssl_ca_certs => $kombu_ssl_ca_certs,
kombu_ssl_certfile => $kombu_ssl_certfile,
kombu_ssl_keyfile => $kombu_ssl_keyfile,
kombu_ssl_version => $kombu_ssl_version,
kombu_reconnect_delay => $kombu_reconnect_delay,
amqp_durable_queues => $amqp_durable_queues,
kombu_compression => $kombu_compression,
}
oslo::messaging::notifications { ['glance_api_config', 'glance_registry_config']:
driver => $notification_driver,
topics => $rabbit_notification_topic,
}
2.4 Class glance::backend::rbd
Glance 支持多种存储后端,比如 cinder,swift,file,ceph,s3,本节将介绍如何使用 glance::backend::rbd
配置 Ceph 作为 Glance 后端存储:
#修改 glance_store 下的配置项
glance_api_config {
'glance_store/rbd_store_ceph_conf': value => $rbd_store_ceph_conf;
'glance_store/rbd_store_user': value => $rbd_store_user;
'glance_store/rbd_store_pool': value => $rbd_store_pool;
'glance_store/rbd_store_chunk_size': value => $rbd_store_chunk_size;
'glance_store/rados_connect_timeout': value => $rados_connect_timeout;
}
if !$multi_store {
glance_api_config { 'glance_store/default_store': value => 'rbd'; }
if $glare_enabled {
glance_glare_config { 'glance_store/default_store': value => 'rbd'; }
}
}
#安装 python-ceph 软件包
package { 'python-ceph':
ensure => $package_ensure,
name => $::glance::params::pyceph_package_name,
}
3. 动手练习
- 配置 Glance 使用 Swift 作为存储后端
- 设置 token 的缓存时间为 5min
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论