티스토리 뷰

안녕하세요~! 


오늘은 지난 시간에 이어 운영체제 이미지를 관리하는 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을 설치해 보도록 하겠습니다. 그럼, 다음 시간에 다시 만나요~~~ ^^

댓글
  • 프로필사진 열공해보자 안녕하세요
    진행중에 막이는 부분있어 문의 드립니다.
    아래와 같이 이미지 등록하면 에러가 발생하네요.
    어느 부분이 문제인걸까요?
    ~/images$ 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
    Error communicating with http://10.10.15.11:9292 [Errno 111] Connection refused
    2015.01.06 12:58
  • 프로필사진 Favicon of https://naleejang.tistory.com BlogIcon naleejang 이렇게 문의를 해 주시면 제가 어떻게 도와 드릴 방법이 없습니다. ㅠㅠ
    그런데 아마도 Glance 서버가 정상 동작을 하는지 확인을 해 보셔야 할 것 같습니다.
    2015.01.08 11:31 신고
  • 프로필사진 Favicon of https://sjyun.tistory.com BlogIcon chris's 10.10.15.11 => 님의 controller server ip가 맞나요? 2016.02.16 16:55 신고
  • 프로필사진 Favicon of http://blog.naver.com/admass BlogIcon mass 덕분에 잘 따라하고 있습니다. 감사합니다. (__)
    중간에 cirros 이미지 위치가 바꼈더라구요. ^^

    wget http://download.cirros-cloud.net/0.3.4/cirros-0.3.4-x86_64-disk.img

    에서 받으시면 될 것 같습니다.
    2015.07.20 19:55
  • 프로필사진 Favicon of https://naleejang.tistory.com BlogIcon naleejang 네~~ 감사합니다. 좋은 정보 알려주셔서.. 2015.07.21 18:22 신고
  • 프로필사진 Favicon of https://sjyun.tistory.com BlogIcon chris's glance_api.conf file의 [keystone_authtoken] 설정부분을 블로그 내용대로 설정하면(icehouse) auth fail 에러가 납니다.

    찾아보니 [keystone_authtoken] 설정부분이 kilo 버전은 좀 다르네요.
    http://docs.openstack.org/kilo/config-reference/content/section_glance-api.conf.html

    아래처럼 설정하니까 정상동작합니다.(이후 단계에서도 동일하네요.)

    [keystone_authtoken]
    identity_uri = http://your_controller_server_ip:35357
    admin_tenant_name = service
    admin_user = glance
    admin_password = glancepwd
    revocation_cache_time = 10
    2016.02.16 17:09 신고
  • 프로필사진 naleejang 네~ 맞아요.
    새로운 버전이 릴리즈가 되면서 환경설정하는 파라메터나 옵션도 함께 바뀌지요~!!
    그래서, 오픈소스를 한다는것이 쉽지는 않은것 같습니다.
    계속 흐름을 습득해야 하니까요~!!
    2016.02.17 10:20
  • 프로필사진 jckim 궁금한부분이 위의 keystone create 등을 잘못입력하여 해당 내용을 수정하고싶을 경우 어떻게해야하나요?

    예를 들어서

    keystone endpoint-create 하고 publicurl 아이피가 1.1.1.1 이어야하는데 실수로, 1.1.1.2로 했을 경우 이부분 이미 키값을 만들어버려서 수정도못하는상태라서 처음부터 os깔고 다시 시작을 하게되네요. 거의 하루걸려서 했는데 다시엎었다는.. 이런경우 해당내용을 어떻게 수정해야하나요?

    위의 아이피 하나 잘못입력한것때문에 아래부분 모두 진행이안되어 다시 엎어야해서요 ㅜ_ㅜ
    2016.02.22 16:17
  • 프로필사진 naleejang 생성하신 EndPoint를 삭제하고 다시 생성하세요~!!
    EndPoint는 Keystone 명령어로 생성을 하지요?
    삭제 명령어는 Keystone Help 명령어에서 확인하실 수 있어요~!!
    2016.02.22 21:43
  • 프로필사진 2 ERROR: Unauthorized (HTTP 401)
    nova image-list 에서 에러가납니다.
    2016.05.13 23:42
  • 프로필사진 2 sudo apt-get install glance python-glanceclient
    패키지 목록을 읽는 중입니다... 완료
    의존성 트리를 만드는 중입니다
    상태 정보를 읽는 중입니다... 완료
    몇몇 패키지를 설치할 수 없습니다. 요청한 상황이 불가능할 수도 있고,
    불안정 배포판을 사용해서 일부 필요한 패키지를 아직 만들지 않았거나,
    아직 Incoming에서 나오지 않은 경우일 수도 있습니다.
    이 상황을 해결하는데 다음 정보가 도움이 될 수도 있습니다:

    다음 패키지의 의존성이 맞지 않습니다:
    glance : 의존: glance-api (= 1:2014.1.2-0ubuntu1.1) 하지만 %s 패키지를 설치하지 않을 것입니다
    의존: glance-registry (= 1:2014.1.2-0ubuntu1.1) 하지만 %s 패키지를 설치하지 않을 것입니다
    python-glanceclient : 의존: python-setuptools 하지만 %s 패키지를 설치하지 않을 것입니다
    E: 문제를 바로잡을 수 없습니다. 망가진 고정 패키지가 있습니다.

    왜이러죠?
    2016.05.14 09:54
  • 프로필사진 naleejang 설치 버전이 뭐예요?? 최신 릴리즈 버전으로 설치하신다면 그런 문제는 없어보이는데 이전 버전으로 설치하면 그런 문제가 발생할 수 있습니다. 2016.05.15 12:12
  • 프로필사진 BlogIcon 2 Ubuntu 14.05 데탑버전입니다 2016.05.15 12:25
  • 프로필사진 BlogIcon 2 sudo rm /var/lib/glance/glance.sqlite
    이과정에 해당디렉토리나 파일이 없다고 나오는데 이전과정을 분명 정상적으로 두번이나 시도했는데 두번다 마찬가지입니다 무시하고넘어가도되나요?
    이건 14.05 lts 서버 버전입니다
    2016.05.15 12:28
  • 프로필사진 naleejang 네~!!
    이 부분은 무시하셔도 됩니다. Sqlite 라는 데이터베이스를 안 쓰겠다는 뜻이니까요~!!
    2016.05.18 22:29
댓글쓰기 폼