OpenStack Class2014.12.03 17:45

안녕하세요~! 


오늘은 지난 시간에 이어 운영체제 이미지를 관리하는 Glance와 인스턴스 생성을 관리하는 Nova를 설치해 볼 예정입니다.

Glance는 컨트롤러 노드에만 설치되는 서비스이며, Nova는 컨트롤러 노드와 컴퓨트 노드에 설치가 됩니다 그럼 컨트롤러 노드에 설치되는 Nova는 어떤것일까요? 하이퍼바이저가 설치되는 컴퓨트 노드들을 관리하기 위한 Nova Server에 해당하는 서비스들이 설치가 됩니다.


그럼, 지금부터 Glance와 Nova를 설치해 보도록 하겠습니다.


Glance 설치

가상서버, 즉 인스턴스를 생성하려면 운영체제가 필요합니다. 이런 운영체제 이미지 파일을 관리하는 서비스가 있는데 이것이 바로 Glance입니다.

 

1.     Glanceglanceclient를 설치합니다.

$ sudo apt-get install glance python-glanceclient

 

2.     Glance 설치가 완료되면 /etc/glance/glance-api.conf 파일에 rabbitMQ 서버 정보와 데이터베이스 정보를 입력합니다.

$ sudo vi /etc/glance/glance-api.conf
[DEFAULT]
...
rpc_backend = rabbit
rabbit_host = 10.10.15.11
rabbit_password = rabbitpass
...
[database]
#sqlite_db = /var/lib/glance/glance.sqlite
connection = mysql://glance:glancedbpass@10.10.15.11/glance
…..
#backend = sqlalchemy
backend = mysql

 

3.     Glance-registry.conf 파일의 데이터베이스 정보도 수정합니다.

$ sudo vi /etc/glance/glance-registry.conf
...
[database]
#sqlite_db = /var/lib/glance/glance.sqlite
connection = mysql://glance:glancedbpass@10.10.15.11/glance
…
#backend = sqlalchemy
backend = mysql

 

4.     기본 데이터베이스는 Mysql이므로 기존에 있는 sqlite 파일은 삭제합니다.

$ sudo rm /var/lib/glance/glance.sqlite

 

5.     이번에는 mysql에 접속해서 glacne 데이터베이스와 glance 계정을 생성합니다. 이때 컨트롤러 노드나 다른 노드에서 접속이 가능하도록 권한을 할당합니다.

$ mysql -u root -p
mysql> CREATE DATABASE glance;
Query OK, 1 row affected (0.00 sec)
 
mysql> GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'localhost' \
IDENTIFIED BY 'glancedbpass';
Query OK, 0 rows affected (0.00 sec)
 
mysql> GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'%' \
IDENTIFIED BY 'glancedbpass';
Query OK, 0 rows affected (0.01 sec)
 
mysql> exit
Bye


6.     Glance 데이터베이스를 생성했으면 테이블을 생성해야 합니다. glance 계정을 별도로 생성하지 않고도 glance-manage 명령어를 이용해서 테이블을 생성할 수 있습니다.

$ sudo su -s /bin/sh -c "glance-manage db_sync" glance

 

7.     이번에는 keystoneglance 계정을 생성하고 service 테넌트에 생성한 glance 계정을 추가합니다. 오픈스택의 모든 서비스는 서비스 테넌트에 추가해야 하며, glance 역시 서비스이므로 서비스 테넌트에 추가해야 합니다.

$ keystone user-create --name=glance --pass=glancepass \
   --email=glance@email.com
+----------+----------------------------------+
| Property |              Value               |
+----------+----------------------------------+
|  email   |         glance@email.com         |
| enabled  |               True               |
|    id    | 106b23281a69448382fa59ed468f05b8 |
|   name   |              glance              |
| username |              glance              |
+----------+----------------------------------+
$ keystone user-role-add --user=glance --tenant=service --role=admin

 

8.     Keystone 서비스 생성이 완료되면 생성한 정보를 glance 환경설정 파일에 적용해야 합니다. glance-api.conf는 다음과 같이 설정합니다.

$ sudo vi /etc/glance/glance-api.conf
[keystone_authtoken]
auth_uri = http://10.10.15.11:5000
auth_host = 10.10.15.11
auth_port = 35357
auth_protocol = http
admin_tenant_name = service
admin_user = glance
admin_password = glancepass
[paste_deploy]
...
flavor = keystone

 

9.     Glance-registry.conf 파일 역시 keystone 정보를 다음과 같이 추가합니다.

$ sudo vi /etc/glance/glance-registry.conf
[keystone_authtoken]
auth_uri = http://10.10.15.11:5000
auth_host = 10.10.15.11
auth_port = 35357
auth_protocol = http
admin_tenant_name = service
admin_user = glance
admin_password = glancepass
[paste_deploy]
...
flavor = keystone

 

10.  사용자와 다른 서비스들이 접속할 수 있도록 glance 서비스와 endpoint를 생성합니다.

$ keystone service-create --name=glance --type=image \
--description="OpenStack Image Service"
+-------------+----------------------------------+
|   Property  |              Value               |
+-------------+----------------------------------+
| description |     OpenStack Image Service      |
|   enabled   |               True               |
|      id     | 7b19720a6a7c4ddcb372230d399f8e65 |
|     name    |              glance              |
|     type    |              image               |
+-------------+----------------------------------+
$ keystone endpoint-create \
  --service-id=7b19720a6a7c4ddcb372230d399f8e65 \
  --publicurl=http://10.10.15.11:9292 \
  --internalurl=http://10.10.15.11:9292 \
--adminurl=http://10.10.15.11:9292
+-------------+----------------------------------+
|   Property  |              Value               |
+-------------+----------------------------------+
|   adminurl  |     http://10.10.15.11:9292      |
|      id     | 182c5dba16474dc9b9392bdfa649475d |
| internalurl |     http://10.10.15.11:9292      |
|  publicurl  |     http://10.10.15.11:9292      |
|    region   |            regionOne             |
|  service_id | 7b19720a6a7c4ddcb372230d399f8e65 |
+-------------+----------------------------------+

 

11.  Keystone 서비스와 endpoint 생성까지 완료하면 glance-registry glance-api 서비스를 재시작합니다.

$ sudo service glance-registry restart
glance-registry stop/waiting
glance-registry start/running, process 3339
$ sudo service glance-api restart
glance-api stop/waiting
glance-api start/running, process 3356

 

12.  이제 이미지 하나를 내려 받아 Glance 서비스에 등록하겠습니다. 우선 images라는 폴더를 하나 생성해서 해당 폴더에 들어간 후 wget을 이용해서 가장 가벼운 cirros 이미지 하나를 내려 받습니다.

$ mkdir images
$ cd images/
$ wget http://cdn.download.cirros-cloud.net/0.3.2/cirros-0.3.2-x86_64-disk.img

 

13.  이미지를 내려 받았으면 keystone 설치 시 생성했던 사용자 정보 환경변수 파일을 export한 후 glance 명령어를 이용해서 내려 받은 이미지를 다음과 같이 등록합니다.

$ source admin-openrc.sh
$ glance image-create --name "cirros-0.3.2-x86_64" --disk-format qcow2 \
  --container-format bare --is-public True --progress < cirros-0.3.2-x86_64-disk.img
[=============================>] 100%
+------------------+--------------------------------------+
| Property         | Value                                |
+------------------+--------------------------------------+
| checksum         | 64d7c1cd2b6f60c92c14662941cb7913     |
| container_format | bare                                 |
| created_at       | 2014-05-27T14:14:41                  |
| deleted          | False                                |
| deleted_at       | None                                 |
| disk_format      | qcow2                                |
| id               | 3196da77-98fd-40e6-acb9-8637204854c1 |
| is_public        | True                                 |
| min_disk         | 0                                    |
| min_ram          | 0                                    |
| name             | cirros-0.3.2-x86_64                  |
| owner            | 7175efd4d22e41aa8903b0cab45ffaa6     |
| protected        | False                                |
| size             | 13167616                             |
| status           | active                               |
| updated_at       | 2014-05-27T14:14:42                  |
| virtual_size     | None                                 |
+------------------+--------------------------------------+

 

14.  이번에는 이미지 목록을 한번 확인합니다.

$ glance image-list
+--------------------------------------+---------------------+-------------+------------------+----------+--------+
| ID                                   | Name                | Disk Format | Container Format | Size     | Status |
+--------------------------------------+---------------------+-------------+------------------+----------+--------+
| 3196da77-98fd-40e6-acb9-8637204854c1 | cirros-0.3.2-x86_64 | qcow2       | bare             | 13167616 | active |
+--------------------------------------+---------------------+-------------+------------------+----------+--------+



이렇게 해서 Glance 설치를 모두 마쳤습니다. 이번에는 Nova를 설치해 보도록 하겠습니다. 예전에 노드별로 설치되는 Nova 를 다룬적이 있었는데 기억이 나시나요? 다시 한번 더 보고 넘어가 보도록 하겠습니다.



Nova Management 설치

오픈스택의 가장 핵심 기능은 가상서버 즉 인스턴스를 생성하고 삭제하는 일입니다. 이런 인스턴스를 생성하는 역할을 바로 Nova에서 담당합니다. Nova 서버를 설치하겠습니다

 

1.     우선 다음과 같이 Nova 서비스를 설치합니다. Nova-api는 사용자가 접속할 수 있는 REST API nova-consoleauthnova-novncproxy인스턴스 생성 시 인스턴스에 접속해서 생성한 운영체제를 사용할 수 있도록 해주는 웹 콘솔 역할을 합니다.

$ sudo apt-get install nova-api nova-cert nova-conductor nova-consoleauth \
  nova-novncproxy nova-scheduler python-novaclient


2.     nova 설치가 완료되면 /etc/nova/nova.conf RabbitMQ 정보와 VNC 정보, 데이터베이스 정보를 추가합니다.

$ sudo vi /etc/nova/nova.conf
[DEFAULT]
...
rpc_backend = rabbit
rabbit_host = 10.10.15.11
rabbit_password = rabbitpass
...
my_ip = 10.10.15.11
vncserver_listen = 10.10.15.11
vncserver_proxyclient_address = 10.10.15.11
 
[database]
connection = mysql://nova:novadbpass@10.10.15.11/nova

 

3.     기본 데이터베이스는 mysql이므로 기존의 sqlite 파일을 삭제합니다.

$ sudo rm /var/lib/nova/nova.sqlite

 

4.     이번에는 mysql에 접속해서 nova 데이터베이스와 계정을 생성하고, 컨트롤러 노드와 다른 노드에서도 접속이 가능하도록 접속 권한을 할당합니다.

$ mysql -u root -p
mysql> CREATE DATABASE nova;
Query OK, 1 row affected (0.00 sec)
 
mysql> GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'localhost' \
IDENTIFIED BY 'novadbpass';
Query OK, 0 rows affected (0.00 sec)
 
mysql> GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'%' \
IDENTIFIED BY 'novadbpass';
Query OK, 0 rows affected (0.00 sec)
 
mysql> exit
Bye

 

5.     Nova 테이블 생성을 위하여 nova-manage db sync 명령을 다음과 같이 실행합니다.

$ sudo su -s /bin/sh -c "nova-manage db sync" nova
2014-05-27 23:25:38.915 8124 INFO migrate.versioning.api [-] 215 -> 216... 
2014-05-27 23:25:42.834 8124 INFO migrate.versioning.api [-] done
….
2014-05-27 23:25:43.580 8124 INFO migrate.versioning.api [-] 232 -> 233... 
2014-05-27 23:25:43.662 8124 INFO migrate.versioning.api [-] done

 

6.     테이블 생성이 완료되면 인증을 위하여 keystonenova 계정을 추가하고, 서비스 테넌트에 nova를 추가합니다. 오픈스택의 모든 서비스는 서비스 테넌트에 추가해야 하며, nova 역시 서비스이므로 서비스 테넌트에 추가해야 합니다.

$ keystone user-create --name=nova --pass=novapass --email=nova@email.com
+----------+----------------------------------+
| Property |              Value               |
+----------+----------------------------------+
|  email   |          nova@email.com          |
| enabled  |               True               |
|    id    | f107e0e42a6746698b7d86ce7bb9d6e3 |
|   name   |               nova               |
| username |               nova               |
+----------+----------------------------------+
$ keystone user-role-add --user=nova --tenant=service --role=admin


7.     /etc/nova/nova.conf에서 방금 생성한 keystone 정보를 keystone_authtoken 부분에 추가합니다.

$ sudo vi /etc/nova/nova.conf
[DEFAULT]
...
auth_strategy = keystone
 
[keystone_authtoken]
auth_uri = http://10.10.15.11:5000
auth_host = 10.10.15.11
auth_port = 35357
auth_protocol = http
admin_tenant_name = service
admin_user = nova
admin_password = novapass

 

8.     사용자와 다른 서비스들이 접속할 수 있도록 nova 서비스와 endpoint를 생성합니다.

$ keystone service-create --name=nova --type=compute \
--description="OpenStack Compute"
+-------------+----------------------------------+
|   Property  |              Value               |
+-------------+----------------------------------+
| description |        OpenStack Compute         |
|   enabled   |               True               |
|      id     | 606bcc456b4740d19cf833c39d28f03e |
|     name    |               nova               |
|     type    |             compute              |
+-------------+----------------------------------+
$ keystone endpoint-create \
  --service-id=606bcc456b4740d19cf833c39d28f03e \
  --publicurl=http://10.10.15.11:8774/v2/%\(tenant_id\)s \
  --internalurl=http://10.10.15.11:8774/v2/%\(tenant_id\)s \
--adminurl=http://10.10.15.11:8774/v2/%\(tenant_id\)s
+-------------+------------------------------------------+
|   Property  |                  Value                   |
+-------------+------------------------------------------+
|   adminurl  | http://10.10.15.11:8774/v2/%(tenant_id)s |
|      id     |     04857856fbf04dabae36ca6e4378919d     |
| internalurl | http://10.10.15.11:8774/v2/%(tenant_id)s |
|  publicurl  | http://10.10.15.11:8774/v2/%(tenant_id)s |
|    region   |                regionOne                 |
|  service_id |     606bcc456b4740d19cf833c39d28f03e     |
+-------------+------------------------------------------+

 

9.     모든 설정이 완료되면 설치했던 nova 관련 서비스들을 모두 재시작합니다.

$ sudo service nova-api restart
nova-api stop/waiting
nova-api start/running, process 8288
$ sudo service nova-cert restart
nova-cert stop/waiting
nova-cert start/running, process 8323
$ sudo service nova-consoleauth restart
nova-consoleauth stop/waiting
nova-consoleauth start/running, process 8345
$ sudo service nova-scheduler restart
nova-scheduler stop/waiting
nova-scheduler start/running, process 8370
$ sudo service nova-conductor restart
nova-conductor stop/waiting
nova-conductor start/running, process 8393
$ sudo service nova-novncproxy restart
nova-novncproxy stop/waiting
nova-novncproxy start/running, process 8422

 

10.  이제 nova가 정상적으로 설치되었는지 nova 명령어로 이미지 목록을 확인합니다.

$ source admin-openrc.sh
$ nova image-list
+--------------------------------------+---------------------+--------+--------+
| ID                                   | Name                | Status | Server |
+--------------------------------------+---------------------+--------+--------+
| 3196da77-98fd-40e6-acb9-8637204854c1 | cirros-0.3.2-x86_64 | ACTIVE |        |
+--------------------------------------+---------------------+--------+--------+

 

이렇게 해서 Glance와 Nova를 설치해 보았습니다. 다음 시간에는 네트워크 서비스인 Neutron과 데쉬보드 서비스인 Horizon을 설치해 보도록 하겠습니다. 그럼, 다음 시간에 다시 만나요~~~ ^^

Posted by 나리 짱!!! naleejang