目录
一、glance简介
云环境下会有很多用户同时创建很多虚拟机,同时还要创建的很快,比如同一时间创建100台虚拟机最多不能超过10分钟,否则顾客体验会很差,所以云环境下需要更高效的解决方案,这就是 Image。Image 是一个模板,里面包含了基本的操作系统和其他的软件,不含有唯一标识的设置,比如MAC地址与IP地址等。对于公有云,每种操作系统都应该至少有一个image模板,而私有云不做限制。但是为了使用方便,当把公有云的image安装了自己需要的软件之后可以拍摄快照,把快照镜像作为自己的私有镜像来使用。
Glance提供 Image Service服务,功能是管理 Image,让用户能够发现、获取和保存 Image。提供 REST API (request应用接口)让用户能够查询和获取 image 的元数据(描述数据的数据)和 image 本身支持多种方式存储 image,包括普通的文件系统、Swift、Amazon S3 等对 Instance 执行 Snapshot 创建新的 image。
- registry用于记录元数据,说明了数据的属性,数据名是啥,多大,在哪
- DB database,Image 的 metadata 会保持到 database 中,默认是 MySQL。在控制节点上可以查看glance 的 database 信息
- store backend Glance 自己并不存储 image。真正的 image 是存放在 backend 中的。Glance支持多种 backend,包括:A directory on a local filesystem(这是默认配置)、GridFS、Ceph RBD、Amazon S3、Sheepdog、OpenStack BlockStorage (Cinder)、OpenStack Object Storage (Swift)、VMware ESX
glance架构
- openstack服务之间的通信是通过API进行的,API的地址通常都是endpoint;
- A client指的是任何使用glance服务器的应用程序;
- REST API指的是glance提供REST访问的API;
- Database Abstraction
Layer(DAL,数据库抽象层),同一glance和数据库之间的通信的应用程序编程接口。有了DAL,当用户有更改数据库内容的请求时,可能会因为DAL定义的限制而无法更改,提高了数据库的安全性;glance domain controller 域控制器,实现主要的中间件功能,如授权、通知、策略与数据库连接; - glance store ,用于组织glance和各种数据存储之间的交互;
- registry layer注册表层,用于通过使用单独的服务来组织域和DAL之间的安全通信的可选层。
#glance image-list 或 #ls -l // 列出所有的镜像
实验环境部署
二、创建数据库实例和数据库用户
[root@ct ~]# mysql -uroot -p
Enter password:
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 26
Server version: 10.3.20-MariaDB MariaDB Server
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]> CREATE DATABASE glance;
Query OK, 1 row affected (0.136 sec)
MariaDB [(none)]> grant all privileges on glance.* to 'glance'@'localhost' identified by 'glance_dbpass';
Query OK, 0 rows affected (0.304 sec)
MariaDB [(none)]> grant all privileges on glance.* to 'glance'@'%' identified by 'glance_dbpass';
Query OK, 0 rows affected (0.003 sec)
MariaDB [(none)]> flush privileges
三、创建用户、修改配置文件
1.创建OpenStack的Glance用户
创建用户前,需要首先执行管理员环境变量脚本(此处已经在~/.bashrc 中定义过了)可以参考之前部署**------openstack部署前篇
创建用户glance
[root@ct ~]# openstack user create --domain default --password glance_pass glance
2.将glance用户添加到service项目中,并且针对这个项目拥有admin权限
[root@ct ~]# openstack role add --project service --user glance admin /////注册glance的API,需要对service项目有admin权限
3.创建service服务
[root@ct ~]# openstack service create --name glance --description "OpenStack image" image+-------------+----------------------------------+
| Field | Value |
+-------------+----------------------------------+
| description | OpenStack image |
| enabled | True |
| id | 979b156197614c11b85d337895862498 |
| name | glance ##名称 |
| type | image ##类型 |
+-------------+----------------------------------+
查看
[root@ct ~]# openstack service list
+----------------------------------+----------+----------+
| ID | Name | Type |
+----------------------------------+----------+----------+
| 63f2acafa789462282ee61a531ee3c4b | keystone | identity |
| 979b156197614c11b85d337895862498 | glance | image |
+----------------------------------+----------+----------+
4.创建镜像服务 API 端点
OpenStack使用三种API端点代表三种服务:admin、internal、public
public
[root@ct ~]# openstack endpoint create --region regionone image public http://ct:9292
+--------------+----------------------------------+
| Field | Value |
+--------------+----------------------------------+
| enabled | True |
| id | b43d9ca884ff4095b87dd80bd5c42143 |
| interface | public |
| region | regionone |
| region_id | regionone |
| service_id | 979b156197614c11b85d337895862498 |
| service_name | glance |
| service_type | image |
| url | http://ct:9292 |
+--------------+----------------------------------+
admin
[root@ct ~]# openstack endpoint create --region regionone image admin http://ct:9292
+--------------+----------------------------------+
| Field | Value |
+--------------+----------------------------------+
| enabled | True |
| id | 1f14f1d58c414cc88349b3505afae38f |
| interface | admin |
| region | regionone |
| region_id | regionone |
| service_id | 979b156197614c11b85d337895862498 |
| service_name | glance |
| service_type | image |
| url | http://ct:9292 |
+--------------+----------------------------------+
internal
[root@ct ~]# openstack endpoint create --region regionone image internal http://ct:9292
+--------------+----------------------------------+
| Field | Value |
+--------------+----------------------------------+
| enabled | True |
| id | 2579dfc448454acb908010628f1c6b42 |
| interface | internal |
| region | regionone |
| region_id | regionone |
| service_id | 979b156197614c11b85d337895862498 |
| service_name | glance |
| service_type | image |
| url | http://ct:9292 |
+--------------+----------------------------------+
5.安装 openstack-glance 软件包
[root@ct ~]# yum -y install openstack-glance
6.修改glance-api.conf配置文件
传入
openstack-config --set /etc/glance/glance-api.conf database connection mysql+pymysql://glance:GLANCE_DBPASS@ct/glance
openstack-config --set /etc/glance/glance-api.conf keystone_authtoken www_authenticate_uri http://ct:5000
openstack-config --set /etc/glance/glance-api.conf keystone_authtoken auth_url http://ct:5000
openstack-config --set /etc/glance/glance-api.conf keystone_authtoken memcached_servers ct:11211
openstack-config --set /etc/glance/glance-api.conf keystone_authtoken auth_type password
openstack-config --set /etc/glance/glance-api.conf keystone_authtoken project_domain_name Default
openstack-config --set /etc/glance/glance-api.conf keystone_authtoken user_domain_name Default
openstack-config --set /etc/glance/glance-api.conf keystone_authtoken project_name service
openstack-config --set /etc/glance/glance-api.conf keystone_authtoken username glance
openstack-config --set /etc/glance/glance-api.conf keystone_authtoken password GLANCE_PASS
openstack-config --set /etc/glance/glance-api.conf paste_deploy flavor keystone
openstack-config --set /etc/glance/glance-api.conf glance_store stores file,http
openstack-config --set /etc/glance/glance-api.conf glance_store default_store file
openstack-config --set /etc/glance/glance-api.conf glance_store filesystem_store_datadir /var/lib/glance/images/
列出查看
[root@ct glance]# grep '^[^#]' glance-api.conf
[DEFAULT]
[cinder]
[cors]
[database]
connection = mysql+pymysql://glance:GLANCE_DBPASS@ct/glance
[file]
[glance.store.http.store]
[glance.store.rbd.store]
[glance.store.sheepdog.store]
[glance.store.swift.store]
[glance.store.vmware_datastore.store]
[glance_store]
stores = file,http
default_store = file
filesystem_store_datadir = /var/lib/glance/images/
[image_format]
[keystone_authtoken]
www_authenticate_uri = http://ct:5000
auth_url = http://ct:5000
memcached_servers = ct:11211
auth_type = password
project_domain_name = Default
user_domain_name = Default
project_name = service
username = glance
password = GLANCE_PASS
[oslo_concurrency]
[oslo_messaging_amqp]
[oslo_messaging_kafka]
[oslo_messaging_notifications]
[oslo_messaging_rabbit]
[oslo_middleware]
[oslo_policy]
[paste_deploy]
flavor = keystone
[profiler]
[store_type_location_strategy]
[task]
[taskflow_executor]
文件备份
[root@ct glance]# cp -a /etc/glance/glance-api.conf{,.bak}
修改/etc/glance/glance-registry.conf
openstack-config --set /etc/glance/glance-registry.conf database connection mysql+pymysql://glance:GLANCE_DBPASS@ct/glance
openstack-config --set /etc/glance/glance-registry.conf keystone_authtoken www_authenticate_uri http://ct:5000
openstack-config --set /etc/glance/glance-registry.conf keystone_authtoken auth_url http://ct:5000
openstack-config --set /etc/glance/glance-registry.conf keystone_authtoken memcached_servers ct:11211
openstack-config --set /etc/glance/glance-registry.conf keystone_authtoken auth_type password
openstack-config --set /etc/glance/glance-registry.conf keystone_authtoken project_domain_name Default
openstack-config --set /etc/glance/glance-registry.conf keystone_authtoken user_domain_name Default
openstack-config --set /etc/glance/glance-registry.conf keystone_authtoken project_name service
openstack-config --set /etc/glance/glance-registry.conf keystone_authtoken username glance
openstack-config --set /etc/glance/glance-registry.conf keystone_authtoken password GLANCE_PASS
openstack-config --set /etc/glance/glance-registry.conf paste_deploy flavor keystone
openstack-config --set /etc/glance/glance-registry.conf glance_store stores file,http
openstack-config --set /etc/glance/glance-registry.conf glance_store default_store file
openstack-config --set /etc/glance/glance-registry.conf glance_store filesystem_store_datadir /var/lib/glance/images/
文件备份
cp -a /etc/glance/glance-registry.conf{,.bak}
7.初始化glance数据库,生成相关表结构
[root@ct glance]# su -s /bin/sh -c "glance-manage db_sync" glance
8.开启glance服务
[root@ct glance]# systemctl enable openstack-glance-api.service
Created symlink from /etc/systemd/system/multi-user.target.wants/openstack-glance-api.service to /usr/lib/systemd/system/openstack-glance-api.service.
[root@ct glance]# systemctl start openstack-glance-api.service
查看端口
[root@ct glance]# netstat -natp | grep 9292
tcp 0 0 0.0.0.0:9292 0.0.0.0:* LISTEN 65234/python2
9.赋予openstack-glance-api.service服务对存储设备的可写权限
-h:值对符号连接/软链接的文件修改
[root@ct glance]# chown -hR glance:glance /var/lib/glance/
镜像导入
wget http://download.cirros-cloud.net/0.3.5/cirros-0.3.5-x86_64-disk.img
上传镜像到镜像服务,使用qcow2磁盘格式:
# openstack image create "cirros" \ #创建的镜像的名字为cirros
--file cirros-0.3.5-x86_64-disk.img \ #镜像来自一个文件
--disk-format qcow2 --container-format bare \ #镜像以qcow2磁盘格式上传,类型为一般的类型
--public #镜像是否共享出去
验证镜像是否上传成功
openstack image list 或者 # glance image-list
疑难小结
可能会出现错误
k.img –disk-format qcow2 –container-format bare –public
500 Internal Server Error: The server has either erred or is incapable of performing the requested operation. (HTTP 500)
可能是你之前的配置有错误,唯一的方法就是检查以前的错误。改过之后记住要重新初始化数据库,检查一下数据库中有没有表,比如这样,我检查一下glance中的表
然后重点检查
1./etc/glance/glance-api.conf
2./etc/glance/glance-registry.conf
这两个配置文件。
如果还不对,那就是你的keystone配置的有问题。