3장. Director 설치 준비

3.1. 언더클라우드 준비

Director를 설치하려면 다음이 필요합니다.

  • 명령을 실행할 root가 아닌 사용자
  • 이미지 및 템플릿을 구성할 디렉터리
  • 확인 가능한 호스트 이름
  • Red Hat 서브스크립션
  • 이미지 준비 및 director 설치에 필요한 명령행 툴

절차

  1. root 사용자로 언더클라우드에 로그인합니다.
  2. stack 사용자를 생성합니다.

    [root@director ~]# useradd stack
  3. 사용자용 암호를 설정합니다.

    [root@director ~]# passwd stack
  4. sudo 사용 시 암호를 요구하지 않도록 비활성화합니다.

    [root@director ~]# echo "stack ALL=(root) NOPASSWD:ALL" | tee -a /etc/sudoers.d/stack
    [root@director ~]# chmod 0440 /etc/sudoers.d/stack
  5. 새로 만든 stack 사용자로 전환합니다.

    [root@director ~]# su - stack
    [stack@director ~]$
  6. director에서 시스템 이미지 및 Heat 템플릿을 사용하여 오버클라우드 환경을 만듭니다. 이러한 파일을 정리하여 보관하려면 이미지 및 템플릿에 디렉터리를 만드는 것이 좋습니다.

    [stack@director ~]$ mkdir ~/images
    [stack@director ~]$ mkdir ~/templates
  7. 언더클라우드의 기본 및 전체 호스트 이름을 확인합니다.

    [stack@director ~]$ hostname
    [stack@director ~]$ hostname -f
  8. 이전 명령에서 올바른 호스트 이름이 출력되지 않거나 오류가 나타나는 경우 hostnamectl을 사용하여 호스트 이름을 설정합니다.

    [stack@director ~]$ sudo hostnamectl set-hostname manager.example.com
    [stack@director ~]$ sudo hostnamectl set-hostname --transient manager.example.com
  9. director는/etc/hosts에 시스템의 호스트 이름 및 기본 이름도 입력해야 합니다. /etc/hosts의 IP 주소는 언더클라우드 공용 API에 사용하려는 주소와 일치해야 합니다. 예를 들어 시스템 이름이 manager.example.com이며 IP 주소로 10.0.0.1을 사용하는 경우 /etc/hosts에 다음과 같은 항목이 필요합니다.

    10.0.0.1  manager.example.com manager
  10. Red Hat Content Delivery Network 또는 Red Hat Satellite에 시스템을 등록합니다. 예를 들어 고객 포털 사용자 이름과 암호를 입력하라는 메시지가 표시되면 해당 사항을 입력하여 Content Delivery Network에 등록합니다.

    [stack@director ~]$ sudo subscription-manager register
  11. Red Hat OpenStack Platform director의 인타이틀먼트 풀 ID를 검색합니다. 예를 들면 다음과 같습니다.

    [stack@director ~]$ sudo subscription-manager list --available --all --matches="Red Hat OpenStack"
    Subscription Name:   Name of SKU
    Provides:            Red Hat Single Sign-On
                         Red Hat Enterprise Linux Workstation
                         Red Hat CloudForms
                         Red Hat OpenStack
                         Red Hat Software Collections (for RHEL Workstation)
                         Red Hat Virtualization
    SKU:                 SKU-Number
    Contract:            Contract-Number
    Pool ID:             Valid-Pool-Number-123456
    Provides Management: Yes
    Available:           1
    Suggested:           1
    Service Level:       Support-level
    Service Type:        Service-Type
    Subscription Type:   Sub-type
    Ends:                End-date
    System Type:         Physical
  12. Pool ID 값을 찾아서 Red Hat OpenStack Platform 14 인타이틀먼트에 연결합니다.

    [stack@director ~]$ sudo subscription-manager attach --pool=Valid-Pool-Number-123456
  13. 기본 리포지토리를 모두 비활성화한 다음 필수 Red Hat Enterprise Linux 리포지토리를 활성화합니다.

    [stack@director ~]$ sudo subscription-manager repos --disable=*
    [stack@director ~]$ sudo subscription-manager repos --enable=rhel-7-server-rpms --enable=rhel-7-server-extras-rpms --enable=rhel-7-server-rh-common-rpms --enable=rhel-ha-for-rhel-7-server-rpms --enable=rhel-7-server-openstack-14-rpms

    이러한 리포지토리에는 director 설치에 필요한 패키지가 들어 있습니다.

  14. 시스템에서 업데이트를 실행하여 최신 기본 시스템 패키지를 사용합니다.

    [stack@director ~]$ sudo yum update -y
    [stack@director ~]$ sudo reboot
  15. director 설치 및 구성에 필요한 명령행 툴을 설치합니다.

    [stack@director ~]$ sudo yum install -y python-tripleoclient
  16. Ceph Storage 노드에서 오버클라우드를 생성하려는 경우 추가 ceph-ansible 패키지를 설치합니다.

    [stack@director ~]$ sudo yum install -y ceph-ansible

3.2. 컨테이너 이미지 준비

언더클라우드 설정에는 이미지를 가져올 위치와 저장 방법을 정의하기 위해 몇 가지 초기 레지스트리 구성이 필요합니다. 다음 프로세스에서는 컨테이너 이미지 준비를 위해 환경 파일을 생성하고 사용자 지정하는 방법을 보여줍니다.

절차

  1. 언더클라우드 호스트에 stack 사용자로 로그인합니다.
  2. 기본 컨테이너 이미지 준비 파일을 생성합니다.

    $ openstack tripleo container image prepare default \
      --local-push-destination \
      --output-env-file containers-prepare-parameter.yaml

    이 명령에는 다음과 같은 추가 옵션이 사용됩니다.

    • --local-push-destination은 언더클라우드의 레지스트리를 컨테이너 이미지의 위치로 설정합니다. 즉, director가 Red Hat Container Catalog에서 필요한 이미지를 가져와서 언더클라우드의 레지스트리로 푸시합니다. director는 언더클라우드를 설치할 때 이 레지스트리를 컨테이너 이미지 소스로 사용합니다. Red Hat Container Catalog에서 직접 가져오려면 이 옵션을 생략하십시오.
    • --output-env-file은 환경 파일 이름입니다. 이 파일의 콘텐츠에는 언더클라우드의 컨테이너 이미지를 준비하는 데 필요한 매개 변수가 포함됩니다. 이 경우 파일 이름은 containers-prepare-parameter.yaml입니다.

      참고

      containers-prepare-parameter.yaml 파일을 사용하여 오버클라우드를 배포할 때 컨테이너 이미지 소스를 정의할 수도 있습니다.

  3. containers-prepare-parameter.yaml을 편집하여 필요에 따라 변경합니다.

3.3. 컨테이너 이미지 준비 매개 변수

컨테이너를 준비하는 데 필요한 기본 파일(containers-prepare-parameter.yaml)에는 ContainerImagePrepare Heat 매개 변수가 포함되어 있습니다. 이 매개 변수는 이미지 세트를 준비하기 위한 다양한 설정을 정의합니다.

parameter_defaults:
  ContainerImagePrepare:
  - (strategy one)
  - (strategy two)
  - (strategy three)
  ...

각각의 설정은 하위 매개 변수 집합에서 사용할 이미지와 해당 이미지의 사용 방법을 정의할 수 있습니다. 다음 표에는 각 ContainerImagePrepare 설정에 사용할 하위 매개 변수가 나열되어 있습니다.

매개 변수설명

append_tag

대상 이미지 태그에 추가할 문자열입니다.

excludes

제외 필터에 사용할 이미지 이름에 포함된 하위 문자열 목록입니다.

includes

이미지 이름 하위 문자열 목록입니다. 하나 이상의 이미지 이름이 일치해야 합니다. includes가 지정되면 모든 excludes가 무시됩니다.

modify_role

대상으로 푸시하기 전 업로드하는 동안 실행할 Ansible 역할 이름의 문자열입니다.

modify_vars

modify_role로 전달할 변수로 이루어진 사전입니다.

modify_only_with_labels

수정할 이미지를 필터링하는 데 사용된 이미지 레이블로 이루어진 사전입니다. 이미지가 정의된 레이블과 일치하면 director에서 이미지를 수정 프로세스에 포함합니다.

push_destination

업로드 프로세스 중 이미지를 푸시하는 레지스트리의 네임스페이스입니다. 이 매개 변수에 대해 네임스페이스를 지정하면 모든 이미지 매개 변수도 이 네임스페이스를 사용합니다. true로 설정하면 push_destination이 언더클라우드 레지스트리 네임스페이스로 설정됩니다.

pull_source

기존 컨테이너 이미지를 가져온 소스 레지스트리입니다.

set

초기 이미지를 가져올 위치를 정의하는 key: value 정의로 이루어진 사전입니다.

tag_from_label

결과 이미지에 태그를 지정하기 위해 패턴을 레이블 처리하도록 정의합니다. 일반적으로 \{version}-\{release}로 설정합니다.

set 매개 변수는 여러 key: value 정의를 설정할 수 있습니다. 다음 표에는 이러한 키가 나열되어 있습니다.

설명

ceph_image

Ceph Storage 컨테이너 이미지의 이름입니다.

ceph_namespace

Ceph Storage 컨테이너 이미지의 네임스페이스입니다.

ceph_tag

Ceph Storage 컨테이너 이미지의 태그입니다.

name_prefix

각 OpenStack 서비스 이미지의 접두사입니다.

name_suffix

각 OpenStack 서비스 이미지의 접미사입니다.

namespace

각 OpenStack 서비스 이미지의 네임스페이스입니다.

neutron_driver

사용할 OpenStack Networking (Neutron) 컨테이너를 결정하는 데 사용할 드라이버입니다. null 값을 사용하여 표준 neutron-server 컨테이너를 설정합니다. OVN 기반 컨테이너를 사용하려면 ovn으로 설정하십시오. OpenDaylight 기반 컨테이너를 사용하려면 odl로 설정하십시오.

tag

가져올 이미지를 확인하는 태그입니다.

참고

set 섹션에 openshift_로 시작하는 매개 변수가 여러 개 있을 수 있습니다. 해당 매개 변수는 OpenShift-on-OpenStack과 관련된 다양한 시나리오에 사용됩니다.

3.4. 이미지 준비 항목 계층화

ContainerImagePrepare의 값은 YAML 목록입니다. 즉, 여러 항목을 지정할 수 있습니다. 다음 예에서는 두 개의 항목을 지정하는 경우를 설명합니다. 이 경우 director는 14.0-44로 태그가 지정된 버전을 사용하는 nova-api 이미지를 제외하고 모든 이미지의 최신 버전을 사용합니다.

ContainerImagePrepare:
- tag_from_label: "{version}-{release}"
  push_destination: true
  excludes:
  - nova-api
  set:
    namespace: registry.access.redhat.com/rhosp14
    name_prefix: openstack-
    name_suffix: ''
    tag: latest
- push_destination: true
  includes:
  - nova-api
  set:
    namespace: registry.access.redhat.com/rhosp14
    tag: 14.0-44

includesexcludes 항목은 각 항목에 대한 이미지를 필터링하는 방법을 제어합니다. includes 설정과 일치하는 이미지는 excludes 일치하는 이미지 항목보다 우선합니다. 일치하는 것으로 간주되기 위해서는 이미지 이름에 설정 값이 포함되어 있어야 합니다.

3.5. 준비 과정에서 이미지 수정

준비 과정에서 필요한 변경을 수행하기 위해 이미지를 수정한 다음 해당 변경 사항을 즉시 배포할 수 있습니다. 이미지 수정 사용 사례는 다음과 같습니다.

  • 지속적인 통합 파이프라인의 일부로 배포 전에 테스트 중인 변경 사항으로 이미지가 수정됩니다.
  • 개발 워크플로우의 일부로 테스트 및 개발을 위해 로컬 변경 사항을 배포해야 합니다.
  • 변경 사항을 배포해야 하지만 이미지 빌드 파이프라인을 통해 사용할 수 없는 경우입니다(독점 추가 기능, 긴급 수정 사항).

수정이 필요한 각 이미지에 대해 Ansible 역할을 호출하면 수정이 완료됩니다. 역할은 소스 이미지를 사용하고 요청된 변경을 수행한 다음 그 결과를 태그합니다. 그러면 준비 작업 시 이미지를 푸시하고 수정된 이미지를 참조하도록 Heat 매개 변수를 설정할 수 있습니다.

Ansible 역할 tripleo-modify-image는 요청된 역할 인터페이스를 준수하고, 수정 사용 사례에 필요한 작업을 수행합니다. 수정은 ContainerImagePrepare 매개 변수의 수정 관련 키를 통해 제어됩니다.

  • modify_role은 수정할 각 이미지에 대해 호출할 Ansible 역할을 지정합니다.
  • modify_append_tag는 소스 이미지 태그의 끝에 문자열을 추가하는 데 사용됩니다. 이렇게 하면 결과 이미지가 수정되었음을 알 수 있습니다. push_destination 레지스트리에 이미 해당 이미지가 포함되어 있는 경우 수정을 생략할 수 있습니다. 따라서 이미지를 수정해야 할 때마다 modify_append_tag를 변경하는 것이 좋습니다.
  • modify_vars는 역할에 전달할 Ansible 변수로 이루어진 사전입니다.

역할 tripleo-modify-image가 처리하는 다양한 사용 사례를 선택하려면 tasks_from 변수를 해당 역할에 필요한 파일에 설정합니다.

이미지를 수정하는 ContainerImagePrepare 항목을 개발하고 테스트하는 동안 자체적으로 준비를 실행하여 이미지가 예상대로 수정되는지 확인하는 것이 좋습니다.

sudo openstack tripleo container image prepare \
  -e ~/containers-prepare-parameter.yaml

3.6. 컨테이너 이미지의 기존 패키지 업데이트

다음 항목을 통해 이미지의 모든 패키지가 업데이트되지만 언더클라우드 호스트의 yum 리포지토리 설정을 사용하게 됩니다.

ContainerImagePrepare:
- push_destination: true
  ...
  modify_role: tripleo-modify-image
  modify_append_tag: "-updated"
  modify_vars:
    tasks_from: yum_update.yml
    compare_host_packages: true
    yum_repos_dir_path: /etc/yum.repos.d
  ...

3.7. 추가 RPM 파일을 컨테이너 이미지에 설치

핫픽스, 로컬 패키지 빌드 또는 패키지 리포지토리를 통해 사용할 수 없는 패키지를 설치하는 데 유용한 RPM 파일 디렉터리를 설치할 수 있습니다. 예를 들어 다음은 centos-binary-nova-compute 이미지에만 일부 핫픽스 패키지를 설치합니다.

ContainerImagePrepare:
- push_destination: true
  ...
  includes:
  - nova-compute
  modify_role: tripleo-modify-image
  modify_append_tag: "-hotfix"
  modify_vars:
    tasks_from: rpm_install.yml
    rpms_path: /home/stack/nova-hotfix-pkgs
  ...

3.8. 사용자 지정 Dockerfile이 있는 컨테이너 이미지 수정

유연성을 극대화하기 위해 Dockerfile이 포함된 디렉터리를 지정하여 필요한 변경을 수행할 수 있습니다. 역할을 호출하면 FROM 지시문을 변경하고 LABEL 지시문을 추가하는 Dockerfile.modified가 생성됩니다. 다음 예에서는 centos-binary-nova-compute 이미지에서 사용자 지정 Dockerfile을 실행합니다.

ContainerImagePrepare:
- push_destination: true
  ...
  includes:
  - nova-compute
  modify_role: tripleo-modify-image
  modify_append_tag: "-hotfix"
  modify_vars:
    tasks_from: modify_image.yml
    modify_dir_path: /home/stack/nova-custom
  ...

예를 들면 /home/stack/nova-custom/Dockerfile입니다. USER root 지시문을 실행한 후에는 원본 이미지의 기본 사용자로 다시 전환해야 합니다.

FROM docker.io/tripleomaster/centos-binary-nova-compute:latest

USER root

COPY customize.sh /tmp/
RUN /tmp/customize.sh

USER "nova"

3.9. 컨테이너 이미지용 Satellite 서버 준비

Red Hat Satellite 6는 레지스트리 동기화 기능을 제공합니다. 이를 통해 여러 이미지를 Satellite 서버로 가져와 애플리케이션 라이프사이클의 일부로 관리할 수 있습니다. Satellite는 다른 컨테이너 활성화 시스템이 사용할 레지스트리 역할을 합니다. 컨테이너 이미지 관리에 대한 상세 정보는 Red Hat Satellite 6 콘텐츠 관리 가이드에서 "컨테이너 이미지 관리"를 참조하십시오.

이 절차의 예시에서 Red Hat Satellite 6 및 ACME라고 하는 예시 조직은 hammer 명령행 툴을 사용합니다. 이 조직을 실제로 사용하는 Satellite 6 조직으로 대체하십시오.

절차

  1. 기본 오버클라우드 및 언더클라우드에 사용 가능한 모든 컨테이너 이미지의 목록을 생성합니다.

    $ openstack overcloud container image prepare \
      -r /usr/share/openstack-tripleo-heat-templates/roles_data.yaml \
      --output-images-file /home/stack/satellite_images_overcloud
    $ openstack overcloud container image prepare \
      -r /usr/share/openstack-tripleo-heat-templates/roles_data_undercloud.yaml \
      --output-images-file /home/stack/satellite_images_undercloud
  2. 이렇게 하면 컨테이너 이미지 정보와 함께 파일 두 개가 생성됩니다. 이 파일을 사용하여 컨테이너 이미지를 Satellite 6 서버에 동기화할 수 있습니다.
  3. 파일에서 YAML 관련 정보를 제거하고 고유 이미지 목록만 포함된 플랫 (Flat) 파일에 병합합니다. 다음 명령으로 이 작업을 수행할 수 있습니다.

    $ awk -F ':' '{if (NR!=1) {gsub("[[:space:]]", ""); print $2}}' ~/satellite_images_overcloud | sed "s/registry.access.redhat.com\///g" > ~/satellite_images_overcloud_names
    $ awk -F ':' '{if (NR!=1) {gsub("[[:space:]]", ""); print $2}}' ~/satellite_images_undercloud | sed "s/registry.access.redhat.com\///g" > ~/satellite_images_undercloud_names
    $ cat ~/satellite_images_overcloud_names ~/satellite_images_undercloud_names | sort | uniq > ~/satellite_images_names

    이는 Satellite 서버에 가져온 이미지 목록을 제공합니다.

  4. satellite_images_names 파일을 Satellite 6 hammer 툴이 포함된 시스템으로 복사합니다. 또는 Hammer CLI 가이드의 지침을 사용하여 hammer 툴을 언더클라우드에 설치할 수 있습니다.
  5. 다음 hammer 명령을 실행하여 Satellite 조직에 새 제품(OSP14 Containers)을 생성할 수 있습니다.

    $ hammer product create \
      --organization "ACME" \
      --name "OSP14 Containers"

    이 사용자 지정 제품에 이미지를 저장합니다.

  6. 제품에 기본 컨테이너 이미지를 추가합니다.

    $ hammer repository create \
      --organization "ACME" \
      --product "OSP14 Containers" \
      --content-type docker \
      --url https://registry.access.redhat.com \
      --docker-upstream-name rhosp14/openstack-base \
      --name base
  7. satellite_images 파일에서 오버클라우드 컨테이너 이미지를 추가합니다.

    $ while read IMAGE; do \
      IMAGENAME=$(echo $IMAGE | cut -d"/" -f2 | sed "s/openstack-//g" | sed "s/:.*//g") ; \
      hammer repository create \
      --organization "ACME" \
      --product "OSP14 Containers" \
      --content-type docker \
      --url https://registry.access.redhat.com \
      --docker-upstream-name $IMAGE \
      --name $IMAGENAME ; done < satellite_images_names
  8. 컨테이너 이미지를 동기화합니다.

    $ hammer product synchronize \
      --organization "ACME" \
      --name "OSP14 Containers"

    Satellite 서버가 동기화를 완료할 때까지 기다립니다.

    참고

    구성에 따라 hammer에서 Satellite 서버 사용자 이름과 암호가 필요할 수 있습니다. hammer를 구성한 후 구성 파일을 사용하여 자동으로 로그인할 수 있습니다. Hammer CLI 가이드"인증" 섹션을 참조하십시오.

  9. Satellite 6 서버에서 콘텐츠 뷰를 사용하는 경우, 새로운 콘텐츠 뷰 버전을 생성하여 이미지를 통합하고 애플리케이션 수명 주기의 환경에 따라 승격합니다. 이는 주로 애플리케이션 라이프사이클을 구조화한 방법에 따라 달라집니다. 예를 들어 라이프사이클의 production이라는 환경을 사용 중이며 해당 환경에서 컨테이너 이미지를 사용할 수 있도록 하려면 컨테이너 이미지가 포함된 콘텐츠 뷰를 생성하고 해당 콘텐츠 뷰를 production 환경으로 승격합니다. 자세한 내용은 "Managing Container Images with Content Views"를 참조하십시오.
  10. base 이미지에 사용 가능한 태그를 확인합니다.

    $ hammer docker tag list --repository "base" \
      --organization "ACME" \
      --environment "production" \
      --content-view "myosp14" \
      --product "OSP14 Containers"

    이렇게 하면 OpenStack Platform 컨테이너 이미지에 대한 태그가 특정 환경에 대한 콘텐츠 뷰에 표시됩니다.

  11. 언더클라우드로 돌아가서 Satellite 서버를 소스로 사용하여 이미지 준비에 필요한 기본 환경 파일을 생성합니다. 다음은 환경 파일 생성을 위한 예시 명령입니다.

    (undercloud) $ openstack tripleo container image prepare default \
      --output-env-file containers-prepare-parameter.yaml
    • --output-env-file은 환경 파일 이름입니다. 이 파일의 콘텐츠에는 언더클라우드의 컨테이너 이미지를 준비하는 데 필요한 매개 변수가 포함됩니다. 이 경우 파일 이름은 containers-prepare-parameter.yaml입니다.
  12. containers-prepare-parameter.yaml 파일을 편집하여 다음과 같이 수정합니다.

    • namespace - Satellite 서버 레지스트리의 URL 및 포트입니다. Red Hat Satellite의 기본 레지스트리 포트는 5000입니다.
    • name_prefix - 접두사는 Satellite 6 규정을 기반으로 하며 사용하는 콘텐츠 뷰에 따라 달라집니다.

      • 콘텐츠 뷰를 사용하는 경우 구조는 [org]-[environment]-[content view]-[product]-입니다. 예: acme-production-myosp14-osp14_containers-
      • 콘텐츠 뷰를 사용하지 않는 경우 구조는 [org]-[product]-입니다. 예: acme-osp14_containers-
    • ceph_namespace, ceph_image, ceph_tag - Ceph Storage를 사용하는 경우 추가 매개 변수를 포함하여 Ceph Storage 컨테이너 이미지 위치를 정의할 수 있습니다. 이제 ceph_image에는 Satellite별 접두사가 포함됩니다. 이 접두사는 name_prefix 옵션과 동일한 값입니다.

다음은 Satellite별 매개 변수가 포함된 환경 파일의 예입니다.

parameter_defaults:
  ContainerImagePrepare:
  - push_destination: true
    set:
      ceph_image: acme-production-myosp14-osp14_containers-rhceph-3-rhel7
      ceph_namespace: satellite.example.com:5000
      ceph_tag: latest
      name_prefix: acme-production-myosp14-osp14_containers-
      name_suffix: ''
      namespace: satellite.example.com:5000
      neutron_driver: null
      tag: latest
      ...
    tag_from_label: '{version}-{release}'

언더클라우드 및 오버클라우드를 모두 생성하는 경우 이 환경 파일을 사용하십시오.


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