Post

프로젝트 좀보이드(Project Zomboid) 서버 고도화③ - Openstack glance, nova 설치

프로젝트 좀보이드(Project Zomboid) 서버 고도화③ - Openstack glance, nova 설치

서버 구축기 이어서

지난 시간에 기본 시스템 구축과 keystone까지 설치했으니, 이번에는 나머지 요소들을 설치해보기로 한다.

모든 요소의 설치는 DB 생성→openstack 사용자 생성→패키지 설치 및 설정 파일 수정→DB 동기화 및 서비스 시작 순으로 이루어진다.

마찬가지로 모든 비밀번호는 openstack으로 통일하기로 한다.

Glance 설치

Glance는 openstack이 쓰는 이미지 저장소이다.

컴퓨터에 OS를 설치할 때 이미지를 usb 같은 저장장치에 탑재해 설치하는 것처럼,
openstack vm의 os 설치는 glance에 있는 이미지를 불러오는 식으로 진행한다.

DB 생성

keystone 때와 똑같이 진행한다. 마찬가지로 비밀번호는 openstack

1
mysql -u root
1
2
3
4
5
CREATE DATABASE glance;
GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'localhost' IDENTIFIED BY 'openstack';
GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'%' IDENTIFIED BY 'openstack';
FLUSH PRIVILEGES;
exit;

openstack 사용자 생성

이전에 만들었던 admin-openrc 환경변수 파일을 실행해 권한을 활성화한 다음

1
source ~/admin-openrc

service라는 프로젝트(테넌트)를 하나 만든다.
이 프로젝트는 openstack 요소 계정들이 소속될 프로젝트이다.

1
openstack project create --domain default --description "Service Project" service

그 다음 openstack에 glance라는 사용자를 생성하고, service 프로젝트에 대해 admin(관리자) 권한을 부여한다.

1
2
3
4
# default(기본) 도메인에 속하는, openstack 비밀번호를 지닌 glance 사용자 생성
openstack user create --domain default --password openstack glance
# service 프로젝트에서 glance 사용자를의 권한을 admin으로 지정
openstack role add --project service --user glance admin

마지막으로, glance 서비스를 등록하고, glance가 사용할 엔드포인트(서비스 접근용 url)를 추가한다.

1
2
3
4
5
6
7
# 서비스 이름은 glance, 유형은 image
openstack service create --name glance --description "OpenStack Image" image

# image 유형의 서비스에 대해, 외부/내부/관리자용 접근 url 생성
openstack endpoint create --region RegionOne image public http://172.30.1.86:9292
openstack endpoint create --region RegionOne image internal http://172.30.1.86:9292
openstack endpoint create --region RegionOne image admin http://172.30.1.86:9292

glance 패키지 설치 및 설정 파일 수정

1
dnf install -y openstack-glance

설치는 간단하다~ 설정 파일은 /etc/glance/glance-api.conf에 있다.

1
vi /etc/glance/glance-api.conf
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
[database]
# MariaDB 연결 정보
connection = mysql+pymysql://glance:openstack@172.30.1.86/glance

[keystone_authtoken]
# Keystone 인증 정보
www_authenticate_uri = http://172.30.1.86:5000/v3
auth_url = http://172.30.1.86:5000/v3
memcached_servers = 172.30.1.86:11211
auth_type = password
project_domain_name = Default
user_domain_name = Default
project_name = service
username = glance
password = openstack

[paste_deploy]
# 인증 방식을 Keystone으로 지정
flavor = keystone

[glance_store]
# 이미지가 실제로 저장될 방식과 로컬 디렉토리 경로
stores = file,http
default_store = file
filesystem_store_datadir = /var/lib/glance/images/

DB 동기화 및 서비스 시작

DB 동기화 작업으로 glance DB가 사용할 테이블을 셋팅한 다음

1
su -s /bin/sh -c "glance-manage db_sync" glance

서비스를 활성화한다!

1
systemctl enable --now openstack-glance-api

작동 테스트

glance가 잘 돌아가는지 테스트해 보려면, 실제로 이미지를 넣어보면 된다.

테스트용으로 많이 쓰는 cirros라는 가벼운 리눅스 이미지를 다운로드한 다음

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

아래 명령어를 통해 다운로드받은 이미지를 기반으로 glance 이미지를 생성해본다.

1
2
3
4
openstack image create "cirros" \
  --file cirros-0.6.3-x86_64-disk.img \
  --disk-format qcow2 --container-format bare \
  --public

openstack image list를 했을 때 cirros 이미지가 나오면 정상~

1
openstack image list

zom5-img1

nova 설치

드디어 가상 머신을 관리하는 nova 설치로 왔다! 그런데 그 전에…

placement 설치

openstack이 발전하고 nova가 비대해짐에 따라, 기존 nova에 속해 있었던 자원(CPU/RAM/DISK)를 담당하는 요소가 placement로 분리되었다.

따라서 nova를 설치하기 전, placement를 먼저 설치해 줘야 한다. 설치 방법은 동일하다~

DB 생성

1
mysql -u root
1
2
3
4
5
CREATE DATABASE placement;
GRANT ALL PRIVILEGES ON placement.* TO 'placement'@'localhost' IDENTIFIED BY 'openstack';
GRANT ALL PRIVILEGES ON placement.* TO 'placement'@'%' IDENTIFIED BY 'openstack';
FLUSH PRIVILEGES;
exit;

placement 사용자 및 서비스 생성

1
2
3
4
5
6
7
8
9
10
source ~/admin-openrc

openstack user create --domain default --password openstack placement
openstack role add --project service --user placement admin

openstack service create --name placement --description "Placement API" placement

openstack endpoint create --region RegionOne placement public http://172.30.1.86:8778
openstack endpoint create --region RegionOne placement internal http://172.30.1.86:8778
openstack endpoint create --region RegionOne placement admin http://172.30.1.86:8778

패키지 설치 및 환경 설정

1
2
3
dnf install -y openstack-placement-api

vi /etc/placement/placement.conf
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
[placement_database]
# MariaDB 연결 정보
connection = mysql+pymysql://placement:openstack@172.30.1.86/placement

[api]
# 인증 방식을 Keystone으로 지정
auth_strategy = keystone

[keystone_authtoken]
# Keystone 인증 정보
auth_url = http://172.30.1.86:5000/v3
memcached_servers = 172.30.1.86:11211
auth_type = password
project_domain_name = Default
user_domain_name = Default
project_name = service
username = placement
password = openstack

DB 동기화 및 서비스 시작: placement는 keystone처럼 자체적인 프로세스를 가지고 있지 않고, 아파치 웹 서버(httpd)에서 실행된다. 따라서 httpd를 재시작해 주면 된다.

1
su -s /bin/sh -c "placement-manage db sync" placement

httpd를 재시작해주기 전, placement용 웹 서버 설정을 해줘야 한다.

placement는 아까 엔드포인트에서도 봤듯이 8778 포트를 사용하므로 웹 서버가 placement 애플리케이션(/usr/bin/placement-api)을 8778 포트에서 구동하도록 설정하는 작업이다.

/etc/httpd/conf.d/00-placement-api.conf에 들어가서

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Listen 8778

<VirtualHost *:8778>
  WSGIProcessGroup placement-api
  WSGIApplicationGroup %{GLOBAL}
  WSGIPassAuthorization On
  WSGIDaemonProcess placement-api processes=3 threads=1 user=placement group=placement display-name=%{GROUP}
  WSGIScriptAlias / /usr/bin/placement-api

  <Directory /usr/bin>
    <IfVersion >= 2.4>
      Require all granted
    </IfVersion>
    <IfVersion < 2.4>
      Order allow,deny
      Allow from all
    </IfVersion>
  </Directory>

  ErrorLog /var/log/httpd/placement_error.log
  CustomLog /var/log/httpd/placement_access.log combined
</VirtualHost>

다 되었음, systemctl restart httpd로 httpd를 재시작해 변경 사항을 반영한다.

placement의 정상 작동 확인은, placement-status upgrade check로 할 수 있다.
모두 Success이면 성공~

zom5-img2

nova 설치

마찬가지로 DB 생성, 사용자 생성, 엔드포인트 등록, 반복…

1
mysql -u root

nova는 nova_api, nova, nova_cell0 3개의 데이터베이스를 사용한다. 각각의 역할은

  • nova_api: nova API 서비스의 요청/응답 데이터를 관리
  • nova: nova의 핵심 데이터를 관리
  • nova_cell0: 클러스터 환경에서 각 서버의 nova 자원 데이터를 저장. 클러스터 구성 서버가 2개 이상이면 2번째 서버부턴 nova_cell1, nova_cell2, … 이렇게 생성해야
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
-- 1. Nova API용 DB
CREATE DATABASE nova_api;
GRANT ALL PRIVILEGES ON nova_api.* TO 'nova'@'localhost' IDENTIFIED BY 'openstack';
GRANT ALL PRIVILEGES ON nova_api.* TO 'nova'@'%' IDENTIFIED BY 'openstack';

-- 2. Nova 메인 DB
CREATE DATABASE nova;
GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'localhost' IDENTIFIED BY 'openstack';
GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'%' IDENTIFIED BY 'openstack';

-- 3. Nova Cell0용 DB
CREATE DATABASE nova_cell0;
GRANT ALL PRIVILEGES ON nova_cell0.* TO 'nova'@'localhost' IDENTIFIED BY 'openstack';
GRANT ALL PRIVILEGES ON nova_cell0.* TO 'nova'@'%' IDENTIFIED BY 'openstack';

FLUSH PRIVILEGES;
exit;
1
2
3
4
5
6
7
8
9
10
source ~/admin-openrc

openstack user create --domain default --password openstack nova
openstack role add --project service --user nova admin

openstack service create --name nova --description "OpenStack Compute" compute

openstack endpoint create --region RegionOne compute public http://172.30.1.86:8774/v2.1
openstack endpoint create --region RegionOne compute internal http://172.30.1.86:8774/v2.1
openstack endpoint create --region RegionOne compute admin http://172.30.1.86:8774/v2.1

여기까지(엔드포인트 생성까지) 했으면 패키지를 설치해주는데, 총 5개를 설치해줘야 한다.

openstack-nova-novncproxy는 가상 머신에 웹을 통한 원격 접속을 위해 설치하는 패키지이다. novnc라는 html5 기반 vnc(원격접속) 클라이언트를 통해, 웹 브라우저로 vm 화면을 보고 제어할 수 있도록 해 준다.

나머지 요소들(nova-api, nova-conductor 등)은 맨 처음에 설명했으니 패쓰~

1
2
3
dnf install -y openstack-nova-api openstack-nova-conductor \
  openstack-nova-novncproxy openstack-nova-scheduler \
  openstack-nova-compute

nova의 설정 파일은 꽤 건드려야할 것이 많다. /etc/nova/nova.conf에서 설정해준다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
[DEFAULT]
# 메시지 큐(RabbitMQ) 연결 및 관리 IP 지정
transport_url = rabbit://openstack:openstack@172.30.1.86:5672/
my_ip = 172.30.1.86
use_neutron = true
firewall_driver = nova.virt.firewall.NoopFirewallDriver
compute_driver = libvirt.LibvirtDriver
log_dir = /var/log/nova
lock_path = /var/lock/nova
state_path = /var/lib/nova
allow_resize_to_same_host = true
resize_confirm_window = 1


[api_database]
# Nova API DB 연결
connection = mysql+pymysql://nova:openstack@172.30.1.86/nova_api

[database]
# Nova 메인 DB 연결
connection = mysql+pymysql://nova:openstack@172.30.1.86/nova

[api]
# 인증 방식
auth_strategy = keystone

[keystone_authtoken]
# Keystone 인증 정보
www_authenticate_uri = http://172.30.1.86:5000/v3
auth_url = http://172.30.1.86:5000/v3
memcached_servers = 172.30.1.86:11211
auth_type = password
project_domain_name = Default
user_domain_name = Default
project_name = service
username = nova
password = openstack

[vnc]
# 나중에 웹 브라우저로 VM 화면을 보기 위한 VNC 설정
enabled = true
server_listen = 0.0.0.0
server_proxyclient_address = $my_ip
novncproxy_base_url = http://172.30.1.86:6080/vnc_auto.html

[glance]
# 이미지 서비스(Glance) 위치
api_servers = http://172.30.1.86:9292

[oslo_concurrency]
lock_path = /var/lib/nova/tmp

[placement]
# Placement 서비스 인증 정보 연동
region_name = RegionOne
project_domain_name = Default
project_name = service
auth_type = password
user_domain_name = Default
auth_url = http://172.30.1.86:5000/v3
username = placement
password = openstack
valid_interfaces = public
interface = public

[libvirt]
virt_type = kvm

설정값을 수정했으면, 리눅스의 하이퍼바이저 데몬(프로세스)인 libvirtd를 설치해주자.

nova-compute는 자체적인 하이퍼바이저를 가지고 있지 않고, libvirtd와 통신하여 가상 머신을 운영하기 때문이다.

1
2
3
4
5
6
dnf install -y libvirt qemu-kvm virt-install

systemctl enable --now libvirtd

# nova 사용자가 libvirt를 사용할 수 있도록 권한 부여
usermod -aG libvirt nova

설치가 끝났으면 db 동기화를 해 주는데, 반드시 아래 순서대로 진행한다.

nova_api 데이터베이스 동기화

1
su -s /bin/sh -c "nova-manage api_db sync" nova

cell0을 nova 환경에 등록

1
su -s /bin/sh -c "nova-manage cell_v2 map_cell0" nova

nova 데이터베이스 동기화

1
su -s /bin/sh -c "nova-manage db sync" nova

이 서버를 셀(cell)에 맵핑

1
su -s /bin/sh -c "nova-manage cell_v2 discover_hosts --verbose" nova

동기화까지 끝났으면, 서비스를 활성화시키고 테스트해 보자!

1
2
3
4
5
systemctl enable --now openstack-nova-api \
  openstack-nova-scheduler \
  openstack-nova-conductor \
  openstack-nova-novncproxy \
  openstack-nova-compute
1
openstack compute service list

zom5-img3

nova-scheduler, nova-conductor, nova-compute가 모두 enable이면 성공이다!

다음 시간에는 네트워크(neutron)과 스토리지(cinder), 그리고 웹 콘솔(horizon)까지 설치해 보자구~

This post is licensed under CC BY 4.0 by the author.