OpenStack Imageサービス(Glance)の概要とイメージ登録



##Imageサービスとは
OpenStackでは、通常KVM仮想化技術を使って仮想マシンをユーザーに提供するが、その仮想マシンのイメージの登録や提供サービスがGlanceである。既存の仮想マシンイメージをインターネットから取得して、OpenStackのGlanceサービスに登録することで、ユーザーに仮想マシンを素早く提供できる。

##Imageインストール例
ここでは例として、コントローラーノード「controller」にGlanceをインストールする手順を記載する。また、話を単純化するためにイメージファイルは、コントローラーノードのファイルシステムに保存することにする。

###環境の前提
OS：Ubuntu 16.04
DB：MariaDB
OpenStack関連：KeyStoneをインストール、各種設定済み

###データベースの作成
MariaDBへアクセスし、glanceという名前のデータベースを作成、権限を設定する。grant行で指定した「glance@」の後に「'localhost'」を指定することで、ローカルホストからのデータベースへのアクセスを許可している。また、次のgrant行の「glance@」の後に「'%'」を指定することで、任意のホストからのアクセスを許可している。

```
# mysql -u<username> -p<password>
MariaDB [(none)]> create database glance;
Query OK, 1 row affected (0.00 sec)

MariaDB [(none)]> grant all privileges on glance.* to glance@'localhost' identified by 'Password1';
Query OK, 0 rows affected (0.00 sec)

MariaDB [(none)]> grant all privileges on glance.* to glance@'%' identified by 'Password1';
Query OK, 0 rows affected (0.00 sec)

MariaDB [(none)]> flush privileges;
Query OK, 0 rows affected (0.00 sec)

MariaDB [(none)]> exit
```

###Glanceの設定
設定は以下の流れで行う。

- admin用環境変数の設定
- Glanceユーザーの作成
- ロールの付与
- Glanceサービスの作成
- APIエンドポイントの作成
- Glanceパッケージのインストール
- 各種設定ファイルの編集
 
####admin用環境変数の設定
adminユーザー用の環境変数をロードするスクリプト「admin-openrc」を実行する。

```
# cd
# pwd
/root
# . ./admin-openrc
```

####Glanceユーザーの作成
「default」ドメインに所属する「glance」ユーザーを作成する。今回の例ではパスワードを「Password1」に設定した。

```
# openstack user create --domain default --password Password1 glance
+-----------+----------------------------------+
| Field     | Value                            |
+-----------+----------------------------------+
| domain_id | 0fad132f315d49e4ae2d1ee5d0f8fb95 |
| enabled   | True                             |
| id        | b9efd65e12c54bd3825ff8194b2f41ca |
| name      | glance                           |
+-----------+----------------------------------+

```

####glanceユーザーへのロールの付与
「service」プロジェクトと「glance」ユーザーに「admin」ロールを付与する。

```
# openstack role add --project service --user glance admin
```

####Glanceサービスの作成
「glance」サービスを作成する。サービスタイプは「image」を指定する。

```
# openstack service create --name glance --description "OpenStack Image service" image
+-------------+----------------------------------+
| Field       | Value                            |
+-------------+----------------------------------+
| description | OpenStack Image service          |
| enabled     | True                             |
| id          | a9d54694a6c24195a9a8032d8c7458bb |
| name        | glance                           |
| type        | image                            |
+-------------+----------------------------------+
```

####APIエンドポイントの作成
APIエンドポイントとして「public」、「internal」、「admin」の3つを作成する。この例では「--region」に「RegionOne」を指定する。また、クラウドコントローラーのホスト名として設定している「controller」に9292番ポートを指定する。

```
# openstack endpoint create --region RegionOne image public http://controller:9292
+--------------+----------------------------------+
| Field        | Value                            |
+--------------+----------------------------------+
| enabled      | True                             |
| id           | 26da78acdef6481bbbf54e315d811618 |
| interface    | public                           |
| region       | RegionOne                        |
| region_id    | RegionOne                        |
| service_id   | a9d54694a6c24195a9a8032d8c7458bb |
| service_name | glance                           |
| service_type | image                            |
| url          | http://controller:9292           |
+--------------+----------------------------------+

# openstack endpoint create --region RegionOne image internal http://controller:9292
+--------------+----------------------------------+
| Field        | Value                            |
+--------------+----------------------------------+
| enabled      | True                             |
| id           | 0d1904bae6dc4d939217776e69224d5a |
| interface    | internal                         |
| region       | RegionOne                        |
| region_id    | RegionOne                        |
| service_id   | a9d54694a6c24195a9a8032d8c7458bb |
| service_name | glance                           |
| service_type | image                            |
| url          | http://controller:9292           |
+--------------+----------------------------------+

# openstack endpoint create --region RegionOne image admin http://controller:9292
+--------------+----------------------------------+
| Field        | Value                            |
+--------------+----------------------------------+
| enabled      | True                             |
| id           | 2b1b1e0db95341958b6fd12ceca21624 |
| interface    | admin                            |
| region       | RegionOne                        |
| region_id    | RegionOne                        |
| service_id   | a9d54694a6c24195a9a8032d8c7458bb |
| service_name | glance                           |
| service_type | image                            |
| url          | http://controller:9292           |
+--------------+----------------------------------+

```

####Glanceパッケージのインストールと設定
コントローラーノード上でGlanceのパッケージをインストールする。

```
# apt-get install -y glance
```
Glanceの設定ファイル/etc/glance/glance-api.confを編集する。

```
# cp /etc/glance/glance-api.conf /etc/glance/glance-api.conf.org
# vi /etc/glance/glance-api.conf
...
[database]
...
connection = mysql+pymysql://glance:Password1@controller/glance ←①

[glance_store]
...
stores = file,http
...
default_store = file
...
filesystem_store_datadir = /var/lib/glance/images/

[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 = Password1 ←⑩
...
[paste_deploy]
...
flavor = keystone
...

```
設定の解説
 ① MariaDBにアクセスするglanceユーザーとパスワードを指定。ホスト名はcontrollerを指定。
② 認証URLは、ホスト名にcontroller、ポート番号に5000を指定
③ 認証URLは、ホスト名にcontroller、ポート番号に35357を指定。
④ Memcachedサーバーとしてcontrollerを指定。ポート番号は11211を指定。
⑤ 認証方法はパスワードで行う
⑥ プロジェクトのドメイン名「default」を指定。
⑦ ユーザーのドメイン名「default」を指定。
⑧ プロジェクト名「service」を指定。
⑨ ユーザー「glance」でアクセス。
⑩ ユーザー「glance」のパスワードを「Password1」に設定。

####glance-registry.confファイルの編集

```
# cp /etc/glance/glance-registry.conf /etc/glance/glance-registry.conf.org
# vi /etc/glance/glance-registry.conf

[database]
...
connection = mysql+pymysql://glance:Password1@controller/glance 
...
[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 = Password1
...
[paste_deploy]
...
flavor = keystone
...
```

####データベースへの登録
Glanceに関する情報をMaraiaDBのデータベースに登録する。

```
# su -s /bin/sh -c "glance-manage db_sync" glance
/usr/lib/python2.7/dist-packages/oslo_db/sqlalchemy/enginefacade.py:1056: OsloDBDeprecationWarning: EngineFacade is d                                                                                                                        eprecated; please use oslo_db.sqlalchemy.enginefacade
  expire_on_commit=expire_on_commit, _conf=conf)

```

####サービスの再起動
Glanceのサービスを再起動する。

```
# systemctl restart glance-registry
# systemctl restart glance-api
# systemctl status glance-registry glance-api
# systemctl enable glance-api glance-registry

```

OSを再起動する。再起動後にGlanceのサービスが利用できるか確認する。

```
# pwd
/root
# . ./admin-openrc
# glance image-list
+----+------+
| ID | Name |
+----+------+
+----+------+
```
以上でGlanceによるイメージサービスがコントローラーノードで利用できるようになった。

###CirrOSイメージを登録する
Gkanceのサービスを利用してユーザーが仮想マシンとして利用するためのOSイメージをクラウド環境に登録する。Glanceのテスト用イメージとして、CirrOSというミニOSのイメージを使う。このイメージは無料で入手でき、クラウド基盤のGlanceの初期簡易テスト用OSとして広く利用されている。

####admin-openrcスクリプトの確認
adminユーザーの環境変数をロードするスクリプトadmin-openrcの内容を確認する。

```
# cd
# pwd
/root
# cat ./admin-openrc
export OS_PROJECT_DOMAIN_NAME=default
export OS_USER_DOMAIN_NAME=default
export OS_PROJECT_NAME=admin
export OS_USERNAME=admin
export OS_PASSWORD=Password1
export OS_AUTH_URL=http://controller:35357/v3
export OS_IDENTITY_API_VERSION=3
export OS_IMAGE_API_VERSION=2
```

####admin-openrcスクリプトの実行
admin-openrcスクリプトを実行する。

```
# . ./admin-openrc
```

####CirrOSイメージのダウンロード
wgetコマンドを使い、CirrOSイメージをインターネットからダウンロードしコントローラーノードに配置する。

```
# wget http://download.cirros-cloud.net0.3.4/cirros-0.3.4-x86_64-disk.img
```

####CirrOSイメージの確認
ダウンロードしたイメージのファイル形式とサイズを確認すうｒ。ファイル形式がqcow2形式であることを確認する。CirrOSはテスト用のミニOSなので、サイズは13MB程度。

```
# file cirros-0.3.4-x86_64-disk.img
cirros-0.3.4-x86_64-disk.img: QEMU QCOW Image (v2), 41126400 bytes
# ls -lh cirros-0.3.4-x86_64-disk.img
-rw-r--r-- 1 root root 13M Jan 27  2020 cirros-0.3.4-x86_64-disk.img
```

####GlanceへのCirrOSイメージの登録
CirrOSのイメージをGlanceに登録する。ディスクふぉ＾マットは「qcow2」を指定し、コンテナフォーマットは「bare」を指定。イメージを公開するため「--public」オプションを付与する。

```
# openstack image create "cirros" --file cirros-0.3.4-x86_64-disk.img --disk-format qcow2 --container-format bare --public
+------------------+------------------------------------------------------+
| Field            | Value                                                |
+------------------+------------------------------------------------------+
| checksum         | ee1eca47dc88f4879d8a229cc70a07c6                     |
| container_format | bare                                                 |
| created_at       | 2021-03-16T09:33:08Z                                 |
| disk_format      | qcow2                                                |
| file             | /v2/images/346b6fed-31ab-4137-902f-add27d74c57c/file |
| id               | 346b6fed-31ab-4137-902f-add27d74c57c                 |
| min_disk         | 0                                                    |
| min_ram          | 0                                                    |
| name             | cirros                                               |
| owner            | dc0abf4629ae45fba2e9d1669c276207                     |
| protected        | False                                                |
| schema           | /v2/schemas/image                                    |
| size             | 13287936                                             |
| status           | active                                               |
| tags             |                                                      |
| updated_at       | 2021-03-16T09:33:08Z                                 |
| virtual_size     | None                                                 |
| visibility       | public                                               |
+------------------+------------------------------------------------------+

```

イメージが登録されているか確認する。

```
# openstack image list
+--------------------------------------+--------+--------+
| ID                                   | Name   | Status |
+--------------------------------------+--------+--------+
| 346b6fed-31ab-4137-902f-add27d74c57c | cirros | active |
+--------------------------------------+--------+--------+
```
これでイメージの登録完了。