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

OpenStack Heat on CentOS(Rocky)

by iamlucia 2020. 9. 27.

Heat: Orchestration Service (오케스트레이션 서비스) 


🔨 데이터베이스 및  credential 생성 

🟢 mysql 접속하여 데이터베이스 생성 및 접근 권한 설정 :

 

# mysql -u root -p 

> CREATE DATABASE heat;
> GRANT ALL PRIVILEGES ON heat.* TO 'heat'@'localhost'  IDENTIFIED BY 'HEAT_DBPASS';
> GRANT ALL PRIVILEGES ON heat.* TO 'heat'@'%' \ IDENTIFIED BY 'HEAT_DBPASS';

 

 

🟢 서비스 credential 생성
-
Heat 유저 생성 , 역할 및 프로젝트 연결:

 

# openstack user create --domain default --password-prompt heat
User Password:
Repeat User Password:

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

 

- heat & heat-cfn 서비스 개체 생성 : 

 

# openstack service create --name heat  --description "Orchestration" orchestration
# openstack service create --name heat-cfn --description "Orchestration"  cloudformation

 

 

🟢 서비스 endpoint 생성 : 

 

# openstack endpoint create --region RegionOne orchestration public http://controller:8004/v1/%\(tenant_id\)s
# openstack endpoint create --region RegionOne orchestration internal http://controller:8004/v1/%\(tenant_id\)s
# openstack endpoint create --region RegionOne orchestration admin http://controller:8004/v1/%\(tenant_id\)s

# openstack endpoint create --region RegionOne  cloudformation public http://controller:8000/v1
# openstack endpoint create --region RegionOne  cloudformation internal http://controller:8000/v1
# openstack endpoint create --region RegionOne  cloudformation admin http://controller::8000/v1

 

🟢 stack을 관리하기 위해 오케스트레이션 관련 추가 정보 입력 : 
- heat 도메인 생성하여 해당 도메인에 stack용 user (heat_domain_admin)및 project 를 포함시킨다. 

 

# openstack domain create --description "Stack projects and users" heat
# openstack user create --domain heat --password-prompt heat_domain_admin
User Password:
Repeat User Password:
# openstack role add --domain heat --user-domain heat --user heat_domain_admin admin

//demo user도 스택 관리 가능할 수 있게 설정  
# openstack role create heat_stack_owner
# openstack role add --project demo --user demo heat_stack_owner   //heat_stack_owner는 스택을 관리하는 각 user에 추가되어야 함. 
# openstack role create heat_stack_user

 

heat_stack_owner에 역할 부여할 때 사용할 demo 유저 생성

 


🔨 구성요소 설치  

🟢 관련 패키지 설치 :

 

# yum install openstack-heat-api openstack-heat-api-cfn  openstack-heat-engine

 

🟢 heat 설정 파일 편집: 

 

# vi /etc/heat/heat.conf 

 

더보기

[database]
...
connection = mysql+pymysql://heat:HEAT_DBPASS@controller/heat


[DEFAULT]

...
transport_url = rabbit://openstack:RABBIT_PASS@controller
heat_metadata_server_url = http://controller:8000
heat_waitcondition_server_url = http://controller:8000/v1/waitcondition
stack_domain_admin = heat_domain_admin
stack_domain_admin_password = HEAT_DOMAIN_PASS
stack_user_domain_name = heat


[keystone_authtoken]

...
auth_uri = http://controller:5000
auth_url = http://controller:35357
memcached_servers = controller:11211
auth_type = password
project_domain_name = default
user_domain_name = default
project_name = service
username = heat
password = HEAT_PASS

[trustee]

...
auth_type = password
auth_url = http://controller:35357
username = heat
password = HEAT_PASS
user_domain_name = default

[clients_keystone]
...
auth_uri = http://controller:5000

 

🟢 데이터베이스 테이블 생성 :

 

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

 


🔨 설치 마무리 

# systemctl enable openstack-heat-api.service  openstack-heat-api-cfn.service openstack-heat-engine.service
# systemctl start openstack-heat-api.service  openstack-heat-api-cfn.service openstack-heat-engine.service

 

📍 Verification 

# . admin-openrc
# openstack orchestration service list

 

 

이때,  host 즉 컴트롤러 노드의 CPU 개수 만큼 heat-engine 컴포넌트가 출력되어야 함


🔨 HEAT 간단한 실습 : 인스턴스 생성 

🟢 Template 작성 :

- demo-template.yml 

더보기

heat_template_version: 2015-10-15

description: Launch a basic instance with CirrOS image 

parameters: 
  NetID: 
    type: string 
    description: Network ID to use for the instance. 

resources:

  server: 
    type: OS::Nova::Server 
    properties: 
      image: cirros 
      flavor: m1.tiny

      user_data: 
        get_file: instance_passwordauth.sh               // 서버에 keypair없이 접속할 수 있게 configuration파일 작성해둠 

      networks: 
      - network: { get_param: NetID }                        // stack 생성시 파라미터값으로 네트워크 id를 받음 

outputs: 
  instance_name: 
    description: Name of the instance. 
    value: { get_attr: [ server, name ] } 
  instance_ip: 
    description: IP address of the instance. 
    value: { get_attr: [ server, first_address ] }

 

-instance_passwordauth.sh 

더보기

#cloud-config 
password: test123 
chpasswd: { expire: False } 
ssh_pwauth: True

 

🟢 Template으로 Stack 생성 :

- demo 계정으로 credential 인증: 

 

network 생성 및 heat 서비스 시작 시 언급되는 demo 에 주의해야 할 필요가 있다. 
🚨 공식문서대로 설치했다면, demo credential 스크립트에 user가 myuser , role이 myrole이 배정되어있을 것이다.🚨
keystone에서 예시로 만들었던 myuser 프로젝트 계정 demo script 를 다음과 같이 수정 필요

# . admin-openrc  
# openstack role add --project demo --user demo demo
# cat demo-openrc  

export OS_PROJECT_DOMAIN_NAME=Default 
export OS_USER_DOMAIN_NAME=Default 
export OS_PROJECT_NAME=demo 
export OS_USERNAME=demo 
export OS_PASSWORD=test123 
export OS_AUTH_URL=http://controller:5000/v3 
export OS_IDENTITY_API_VERSION=3 
export OS_IMAGE_API_VERSION=2

 

 

# . demo-openrc 
# openstack network list | awk '/ provider1 / { print $2 }' 
b47074a3-9489-490a-90d6-bbbae4c38a11
# openstack flavor create --id 0 --vcpus 1 --ram 64 --disk 1 m1.tiny
# openstack stack create -t demo-template.yml  --parameter "NetID=b47074a3-9489-490a-90d6-bbbae4c38a11" firstStack

 

flavor 및 network 확인 
스택 생성 

 

스택 리스트 확인 
스택 output 확인 
스택으로 생성된 서버 확인

 

호라이즌으로 인스턴스 하나 생성한 다음, 컴퓨트노드에서 실행중인 인스턴스 확인


 

🚨 Error : 설치 마무리 ERROR:NONE 에러 

keystone관련 문제라는 log확인 후,

오픈스택 다른 서비스 이용 시도해보았으나 

openstack imgae list 등 다른 프로젝트 관련 인증은 잘 이루어졌음

 

🔫 Trouble shooting : 

🟢 heat설치에서 인증이나 비번이 잘 입력되지 못한 것으로 판단 

다시 데이터베이스부터 drop하며 새로 설치 시작하자 문제 발견!

 

openstack role add --project services --user heat admin 공식문서에는
service 프로젝트가 아닌 services라고 되어 있어 단순 복붙하게 되면 오류가 뜰 수 있음 ! 

 

🟢 도메인도 새로 설치하고자 하는데,  enable 상태에서는 지울 수 없음

domain 관련 명령어 검색하여 비활성화 > 삭제 필요 

 

# openstack domain set heat --disable 
# openstack domain delete heat

 

 

🚨 Error 2 : Instance get stuck when booting grub

🔫 Trouble shooting : 

컴퓨트 노드에서 ,  /etc/nova/nova.conf 파일에서
[libvirt] 섹션 내용 수정하니 정상 접속 가능 

virt_type=qemu