Red Hat Training

A Red Hat training course is available for Red Hat OpenStack Platform

5장. 컨테이너 이미지 소스 구성

컨테이너화된 오버클라우드는 필수 컨테이너 이미지가 있는 레지스트리에 대한 액세스 권한을 필요로 합니다. 이 장에서는 Red Hat OpenStack Platform의 컨테이너 이미지를 사용하기 위해 레지스트리 및 오버클라우드 구성을 준비하는 방법에 대해 설명합니다.

5.1. 레지스트리 방식

Red Hat OpenStack Platform은 다음과 같은 레지스트리 유형을 지원합니다.

원격 레지스트리
오버클라우드는 registry.access.redhat.com에서 컨테이너 이미지를 직접 가져옵니다. 이 방식은 초기 구성을 생성할 때 가장 간편한 방식입니다. 그러나 모든 오버클라우드 노드가 Red Hat Container Catalog에서 직접 각각의 이미지를 가져오므로 네트워크가 혼잡해지고 배포가 느려집니다. 또한 모든 오버클라우드 노드에 Red Hat Container Catalog에 대한 인터넷 액세스가 필요합니다.
로컬 레지스트리
사용자가 언더클라우드에서 로컬 레지스트리를 생성하고 registry.access.redhat.com에서 이미지를 동기화하며 오버클라우드가 언더클라우드에서 컨테이너 이미지를 가져옵니다. 이 방식으로 레지스트리를 내부에 저장하여 배포를 가속화하고 네트워크 정체를 완화할 수 있습니다. 하지만 언더클라우드는 기본 레지스트리로서만 작동하고 컨테이너 이미지에 대한 제한된 라이프 사이클 관리를 제공합니다.
Satellite 서버
컨테이너 이미지의 전체 애플리케이션 라이프 사이클을 관리하고 Red Hat Satellite 6 서버를 통해 이를 게시합니다. 오버클라우드는 Satellite 서버에서 이미지를 가져옵니다. 이 방식은 Red Hat OpenStack Platform 컨테이너를 저장, 관리 및 배포하기 위한 엔터프라이즈급 솔루션을 제공합니다.

위의 목록에서 방식을 선택하여 레지스트리 세부 정보를 계속 구성합니다.

5.2. 컨테이너 이미지 준비 명령 사용

이 섹션에서는 openstack overcloud container image prepare 명령 사용 방법에 대해 간략히 설명합니다. 여기에는 명령의 다양한 옵션에 대한 개념 정보 등을 포함합니다.

오버클라우드용 컨테이너 이미지 환경 파일 생성

openstack overcloud container image prepare 명령의 주요 용도 중 하나는 오버클라우드에서 사용된 이미지 목록을 포함하는 환경 파일을 생성하는 것입니다. 이 파일을 openstack overcloud deploy와 같은 오버클라우드 배포 명령에 추가합니다. openstack overcloud container image prepare 명령은 이 기능에 대해 다음 옵션을 사용합니다.

--output-env-file
생성된 환경 파일의 이름을 정의합니다.

다음은 이 파일의 콘텐츠 예시입니다.

parameter_defaults:
  DockerAodhApiImage: registry.access.redhat.com/rhosp13/openstack-aodh-api:latest
  DockerAodhConfigImage: registry.access.redhat.com/rhosp13/openstack-aodh-api:latest
...

가져오기 방법에 대한 컨테이너 이미지 목록 생성

OpenStack Platform 컨테이너 이미지를 다른 레지스트리 소스로 가져오려는 경우 이미지 목록을 생성할 수 있습니다. 이 목록의 구문은 주로 컨테이너 이미지를 언더클라우드의 컨테이너 레지스트리로 가져오는 데 사용되지만 Red Hat Satellite 6 같이 다른 가져오기 방식에 맞도록 이 목록의 포맷을 변경할 수 있습니다.

openstack overcloud container image prepare 명령은 이 기능에 대해 다음 옵션을 사용합니다.

--output-images-file
가져오기 목록에 대해 생성된 파일 이름을 정의합니다.

다음은 이 파일의 콘텐츠 예시입니다.

container_images:
- imagename: registry.access.redhat.com/rhosp13/openstack-aodh-api:latest
- imagename: registry.access.redhat.com/rhosp13/openstack-aodh-evaluator:latest
...

컨테이너 이미지의 네임스페이스 설정

--output-env-file--output-images-file 옵션 모두에 결과 이미지 위치를 생성하기 위해 네임스페이스가 필요합니다. openstack overcloud container image prepare 명령은 다음 옵션을 사용하여 가져오려는 컨테이너 이미지의 소스 위치를 설정할 수 있습니다.

--namespace
컨테이너 이미지의 네임스페이스를 정의합니다. 이는 주로 디렉터리가 있는 호스트 이름이거나 IP 주소입니다.
--prefix
이미지 이름 앞에 추가할 접두사를 정의합니다.

결과적으로 director는 다음 포맷을 사용하여 이미지 이름을 생성합니다.

  • [NAMESPACE]/[PREFIX][IMAGE NAME]

컨테이너 이미지 태그 설정

openstack overcloud container image prepare 명령은 각각의 컨테이너 이미지에 대해 기본적으로 latest 태그를 사용합니다. 하지만 다음 옵션 중 한 가지를 사용하여 이미지 버전에 특정 태그를 선택할 수 있습니다.

--tag-from-label
지정된 컨테이너 이미지 레이블의 값을 사용하여 모든 이미지의 버전 태그를 검색합니다.
--tag
모든 이미지에 대해 특정 태그를 설정합니다. 모든 OpenStack Platform 컨테이너 이미지는 버전 동기화에 동일한 태그를 사용합니다. --tag-from-label과 함께 사용하면 버전이 있는 태그는 이 태그에서 최초로 검색됩니다.

5.3. 추가 서비스를 위한 컨테이너 이미지

director는 핵심 OpenStack Platform 서비스에 대해서만 컨테이너 이미지를 준비합니다. 일부 추가 기능은 추가 컨테이너 이미지가 필요한 서비스를 사용합니다. 사용자는 환경 파일에서 이러한 서비스를 활성화할 수 있습니다. openstack overcloud container image prepare 명령은 다음 옵션을 사용하여 환경 파일과 각각의 컨테이너 이미지를 포함합니다.

-e
추가 컨테이너 이미지를 사용할 수 있도록 환경 파일을 지정합니다.

다음 표는 /usr/share/openstack-tripleo-heat-templates 디렉터리 내에서 컨테이너 이미지를 사용하는 추가 서비스 샘플 목록과 해당 환경 파일 위치를 제공합니다.

서비스환경 파일

Ceph Storage

environments/ceph-ansible/ceph-ansible.yaml

Collectd

environments/services-docker/collectd.yaml

Congress

environments/services-docker/congress.yaml

Fluentd

environments/services-docker/fluentd-client.yaml

OpenStack Bare Metal(ironic)

environments/services-docker/ironic.yaml

OpenStack Data Processing(sahara)

environments/services-docker/sahara.yaml

OpenStack EC2-API

environments/services-docker/ec2-api.yaml

OpenStack Key Manager(barbican)

environments/services-docker/barbican.yaml

OpenStack Load Balancing-as-a-Service(octavia)

environments/services-docker/octavia.yaml

OpenStack Shared File System Storage(manila)

environments/services-docker/manila.yaml

Sensu

environments/services-docker/sensu-client.yaml

다음은 추가할 서비스에 대한 예시를 제공합니다.

Ceph Storage

Red Hat Ceph Storage 클러스터를 오버클라우드에 배포하는 경우 /usr/share/openstack-tripleo-heat-templates/environments/ceph-ansible/ceph-ansible.yaml 환경 파일을 추가해야 합니다. 이 파일은 오버클라우드에서 구성 가능한 컨테이너화된 서비스를 활성화하며 director는 이러한 서비스가 활성화되어 있는지 확인한 후 해당 이미지를 준비해야 합니다.

이 환경 파일 외에도 OpenStack Platform 서비스와 다른 Ceph Storage 컨테이너 위치를 정의해야 합니다. --set 옵션을 사용하여 Ceph Storage에 특정한 다음 매개 변수를 지정할 수 있습니다.

--set ceph_namespace
Ceph Storage 컨테이너 이미지에 대한 네임스페이스를 정의합니다. 이 기능은 --namespace 옵션과 유사합니다.
--set ceph_image
Ceph Storage 컨테이너 이미지의 이름을 정의합니다. 일반적으로 rhceph-3-rhel7입니다.
--set ceph_tag
Ceph Storage 컨테이너 이미지에 사용할 태그를 정의합니다. 이 기능은 --tag 옵션과 유사합니다. --tag-from-label을 지정하면 버전이 있는 태그는 이 태그에서 시작하여 검색됩니다.

다음은 컨테이너 이미지 파일에 Ceph Storage를 추가한 예시입니다.

$ openstack overcloud container image prepare \
  ...
  -e /usr/share/openstack-tripleo-heat-templates/environments/ceph-ansible/ceph-ansible.yaml \
  --set ceph_namespace=registry.access.redhat.com/rhceph \
  --set ceph_image=rhceph-3-rhel7 \
  --tag-from-label {version}-{release} \
  ...

OpenStack Bare Metal(ironic)

오버클라우드에 OpenStack Bare Metal(ironic)을 배포할 때 /usr/share/openstack-tripleo-heat-templates/environments/services-docker/ironic.yaml 환경 파일을 추가해야 director가 이미지를 준비할 수 있습니다. 다음은 환경 파일을 추가하는 방법에 대한 예시입니다.

$ openstack overcloud container image prepare \
  ...
  -e /usr/share/openstack-tripleo-heat-templates/environments/services-docker/ironic.yaml \
  ...

OpenStack Data Processing(sahara)

오버클라우드에 OpenStack Data Processing (sahara)을 배포할 때 /usr/share/openstack-tripleo-heat-templates/environments/services-docker/sahara.yaml 환경 파일을 추가해야 director가 이미지를 준비할 수 있습니다. 다음은 이 환경 파일을 추가하는 방법에 대한 예시입니다.

$ openstack overcloud container image prepare \
  ...
  -e /usr/share/openstack-tripleo-heat-templates/environments/services-docker/sahara.yaml \
  ...

5.4. 원격 레지스트리 소스로 Red Hat 레지스트리 사용

Red Hat은 오버클라우드 컨테이너 이미지를 registry.access.redhat.com에 호스트합니다. 레지스트리가 이미 설정되어 있고 가져오려는 이미지의 URL과 네임스페이스만 있으면 되므로 원격 레지스트리에서 이미지를 가져오는 것이 가장 간단한 방식입니다. 하지만 오버클라우드 생성 중에 오버클라우드 노드 모두 원격 레지스트리에서 이미지를 가져오면 외부 연결이 혼잡해질 수 있습니다. 이로 인해 문제가 발생하면 다음 방식 중 하나를 수행할 수 있습니다.

  • 로컬 레지스트리 설정
  • Red Hat Satellite 6에서 이미지 호스트

절차

  1. 오버클라우드 배포의 registry.access.redhat.com에서 바로 이미지를 가져오려면 이미지 매개 변수를 지정할 환경 파일이 필요합니다. 다음 명령은 자동으로 이 환경 파일을 생성합니다.

    (undercloud) $ openstack overcloud container image prepare \
      --namespace=registry.access.redhat.com/rhosp13 \
      --prefix=openstack- \
      --tag-from-label {version}-{release} \
      --output-env-file=/home/stack/templates/overcloud_images.yaml
    • -e 옵션을 사용하여 서비스에 대한 모든 환경 파일을 지정합니다.
    • Ceph Storage를 사용하는 경우 추가 매개 변수를 지정하여 Ceph Storage 컨테이너 이미지 위치(--set ceph_namespace, --set ceph_image, --set ceph_tag)를 정의할 수 있습니다.
  2. 이렇게 하면 언더클라우드에서 이미지 위치를 포함하는 overcloud_images.yaml 환경 파일이 생성됩니다. 이 파일을 배포에 포함합니다.

5.5. 로컬 레지스트리로 언더클라우드 사용

언더클라우드에서 로컬 레지스트리를 구성하여 오버클라우드 컨테이너 이미지를 저장할 수 있습니다. 이 방식에는 다음이 포함됩니다.

  • director는 registry.access.redhat.com에서 각 이미지를 가져옵니다.
  • director가 오버클라우드를 생성합니다.
  • 오버클라우드 생성 중에 노드가 언더클라우드에서 관련 이미지를 가져옵니다.

이렇게 하면 컨테이너 이미지에 대한 네트워크 트래픽을 내부 네트워크에 유지하여 외부 네트워크 연결이 혼잡해지지 않으며 배포 프로세스 속도가 빨라질 수 있습니다.

절차

  1. 로컬 언더클라우드 레지스트리의 주소를 찾습니다. 주소는 다음 패턴을 사용합니다.

    <REGISTRY IP ADDRESS>:8787

    언더클라우드의 IP 주소를 사용합니다. 이 주소는 이전에 undercloud.conf 파일에서 local_ip 매개 변수로 설정했습니다. 아래 명령에 대해 주소를 192.168.24.1:8787이라고 가정합니다.

  2. 로컬 레지스트리에 이미지를 업로드할 수 있는 템플릿과 해당 이미지를 참조할 수 있는 환경 파일을 생성합니다.

    (undercloud) $ openstack overcloud container image prepare \
      --namespace=registry.access.redhat.com/rhosp13 \
      --push-destination=192.168.24.1:8787 \
      --prefix=openstack- \
      --tag-from-label {version}-{release} \
      --output-env-file=/home/stack/templates/overcloud_images.yaml \
      --output-images-file /home/stack/local_registry_images.yaml
    • -e 옵션을 사용하여 서비스에 대한 모든 환경 파일을 지정합니다.
    • Ceph Storage를 사용하는 경우 추가 매개 변수를 지정하여 Ceph Storage 컨테이너 이미지 위치(--set ceph_namespace, --set ceph_image, --set ceph_tag)를 정의할 수 있습니다.
  3. 이렇게 하면 다음과 같은 2개의 파일이 생성됩니다.

    • local_registry_images.yaml: 원격 소스의 컨테이너 이미지 정보를 포함합니다. 이 파일을 사용하여 Red Hat Container Registry(registry.access.redhat.com)의 이미지를 언더클라우드로 가져올 수 있습니다.
    • overcloud_images.yaml: 언더클라우드의 최종 이미지 위치를 포함합니다. 이 파일을 배포에 포함합니다.

      두 개의 파일이 모두 존재하는지 확인하십시오.

  4. registry.access.redhat.com에서 언더클라우드로 컨테이너 이미지를 가져옵니다.

    (undercloud) $ sudo openstack overcloud container image upload \
      --config-file  /home/stack/local_registry_images.yaml \
      --verbose

    필요한 이미지를 가져오는 데에는 네트워크와 언더클라우드 디스크 속도에 따라 시간이 걸릴 수 있습니다.

    참고

    컨테이너 이미지는 약 10GB의 디스크 공간이 필요합니다.

레지스트리 구성이 준비되었습니다.

5.6. Satellite 서버를 레지스트리로 사용

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

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

절차

  1. 템플릿을 생성하여 이미지를 로컬 레지스트리로 가져옵니다.

    $ source ~/stackrc
    (undercloud) $ openstack overcloud container image prepare \
      --namespace=rhosp13 \
      --prefix=openstack- \
      --output-images-file /home/stack/satellite_images \
    • -e 옵션을 사용하여 서비스에 대한 모든 환경 파일을 지정합니다.
    • Ceph Storage를 사용하는 경우 추가 매개 변수를 지정하여 Ceph Storage 컨테이너 이미지 위치(--set ceph_namespace, --set ceph_image, --set ceph_tag)를 정의할 수 있습니다.
    참고

    이 버전의openstack overcloud container image prepare 명령은 registry.access.redhat.com의 레지스트리를 대상으로 하여 이미지 목록을 생성합니다. 이 명령은 이후 단계에서 사용하는 openstack overcloud container image prepare 명령과 다른 값을 사용합니다.

  2. 이렇게 하면 컨테이너 이미지 정보와 함께 satellite_images라고 하는 파일이 생성됩니다. 이 파일을 사용하여 컨테이너 이미지를 Satellite 6 서버에 동기화할 수 있습니다.
  3. satellite_images 파일에서 YAML 관련 정보를 삭제하고 이미지 목록만 포함된 플랫 파일로 변환합니다. 다음 sed 명령으로 이 작업을 수행할 수 있습니다.

    (undercloud) $ awk -F ':' '{if (NR!=1) {gsub("[[:space:]]", ""); print $2}}' ~/satellite_images > ~/satellite_images_names

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

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

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

    이 사용자 지정 제품에 이미지가 포함됩니다.

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

    $ hammer repository create \
      --organization "ACME" \
      --product "OSP13 Containers" \
      --content-type docker \
      --url https://registry.access.redhat.com \
      --docker-upstream-name rhosp13/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 "OSP13 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 "OSP13 Containers"

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

    참고

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

  9. Satellite 6 서버가 콘텐츠 뷰를 사용하는 경우 새 콘텐츠 뷰 버전을 생성하여 이미지를 통합할 수 있습니다.
  10. base 이미지에 사용 가능한 태그를 확인합니다.

    $ hammer docker tag list --repository "base" \
      --organization "ACME" \
      --product "OSP13 Containers"

    이렇게 하면 OpenStack Platform 컨테이너 이미지에 대한 태그가 표시됩니다.

  11. Satellite 서버에서 언더클라우드로 돌아가 이미지에 대한 환경 파일을 생성합니다. 다음은 환경 파일 생성을 위한 예시 명령입니다.

    (undercloud) $ openstack overcloud container image prepare \
      --namespace=satellite6.example.com:5000 \
      --prefix=acme-osp13_containers- \
      --tag-from-label {version}-{release} \
      --output-env-file=/home/stack/templates/overcloud_images.yaml
    참고

    이 버전의 openstack overcloud container image prepare 명령은 Satellite 서버를 대상으로 합니다. 이 명령은 이전 단계에서 사용한 openstack overcloud container image prepare 명령과 다른 값을 사용합니다.

    이 명령을 실행할 때는 다음 데이터를 포함해야 합니다.

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

      • 콘텐츠 뷰를 사용하는 경우 구조는 [org]-[environment]-[content view]-[product]-입니다. 예: acme-production-myosp13-osp13_containers-
      • 콘텐츠 뷰를 사용하지 않는 경우 구조는 [org]-[product]-입니다. 예: acme-osp13_containers-
    • --tag-from-label {version}-{release} - 각 이미지에 대해 최신 태그를 식별합니다.
    • -e - 옵션 서비스에 대한 모든 환경 파일을 지정합니다.
    • --set ceph_namespace, --set ceph_image, --set ceph_tag - Ceph Storage를 사용하는 경우 추가 매개 변수를 포함하여 Ceph Storage 컨테이너 이미지 위치를 정의할 수 있습니다. 이제 ceph_image에는 Satellite별 접두사가 포함됩니다. 이 접두사는 --prefix 옵션과 같은 값입니다. 예:

      --set ceph_image=acme-osp13_containers-rhceph-3-rhel7

      이렇게 하면 오버클라우드가 Satellite 이름 지정 규칙을 사용하는 Ceph 컨테이너 이미지를 사용합니다.

  12. Satellite 서버에서 이미지 위치를 포함하는 overcloud_images.yaml 환경 파일이 생성됩니다. 이 파일을 배포에 포함합니다.

레지스트리 구성이 준비되었습니다.

5.7. 다음 단계

이제 컨테이너 이미지 소스 목록이 포함된 overcloud_images.yaml 환경 파일이 생성됩니다. 이후의 모든 배포 작업에 이 파일을 포함합니다.