프로젝트 좀보이드(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
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이면 성공~
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
nova-scheduler, nova-conductor, nova-compute가 모두 enable이면 성공이다!
다음 시간에는 네트워크(neutron)과 스토리지(cinder), 그리고 웹 콘솔(horizon)까지 설치해 보자구~


