10장. 오케스트레이션 서비스(heat)를 사용하여 오버클라우드 구성
오케스트레이션 서비스(heat)를 사용하여 heat 템플릿 및 환경 파일에 사용자 지정 오버클라우드 구성을 생성할 수 있습니다.
10.1. heat 템플릿 이해 링크 복사링크가 클립보드에 복사되었습니다!
이 가이드의 사용자 지정 구성은 heat 템플릿 및 환경 파일을 사용하여 오버클라우드의 특정 측면을 정의합니다. 이 장에서는 Red Hat OpenStack Platform director의 맥락에서 이러한 템플릿의 구조와 형식을 이해할 수 있도록 heat 템플릿에 대한 기본적인 소개를 제공합니다.
10.1.1. Heat 템플릿 링크 복사링크가 클립보드에 복사되었습니다!
director는 HOT(Heat Orchestration Templates)를 오버클라우드 배포 계획의 템플릿 형식으로 사용합니다. HOT 형식의 템플릿은 일반적으로 YAML 형식으로 표시됩니다. 템플릿의 목적은 OpenStack Orchestration(heat)에서 생성하는 리소스 컬렉션 및 리소스의 구성인 스택을 정의하고 생성하는 것입니다. 리소스는 RHOSP(Red Hat OpenStack Platform)의 개체이며 컴퓨팅 리소스, 네트워크 구성, 보안 그룹, 확장 규칙 및 사용자 지정 리소스를 포함할 수 있습니다.
Heat 템플릿에는 다음 세 가지 섹션이 있습니다.
- parameters
-
이러한 설정은 heat로 전달되며, 스택을 사용자 지정하는 방법과 전달된 값이 없는 매개 변수의 기본값을 제공합니다. 이러한 설정은 템플릿의
parameters섹션에 정의되어 있습니다. - resources
-
resources섹션을 사용하여 이 템플릿을 사용하여 스택을 배포할 때 생성할 수 있는 계산 인스턴스, 네트워크 및 스토리지 볼륨과 같은 리소스를 정의합니다. RHOSP(Red Hat OpenStack Platform)에는 모든 구성 요소에 걸쳐 있는 핵심 리소스 세트가 포함되어 있습니다. 이는 스택의 일부로 만들고 구성할 특정 오브젝트입니다. RHOSP에는 모든 구성 요소에 걸쳐 있는 핵심 리소스 세트가 포함되어 있습니다. 이러한 값은 템플릿의resources섹션에 정의되어 있습니다. - 출력
-
outputs섹션을 사용하여 스택을 만든 후 클라우드 사용자가 액세스할 수 있는 출력 매개 변수를 선언합니다. 클라우드 사용자는 이러한 매개 변수를 사용하여 배포된 인스턴스의 IP 주소 또는 스택의 일부로 배포된 웹 애플리케이션의 URL과 같은 스택에 대한 세부 정보를 요청할 수 있습니다.
기본 Heat 템플릿의 예:
heat_template_version: 2013-05-23
description: > A very basic Heat template.
parameters:
key_name:
type: string
default: lars
description: Name of an existing key pair to use for the instance
flavor:
type: string
description: Instance type for the instance to be created
default: m1.small
image:
type: string
default: cirros
description: ID or name of the image to use for the instance
resources:
my_instance:
type: OS::Nova::Server
properties:
name: My Cirros Instance
image: { get_param: image }
flavor: { get_param: flavor }
key_name: { get_param: key_name }
output:
instance_name:
description: Get the instance's name
value: { get_attr: [ my_instance, name ] }
이 템플릿은 리소스 유형 유형을 사용합니다. OS::Nova::Server 는 클라우드 사용자가 지정하는 특정 플레이버, 이미지 및 키가 있는 my_instance 라는 인스턴스를 생성합니다. 스택은 My Cirros Instance 라는 instance_name 값을 반환할 수 있습니다.
Heat에서 템플릿을 처리하면 템플릿의 스택과 리소스 템플릿의 하위 스택 세트를 생성합니다. 이렇게 하면 템플릿으로 정의한 기본 스택에서 내림되는 스택의 계층 구조가 생성됩니다. 다음 명령을 사용하여 스택 계층 구조를 볼 수 있습니다.
$ openstack stack list --nested
10.1.2. 환경 파일 링크 복사링크가 클립보드에 복사되었습니다!
환경 파일은 heat 템플릿을 사용자 지정하는 데 사용할 수 있는 특수 유형의 템플릿입니다. 코어 heat 템플릿 외에도 배포 명령에 환경 파일을 포함할 수 있습니다. 환경 파일에는 다음 세 가지 섹션이 포함되어 있습니다.
- resource_registry
- 이 섹션에서는 다른 heat 템플릿에 연결된 사용자 지정 리소스 이름을 정의합니다. 이를 통해 핵심 리소스 컬렉션 내에 존재하지 않는 사용자 지정 리소스를 생성할 수 있습니다.
- parameters
- 이는 최상위 템플릿의 매개 변수에 적용하는 일반적인 설정입니다. 예를 들어 리소스 레지스트리 매핑과 같이 중첩 스택을 배포하는 템플릿이 있는 경우 매개 변수는 중첩된 리소스의 템플릿이 아닌 최상위 템플릿에만 적용됩니다.
- parameter_defaults
- 이러한 매개 변수는 모든 템플릿에서 매개 변수의 기본값을 수정합니다. 예를 들어 리소스 레지스트리 매핑과 같이 중첩된 스택을 배포하는 heat 템플릿이 있는 경우 매개변수 기본값은 모든 템플릿에 적용됩니다.
오버클라우드의 모든 스택 템플릿에 매개변수를 적용하려면 오버클라우드에 대한 사용자 지정 환경 파일을 생성할 때 매개변수 대신 parameter_defaults 를 사용합니다.
기본 환경 파일의 예:
resource_registry:
OS::Nova::Server::MyServer: myserver.yaml
parameter_defaults:
NetworkName: my_network
parameters:
MyIP: 192.168.0.1
이 환경 파일(my_env.yaml)은 특정 heat 템플릿(my_template.yaml)에서 스택을 생성할 때 포함될 수 있습니다. my_env.yaml 파일은 OS::Nova::Server::MyServer 라는 새 리소스 유형을 생성합니다. myserver.yaml 파일은 내장된 모든 리소스 유형을 재정의하는 이 리소스 유형의 구현을 제공하는 heat 템플릿 파일입니다. my_template.yaml 파일에 OS::Nova::Server::MyServer 리소스를 포함할 수 있습니다.
MyIP 는 이 환경 파일과 함께 배포하는 기본 heat 템플릿에만 매개변수를 적용합니다. 이 예에서 MyIP 는 my_template.yaml 의 매개 변수에만 적용됩니다.
NetworkName 은 기본 heat 템플릿 my_template.yaml 과 기본 템플릿에 포함된 리소스(예: 이 예제의 OS::Nova::Server::MyServer 리소스 및 myserver.yaml 템플릿)에 모두 적용됩니다.
RHOSP에서 heat 템플릿 파일을 사용자 지정 템플릿 리소스로 사용하려면 파일 확장자가 .yaml 또는 .template이어야 합니다.
10.1.3. 코어 오버클라우드 heat 템플릿 링크 복사링크가 클립보드에 복사되었습니다!
director에는 오버클라우드의 코어 heat 템플릿 컬렉션 및 환경 파일 컬렉션이 포함되어 있습니다. 이 컬렉션은 /usr/share/openstack-tripleo-heat-templates 에 저장됩니다.
이 템플릿 컬렉션의 기본 파일과 디렉터리는 다음과 같습니다.
overcloud.j2.yaml- director에서 오버클라우드 환경을 생성하는 데 사용하는 기본 템플릿 파일입니다. 이 파일은 Jinja2 구문을 사용하여 템플릿의 특정 섹션을 반복하여 사용자 지정 역할을 생성합니다. Jinja2 형식은 Overcloud 배포 프로세스 중에 YAML로 렌더링됩니다.
overcloud-resource-registry-puppet.j2.yaml- director에서 오버클라우드 환경을 생성하는 데 사용하는 기본 환경 파일입니다. 오버클라우드 이미지에 저장된 Puppet 모듈의 구성 세트를 제공합니다. director가 각 노드에 오버클라우드 이미지를 쓰고 나면 heat는 이 환경 파일에 등록된 리소스를 사용하여 각 노드의 Puppet 구성을 시작합니다. 이 파일은 Jinja2 구문을 사용하여 템플릿의 특정 섹션을 반복하여 사용자 지정 역할을 생성합니다. Jinja2 형식은 Overcloud 배포 프로세스 중에 YAML로 렌더링됩니다.
roles_data.yaml- 이 파일에는 오버클라우드의 역할 정의가 포함되어 있으며 서비스를 각 역할에 매핑합니다.
network_data.yaml-
이 파일에는 오버클라우드의 네트워크 정의와 서브넷, 할당 풀, VIP 상태 등의 속성이 포함되어 있습니다. 기본
network_data.yaml파일에는 외부, 내부 Api, 스토리지, 스토리지 관리, 테넌트 및 관리의 기본 네트워크가 포함되어 있습니다. 사용자 지정network_data.yaml파일을 생성하고-n옵션을 사용하여openstack overcloud deploy명령에 추가할 수 있습니다. plan-environment.yaml- 이 파일에는 오버클라우드 계획에 대한 메타데이터 정의가 포함되어 있습니다. 여기에는 계획 이름, 사용할 기본 템플릿, 오버클라우드에 적용할 환경 파일이 포함됩니다.
capabilities-map.yaml- 이 파일에는 오버클라우드 계획에 대한 환경 파일 매핑이 포함되어 있습니다.
Deployment-
이 디렉터리에는 heat 템플릿이 포함되어 있습니다.
overcloud-resource-registry-puppet.j2.yaml환경 파일은 이 디렉터리의 파일을 사용하여 각 노드에서 Puppet 구성의 애플리케이션을 구동합니다. 환경-
이 디렉터리에는 오버클라우드 생성에 사용할 수 있는 추가 heat 환경 파일이 있습니다. 이러한 환경 파일을 사용하면 결과 RHOSP(Red Hat OpenStack Platform) 환경에 추가 기능을 사용할 수 있습니다. 예를 들어 디렉터리에는 Cinder NetApp 백엔드 스토리지(cinder
-netapp-config.yaml)를 활성화하기 위한 환경 파일이 포함되어 있습니다. network- 이 디렉터리에는 격리된 네트워크 및 포트를 생성하는 데 사용할 수 있는 heat 템플릿 세트가 포함되어 있습니다.
Puppet-
이 디렉터리에는 Puppet 구성을 제어하는 템플릿이 포함되어 있습니다.
overcloud-resource-registry-puppet.j2.yaml환경 파일은 이 디렉터리의 파일을 사용하여 각 노드에서 Puppet 구성의 애플리케이션을 구동합니다. puppet/services-
이 디렉터리에는 모든 서비스 구성에 대한 레거시 heat 템플릿이 포함되어 있습니다.
배포디렉터리의 템플릿은puppet/services디렉터리의 대부분의 템플릿을 대체합니다. extraconfig- 이 디렉터리에는 추가 기능을 활성화하는 데 사용할 수 있는 템플릿이 포함되어 있습니다.
10.1.4. 오버클라우드 생성에 환경 파일 포함 링크 복사링크가 클립보드에 복사되었습니다!
-e 옵션을 사용하여 배포 명령에 환경 파일을 포함합니다. 환경 파일은 필요한 수만큼 추가할 수 있습니다. 그러나 후속 환경 파일에 정의된 매개변수와 리소스가 우선하므로 환경 파일의 순서가 중요합니다. 예를 들어 일반 리소스 유형 OS::TripleO::NodeExtraConfigPost 및 공통 매개변수 TimeZone 이 포함된 두 개의 환경 파일이 있습니다.
environment-file-1.yaml
resource_registry:
OS::TripleO::NodeExtraConfigPost: /home/stack/templates/template-1.yaml
parameter_defaults:
RabbitFDLimit: 65536
TimeZone: 'Japan'
environment-file-2.yaml
resource_registry:
OS::TripleO::NodeExtraConfigPost: /home/stack/templates/template-2.yaml
parameter_defaults:
TimeZone: 'Hongkong'
배포 명령에 두 환경 파일을 모두 포함합니다.
$ openstack overcloud deploy --templates -e environment-file-1.yaml -e environment-file-2.yaml
openstack overcloud deploy 명령은 다음 프로세스를 통해 실행됩니다.
- 코어 heat 템플릿 컬렉션에서 기본 구성을 로드합니다.
-
environment-file-1.yaml의 구성을 적용하여 기본 구성의 일반적인 설정을 재정의합니다. -
environment-file-2.yaml의 구성을 적용하여 기본 구성 및environment-file-1.yaml의 공통 설정을 재정의합니다.
그러면 오버클라우드의 기본 설정이 다음과 같이 변경됩니다.
-
OS::TripleO::NodeExtraConfigPost리소스는environment-file-2.yaml에 정의된 대로/home/stack/templates/template-2.yaml로 설정됩니다. -
timezone 매개변수는environment-file-2.yaml에 정의된 대로Hongkong으로 설정됩니다. -
RabbitFDLimit매개변수는environment-file-1.yaml에 정의된 대로65536으로 설정됩니다.environment-file-2.yaml은 이 값을 변경하지 않습니다.
이 메커니즘을 사용하여 여러 환경 파일 충돌의 값 없이 오버클라우드에 대한 사용자 지정 구성을 정의할 수 있습니다.
10.1.5. 사용자 지정 코어 heat 템플릿 사용 링크 복사링크가 클립보드에 복사되었습니다!
오버클라우드를 생성할 때 director는 /usr/share/openstack-tripleo-heat-templates 에 있는 코어 heat 템플릿 세트를 사용합니다. 이 코어 템플릿 컬렉션을 사용자 지정하려면 다음 Git 워크플로를 사용하여 사용자 정의 템플릿 컬렉션을 관리합니다.
절차
heat 템플릿 컬렉션이 포함된 초기 Git 리포지토리를 생성합니다.
템플릿 컬렉션을
/home/stack/templates디렉터리에 복사합니다.$ cd ~/templates $ cp -r /usr/share/openstack-tripleo-heat-templates .사용자 지정 템플릿 디렉터리로 변경하고 Git 리포지토리를 초기화합니다.
$ cd ~/templates/openstack-tripleo-heat-templates $ git init .Git 사용자 이름 및 이메일 주소를 구성합니다.
$ git config --global user.name "<USER_NAME>" $ git config --global user.email "<EMAIL_ADDRESS>"
-
<USER_NAME>을 사용하려는 사용자 이름으로 바꿉니다. <EMAIL_ADDRESS>를 이메일 주소로 바꿉니다.초기 커밋을 위한 모든 템플릿을 스테이징합니다.
$ git add *초기 커밋을 생성합니다.
$ git commit -m "Initial creation of custom core heat templates"이렇게 하면 최신 코어 템플릿 컬렉션이 포함된 초기
master분기가 생성됩니다. 이 분기를 사용자 지정 분기의 기반으로 사용하고 새 템플릿 버전을 이 분기에 병합합니다.
사용자 지정 분기를 사용하여 코어 템플릿 컬렉션에 변경 사항을 저장합니다. 다음 절차를 사용하여
my-customizations분기를 생성하고 사용자 지정을 추가합니다.my-customizations분기를 생성하여 해당 분기로 전환합니다.$ git checkout -b my-customizations- 사용자 지정 분기의 파일을 편집합니다.
git에서 변경 사항을 스테이징합니다.
$ git add [edited files]사용자 정의 분기의 변경 사항을 커밋합니다.
$ git commit -m "[Commit message for custom changes]"그러면
my-customizations분기에 대한 커밋으로 변경 사항이 추가됩니다. 마스터 분기가 업데이트되면master에서my-customizations를 리베이스할 수 있으므로 git에서 이러한 커밋을 업데이트된 템플릿 컬렉션에 추가합니다.이렇게 하면 사용자 지정을 추적하고 향후 템플릿 업데이트에서 재생하는 데 도움이 됩니다.
언더클라우드를 업데이트하면
openstack-tripleo-heat-templates패키지도 업데이트를 수신할 수 있습니다. 이 경우 사용자 정의 템플릿 컬렉션을 업데이트해야 합니다.openstack-tripleo-heat-templates패키지 버전을 환경 변수로 저장합니다.$ export PACKAGE=$(rpm -qv openstack-tripleo-heat-templates)템플릿 컬렉션 디렉터리로 변경하고 업데이트된 템플릿의 새 분기를 생성합니다.
$ cd ~/templates/openstack-tripleo-heat-templates $ git checkout -b $PACKAGE분기의 모든 파일을 제거하고 새 버전으로 바꿉니다.
$ git rm -rf * $ cp -r /usr/share/openstack-tripleo-heat-templates/* .초기 커밋을 위한 모든 템플릿을 추가합니다.
$ git add *패키지 업데이트에 대한 커밋을 생성합니다.
$ git commit -m "Updates for $PACKAGE"분기를 master에 병합합니다. Git 관리 시스템(예: GitLab)을 사용하는 경우 관리 워크플로를 사용합니다. Git을 로컬로 사용하는 경우
master분기로 전환하여 병합하고git merge명령을 실행합니다.$ git checkout master $ git merge $PACKAGE
이제 master 분기에 최신 버전의 코어 템플릿 컬렉션이 포함됩니다. 이제 이 업데이트된 컬렉션에서 my-customization 분기를 다시 평가할 수 있습니다.
my-customization분기를 업데이트합니다.my-customizations분기로 변경합니다.$ git checkout my-customizationsmaster분기를 다시베이스합니다.$ git rebase master그러면
my-customizations분기를 업데이트하고 이 분기에 대한 사용자 지정 커밋을 재생합니다.
리베이스 중에 발생하는 모든 충돌을 해결합니다.
충돌이 포함된 파일을 확인합니다.
$ git status- 식별된 템플릿 파일의 충돌을 해결합니다.
해결된 파일을 추가합니다.
$ git add [resolved files]업데이트를 계속합니다.
$ git rebase --continue
사용자 지정 템플릿 컬렉션을 배포합니다.
my-customization분기로 전환되었는지 확인합니다.git checkout my-customizations로컬 템플릿 디렉터리를 지정하려면
--templates옵션과 함께openstack overcloud deploy명령을 실행합니다.$ openstack overcloud deploy --templates /home/stack/templates/openstack-tripleo-heat-templates [OTHER OPTIONS]
디렉터리 없이 --templates 옵션을 지정하는 경우 director는 기본 템플릿 디렉터리(/usr/share/openstack-tripleo-heat-templates)를 사용합니다.
Red Hat은 heat 템플릿 컬렉션을 수정하는 대신 10.3절. “구성 후크” 에서 방법을 사용하는 것이 좋습니다.
10.1.6. Jinja2 렌더링 링크 복사링크가 클립보드에 복사되었습니다!
/usr/share/openstack-tripleo-heat-templates 의 코어 heat 템플릿에는 j2.yaml 파일 확장자가 있는 여러 파일이 포함되어 있습니다. 이러한 파일에는 Jinja2 템플릿 구문이 포함되어 있으며 director는 이러한 파일을 .yaml 확장자가 있는 정적 heat 템플릿에 렌더링합니다. 예를 들어 기본 overcloud.j2.yaml 파일은 overcloud.yaml 에 렌더링됩니다. director는 생성된 overcloud.yaml 파일을 사용합니다.
Jinja2 지원 heat 템플릿은 Jinja2 구문을 사용하여 반복적인 값에 대한 매개 변수와 리소스를 생성합니다. 예를 들어 overcloud.j2.yaml 파일에는 다음 스니펫이 포함되어 있습니다.
parameters:
...
{% for role in roles %}
...
{{role.name}}Count:
description: Number of {{role.name}} nodes to deploy
type: number
default: {{role.CountDefault|default(0)}}
...
{% endfor %}
director가 Jinja2 구문을 렌더링하면 director가 roles_data.yaml 파일에 정의된 역할을 반복하고 {{role.name}}Count 매개 변수를 역할 이름으로 채웁니다. 기본 roles_data.yaml 파일에는 5개의 역할이 포함되어 있으며 예제의 다음 매개변수가 생성됩니다.
-
ControllerCount -
ComputeCount -
BlockStorageCount -
ObjectStorageCount -
CephStorageCount
렌더링된 매개변수의 예는 다음과 같습니다.
parameters:
...
ControllerCount:
description: Number of Controller nodes to deploy
type: number
default: 1
...
director는 코어 heat 템플릿의 디렉터리에서만 Jinja2 지원 템플릿과 환경 파일을 렌더링합니다. 다음 사용 사례에서는 Jinja2 템플릿을 렌더링하는 올바른 방법을 보여줍니다.
사용 사례 1: 기본 코어 템플릿
template 디렉터리: /usr/share/openstack-tripleo-heat-templates/
환경 파일: /usr/share/openstack-tripleo-heat-templates/environments/ssl/enable-internal-tls.j2.yaml
director는 기본 코어 템플릿 위치(--templates)를 사용하고 enable-internal-tls.j2.yaml 파일을 enable-internal-tls.yaml 로 렌더링합니다. openstack overcloud deploy 명령을 실행하는 경우 -e 옵션을 사용하여 렌더링된 enable-internal-tls.yaml 파일의 이름을 포함합니다.
$ openstack overcloud deploy --templates \
-e /usr/share/openstack-tripleo-heat-templates/environments/ssl/enable-internal-tls.yaml
...
사용 사례 2: 사용자 정의 코어 템플릿
템플릿 디렉터리: /home/stack/tripleo-heat-installer-templates
환경 파일: /home/stack/tripleo-heat-installer-templates/environments/ssl/enable-internal-tls.j2.yaml
director는 사용자 지정 코어 템플릿 위치(--templates /home/stack/tripleo-heat-templates)를 사용하고 사용자 지정 코어 템플릿 내에서 enable-internal-tls.j2.yaml 파일을 enable-internal-tls.yaml 로 렌더링합니다. openstack overcloud deploy 명령을 실행하는 경우 -e 옵션을 사용하여 렌더링된 enable-internal-tls.yaml 파일의 이름을 포함합니다.
$ openstack overcloud deploy --templates /home/stack/tripleo-heat-templates \
-e /home/stack/tripleo-heat-templates/environments/ssl/enable-internal-tls.yaml
...
사용 사례 3: 잘못된 사용
template 디렉터리: /usr/share/openstack-tripleo-heat-templates/
환경 파일: /home/stack/tripleo-heat-installer-templates/environments/ssl/enable-internal-tls.j2.yaml
director는 사용자 지정 코어 템플릿 위치(--templates /home/stack/tripleo-heat-installer-templates)를 사용합니다. 그러나 선택한 enable-internal-tls.j2.yaml 은 사용자 지정 코어 템플릿 내에 없으므로 enable-internal-tls.yaml 로 렌더링되지 않습니다. 이로 인해 배포가 실패합니다.
Jinja2 구문을 정적 템플릿으로 처리
process-templates.py 스크립트를 사용하여 openstack-tripleo-heat-templates 의 Jinja2 구문을 정적 템플릿 세트로 렌더링합니다. process-templates.py 스크립트를 사용하여 openstack-tripleo-heat-templates 컬렉션의 사본을 렌더링하려면 openstack-tripleo-heat-templates 디렉터리로 변경합니다.
$ cd /usr/share/openstack-tripleo-heat-templates
고정 복사본을 저장할 사용자 정의 디렉터리를 정의하려면 툴 디렉터리에 있는 process-templates.py 스크립트를 -o 옵션과 함께 실행합니다.
$ ./tools/process-templates.py -o ~/openstack-tripleo-heat-templates-rendered
이렇게 하면 모든 Jinja2 템플릿을 렌더링된 YAML 버전으로 변환하고 결과를 ~/openstack-tripleo-heat-templates-rendered에 저장합니다.