본문으로 바로가기

OpenStack Manual Installation - Nova

category 클라우드/OpenStack 2022. 8. 19. 17:53

Nova Installation

참고 : https://it00.tistory.com/18?category=808035

Compute Service 개요

  • 클라우드 컴퓨팅 시스템을 호스팅하고 관리합니다.
  • IaaS(Infrastructure-as-a-Service) 시스템의 주요 부분으로 주요 모듈은 Python으로 구현되어 있습니다.
  • Compute는 인증을 위한 Identity, 리소스 인벤토리 추적 및 선택을 위한 Placement, 디스크 및 서버 이미지를 위한 Image, 사용자 및 관리 인터페이스를 위한 Dashboard와 상호 작용합니다.

구성 요소

  • nova-api
    • 사용자 컴퓨팅 API 호출을 수락하고 이에 응답합니다.
  • nova-api-metadata service
    • 인스턴스의 메타 데이터 요청을 수락합니다.
    • nova-api-metadata 서비스는 일반적으로 nova-network 설치와 함께 다중 호스트 모드에서 실행할 때 사용됩니다.
  • nova-compute service
    • 하이퍼 바이저 API를 통해 가상 머신 인스턴스를 생성하고 종료하는 작업자 데몬입니다.
      • XenServer / XCP 용 XenAPI
      • KVM / QEMU 용 libvirt
      • VMware 용 VMwareAPI
  • nova-scheduler service
    • 대기열에서 가상 머신 인스턴스 요청을 받아 실행할 컴퓨팅 서버 호스트를 결정합니다.
  • nova-conductor-module
    • nova-compute 서비스와 데이터베이스 간의 상호 작용을 조정합니다.
    • nova-compute service에서 만든 클라우드 데이터베이스에 대한 직접 접근을 제거합니다.
  • nova-novncproxy daemon
    • VNC 연결을 통해 실행 중인 인스턴스에 접근하는 프록시를 제공합니다.
    • 브라우저 기반 novnc 클라이언트를 지원합니다.
  • nova-spicehtml5proxy daemon
    • SPICE 연결을 통해 실행 중인 인스턴스에 접근하는 프록시를 제공합니다.
    • 브라우저 기반 HTML5 클라이언트를 지원합니다.
  • nova-xvpvncproxy daemon
    • VNC 연결을 통해 실행 중인 인스턴스에 접근하는 프록시를 제공합니다.
    • OpenStack-specific Java 클라이언트를 지원합니다.
    • 버전 19.0.0(Stein) 이후 더 이상 사용하지 않음
  • The queue
    • 데몬 간의 메시지를 전달하는 중앙 허브입니다.
    • 일반적으로 RabbitMQ로 구현되지만 다른 옵션을 사용할 수 있습니다.
  • SQL Database
    • 다음을 포함하여 클라우드 인프라의 대부분의 빌드 시간 및 런타임 상태를 저장합니다.
      • 사용 가능한 인스턴스 유형
      • 사용 중인 인스턴스
      • 사용 가능한 네트워크
      • 프로젝트
    • 이론적으로 OpenStack Compute는 SQLAlchemy에서 지원하는 모든 데이터베이스를 지원합니다.
      • 공통 데이터베이스는 테스트 및 개발 작업을 위한 SQLite3, MySQL, MariaDB 및 PostgreSQL 입니다.

설치 및 구성(Controller Node)

  • 컨트롤러 노드에서 nova를 설치하고 구성하는 방법을 설명합니다.

전제 조건

  • Compute 노드를 설치 및 구성하기 전에 데이터베이스, 서비스 자격 증명 및 API 엔드 포인트를 생성해야 합니다.
  • 데이터베이스 생성
    • 데이터베이스 액세스 클라이언트를 사용하여 root 사용자로 데이터베이스 서버에 연결
      • mysql -u root -p
    • nova, nova_api 및 nova_cell0 데이터 베이스 생성
MariaDB [(none)]> CREATE DATABASE nova_api;
MariaDB [(none)]> CREATE DATABASE nova;
MariaDB [(none)]> CREATE DATABASE nova_cell0;
  • 데이터베이스에 접근 권한 부여
MariaDB [(none)]> GRANT ALL PRIVILEGES ON nova_api.* TO 'nova'@'localhost' \
  IDENTIFIED BY 'NOVA_DBPASS';
MariaDB [(none)]> GRANT ALL PRIVILEGES ON nova_api.* TO 'nova'@'%' \
  IDENTIFIED BY 'NOVA_DBPASS';

 MariaDB [(none)]> GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'localhost' \
  IDENTIFIED BY 'NOVA_DBPASS';
MariaDB [(none)]> GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'%' \
  IDENTIFIED BY 'NOVA_DBPASS';

MariaDB [(none)]> GRANT ALL PRIVILEGES ON nova_cell0.* TO 'nova'@'localhost' \
  IDENTIFIED BY 'NOVA_DBPASS';
MariaDB [(none)]> GRANT ALL PRIVILEGES ON nova_cell0.* TO 'nova'@'%' \
  IDENTIFIED BY 'NOVA_DBPASS';
  • 데이터베이스 액세스 클라이언트 종료
    • exit
  • admin 자격 증명 관리자
    • . admin-openrc
  • Compute 서비스 자격 증명 생성
    • nova 사용자 생성
      • openstack user create --domain default --password-prompt nova
    • nova 사용자에게 admin role 추가
openstack role add --project service --user nova admin
// 출력 결과 없음
  • nova service entity 생성
    • openstack service create --name nova --description "OpenStack Compute" compute

  • Compute API 서비스 엔드 포인트 생성
root@controller$ openstack endpoint create --region RegionOne compute public http://controller:8774/v2.1
root@controller$ openstack endpoint create --region RegionOne compute internal http://controller:8774/v2.1
root@controller$ openstack endpoint create --region RegionOne compute admin http://controller:8774/v2.1

구성 요소 설치 및 구성

  • 패키지 설치
    • yum install openstack-nova-api openstack-nova-conductor openstack-nova-novncproxy openstack-nova-scheduler
  • /etc/nova/nova.conf 수정
    • [DEFAULT] 섹션에 컴퓨팅 및 메타데이터 API를 활성화
[DEFAULT]
# ...
enabled_apis = osapi_compute,metadata
  • [api_database]와 [database] 섹션에 데이터베이스 액세스 구성
[api_database]
# ...
connection = mysql+pymysql://nova:NOVA_DBPASS@controller/nova_api

[database]
# ...
connection = mysql+pymysql://nova:NOVA_DBPASS@controller/nova
- NOVA_DBPASS는 Compute 데이터베이스 암호로 변경
  • [DEFAULT] 섹션에 RabbitMQ 메시지 큐 구성
[DEFAULT]
# ...
transport_url = rabbit://openstack:RABBIT_PASS@controller:5672/
- RABBIT_PASS는 openstack 계정 암호로 변경
  • [api]와 [keystone_authtoken] 섹션에 Identity 서비스 접근 구성
[api]
# ...
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 = nova
password = NOVA_PASS
- NOVA_PASS를 Identity 서비스에서 사용자의 비밀번호로 변경
  • [DEFAULT] 섹션에 my_ip 구성
[DEFAULT]
# ...
my_ip = 10.0.0.11
  • [DEFAULT] 섹션에 네트워킹 서비스에 대한 지원을 활성화
    • 기본적으로 Compute는 내부 방화벽 드라이버를 사용합니다. 네트워킹 서비스에 방화벽 드라이버가 포함되어 있으므로 Compute 방화벽 드라이버를 비활성화합니다.
  • [DEFAULT] # ... use_neutron = true firewall_driver = nova.virt.firewall.NoopFirewallDriver
  • [vnc] 섹션에 컨트롤러 노드의 IP 주소 인터페이스 관리를 사용하도록 VNC 프록시를 구성
[vnc]
enabled = true
# ...
server_listen = $my_ip
server_proxyclient_address = $my_ip
  • [glance] 섹션에 이미지 서비스 API의 위치를 구성
[glance]
# ...
api_servers = http://controller:9292
  • [oslo_concurrency] 섹션에 잠금 경로를 구성
[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://controller:5000/v3
username = placement
password = PLACEMENT_PASS    # placement 서비스 사용자의 비밀번호
  • nova-api 데이터베이스 채움
    • su -s /bin/sh -c "nova-manage api_db sync" nova
  • cell0 데이터베이스 등록
    • su -s /bin/sh -c "nova-manage cell_v2 map_cell0" nova
  • cell1 셀 만들기
    • su -s /bin/sh -c "nova-manage cell_v2 create_cell --name=cell1 --verbose" nova
  • nova 데이터베이스 채움
    • su -s /bin/sh -c "nova-manage db sync" nova
  • nova cell0 및 cell1이 올바르게 등록되었는지 확인
    • su -s /bin/sh -c "nova-manage cell_v2 list_cells" nova

설치 완료

  • Compute 서비스를 시작하고 시스템이 부팅될 떄 시작되도록 구성
root@controller$ systemctl enable \
    openstack-nova-api.service \
    openstack-nova-scheduler.service \
    openstack-nova-conductor.service \
    openstack-nova-novncproxy.service
root@controller$ systemctl start \
    openstack-nova-api.service \
    openstack-nova-scheduler.service \
    openstack-nova-conductor.service \
    openstack-nova-novncproxy.service

설치 및 구성(Compute Node)

  • 이 서비스는 인스턴스 또는 가상 머신을 배포하기 위해 여러 하이퍼 바이저를 지원합니다.
  • 이 구성에서는 단순화를 위해 가상 머신에 대한 하드웨어 가속을 지원하는 커널 기반 VM(KVM)QEMU(Quick EMUlator) 하이퍼 바이저를 사용합니다.

구성 요소 설치 및 구성

  • 패키지 설치
    • yum install openstack-nova-compute
  • /etc/nova/nova.conf 파일 수정
    • [DEFAULT] 섹션에서 컴퓨팅 및 메타 데이터 API 활성화
[DEFAULT]
# ...
enabled_apis = osapi_compute,metadata
  • [DEFAULT] 섹션에서 RabbitMQ 구성
[DEFAULT]
# ...
transport_url = rabbit://openstack:RABBIT_PASS@controller    // openstack 계정 암호
  • [api]와 [keystone_authtoken] 섹션에 아이덴티티 서비스 액세스 구성
[api]
# ...
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 = nova
password = NOVA_PASS    // NOVA 사용자 암호
  • [DEFAULT] 섹션 my_ip 옵션 구성
[DEFAULT]
# ...
my_ip = MANAGEMENT_INTERFACE_IP_ADDRESS    // 컴퓨팅 노드에 있는 관리 네트워크 인터페이스의 IP 주소(예제 아키텍처는 10.0.0.31)
  • [DEFAULT] 섹션에 네트워킹 서비스에 대한 지원을 활성화
[DEFAULT]
# ...
use_neutron = true
firewall_driver = nova.virt.firewall.NoopFirewallDriver
  • [vnc] 섹션에 원격 콘솔 액세스를 활성화
[vnc]
# ...
enabled = true
server_listen = 0.0.0.0
server_proxyclient_address = $my_ip
novncproxy_base_url = http://controller:6080/vnc_auto.html
- 서버는 모든 IP 주소를 수신하고 프록시는 compute 노드의 관리 인터페이스 IP 주소만 수신
- 기본 URL은 웹 브라우저를 사용하여 이 컴퓨팅 노드에 있는 인스턴스의 원격 콘솔에 액세스할 수 있는 위치를 나타냄
  • [glance] 섹션에 이미지 서비스 API의 위치를 구성
[glance]
# ...
api_servers = http://controller:9292
  • [oslo_concurrency] 섹션에 잠금 경로를 구성
[oslo_concurrency]
# ...
lock_path = /var/lib/nova/tmp
  • [placement] 섹션에 placement API를 구성
[placement]
# ...
region_name = RegionOne
project_domain_name = Default
project_name = service
auth_type = password
user_domain_name = Default
auth_url = http://controller:5000/v3
username = placement
password = PLACEMENT_PASS    // placement 암호로 변경

설치 완료

  • 컴퓨팅 노드가 가상 머신에 대한 하드웨어 가속을 지원하는지 확인
    • egrep -c '(vmx|svm)' /proc/cpuinfo
    • one or greater를 리턴하면 하드웨어 가속을 지원, 추가 설정 필요 없음
    • zero를 리턴하면 하드웨어 가속을 지원하지 않으므로 KVM 대신 QEMU를 사용하도록 libvirt 구성
      • /etc/nova/nova.conf 수정
[libvirt]
# ...
virt_type = qemu

  • compute 서비스를 시작하고 시스템이 부팅될 때 자동으로 시작되도록 구성
root@controller$ systemctl enable libvirtd.service openstack-nova-compute.service
root@controller$ systemctl start libvirtd.service openstack-nova-compute.service

셀 데이터베이스에 컴퓨팅 노드 추가

  • Controller Node에서 명령 실행
  • 관리자 자격 증명
    • . admin-openrc
  • 데이터베이스에 컴퓨팅 호스트가 있는지 확인
    • openstack compute service list --service nova-compute

  • Discover compute hosts
    • su -s /bin/sh -c "nova-manage cell_v2 discover_hosts --verbose" nova
    • 새 compute 노드를 추가 할 때 컨트롤러 노드에서 nova-manage cell_v2 discover_hosts를 실행하여 새 compute 노드를 등록해야합니다.

작동 확인

  • compute 서비스의 작동 확인
  • Controller Node에서 수행 
    • admin 자격 증명
      • . admin-openrc
    • 서비스 구성 요소를 출력하여 등록이 잘 되어 있는지 확인
      • openstack compute service list

    • 위 그림처럼 3개의 서비스가 활성화되어 있어야 합니다.
    • Identity 서비스에 API end-point를 나열하여 Identity 서비스와의 연결 확인
      • openstack catalog list
    • 이미지 서비스에 이미지를 나열하여 이미지 서비스와의 연결 확인
      • openstack image list

  • cell 및 placement API가 성공적으로 작동하고 다른 필수 전제 조건이 있는지 확인
    • nova-status upgrade check
    • nova-status upgrade check forbidden (HTTP 403) 에러 발생

  • 해결방법
  • vi /etc/httpd/conf.d/00-placement-api.conf
<Directory /usr/bin>
    <IfVersion >= 2.4>
        Require all granted
    </IfVersion>
    <IfVersion < 2.4>
        Order allow,deny
        Allow from all
    </IfVersion>
</Directory>
  • systemctl restart httpd
  • 해결완료