본문 바로가기
  • 노션에서 삽질한 내용을 정리하는 블로그
자기발전소/# Manually Install OpenStack

Openstack Nova on Centos (Rocky) 1 [Controller Node]

by iamlucia 2020. 8. 21.

 

Nova: Compute Service (컴퓨트 서비스) 


 Prerequisties .
사전에 오픈스택 기초 환경이 구성 필요
참조: https://4betterme.tistory.com/39

 

Controller Node: Compute Node 관리
Compute Node: 인스턴스 생성하는 하이퍼바이저

 

 

<< ⭕ 본 Nova 서비스 설치 내용은 컨트롤러 노드에서 진행 >>

 


🔨 데이터 베이스 생성 및 접근 권한 설정 

 

🟢 Mysql 에서 nova_api, nova, nova_cell0, placement 데이터 베이스를 생성한 다음, nova와 placement 계정에 데이터베이스 접속권한 부여 :
데이터베이스는 4개지만, 데이터베이스에 접근 가능한 계정은 nova 와 placement 점 유의! 

 

#  mysql -u root -p 
[root 비밀번호 입력]하여 mariadb 접속
-------------------------------
MariaDB [(none)]> CREATE DATABASE nova_api;
MariaDB [(none)]> CREATE DATABASE nova; 
MariaDB [(none)]> CREATE DATABASE nova_cell0; 
MariaDB [(none)]> CREATE DATABASE placement;

MariaDB [(none)]> GRANT ALL PRIVILEGES ON nova_api.* TO 'nova'@'localhost' IDENTIFIED BY '[nova db 비밀번호]'; 

MariaDB [(none)]> GRANT ALL PRIVILEGES ON nova_api.* TO 'nova'@'%' IDENTIFIED BY '[nova db 비밀번호]'; 
MariaDB [(none)]> GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'localhost'  IDENTIFIED BY '[nova db 비밀번호]'; 
MariaDB [(none)]> GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'%'  IDENTIFIED BY '[nova db 비밀번호]'; 
MariaDB [(none)]> GRANT ALL PRIVILEGES ON nova_cell0.* TO 'nova'@'localhost' \ IDENTIFIED BY '[nova db 비밀번호]'; 
MariaDB [(none)]> GRANT ALL PRIVILEGES ON nova_cell0.* TO 'nova'@'%' IDENTIFIED BY '[nova db 비밀번호]'; 
MariaDB [(none)]> GRANT ALL PRIVILEGES ON placement.* TO 'placement'@'localhost'  IDENTIFIED BY '[placement db 비밀번호]'; MariaDB [(none)]> GRANT ALL PRIVILEGES ON placement.* TO 'placement'@'%'  IDENTIFIED BY '[placement db 비밀번호]';

 

 

🟢 admin credential 스크립트 실행 :

# source key_adminrc

 

 

🟢 Compute 서비스 Credential 생성 1  - nova 계정 생성 후 프로젝트 및 role에 추가 :

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

 

 

🟢 Compute 서비스 Credential 생성 2  - nova 서비스 생성 : 

 

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

 

 

🟢 Compute API 서비스 endpoint 생성 : 

 

# openstack endpoint create --region RegionOne  compute public http://[컨트롤러 노드 관리용 ip]:8774/v2.1
# openstack endpoint create --region RegionOne  compute internal http://[컨트롤러 노드 관리용 ip]:8774/v2.1
# openstack endpoint create --region RegionOne  compute admin http://[컨트롤러 노드 관리용 ip]:8774/v2.1

 

 

🟢 Placement 서비스 Credential 생성 1  - placement 계정 생성 후 프로젝트 및 role에 추가 :

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

 

 

🟢  Placement 서비스 Credential 생성 2  - placement 서비스 생성 : 

 

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

 

 

🟢 Placement API 서비스 endpoint 생성 : 

 

# openstack endpoint create --region RegionOne  placement public http://[컨트롤러 노드 관리용 ip]:8778
# openstack endpoint create --region RegionOne  placement internal http://[컨트롤러 노드 관리용 ip]:8778
# openstack endpoint create --region RegionOne  compute admin http://[컨트롤러 노드 관리용 ip]:8778

 


🔨 Compute 서비스 구성요소  설치 및 구성 

🟢 Compute 서비스 관련 패키지 설치 : 

 

# yum -y install openstack-nova-api openstack-nova-conductor openstack-nova-console openstack-nova-novncproxy openstack-nova-scheduler openstack-nova-placement-api

 

 

🟢 nova.conf 파일 수정 : 

 

더보기

# vi /etc/nova/nova.conf
--------------------------------
[DEFAULT] 
# ... 
enabled_apis = osapi_compute,metadata
transport_url = rabbit://openstack:[rabbitmq 오프스택 계정 비밀번호]@[컨트롤러 노드 관리용 ip]
use_neutron = true 
firewall_driver = nova.virt.firewall.NoopFirewallDriver
my_ip = [컨트롤러 노드 관리용 ip] 

[api_database]
# ... 
connection = mysql+pymysql://nova:[nova db 비밀번호]@[컨트롤러 노드 관리용 ip]/nova_api
[database] 
# ... 
connection = mysql+pymysql://nova:[nova db 비밀번호]@[컨트롤러 노드 관리용 ip]/nova 
[placement_database] 
# ... 
connection = mysql+pymysql://placement:[placement db 비밀번호]@[컨트롤러 노드 관리용 ip]/placement

[api] 
# ... 
auth_strategy = keystone 

[keystone_authtoken] 
# ... auth_url = http://[컨트롤러 노드 관리용 ip]:5000/v3 
memcached_servers = [컨트롤러 노드 관리용 ip]:11211 
auth_type = password 
project_domain_name = Default 
user_domain_name = Default 
project_name = service 
username = nova 
password = [nova계정 비밀번호]

[vnc] 
enabled = true 
server_listen = $my_ip 
server_proxyclient_address = $my_ip

[glance] 
api_servers = http://[컨트롤러 노드 관리용 ip]:9292

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

[placement] 
region_name = RegionOne 
project_domain_name = Default 
project_name = service 
auth_type = password 
user_domain_name = Default 
auth_url = http://[컨트롤러 노드 관리용 ip]:5000/v3 
username = placement password = [placement 계정 비밀번호]

 

🟢 00-nova-placement-api.conf 파일 수정 및 httpd 서비스 재실행 : 

# vi  /etc/httpd/conf.d/00-nova-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 

 

 

🟢 nova-api 와 placement 데이터베이스에 테이블 추가 (Populate) : 

 

# 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 cell 생성 : 

 

# su -s /bin/sh -c "nova-manage cell_v2 create_cell --name=cell1 --verbose" nova

 

 

🟢 nova 데이터베이스에 테이블 추가 (Populate) : 

 

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

 

 

Verification: nova cell0과 cell1 이 제대로 등록되었는지 확인 : 

 

# su -s /bin/sh -c "nova-manage cell_v2 list_cells" nova

 


🔨 설치 마무리 

 

 

🟢 Computer 관련 서비스 실행 및 활성화 : (상태 확인 필수!) 

 

# systemctl enable openstack-nova-api.service openstack-nova-consoleauth openstack-nova-scheduler.service openstack-nova-conductor.service openstack-nova-novncproxy.service
# systemctl start openstack-nova-api.service openstack-nova-consoleauth openstack-nova-scheduler.service openstack-nova-conductor.service openstack-nova-novncproxy.service
# systemctl status openstack-nova-api.service openstack-nova-consoleauth openstack-nova-scheduler.service openstack-nova-conductor.service openstack-nova-novncproxy.service

 


🔫 Trouble Shooting  

🔴 ERROR  : 설치 마무리 과정 중 openstack-nova-consoleauth.service 실행에서 오류 발생

 

Unable to connect to AMQP server on undercloud.internalapi.localdomain:5672 after None tries: (0, 0): (403) ACCESS_REFUSED

 

🟠 rabbitmq의 인증 문제로 추정하여 user 및 pw 확인하여 수정하였으나 여전히 오류

 

# rabbitmqctl list_users
# rabbitmqctl change_password openstack rabbitpass
# rabbitmqctl set_permissions openstack ".*" ".*" ".*"

 


🟠 공식 문서 확인 중 Rocky 패키지에서 nova(18.0.0.버전) 에서 consoleauth.service는 비추(추후 사라질 예정)한다는 내용 확인

🟢 Trouble shooting : consoleauth.service 삭제 

 

# systemctl unmask consoleauth.service