오픈스택 수동 설치 실습 #.14


오픈스택 수동 설치 실습 #.14 - Cinder block storage 서비스 설치


Cinder - LVM을 이용한 스토리지 노드 구성

오픈스택 블록 스토리지(Cinder)는 오픈스택 컴퓨트 인스턴스에 사용할 지속적인 블록 레벨 스토리지 장치들을 제공합니다. 블록 스토리지 시스템은 블록 장치들을 서버에 작성, 부착, 제거하는 일을 관리하며, 블록 스토리지 볼륨들은 클라우드 사용자들이 자신만의 스토리지의 필요한 부분을 관리하기 위한 대시보드 및 오픈스택 컴퓨트와 완전히 연동됩니다. 로컬 리눅스 서버 스토리지뿐 아니라 Ceph, 클라우드바이트, Coraid, EMC(ScaleIO, VMAX, VNX and XtremIO), GlusterFS, 히타치 데이터 시스템, IBM 스토리지(IBM DS8000, Storwize 계열, SAN 볼륨 컨트롤러, XIV 스토리지 시스템, GPFS), 리눅스 LIO, 넷앱, 넥센타, 님블 스토리지, Scality, 솔리드파이어, HP (스토어버추얼, 3PAR 스토어서브 계열), 퓨어 스토리지를 포함한 스토리지 플랫폼들을 사용합니다. 블록 스토리지는 데이터베이스 스토리지, 확장 가능 파일 시스템과 같은 성능에 민감한 시나리오에 적절하며, 서버에 로우 블록 레벨 스토리지에 대한 접근을 제공합니다. 스냅샷 관리는 블록 스토리지 볼륨에 저장된 데이터를 백업하는 강력한 기능을 제공하며, 스냅샷들은 새로운 블록 스토리지 볼륨들을 만들기 위해 사용하거나 복원할 수 있습니다.


Controller 노드 설치

# su - postgres
$ psql
postgres=# create role cinder with login;
postgres=# create database cinder;
postgres=# grant ALL PRIVILEGES ON DATABASE cinder TO cinder;
postgres=# alter user cinder with encrypted password 'cinder';

# . admin-openrc


cinder 유저 생성 및 admin 권한 추가

# openstack user create --domain default --password-prompt cinder
# openstack role add --project service --user cinder admin
cinderv2 와 cinderv3 서비스 생성
# openstack service create --name cinderv2 \
  --description "OpenStack Block Storage" volumev2
 
# openstack service create --name cinderv3 \
  --description "OpenStack Block Storage" volumev3
endpoint 생성
# openstack endpoint create --region RegionOne \
  volumev2 public http://controller:8776/v2/%\(project_id\)s
 
# openstack endpoint create --region RegionOne \
  volumev2 internal http://controller:8776/v2/%\(project_id\)s
 
# openstack endpoint create --region RegionOne \
  volumev2 admin http://controller:8776/v2/%\(project_id\)s
 
# openstack endpoint create --region RegionOne \
  volumev3 public http://controller:8776/v3/%\(project_id\)s
 
# openstack endpoint create --region RegionOne \
  volumev3 internal http://controller:8776/v3/%\(project_id\)s
 
# openstack endpoint create --region RegionOne \
  volumev3 admin http://controller:8776/v3/%\(project_id\)s
cinder 패키지 설치
# yum -y install openstack-cinder 
cinder.conf 파일 수정
# vi /etc/cinder/cinder.conf 
[database]
connection = postgresql://cinder:cinder@controller/cinder

[DEFAULT]
transport_url = rabbit://openstack:RABBIT_PASS@controller
auth_strategy = keystone
my_ip = 10.0.0.11
enable_v3_api = True

[keystone_authtoken]
auth_uri = http://controller:5000
auth_url = http://controller:5000
memcached_servers = controller:11211
auth_type = password
project_domain_id = default
user_domain_id = default
project_name = service
username = cinder
password = CINDER_PASS

[oslo_concurrency]
lock_path = /var/lib/cinder/tmp
블록 스토리지 데이터베이스 배포

# su -s /bin/sh -c "cinder-manage db sync" cinder
Compute 노드에서

nova.conf 파일수정
# vi /etc/nova/nova.conf
[cinder]
os_region_name = RegionOne
nova 서비스 재시작

# systemctl restart openstack-nova-api.service

다시 Controller 노드에서

keystone에 Volume API 버전 추가
# echo "export OS_VOLUME_API_VERSION=3" >> ~/admin-openrc
cinder 서비스 등록 및 시작
# systemctl enable openstack-cinder-api.service openstack-cinder-scheduler.service
# systemctl start openstack-cinder-api.service openstack-cinder-scheduler.service



Storage 노드 설치 (LVM 이용)


storage 노드는 다양한 스토리지로 설치가 가능하지만 VM환경에서는 LVM으로 진행을 합니다.


필요 패키지 설치

# yum -y install centos-release-openstack-rocky
# yum -y upgrade
# yum -y install python-openstackclient
# yum -y install openstack-selinux
# yum -y install python-psycopg2
lvm 패키지 설치
# yum install lvm2 device-mapper-persistent-data

lvm 서비스 등록 및 시작

# systemctl enable lvm2-lvmetad.service
# systemctl start lvm2-lvmetad.service

pv 볼륨 설정

# pvcreate /dev/sdb

Physical volume "/dev/sdb" successfully created

vg 볼륨 설정

# vgcreate cinder-volumes /dev/sdb

Volume group "cinder-volumes" successfully created

lvm.conf 수정

# vi /etc/lvm/lvm.conf
devices {
...
filter = [ "a/sdb/", "r/.*/"]

cinder 패키지 설치
# yum -y install openstack-cinder targetcli python-keystone python2-crypto

cinder.conf 파일 수정

# vi /etc/cinder/cinder.conf
[database]
connection = postgresql://cinder:cinder@controller/cinder

[DEFAULT]
transport_url = rabbit://openstack:RABBIT_PASS@controller
auth_strategy = keystone
my_ip = 10.0.0.41
enabled_backends = lvm

glance_api_servers = http://controller:9292

enable_v3_api = True


[keystone_authtoken]
auth_uri = http://controller:5000
auth_url = http://controller:5000
memcached_servers = controller:11211
auth_type = password
project_domain_id = default
user_domain_id = default
project_name = service
username = cinder
password = CINDER_PASS

[lvm]
volume_driver = cinder.volume.drivers.lvm.LVMVolumeDriver
volume_group = cinder-volumes
iscsi_protocol = iscsi

iscsi_helper = lioadm

target_ip_address = 10.0.0.41
volumes_dir = $state_path/volumes


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

※ [lvm] 부분은 없으니 만들어 줍니다.

cinder 서비스 등록 및 시작

# systemctl enable openstack-cinder-volume.service target.service
# systemctl start openstack-cinder-volume.service target.service
controller 노드에서 서비스 확인


볼륨 설정이 완료 되었습니다.

Cinder 까지 설치가 완료되어 코어 부분은 다 설치가 완료 되었습니다.


오픈스택 수동 설치 실습 #.13



오픈스택 수동 설치 실습 #.13 - Horizon 대시보드 설치


Horizon 대시보드 설치


오픈스택 대시보드(Horizon)는 관리자와 사용자들에게 클라우드 기반 자원 배치의 접근, 제공, 자동화를 위한 그래픽 인터페이스를 제공합니다. 과금, 모니터링, 추가 관리 도구와 같은 서드파티 제품과 서비스들을 수용합니다. 대시보드는 또한 이용하기 원하는 서비스 제공자 및 기타 상용 벤더들을 위해 브랜드화가 가능하며, 대시보드는 사용자들이 오픈스택 자원들과 상호작용할 수 있는 여러 방법 가운데 하나입니다. 개발자들은 네이티브 오픈스택 API나 EC2 호환 API를 사용하여 자원을 관리하기 위해 액세스를 자동화하거나 도구를 빌드할 수 있습니다.



Horizon 대시보드 패키지 설치

# yum -y install openstack-dashboard

local_setting 파일 수정

# vi /etc/openstack-dashboard/local_settings
# 대시보드 호스트를 추가합니다.
ALLOWED_HOSTS = ['*']

# 오픈스택 API의 버전들을 설정 합니다.
OPENSTACK_API_VERSIONS = {
#    "data-processing": 1.1,
    "identity": 3,
    "image": 2,
    "volume": 2,
}

# 오픈스택의 멀티 도메인을 사용가능하게 합니다.
OPENSTACK_KEYSTONE_MULTIDOMAIN_SUPPORT = True

# Keystone의 기본 도메인을 'Default'로 설정합니다.
OPENSTACK_KEYSTONE_DEFAULT_DOMAIN = 'Default'


# SESSION_ENGINE을 설정합니다.
SESSION_ENGINE = 'django.contrib.sessions.backends.cache'

# Memcached 정보를 설정합니다.
CACHES = {
    'default': {
         'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
         'LOCATION': 'controller:11211',
    }
}


# 오픈스택 대시보드를 실행할 컨트롤러 노드의 관리용 IP를 OPENSTACK_HOST에 설정합니다.
OPENSTACK_HOST = "controller"

# 오픈스택의 Keystone URL을 설정합니다.
OPENSTACK_KEYSTONE_URL = "http://%s:5000/v3" % OPENSTACK_HOST

# 오픈스택의 Keystone 기본권한을 설정합니다.
OPENSTACK_KEYSTONE_DEFAULT_ROLE = "_member_"

# Provider 네트워크를 선택하여 linuxbridge를 이용한다면 l3 네트워킹 서비스 지원을 사용안함으로 설정합니다.
OPENSTACK_NEUTRON_NETWORK = {
    ...
    'enable_router': False,
    'enable_quotas': False,
    'enable_distributed_router': False,
    'enable_ha_router': False,
    'enable_lb': False,
    'enable_firewall': False,
    'enable_vpn': False,
    'enable_fip_topology_check': False,
}

# 타임존을 설정합니다.
TIME_ZONE = "Asia/Seoul"

openstack-dashboard.conf 파일 수정

# vi /etc/httpd/conf.d/openstack-dashboard.conf 
WSGIDaemonProcess dashboard
WSGIProcessGroup dashboard
WSGISocketPrefix run/wsgi
WSGIApplicationGroup %{GLOBAL}

Httpd 재시작

# systemctl restart httpd.service memcached.service

인터넷 브라우저에서 http://10.0.0.11/dashboard 로 접속하면 로그인 화면이 뜹니다.

admin 계정으로 로그인을 해보면,

개요 화면이 보이고, 내부 정보가 보입니다.

이러면 설치가 완료된 것입니다.



오픈스택 수동 설치 실습 #.12

오픈스택 수동 설치 실습 #.12 - Neutron 네트워크 설치 :



Linux Bridge를 이용한 Provider 네트워크 구성

Compute 노드


Neutron 패키지 설치

# yum -y install openstack-neutron-linuxbridge ebtables ipset
neutron.conf 파일 수정
# vi /etc/neutron/neutron.conf
[DEFAULT]
# ...
transport_url = rabbit://openstack:RABBIT_PASS@controller

[DEFAULT]
# ...
auth_strategy = keystone

[keystone_authtoken]
# ...
www_authenticate_uri = http://controller:5000
auth_url = http://controller:5000
memcached_servers = controller:11211
auth_type = password
project_domain_name = Default
user_domain_name = Default
project_name = service
username = neutron
password = NEUTRON_PASS

[oslo_concurrency]
# ...
lock_path = /var/lib/neutron/tmp

linuxbridge_agent.ini 파일 수정

# vi /etc/neutron/plugins/ml2/linuxbridge_agent.ini
[linux_bridge]
physical_interface_mappings = provider:PROVIDER_INTERFACE_NAME

[vxlan]
enable_vxlan = false

[securitygroup]
# ...
enable_security_group = true
firewall_driver = neutron.agent.linux.iptables_firewall.IptablesFirewallDriver
nova.conf
# vi /etc/nova/nova.conf
[neutron]
# ...
url = http://controller:9696
auth_url = http://controller:5000
auth_type = password
project_domain_name = Default
user_domain_name = Default
region_name = RegionOne
project_name = service
username = neutron
password = NEUTRON_PASS

Nova-compute 재시작

# systemctl restart openstack-nova-compute.service
neutron 서비스 설정 및 시작
# systemctl enable neutron-linuxbridge-agent.service
# systemctl start neutron-linuxbridge-agent.service
Neutron 설치가 완료 되었습니다.

Controller 노드에서 확인

Compute 노드에도 Keystone 인증 파일(admin-openrc)을 만들고 openstack network agent list


오픈스택 수동 설치 실습 #.11

오픈스택 수동 설치 실습 #.11 - Neutron 네트워크 설치 :



Linux Bridge를 이용한 Provider 네트워크 구성


Controller 노드



OpenStack 네트워킹 (neutron)은 가상 네트워킹 인프라 (VNI)에 대한 모든 네트워킹 측면과 OpenStack 환경에서 물리 네트워킹 인프라 (PNI)의 접근 레이어 측면에서 관리합니다. OpenStack 네트워킹은 firewall, load balancer, virtual private network (VPN) 같은 서비스를 포함할수 있으며, 진보한 가상 네트워크 토폴리지를 생성하여 tenant를 활성화 합니다.


네트워킹에서는 객체 추상화를 통해 네트워크, 서브넷, 라우터를 제공합니다. 각 추상화는 물리적인 구성에 대응하여 모방하는 기능이 들어있습니다: 네트워크는 서브넷이 포함되어 있고, 다른 서브넷과 네트워크 간의 트레픽은 라이터를 통하여 나눠집니다.


각 라우터는 네트워크에 연결하는 하나의 게이트웨이를 갖고, 많은 인터페이스들이 서브넷에 연결됩니다. 서브넷은 같은 라우터 내에 연결된 다른 서브넷 상의 머신에 액세스 가능합니다.


임의로 주어진 네트워킹 셋업은 하나 이상의 외부 네트워크를 갖습니다. 다른 네트워크와 달리, 외부 네트워크는 단지 가상으로 정의된 네트워크를 의미하지 않습니다. 이 대신, OpenStack 설치 바깥으로 접근 가능한 뷰의 물리, 외부 네트워크에 대한 슬라이스를 나타냅니다. 외부 네트워크의 IP 주소는 바깥 네트워크 상의 임의의 물리적인 객체에서 액세스 가능합니다. 외부 네트워크가 바깥 네트워크로의 뷰를 나타내기에, DHCP가 해당 네트워크에서는 비활성화됩니다.


외부 네트워크 뿐만 아니라, 임의의 네트워킹 셋업은 하나 이상의 내부 네트워크를 갖습니다. 이러한 소프트웨어 정의 네트워크들은 VM에 직접 연결됩니다. 임의의 주어진 내부 네트워크, 또는 인터페이스를 통해 비슷한 라우터에 연결된 서브넷 상의 VM에서만 대상 네트워크에 직접 연결된 VM에 액세스 가능합니다.


외부 네트워크에서 VM에 접근하거나, 그 반대의 경우에도 네트워크 사이의 라우터가 필요합니다. 각 라우터는 네트워크에 연결된 하나의 게이트웨이와 많은 인터페이스에 연결된 서브넷으로 되어있습니다. 물리적 라우터와 같이 동일한 라우터에 연결된 다른 서브넷의 머신에 접근할 수 있고, 머신에서 라우터의 게이트웨이를 통하여 외부 네트워크에 접근할 수 있습니다.


또한, 외부 네트워크를 내부 네트워크와 연결하도록 IP 주소를 할당할 수 있습니다. 하위 네트워크에 어떤 포트가 연결되든 이 연결을 포트라고 합니다. 외부 네트워크 IP 주소를 가상 머신에 포트와 할당할 수 있습니다. 이 방법을 통해 외부 네트워크의 실체가 가상 머신에 접근할 수 있습니다.


네트워킹은 시큐리티 그룹 을 지원합니다. 시큐리티 그룹은 그룹내에서 방화벽 규칙을 정의하여 관리자를 활성화합니다. VM은 하나에서 여러 시큐리티 그룹을 가질 수 있으며, 시큐리티 그룹에서 포트를 막거나 열고, 포트 범위, VM에 대한 트래픽 타입 등의 규칙을 적용할 수 있습니다.


네트워킹에서 사용하는 각 플러그인은 각자의 개념을 갖고 있습니다. VNI 및 OpenStack 환경을 운영하는데 필수는 아니지만, 이러한 개념에 대한 이해는 네트워킹 셋업을 도와줍니다. 모든 네트워킹 설치는 코어 플러그인과 보안 그룹 플러그인 (또는 단순히 No-Op 보안 그룹 플러그인)을 사용합니다. 부가적으로, Firewall-as-a-Service (FWaaS) 및 Load-Balancer-as-a-Service (LBaaS)이 사용 가능합니다.



Neutron 설치 : Controller 노드

# su - postgres

$ psql

Neutron 데이터베이스 생성

postgres=# create role neutron with login;

postgres=# create database neutron;

postgres=# grant ALL PRIVILEGES ON DATABASE neutron TO neutron;

postgres=# alter user neutron with encrypted password 'neutron';

Keystone 인증 불러오기

# . admin-openrc

Neutron 계정 생성 및 admin 권한 부여

# openstack user create --domain Default --password-prompt neutron

# openstack role add --project service --user neutron admin


Neutron 서비스 생성

# openstack service create --name neutron \

  --description "OpenStack Networking" network

# export controller=10.0.0.11 

Neutron 엔드포인트 생성 

# openstack endpoint create --region RegionOne \

  network public http://controller:9696


# openstack endpoint create --region RegionOne \

  network internal http://controller:9696


# openstack endpoint create --region RegionOne \

  network admin http://controller:9696


Neutron 패키지 설치

# yum install openstack-neutron openstack-neutron-ml2 \

  openstack-neutron-linuxbridge ebtables

neutron.conf 파일 수정

# vi /etc/neutron/neutron.conf

[DEFAULT]

# ...

transport_url = rabbit://openstack:open1234@controller

auth_strategy = keystone


[keystone_authtoken]

# ...

www_authenticate_uri = http://controller:5000

auth_url = http://controller:5000

memcached_servers = controller:11211

auth_type = password

project_domain_name = default

user_domain_name = default

project_name = service

username = neutron

password = open1234


[oslo_concurrency]

# ...

lock_path = /var/lib/neutron/tmp

linuxbridge-agent.ini 수정

# vi /etc/neutron/plugins/ml2/linuxbridge_agent.ini

[linux_bridge]

physical_interface_mappings = provider:ens33 <-- bridge로 설정했던 공유기에서 ip받아오는 NIC


[vxlan]

enable_vxlan = false


[securitygroup]

# ...

enable_security_group = true

firewall_driver = neutron.agent.linux.iptables_firewall.IptablesFirewallDriver

nova.conf 수정

# vi /etc/nova/nova.conf

[neutron]

# ...

url = http://controller:9696

auth_url = http://controller:5000

auth_type = password

project_domain_name = Default

user_domain_name = Default

region_name = RegionOne

project_name = service

username = neutron

password = open1234

ml2-conf.ini 링크

# ln -s /etc/neutron/plugins/ml2/ml2_conf.ini /etc/neutron/plugin.ini

Neutron DB Sync

# su -s /bin/sh -c "neutron-db-manage --config-file /etc/neutron/neutron.conf \

  --config-file /etc/neutron/plugins/ml2/ml2_conf.ini upgrade head" neutron

Nova 재시작

# systemctl restart openstack-nova-api.service

Neutron 서비스 등록 및 시작

# systemctl enable neutron-server.service \

  neutron-linuxbridge-agent.service neutron-dhcp-agent.service \

  neutron-metadata-agent.service

# systemctl start neutron-server.service \

  neutron-linuxbridge-agent.service neutron-dhcp-agent.service \

  neutron-metadata-agent.service

L3 에이전트 서비스 등록 및 시작

# systemctl enable neutron-l3-agent.service

# systemctl start neutron-l3-agent.service


확인 (DHCP나 Metadata 에이전트가 올라오는데 약간의 시간이 소요되니 잠깐 기다리면 올라옵니다.)



 

오픈스택 수동 설치 실습 #.10


오픈스택 수동 설치 실습 #.10 - Compute 노드에 Nova 설치



노바 패키지 설치

# yum -y install openstack-nova-compute

nova.conf 파일 수정

# vi /etc/nova/nova.conf

[DEFAULT] # define own IP address my_ip = 10.0.0.31 state_path = /var/lib/nova enabled_apis = osapi_compute,metadata log_dir = /var/log/nova # RabbitMQ connection info transport_url = rabbit://openstack:open1234@10.0.0.11 [api] auth_strategy = keystone # enable VNC [vnc] enabled = True server_listen = 0.0.0.0 server_proxyclient_address = 10.0.0.31 novncproxy_base_url = http://10.0.0.11:6080/vnc_auto.html # Glance connection info [glance] api_servers = http://10.0.0.11:9292 [oslo_concurrency] lock_path = $state_path/tmp # Keystone auth info [keystone_authtoken] www_authenticate_uri = http://10.0.0.11:5000 auth_url = http://10.0.0.11:5000/v3 memcached_servers = 10.0.0.11:11211 auth_type = password project_domain_name = Default user_domain_name = Default project_name = service username = nova password = NOVA_PASS [placement] auth_url = http://10.0.0.11:5000/v3 os_region_name = RegionOne auth_type = password project_domain_name = Default user_domain_name = Default project_name = service username = placement password = PLACEMENT_PASS [wsgi] api_paste_config = /etc/nova/api-paste.ini

nova.conf에 libvirt 라는 항목이 있습니다.


$ egrep -c '(vmx|svm)' /proc/cpuinfo


해당 명령을 실행 했을때, 0 (Zero)가 나온다면, qemu로 설정을 해줘야 합니다.

1 or 더 큰수가 나올 경우에는 다른 하이퍼바이저를 사용 할 수 있습니다. vm환경에다 설치할 경우 0 (Zero)가 나올겁니다.

[libvirt]

# ...

virt_type = qemu

※ Nova compute 서비스가 실패 하는 경우 /var/log/nova/nova-compute.log 를 체크 했을때, AMQP server on controller:5672 is unreachable 이 나온다면 방화벽 같은 항목에서 5672 포트가 막혀있는 것이니 확인 해주세요.




Nova 서비스 생성 및 자동실행 등록

# systemctl start openstack-nova-compute

# systemctl enable openstack-nova-compute


아래 항목은 Controller 노드에서 확인합니다.

$ . admin-openrc

Compute Host 찾기

# su -s /bin/bash nova -c "nova-manage cell_v2 discover_hosts"


compute 노드 설치가 완료 되었습니다.


오픈스택 수동 설치 실습 #.8

오픈스택 수동 설치 실습 #.8 - Nova : Compute API


Compute (Nova)



오픈스택 컴퓨트 (Nova)는 IaaS 시스템의 주가 되는 부분인 클라우드 컴퓨팅 패브릭 컨트롤러(fabric controller)입니다. 컴퓨터 자원의 풀을 관리하고 자동화하도록 설계되어 있으며 베어 메탈(Bare metal), 고성능 컴퓨팅(HPC) 구성뿐 아니라 널리 이용 가능한 가상화 기술들과 함께 동작할 수 있습니다. 하이퍼바이저 기술(가상 머신 모니터)로서 KVM, VM웨어, 젠 중 하나를 선택할 수 있으며, 여기에 하이퍼-V 및 LXC와 같은 리눅스 컨테이너 기술을 함께 사용할 수 있습니다.


파이썬으로 작성되어 있으며 Eventlet(병행 프로그래밍용), Kombu(AMQP 통신용), SQLAlchemy(데이터베이스 접속용)와 같은 수많은 외부 라이브러리들을 사용합니다.] 컴퓨트의 아키텍처는 어떠한 사유 하드웨어 및 소프트웨어 요구 사항 없이 표준 하드웨어 위에서 수평적 확장을 하기 위해 설계되어 있으며 레거시 시스템들과 서드파티 기술들과 연동하는 기능을 제공합니다.


기업 수준의 인프라스트럭처로의 통합이 확산되면서 일반적으로 오픈스택의 성능을 모니터링하는 것과 특히 Nova의 성능을 측정하는 것이 규모 면에서 매우 중요한 이슈가 되었습니다. 종단 간 성능을 모니터링하려면 Nova, Keystone, Neutron, Cinder, Swift 등의 서비스로부터 메트릭을 추적하는 것뿐 아니라 메시지 전달을 위해 오픈스택 서비스들이 사용하는 RabbitMQ의 모니터링이 필요합니다.


OpenStack Compute에서는 인증은 OpenStack Identity를 통해, 디스크와 서버 이미지는 OpenStack Image 서비스를 통해, 사용자와 관리자 인터페이스는 OpenStack 대시보드를 통하여 상호작용을 합니다. 이미지 접근은 프로젝트, 사용자에 대해 제한합니다. Quota는 프로젝트당 제한을 말합니다. (예를 들어, 인스턴스 숫자같은...) OpenStack Compute는 표준 하드웨어에서 수평적 확장이 가능하며, 실행하는 인스턴스 이미지를 다운받을 수 있습니다.


OpenStack Compute는 다음 부분과 그에대한 구성 요소로 이뤄져 있습니다.


nova-api 서비스

최종 사용자에 대한 compute API 콜에 대해 허용하고 응답합니다. 이 서비스는 OpenStack Compute API, Amazon EC2 API, 권한이 있는 사용자에 대한 특정 Admin API에 대한 관리 작업을 할 수 있도록 지원합니다. 몇가지 정책을 적용하고, 인스턴스를 실행하는 등의 orchestration 작업을 합니다.


nova-api-metadata 서비스

인스턴스에서의 메타데이터 요청을 허용합니다. nova-api-metadata 서비스는 일반적으로 nova-network 설치할 때와 다중 호스트 모드를 실행할때 사용합니다. 더 자세한 내용은 OpenStack Administrator Guide에서 Metadata service 를 확인합니다.


nova-compute 서비스

Worker 데몬은 가상화 API를 이용하여 가상 머신 인스턴스를 생서하고 종료시킵니다. 예를 들어:

XenServer/XCP에서 사용하는 XenAPI

KVM 또는 QEMU에서 사용하는 libvirt

VMware에서 사용하는 VMwareAPI

이 프로세싱은 상당히 복잡합니다. 기본적으론 데몬이 큐로온 작업을 허용하고 KVM인스턴스를 시스템 명령어로 실행하고, 데이터베이스에 관련 상태값을 업로드합니다.


nova-scheduler 서비스

큐로부터 가상 머신 인스턴스를 요청하고 어떤 compute 서버 호스트에서 실행할 것인지를 결정합니다.


nova-conductor 모듈

nova-compute 서비스와 데이터베이스 상호작용을 중재합니다. nova-compute 서비스에 의해 만들어진 클라우드 데이터베이스에 직접 접근을 제거합니다. nova-conductor 모듈과 수평적인 확장이 가능합니다. 그러나 nova-compute 서비스가 작동중인 노드에서는 배포해서는 안됩니다. 더 자세한 내용은 Configuration Reference Guide 를 확인하십시오.


nova-cert 모듈

X509 인증서에 대한 Nova Cert 서비스를 제공하는 서버 데몬입니다. euca-bundle-image 에 대한 인승서를 생성하여 사용합니다. EC2 API를 사용할때만 필요합니다.


nova-network worker 데몬

nova-compute 서비스에서 유사한 큐에대한 네트워킹 작업을 허용하고 네트워크를 조정합니다. IPtable 규칙을 수정하거나 브리지 인터페이스 설정등 작업을 합니다.


nova-consoleauth 데몬

콘솔 프록시를 제공하는 사용자에 대한 인증 토큰을 제공합니다. nova-novncproxy 와 nova-xvpvncproxy 를 참고 하십시오. 이 서비스는 콘솔 프록시 작업이 작동되고 있어야 합니다. 클러스터 구성에서 nova-consoleauth 서비스에 대한 두 종류 프록시를 실행할 수 있습니다. 자세한 내용은 About nova-consoleauth 를 살펴봅니다. 

  ※ 해당 데몬은 18.0.0 버전인 rocky 버전에서부터는 제거 되었고 더 이상 제공되지 않습니다.


nova-novncproxy 데몬

VNC 연결을 통해 작동중인 인스턴스 접근에 대한 프록시를 제공합니다. 브라우저 기반의 novnc 클라이언틀 제공합니다.


nova-spicehtml5proxy 데몬

SPICE 연결을 통해 작동중인 인스턴스 접근에 대한 프록시를 제공합니다. 브라우저 기반의 HTML5 클라이언트를 제공합니다.


nova-xvpvncproxy 데몬

VNC 연결을 통해 작동중인 인스턴스 접근에 대한 프록시를 제공합니다. OpenStack 만의 Java 클라이언트를 제공합니다.


nova-cert 데몬

x509 인증서.


nova 클라이언트

Tenant 관리자나 최종 사용자가 명령을 제공하는 클라이언트 입니다.


데몬간의 프로세싱 메시지를 전달하기 위한 중앙 허브입니다. 일반적으로 RabbitMQ 로 구현되며, 또한 Zero MQ 와 같은 다른 AMQP 메시징 큐로 구현할 수 있습니다.


SQL 데이터베이스

클라우드 인프라에 대한 구축 동안과 작동중인 상태를 저장합니다. 다음 내용을 포함합니다.

◆ 사용 가능한 인스턴스 타입

◆ 사용중인 인스턴스

◆ 사용 가능한 네트워크

◆ 프로젝트


오픈스택 수동 설치 실습 #.7


오픈스택 수동 설치 실습 #.7 - Glance 설치


오픈스택 이미지(Glance)는 디스크 및 서버 이미지를 위한 검색, 등록, 배급 서비스를 제공합니다. 저장된 이미지들은 템플릿으로 사용이 가능합니다. 수에 제한이 없는 백업본을 저장하고 카탈로그화하는데 사용할 수도 있습니다. 이미지 서비스는 Swift를 포함한 다양한 백엔드에 디스크와 서버 이미지들을 저장할 수 있습니다. 이미지 서비스 API는 디스크 이미지에 관한 정보를 조회하기 위해 표준 REST 인터페이스를 제공하며 클라이언트가 이미지를 새로운 서버에 스트리밍할 수 있게 합니다.



Glance는 기존의 레거시 인프라스트럭처에 수많은 개선 사항을 추가하고 있습니다. 이를테면 VMware와 연동할 경우 Glance는 고가용성 및 동적 자원 스케줄링(DRS)인 vSphere 계열에 대한 고급 기능들을 도입하고 있습니다. vMotion은 하나의 물리적인 서버에서 다른 서버로 서비스 방해 없이 실행 중인 VM의 실시간 마이그레이션을 수행합니다. 그러므로 동적이고 자동화된 자체 최적화 데이터센터를 가능케 하며, 다운타임 없이 성능이 떨어지는 서버들의 하드웨어 유지보수를 허용합니다.


Heat와 같이 이미지와 상호작용이 필요한 다른 오픈스택 모듈들은 Glance를 통해 이미지 메타데이터와 통신해야 합니다. 또한, 노바는 이미지에 대한 정보를 표시할 수 있으며, 인스턴스를 만들기 위한 이미지의 변경 사항을 구성합니다. 한편, Glance는 이미지를 추가, 삭제, 공유, 복제할 수 있는 유일한 모듈입니다.



Glance 설치 준비


SQL DB에 접속하여 glance database 및 유저를 생성합니다. DB계정에 대한 password는 보기 편하게 user와 동일하게 설정 했습니다.

# su - postgres
$ psql

keystone 데이터베이스 및 유저 생성

postgres=# CREATE ROLE glance WITH LOGIN;
postgres=# CREATE DATABASE glance;
postgres=# GRANT ALL PRIVILEGES ON DATABASE glance TO glance;
postgres=# ALTER USER glance WITH ENCRYPTED PASSWORD 'glance';

glance 계정으로 DB 접속이 되나 확인합니다.



keystone 인증을 합니다. 앞으로는 다른 API 모듈을 설치하기 위하여 keystone 인증을 반드시 진행해야 합니다.

# . admin-openrc

glance 유저를 생성합니다

$ openstack user create --domain Default --password-prompt glance


glance 유저에 admin 권한을 추가 해줍니다.

$ openstack role add --project service --user glance admin

이미지 서비스를 생성합니다.

$ openstack service create --name glance \
  --description "OpenStack Image" image


Glance의 endpoint API를 생성합니다.

$ openstack endpoint create --region RegionOne \
  image public https://controller:9292


$ openstack endpoint create --region RegionOne \   image internal http://controller:9292


$ openstack endpoint create --region RegionOne \   image admin http://controller:9292



Glance 설치 및 설정

# yum -y install openstack-glance 

glance-api.conf 파일 수정. <GLANCE_PASS>부분에는 glance의 패스워드를 넣어주세요.

# vi /etc/glance/glance-api.conf

[database]

# ...

connection = postgresql://glance:glance@controller/glance


[keystone_authtoken]

# ...

www_authenticate_uri  = http://controller:5000

auth_url = http://controller:5000

memcached_servers = controller:11211

auth_type = password

project_domain_name = Default

user_domain_name = Default

project_name = service

username = glance

password = <GLANCE_PASS>


[paste_deploy]

# ...

flavor = keystone


[glance_store]

# ...

stores = file,http

default_store = file

filesystem_store_datadir = /var/lib/glance/images/

glance-registry.conf 파일 수정. <GLANCE_PASS>부분에는 glance의 패스워드를 넣어주세요.

# vi /etc/glance/glance-registry.conf

[database]

# ...

connection = postgresql://glance:glance@controller/glance


[keystone_authtoken]

# ...

www_authenticate_uri  = http://controller:5000

auth_url = http://controller:5000

memcached_servers = controller:11211

auth_type = password

project_domain_name = Default

user_domain_name = Default

project_name = service

username = glance

password = <GLANCE_PASS>


[paste_deploy]

# ...

flavor = keystone

Glacne DB에 테이블 설치

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

glance 서비스 생성 및 실행

# systemctl enable openstack-glance-api.service \

  openstack-glance-registry.service

# systemctl start openstack-glance-api.service \

  openstack-glance-registry.service

정상적으로 Glacne API가 설치 되었는지 확인해야 합니다.

Keystone 인증을 불러옵니다.

$ . admin-openrc

glance에 이미지 추가


cirros 이미지 추가

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

$ openstack image create "cirros" \

  --file cirros-0.4.0-x86_64-disk.img \

  --disk-format qcow2 --container-format bare \

  --public

CensOS 7 이미지 추가

$ wget http://cloud.centos.org/centos/7/images/CentOS-7-x86_64-GenericCloud.qcow2

$ openstack image create \

    --container-format bare \

    --disk-format qcow2 \

    --file CentOS-7-x86_64-GenericCloud.qcow2 \

    CentOS-7-x86_64

이미지 리스트 확인

$ openstack image list
+--------------------------------------+-----------------+--------+
| ID                                   | Name            | Status |
+--------------------------------------+-----------------+--------+
| a76a04d2-34ae-4092-94f3-88352bf79783 | CentOS-7-x86_64 | active |
| f0117caf-e764-487c-849d-b464c79efbd0 | cirros          | active |
+--------------------------------------+-----------------+--------+

Glance 설치가 완료 되었습니다.

오픈스택 수동 설치 실습 #.5

오픈스택 수동 설치 실습 #.5 - Message Queue, Memcached, etcd


Message Queue 인 RabbitMQ는 Controller 노드에서만 실행됩니다.


RabbitMQ는 간단하게 말하면 표준 AMQP (Advanced Message Queueing Protocol) 메세지 브로커 소프트웨어(message broker software) 오픈소스입니다.


RabbitMQ를 이해하기 위해서는 우선 MQ(Message Queuing)에 대한 이해가 필요합니다. 프로그래밍에서 MQ는 프로세스 또는 프로그램 인스턴스가 데이터를 서로 교환할때 사용하는 방법이죠. 이때 데이터를 교환할때 시스템이 관리하는 메세지 큐를 이용하는 것이 특징입니다. 이렇게 서로 다른 프로세스나 프로그램 사이에 메시지를 교환할때 AMQP(Advanced Message Queueing Protocol)을 이용합니다. AMQP는 메세지 지향 미들웨어를 위한 open standard application layer protocol 입니다. AMQP를 이용하면 다른 벤더 사이에 메세지를 전송하는 것이 가능한데 JMS (Java Message Service)가 API를 제공하는것과 달리 AMQP는 wire-protocol을 제공하는데 이는 octet stream을 이용해서 다른 네트워크 사이에 데이터를 전송할 수 있는 포멧인데 이를 사용합니다. 이러한 복잡한 설명과 달리 RabbitMQ 튜토리얼에서는 RabbitMQ를 매우 간단하게 편지를 작성하여 받는 사람에게 보낼 우체통, 우체국, 우편배달부가 있듯, post box, post office and postman라고 비유적으로 설명하고 있습니다. 


오픈스택에서는 RabbitMQ를 이용하여 각 모듈간의 API 통신을 합니다.


RabbitMQ 설치

# yum -y install rabbitmq-server

# systemctl enable rabbitmq-server.service

# systemctl start rabbitmq-server.service

RABBIT_PASS에는 openstack이 RabbitMQ 사용에 사용할 패스워드를 입력해주시기 바랍니다.

# rabbitmqctl add_user openstack <RABBIT_PASS>


Creating user "openstack" ...
# rabbitmqctl set_permissions openstack ".*" ".*" ".*"


Setting permissions for user "openstack" in vhost "/" ...


Memcached는 controller 노드에서만 실행됩니다.


Memcached는 범용 분산 캐시 시스템입니다. 외부 데이터 소스(예: 데이터베이스나 API)의 읽기 횟수를 줄이기 위해 데이터와 객체들을 RAM에 캐시 처리함으로써 동적 데이터베이스 드리븐 웹사이트의 속도를 높이기 위해 종종 사용됩니다. Memcached는 BSD 허가서로 라이선스되는 자유-오픈 소스 소프트웨어입니다. Memcached는 유닉스 계열 운영 체제(적어도 리눅스와 macOS), 마이크로소프트 윈도우에서 실행되며, libevent 라이브러리에 의존합니다.


Memcached 설치

# yum -y install memcached python-memcached

# vi /etc/sysconfig/memcached


OPTIONS="-l 127.0.0.1,::1,controller".

# systemctl enable memcached.service

# systemctl start memcached.service


etcd는 go언어와 Raft프레임워크 이용해 작성된 오픈소스 key-value 저장소로 대규모 Docker 클러스터링에 있어서 컨테이너들을 유기적으로 연동시키고 억세스하기 위한 세련된 아키텍처를 제공합니다. 좀 더 설명하자면 OS에 배당된 IP어드레스에 비해 탑재된 컨테이너들의 수는 엄청나게 많은데, 이러한 컨터이너들에 접근하기 위해서는 IP어드레스 이외의 효율적인 어드레싱 수단을 필요로 하게 됩니다. etcd는 이러한 어드레싱을 HTTP/JSON을 이용해 구현하고 있으며 빠른 성능과 암호화 제공등으로 현재 Docker 사용자들에게 주목받고 있습니다. 직접 물리서버에 설치도 가능하고, Vagrant,Amazon EC2, Azure, QEMU/KVM, VMware그리고 OpenStack에 이르기까지 요즘 인기있는 가상화/클라우드 플랫폼은 충실하게 지원하고 있습니다. 특히, docker를 이용한 대규모 클러스터링 구현은 vagrant에 의존하지 않고는 무척 고된작업이 되어버릴 것이며, 지금부터 docker를 이용한 클러스터링에 관심을 가지고 사용해 보려는 유저들에게는 익혀두면 크게 도움이 될 것입니다.


etcd 설치

# yum -y install etcd

# vi /etc/etcd/etcd.conf

#[Member]

ETCD_DATA_DIR="/var/lib/etcd/default.etcd"

ETCD_LISTEN_PEER_URLS="http://10.0.0.11:2380"

ETCD_LISTEN_CLIENT_URLS="http://10.0.0.11:2379"

ETCD_NAME="controller"

#[Clustering]

ETCD_INITIAL_ADVERTISE_PEER_URLS="http://10.0.0.11:2380"

ETCD_ADVERTISE_CLIENT_URLS="http://10.0.0.11:2379"

ETCD_INITIAL_CLUSTER="controller=http://10.0.0.11:2380"

ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster-01"

ETCD_INITIAL_CLUSTER_STATE="new"

# systemctl enable etcd
# systemctl start etcd