10장. Ansible로 오버클라우드 구성

Ansible은 오버클라우드 구성을 적용하는 기본 방식입니다. 이 장에서는 오버클라우드의 Ansible 구성과 상호 작용하는 방법을 설명합니다.

director가 Ansible 플레이북을 자동 생성하지만 Ansible 구문을 숙지하는 것이 좋습니다. Ansible 사용 방법에 대한 자세한 내용은 https://docs.ansible.com/을 참조하십시오.

참고

Ansible은 OpenStack Platform director 역할과 다른 역할의 개념을 사용합니다.

10.1. Ansible 기반 오버클라우드 구성(config-download)

config-download 기능은 director가 오버클라우드를 구성하는 방식입니다. director는 OpenStack Orchestration(heat) 및 OpenStack Workflow 서비스(mistral)와 함께 config-download를 사용하여 소프트웨어 설정을 생성하고, 이를 각 오버클라우드 노드에 적용합니다. Heat도 SoftwareDeployment 리소스의 모든 배포 데이터를 작성하여 오버클라우드 설치 및 구성을 수행하지만, 해당 설정을 적용하지는 않습니다. Heat는 고유의 API를 통해서만 구성 데이터를 제공합니다. director가 스택을 생성하면 Mistral 워크플로우는 Heat API를 조회하여 설정 데이터를 가져오고 Ansible 플레이북 세트를 생성하여 이 Ansible 플레이북을 오버클라우드에 적용합니다.

결과적으로 openstack overcloud deploy 명령을 실행하면 다음 프로세스가 수행됩니다.

  • director는 openstack-tripleo-heat-templates를 기반으로 새 배포 Plan을 만들고, Plan을 사용자 지정할 수 있도록 모든 환경 파일과 매개 변수를 추가합니다.
  • director는 Heat를 사용하여 배포 Plan을 해석하고 오버클라우드 스택 및 모든 하위 리소스를 만듭니다. 여기에는 OpenStack Bare Metal(ironic)을 통한 노드 프로비저닝이 포함됩니다.
  • Heat는 배포 Plan에서 소프트웨어 구성을 만듭니다. director는 이 소프트웨어 구성에서 Ansible 플레이북을 컴파일합니다.
  • director는 특히 Ansible SSH 액세스를 위해 오버클라우드 노드에 임시 사용자('tripleo-admin1')를 생성합니다.
  • director는 Heat 소프트웨어 구성을 다운로드하고 Heat 출력을 사용하여 일련의 Ansible 플레이북을 생성합니다.
  • director는 ansible-playbook을 사용하여 오버클라우드 노드에 Ansible 플레이북을 적용합니다.

10.2. config-download 작업 디렉터리

director는 config-download 프로세스를 위해 일련의 Ansible 플레이북을 생성합니다. 이러한 플레이북은 /var/lib/mistral/에 있는 작업 디렉터리에 저장됩니다. 이 디렉터리는 오버클라우드 이름을 따라 이름이 지정되며, 기본적으로 overcloud입니다.

작업 디렉터리에는 각 오버클라우드 역할의 이름이 붙은 여러개의 하위 디렉터리가 존재합니다. 이러한 하위 디렉터리에는 오버클라우드 역할의 노드 설정과 관련된 모든 작업이 포함됩니다. 또한 하위 디렉터리에는 각 특정 노드의 이름이 붙은 하위 디렉터리가 존재합니다. 해당 하위 디렉터리에는 오버클라우드 역할 작업에 적용할 노드별 변수가 포함됩니다. 그 결과 작업 디렉터리 내 오버클라우드 역할은 다음과 같이 구성됩니다.

─ /var/lib/mistral/overcloud
  |
  ├── Controller
  │   ├── overcloud-controller-0
  |   ├── overcloud-controller-1
  │   └── overcloud-controller-2
  ├── Compute
  │   ├── overcloud-compute-0
  |   ├── overcloud-compute-1
  │   └── overcloud-compute-2
  ...

각각의 작업 디렉터리는 배포 작업이 끝날 때마다 변경 사항을 기록하는 로컬 Git 리포지토리 역할도 수행합니다. 이를 통해 각 배포 간 설정 변경 사항을 추적할 수 있습니다.

10.3. config-download 작업 디렉터리에 대한 액세스 활성화

OpenStack Workflow 서비스(mistral) 컨테이너의 mistral 사용자는 /var/lib/mistral/ 작업 디렉터리의 모든 파일을 소유합니다. 언더클라우드의 stack 사용자에게 이 디렉터리의 모든 파일에 대한 액세스 권한을 부여할 수 있습니다. 이 설정은 해당 디렉터리 내에서 특정 작업을 수행하는 데 유용합니다.

절차

  1. setfacl 명령을 사용하여 해당 파일에 대한 액세스 권한을 언더클라우드의 stack 사용자에게 부여합니다.

    $ sudo setfacl -R -m u:stack:rwx /var/lib/mistral

    이 명령을 수행하면 디렉터리에 대한 mistral 사용자의 액세스 권한도 유지됩니다.

10.4. config-download 로그 확인

config-download 동안 Ansible에서 config-download 작업 디렉터리에 언더클라우드에 대한 로그 파일을 생성합니다.

절차

  1. config-download 작업 디렉터리 내에서 less 명령을 사용하여 로그를 표시합니다. 다음 예에서는 overcloud 작업 디렉터리를 사용하고 있습니다.

    $ less /var/lib/mistral/overcloud/ansible.log

10.5. config-download를 수동으로 실행

/var/lib/mistral/overcloud의 작업 디렉터리에는 ansible-playbook과 직접 상호 작용하는 데 필요한 플레이북과 스크립트가 있습니다. 다음 절차는 이러한 파일과 상호 작용하는 방법에 대해 설명합니다.

절차

  1. Ansible 플레이북의 디렉터리로 변경합니다.

    $ cd /var/lib/mistral/overcloud/
  2. 작업 디렉터리에서 ansible-playbook-command.sh를 실행하여 배포를 재현합니다.

    $ ./ansible-playbook-command.sh
  3. Ansible 인수를 이 스크립트에 추가로 전달할 수 있으며 스크립트는 변경되지 않은 채로 ansible-playbook 명령으로 전달됩니다. 이를 통해 확인 모드(--check), 호스트 제한(--limit), 변수 덮어쓰기(-e) 등의 Ansible 기능을 더욱 효과적으로 활용할 수 있습니다. 예:

    $ ./ansible-playbook-command.sh --limit Controller
  4. 작업 디렉터리에는 deploy_steps_playbook.yaml이라는 플레이북이 포함되어 있으며 이는 오버클라우드를 실행합니다. 이 플레이북을 확인하는 방법은 다음과 같습니다.

    $ less deploy_steps_playbook.yaml

    플레이북은 작업 디렉터리에 포함된 다양한 작업 파일을 사용합니다. 일부 작업 파일은 모든 OpenStack Platform 역할에 공통되며 일부 파일은 특정 OpenStack Platform 역할과 서버에 한정되어 있습니다.

  5. 또한 작업 디렉터리에는 사용자 오버클라우드의 roles_data 파일에 정의된 각 역할에 해당하는 하위 디렉터리가 포함되어 있습니다. 예:

    $ ls Controller/

    각 OpenStack Platform 역할 디렉터리에는 해당 역할 유형의 개별 서버에 대한 하위 디렉터리가 포함되어 있습니다. 디렉터리는 구성 가능한 역할 호스트 이름 포맷을 사용합니다. 예를 들면 다음과 같습니다.

    $ ls Controller/overcloud-controller-0
  6. Ansible 작업은 태그됩니다. ansible-playbook에 대해 CLI 인수 --list-tags를 사용하는 모든 태그 목록을 확인하는 방법은 다음과 같습니다.

    $ ansible-playbook -i tripleo-ansible-inventory.yaml --list-tags deploy_steps_playbook.yaml

    다음으로 ansible-playbook-command.sh 스크립트에서 --tags, --skip-tags 또는 --start-at-task를 사용하여 태그된 구성을 적용합니다. 예:

    $ ./ansible-playbook-command.sh --tags overcloud
주의

--tags, --skip-tags 또는 --start-at-task와 같은 ansible-playbook CLI 인수를 사용할 때 순서가 잘못된 배포를 실행하거나 적용하지 마십시오. CLI 인수는 이전에 실패한 작업을 다시 실행하거나 초기 배포를 반복하는 편리한 방법입니다. 하지만 일관된 배포를 위해 deploy_steps_playbook.yaml의 모든 작업을 순서대로 실행해야 합니다.

10.6. 작업 디렉터리에서 Git 작업 수행

config-download 작업 디렉터리는 로컬 Git 리포지토리 역할을 합니다. 배포 작업이 실행될 때마다 director는 관련 변경 사항이 있는 작업 디렉터리에 Git 커밋을 추가합니다. 그러면 Git 작업을 수행하여 여러 단계에서 배포 설정을 보고, 해당 설정을 다른 배포와 비교할 수 있습니다.

작업 디렉터리에는 제한 사항이 있습니다. 예를 들어 Git을 사용하여 config-download 작업 디렉터리를 이전 버전으로 되돌리면 해당 작업 디렉터리의 설정에만 영향을 미치고 다음 항목에는 영향을 미치지 않습니다.

  • 오버클라우드 데이터 스키마: 이전 버전의 작업 디렉터리 소프트웨어 구성을 적용해도 데이터 마이그레이션 및 스키마 변경은 취소되지 않습니다.
  • 오버클라우드의 하드웨어 레이아웃: 이전 소프트웨어 설정으로 되돌려도 오버클라우드 하드웨어와 관련된 변경(예: 확대 또는 축소)은 취소되지 않습니다.
  • Heat 스택: 작업 디렉터리를 이전 버전으로 되돌려도 Heat 스택에 저장된 설정에는 영향을 미치지 않습니다. Heat 스택에서 오버클라우드에 적용되는 새로운 버전의 소프트웨어 설정을 만듭니다. 따라서 오버클라우드를 영구적으로 변경하려면 openstack overcloud deploy를 재실행하기 전에 오버클라우드 스택에 적용한 환경 파일을 수정해야 합니다.

다음 절차는 Git을 사용하여 config-download 작업 디렉터리의 다양한 커밋을 비교하는 방법을 설명합니다.

절차

  1. 오버클라우드의 경우 config-download 작업 디렉터리로 변경합니다. 이 경우 이 작업 디렉터리는 overcloud라는 오버클라우드용입니다.

    $ cd /var/lib/mistral/overcloud
  2. git log 명령을 실행하여 작업 디렉터리에 커밋을 나열합니다. 로그 출력에 날짜가 표시되도록 포맷을 설정할 수도 있습니다.

    $ git log --format=format:"%h%x09%cd%x09"
    a7e9063 Mon Oct 8 21:17:52 2018 +1000
    dfb9d12 Fri Oct 5 20:23:44 2018 +1000
    d0a910b Wed Oct 3 19:30:16 2018 +1000
    ...

    기본적으로 최근의 커밋이 가장 먼저 표시됩니다.

  3. 두 커밋 해시에 대해 git diff 명령을 실행하여 배포 간 모든 변경 사항을 확인합니다.

    $ git diff a7e9063 dfb9d12

10.7. config-download 파일 수동 생성

특정 환경에서는 표준 워크플로우 외부에서 자신의 config-download 파일을 생성해야 할 수 있습니다. 예를 들어 구성을 별도로 적용할 수 있도록 openstack overcloud deploy 명령에 --stack-only 옵션을 사용하여 오버클라우드 Heat 스택을 생성해야 할 수 있습니다. 다음 절차에서는 직접 자신의 config-download 파일을 만드는 방법을 보여줍니다.

절차

  1. config-download 파일을 생성합니다.

    $ openstack overcloud config download \
      --name overcloud \
      --config-dir ~/config-download
    • --name은 Ansible 파일 내보내기에 사용할 오버클라우드입니다.
    • --config-dirconfig-download 파일을 저장할 위치입니다.
  2. config-download 파일이 포함된 디렉터리로 변경합니다.

    $ cd ~/config-download
  3. 정적 인벤토리 파일을 생성합니다.

    $ tripleo-ansible-inventory \
      --ansible_ssh_user heat-admin \
      --static-yaml-inventory inventory.yaml

그러면 수동으로 생성한 config-download 파일을 사용하여 설정을 수행하는 데 필요한 파일이 제공됩니다. 배포용 플레이북을 실행하려면 ansible-playbook 명령을 실행합니다.

$ ansible-playbook \
  -i inventory.yaml \
  --private-key ~/.ssh/id_rsa \
  --become \
  ~/config-download/deploy_steps_playbook.yaml

이 설정에서 overcloudrc 파일을 수동으로 생성하려면 다음 명령을 실행합니다.

$ openstack action execution run \
  --save-result \
  --run-sync \
  tripleo.deployment.overcloudrc \
  '{"container":"overcloud"}' \
  | jq -r '.["result"]["overcloudrc.v3"]' > overcloudrc.v3

10.8. config-download 최상위 파일

다음은 config-download 작업 디렉터리에 있는 중요 최상위 파일입니다.

Ansible 설정 및 실행

다음 파일은 config-download 작업 디렉터리 내에서 Ansible을 설정하고 실행하기 위한 파일입니다.

ansible.cfg
ansible-playbook을 실행할 때 사용되는 설정 파일입니다.
ansible.log
ansible-playbook 마지막 실행 시 생성된 로그 파일입니다.
ansible-errors.json
모든 배포 오류가 포함된 JSON 구조 파일
ansible-playbook-command.sh
마지막 배포 작업에서 ansible-playbook 명령을 재실행하는 데 사용할 수 있는 실행 가능 스크립트입니다.
ssh_private_key
Ansible에서 오버클라우드 노드에 액세스하는 데 사용하는 개인 SSH 키입니다.
tripleo-ansible-inventory.yaml
모든 오버클라우드 노드에 대한 호스트 및 변수가 포함된 Ansible 인벤토리 파일입니다.
overcloud-config.tar.gz
작업 디렉터리의 아카이브입니다.

플레이북

다음 파일은 config-download 작업 디렉터리에 있는 플레이북입니다.

deploy_steps_playbook.yaml
주요 배포 단계입니다. 이 플레이북은 오버클라우드에 대한 주요 설정 작업을 수행합니다.
pre_upgrade_rolling_steps_playbook.yaml
메이저 업그레이드를 위한 사전 업그레이드 단계입니다.
upgrade_steps_playbook.yaml
메이저 업그레이드 단계입니다.
post_upgrade_steps_playbook.yaml
메이저 업그레이드 후 업그레이드 단계입니다.
update_steps_playbook.yaml
마이너 업데이트 단계입니다.
fast_forward_upgrade_playbook.yaml
Fast Forward Upgrade 작업입니다. 장기 버전의 OpenStack Platform을 다음 버전으로 업그레이드할 때만 사용합니다. 이 플레이북을 해당 릴리스의 OpenStack Platform에 사용하지 마십시오.

10.9. config-download 태그

플레이북은 태그 작업을 사용하여 오버클라우드에 적용되는 작업을 제어합니다. 실행되는 작업을 제어하려면 태그를 ansible-playbook CLI 인수 --tags 또는 --skip-tags와 함께 사용하십시오. 사용 가능한 태그는 다음과 같습니다.

facts
사실 수집 작업입니다.
common_roles
모든 노드에 공통된 Ansible 역할입니다.
overcloud
오버클라우드 배포에 필요한 모든 재생입니다.
pre_deploy_steps
deploy_steps 작업 이전에 발생한 배포입니다.
host_prep_steps
호스트 준비 단계입니다.
deploy_steps
배포 단계입니다.
post_deploy_steps
deploy_steps 작업 이후에 발생한 배포입니다.
external
모든 외부 배포 작업입니다.
external_deploy_steps
언더클라우드에서만 실행되는 외부 배포 작업입니다.

10.10. config-download 배포 단계

deploy_steps_playbook.yaml 플레이북은 오버클라우드를 설정하는 데 사용됩니다. 오버클라우드 배포 Plan에 따라 전체 오버클라우드를 배포하는 데 필요한 모든 소프트웨어 설정에 적용됩니다.

이 섹션에는 이 플레이북 내에서 사용되는 다양한 Ansible 재생의 개요에 대해 설명합니다. 이 섹션에 있는 재생 이름은 플레이북에서 사용되고 ansible-playbook 출력에 표시되는 이름과 같습니다. 다음과 같이 각 재생에 설정된 Ansible 태그도 아래에 표시됩니다.

Gather facts from undercloud

언더클라우드 노드에서 팩트 수집

태그: facts

Gather facts from overcloud

오버클라우드 노드에서 팩트 수집

태그: facts

Load global variables

l`global_vars.yaml`의 모든 변수 로드

태그: always

Common roles for TripleO servers

모든 오버클라우드 노드에 일반 Ansible 역할을 적용합니다. Bootstrap 패키지 설치를 위한 tripleo-bootstrap과 알려진 SSH 호스트 구성을 위한 tripleo-ssh-known-hosts가 포함됩니다.

태그: common_roles

Overcloud deploy step tasks for step 0

deploy_steps_tasks 템플릿 인터페이스에서 작업 적용

태그: overcloud, deploy_steps

Server deployments

네트워킹 및 hieradata와 같은 구성에 서버별 Heat 배포를 적용합니다. NetworkDeployment, <Role>Deployment, <Role>AllNodesDeployment 등을 포함합니다.

태그: overcloud, pre_deploy_steps

Host prep steps

host_prep_steps 템플릿 인터페이스에서 작업 적용

태그: overcloud, host_prep_steps

External deployment step [1,2,3,4,5]

external_deploy_steps_tasks 템플릿 인터페이스에서 작업을 적용합니다. 해당 작업은 언더클라우드 노드에 대해서만 실행됩니다.

태그: external, external_deploy_steps

Overcloud deploy step tasks for [1,2,3,4,5]

deploy_steps_tasks 템플릿 인터페이스에서 작업 적용

태그: overcloud, deploy_steps

Overcloud common deploy step tasks [1,2,3,4,5]

각 단계에서 수행되는 공통 작업을 적용합니다. 여기에는 puppet 호스트 설정, docker-puppet.py, paunch(컨테이너 설정)를 포함합니다.

태그: overcloud, deploy_steps

Server Post Deployments

5단계 배포 프로세스 이후 수행한 구성에 대해 서버별 Heat 배포를 적용합니다.

태그: overcloud, post_deploy_steps

External deployment Post Deploy tasks

external_post_deploy_steps_tasks 템플릿 인터페이스에서 작업을 적용합니다. 해당 작업은 언더클라우드 노드에 대해서만 실행됩니다.

태그: external, external_deploy_steps

10.11. 다음 단계

이제 정기적인 오버클라우드 작업을 계속할 수 있습니다.


Red Hat의 최신 제품 문서 번역을 신속하게 제공하기 위해 이 페이지에는 영어 원본을 한국어로 자동 번역한 내용이 포함되어 있을 수 있습니다. [자세한 내용보기]