Contrail Heat 템플릿 사용
Heat는 OpenStack 프로그램의 오케스트레이션 엔진입니다. Heat를 사용하면 텍스트 파일로 구성된 템플릿을 기반으로 여러 클라우드 애플리케이션을 실행할 수 있습니다.
열 소개
Heat 템플릿은 네트워크, 서버, 유동 IP 주소 등과 같은 클라우드 애플리케이션의 인프라를 설명하며 해당 애플리케이션의 전체 수명 주기를 관리하는 데 사용할 수 있습니다.
애플리케이션 인프라가 변경되면 Heat 템플릿을 수정하여 이러한 변경 사항을 자동으로 반영할 수 있습니다. Heat는 시스템이 응용 프로그램 작업을 마친 경우 모든 응용 프로그램 리소스를 삭제할 수도 있습니다.
Heat 템플릿은 리소스 간의 관계(예: 정책 적용을 통해 연결된 네트워크)를 기록할 수 있으며, 결과적으로 Heat 템플릿에서 관리하는 애플리케이션을 시작하는 데 필요한 인프라를 올바른 순서로 생성하는 OpenStack REST API를 호출할 수 있습니다.
Heat 아키텍처
Heat는 다음을 포함한 Python 애플리케이션을 통해 구현됩니다.
heat-client
- Heat API를 실행하기 위해 애플리케이션과heat-api
통신하는 CLI 도구입니다.heat-api
- 원격 프로시저 호출(RPC)을 통해 Heat 엔진에 API 요청을 전송하여 API 요청을 처리하는 OpenStack 기본 REST API를 제공합니다.heat-engine
- 템플릿 출시를 오케스트레이션하고 API 소비자에게 이벤트를 다시 제공하는 일을 담당합니다.
Heat 버전 2 리소스 지원
Contrail 릴리스 3.0.2부터 Contrail Heat 리소스 및 템플릿은 Heat 버전 2 리소스를 사용하여 Contrail 스키마에서 자동 생성됩니다. Contrail 릴리스 3.0.2는 3.x 릴리스에서 Contrail과 함께 Heat를 사용하는 데 필요한 최소 버전입니다. Contrail Heat 버전 2 리소스의 계층 구조는 OS::ContrailV2::<ResourceName>
다음과 같습니다.
생성된 리소스와 템플릿은 Contrail Python 패키지의 일부이며, 대상 설치의 다음 디렉터리에 위치합니다.
/usr/lib/python2.7/dist-packages/vnc_api/gen/heat/
heat/ 디렉토리에는 다음과 같은 하위 디렉토리가 있습니다.
resources/ - Heat 엔진 서비스의 컨텍스트에서 실행되는 contrail-heat 플러그인에 대한 모든 리소스를 포함합니다.
templates/ - 각 리소스에 대한 샘플 템플릿이 들어 있습니다. 각 샘플 템플릿은 스키마에서 가능한 모든 매개 변수를 제공합니다. 네트워크 설계를 위해 더 복잡한 템플릿을 구축할 때 샘플 템플릿을 참조로 사용하십시오.
env/ - 각 템플릿에 대한 입력을 위한 환경을 포함합니다.
다음은 contrail-heat에서 지원하는 모든 생성된 플러그인 리소스 목록입니다.
https://github.com/tungstenfabric/tf-heat-plugin/tree/master/contrail_heat/new_templates
Heat 버전 1 리소스 사용 중단
계층 OS::Contrail::<ResourceName>
내의 Heat 버전 1 자원은 더 이상 사용되지 않으며 Heat 버전 1 템플리트를 사용하여 새 서비스 템플리트를 작성해서는 안 됩니다.
Heat 버전 2(서비스 템플릿 및 포트 튜플 샘플 워크플로우 포함)
Contrail 서비스 템플릿 버전 2를 사용하면 사용자는 포트를 생성하고 포트 튜플 개체를 통해 가상 머신(VM) 기반 서비스 인스턴스에 바인딩할 수 있습니다. 버전 2 서비스 템플릿으로 생성된 모든 객체는 Contrail Heat 엔진에 직접 표시되며 Heat에서 직접 관리합니다.
다음은 Heat에서 관리할 포트 튜플 및 서비스 인스턴스를 만들기 위한 기본 워크플로 단계를 보여줍니다.
서비스 템플릿을 생성합니다. 버전 필드에서 2를 선택합니다.
방금 만든 서비스 템플릿에 대한 서비스 인스턴스를 만듭니다.
포트 튜플 객체를 만듭니다.
Nova VM 시작을 사용하거나 VM을 시작하지 않고 포트를 만듭니다.
각 포트에 left, right, mgmt 등의 레이블을 지정하고 포트를 port-tuple 개체에 추가합니다.
단일 포트 튜플의 각 포트에 대해 고유한 레이블을 사용합니다. left 및 right라는 레이블은 전달에 사용됩니다.
포트 튜플을 서비스 인스턴스에 연결합니다.
서비스 인스턴스를 시작합니다.
예: Heat를 사용하여 서비스 템플릿 생성
다음은 Heat를 사용하여 서비스 템플릿을 만드는 방법의 예입니다.
템플릿을 정의하여 서비스 템플릿을 만듭니다.
service_template.yaml heat_template_version: 2013-‐05-‐23 description: > HOT template to create a service template parameters: name: type: string description: Name of service template mode: type: string description: service mode type: type: string description: service type image: type: string description: Name of the image flavor: type: string description: Flavor service_interface_type_list: type: string description: List of interface types shared_ip_list: type: string description: List of shared ip enabled-‐disabled static_routes_list: type: string description: List of static routes enabled-‐disabled resources: service_template: type: OS::ContrailV2::ServiceTemplate properties: name: { get_param: name } service_mode: { get_param: mode } service_type: { get_param: type } image_name: { get_param: image } flavor: { get_param: flavor } service_interface_type_list: { "Fn::Split" : [ ",", Ref: service_interface_type_list ] } shared_ip_list: { "Fn::Split" : [ ",", Ref: shared_ip_list ] } static_routes_list: { "Fn::Split" : [ ",", Ref: static_routes_list ] } outputs: service_template_fq_name: description: FQ name of the service template value: { get_attr: [ service_template, fq_name] } }
템플릿 파일의 변수에 넣을 값을 정의하는 환경 파일을 만듭니다.
service_template.env parameters: name: contrail_svc_temp mode: transparent type: firewall image: cirros flavor: m1.tiny service_interface_type_list: management,left,right,other shared_ip_list: True,True,False,False static_routes_list: False,True,False,False
다음 명령을 사용하여 템플릿과 환경 파일을 시작하여 Heat 스택을 생성합니다.
heat stack create stack1 –f service_template.yaml –e service_template.env
또는 최신 버전의 OpenStack에 대해 이 명령을 사용합니다.
openstack stack create -e <env-file-name> -t <template-file-name> <stack-name>