본문 바로가기
Openstack

오픈스택: heat

by 왈레 2023. 4. 10.

컨트롤러 노드에서 진행

$ mysql
> CREATE DATABASE heat;
> GRANT ALL PRIVILEGES ON heat.* TO 'heat'@'localhost' IDENTIFIED BY 'a';
> GRANT ALL PRIVILEGES ON heat.* TO 'heat'@'%' IDENTIFIED BY 'a';
> quit

# heat 사용자 생성 및 및 service 프로젝트 연결 admin 권한 부여
$ openstack user create --domain default --password-prompt heat # 비밀번호 a
$ openstack role add --project service --user heat admin

# demo 유저 및 demo 프로젝트 추가
$ openstack user create --domain default --password-prompt demo # 비밀번호 a
$ openstack project create --domain default --description "Demo project" demo

# 서비스 추가
$ openstack service create --name heat --description "Orchestration" orchestration
$ openstack service create --name heat-cfn --description "Orchestration" cloudformation

# API 엔드포인트 추가 
$ openstack endpoint create --region RegionOne orchestration public <http://172.0.0.4: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://172.0.0.4: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 # 비밀번호 a
$ openstack role add --domain heat --user-domain heat --user heat_domain_admin admin

# heat_stack_owner role 생성 및 role 추가 
$ openstack role create heat_stack_owner
$ openstack role add --project demo --user demo heat_stack_owner 

# heat_stack_user role 생성
# Orchestration service는 stack을 deploy하는 유저에게 자동으로 heat_stack_user 
# 권한을 할당합니다. 이 role은 충돌을 방지하기 위해 API를 제한합니다.  
# 따라서 절대 이 권한을 유저에게 할당하지 말아야한다.
$ openstack role create heat_stack_user

# 확인
$ openstack user list #[heat, demo]
$ openstack domain list #[heat]
$ openstack service list #[heat, heat-cfn]
$ openstack project list #[demo]
$ openstack role list #[heat_stack_owner, heat_stack_user]
$ openstack endpoint list | grep heat

# 패키지 설치 
$ apt install heat-api heat-api-cfn heat-engine

$ cp /etc/heat/heat.conf /etc/heat/heat.conf.org
$ grep -E '^[^#].' /etc/heat/heat.conf.org > /etc/heat/heat.conf
$ vi /etc/heat/heat.conf
[database]
connection = mysql+pymysql://heat:a@controller/heat

[DEFAULT]
transport_url = rabbit://openstack:a@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 = a
stack_user_domain_name = heat

[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 = heat
password = a

[trustee] 
auth_type = password
auth_url = <http://controller:5000>
username = heat
password = a
user_domain_name = default

[clients_keystone]
auth_uri = <http://controller:5000>

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

$ service heat-api restart
$ service heat-api-cfn restart
$ service heat-engine restart

$ service heat-api status
$ service heat-api-cfn status
$ service heat-engine status

# 검증1
# controller의 CPU 개수 만큼 heat-engine 컴포넌트가 출력되어야함
$ openstack orchestration service list

 

 

호라이즌에 heat UI 추가 

$ apt install python3-heat-dashboard
$ service apache2 restart

 

 

트러블 슈팅

1. magnum 설치 이후 heat 동작이 잘안되는 경우
-> heat.conf에서 controller를 ip로 변경
-> magnum으로 쿠버네티스 클러스터 설치 시 필요한 정보를 얻을 때 컨트롤러 노드의 API 주소로 
요청을 날리는데 controller가 상수로 박혀있어 API 요청이 제대로 이뤄지지 않음


2. [Qos 에러] : Unable to retrieve resources Qos policies:
The resource could not be found. Neutron server returns request_ids: ['...']

호라이즌에서 Template Generator 페이지를 열였을 때, 뉴트런 Qos가 Enable 되잇지않으면
내뱉는 에러로 neutron-qos-agent를 설치해주어야 한다. 원래는 네트워크 노드에 설치해야하는데
self-service network 아키텍처에서는 보통 네트워크 노드가 따로 존재하지 않는다.
따라서 controller 노드와 각각의 compute 노드에 neutron-qos-agent를 설치한다.

# controller, 각각의 compute 에서 실행
$ apt install neutron-qos-agent
$ systemctl start neutron-qos-agent
$ systemctl enable neutron-qos-agent

# controller 노드에서 진행
# policy 생성
$ openstack network qos policy create <policy-name>

# rule 생성 
# 최대 속도가 1000Kbps 새로운 대역폭 제한 규칙 생성
$ openstack network qos rule create --type bandwidth-limit --max-kbps 1000 <policy-name>

# QoS 정책을 가상 머신의 neutron 포트와 연결
$ neutron port-update --qos-policy <policy-name> <port-id>

# 가상 머신의 포트 ID를 얻는법
$ openstack port list --server <vm-name>

'Openstack' 카테고리의 다른 글

오픈스택: octavia  (0) 2023.04.10
오픈스택: magnum  (0) 2023.04.10
9. 오픈스택: compute 추가  (0) 2023.04.06
8. 오픈스택: cinder(블록 스토리지) 설치(2)  (0) 2023.04.06
7. 오픈스택: cinder(블록 스토리지) 설치(1)  (0) 2023.04.06

댓글