Compute를 사용하여 배포 스케일링

Red Hat OpenStack Platform 16.1

다중 셀 오버클라우드 생성 및 구성 가이드

OpenStack Documentation Team

초록

이 가이드에서는 클라우드 관리자가 대규모 RHOSP(Red Hat OpenStack Platform) 배포에서 컴퓨팅 노드를 그룹화하도록 셀을 구성하고 관리하는 데 필요한 개념과 절차를 설명합니다.

보다 포괄적 수용을 위한 오픈 소스 용어 교체

Red Hat은 코드, 문서, 웹 속성에서 문제가 있는 용어를 교체하기 위해 최선을 다하고 있습니다. 먼저 마스터(master), 슬레이브(slave), 블랙리스트(blacklist), 화이트리스트(whitelist) 등 네 가지 용어를 교체하고 있습니다. 이러한 변경 작업은 작업 범위가 크므로 향후 여러 릴리스에 걸쳐 점차 구현할 예정입니다. 자세한 내용은 CTO Chris Wright의 메시지를 참조하십시오.

Red Hat 문서에 관한 피드백 제공

문서 개선을 위한 의견을 보내 주십시오. Red Hat이 어떻게 이를 개선하는지 알려주십시오.

DDF(직접 문서 피드백) 기능 사용

특정 문장, 단락 또는 코드 블록에 대한 직접 주석은 피드백 추가 DDF 기능을 사용하십시오.

  1. 다중 페이지 HTML 형식으로 설명서를 봅니다.
  2. 문서 오른쪽 상단에 Feedback (피드백) 버튼이 표시되는지 확인합니다.
  3. 주석 처리하려는 텍스트 부분을 강조 표시합니다.
  4. 피드백 추가를 클릭합니다.
  5. 주석을 사용하여 Add Feedback (피드백 추가) 필드를 작성합니다.
  6. 선택 사항: 설명서 팀이 문제에 대한 자세한 내용을 문의할 수 있도록 이메일 주소를 추가하십시오.
  7. Submit(제출)을 클릭합니다.

1장. 다중 셀 오버클라우드 배포

셀을 사용하여 대규모 배포의 컴퓨팅 노드를 각각 인스턴스 정보가 포함된 메시지 대기열 및 전용 데이터베이스가 있는 그룹으로 나눌 수 있습니다.

기본적으로 director는 모든 컴퓨팅 노드에 대한 단일 셀로 오버클라우드를 설치합니다. 이 셀에는 모든 계산 서비스 및 데이터베이스와 모든 인스턴스 및 인스턴스 메타데이터가 포함됩니다. 대규모 배포의 경우 여러 셀이 있는 오버클라우드를 배포하여 더 많은 수의 컴퓨팅 노드를 수용할 수 있습니다. 새 오버클라우드를 설치할 때 또는 나중에 언제든지 셀을 환경에 추가할 수 있습니다.

다중 셀 배포에서 각 셀은 셀별 계산 서비스 및 데이터베이스의 독립 실행형 복사본을 실행하고 해당 셀의 인스턴스에 대해서만 인스턴스 메타데이터를 저장합니다. 글로벌 정보 및 셀 매핑은 글로벌 컨트롤러 셀에 저장되어 셀 중 하나가 실패하는 경우 보안 및 복구 기능을 제공합니다.

경고

기존 오버클라우드에 셀을 추가하면 기본 셀의 컨덕터도 수퍼 컨덕터의 역할을 수행합니다. 이는 배포의 셀과 컨덕터(conductor) 통신과 오버클라우드의 성능에 부정적인 영향을 미칩니다. 또한 기본 셀을 오프라인으로 사용하는 경우 슈퍼 컨덕터를 오프라인으로 가져가 전체 오버클라우드 배포를 중지합니다. 따라서 기존 오버클라우드를 확장하려면 기본 셀에 컴퓨팅 노드를 추가하지 마십시오. 대신 생성한 새 셀에 Compute 노드를 추가하여 기본 셀이 수퍼 컨덕터 역할을 할 수 있도록 합니다.

다중 셀 오버클라우드를 생성하려면 다음 작업을 수행해야 합니다.

  1. 여러 셀을 처리하도록 오버클라우드를 구성하고 배포합니다.
  2. 배포 내에서 필요한 새 셀을 생성하고 프로비저닝합니다.
  3. 각 셀에 컴퓨팅 노드를 추가합니다.
  4. 각 계산 셀을 가용성 영역에 추가합니다.

1.1. 사전 요구 사항

  • 필요한 수의 컨트롤러 노드가 있는 기본 오버클라우드를 배포했습니다.

1.2. 글로벌 구성 요소 및 서비스

다음 구성 요소는 계산 셀 수에 관계없이 각 Overcloud에 대해 한 번 컨트롤러 셀에 배포됩니다.

컴퓨팅 API
사용자에게 외부 REST API를 제공합니다.
컴퓨팅 스케줄러
인스턴스를 할당할 컴퓨팅 노드를 결정합니다.
배치 서비스
계산 리소스를 모니터링하고 인스턴스에 할당합니다.
API 데이터베이스

계산 API 및 계산 스케줄러 서비스에서 인스턴스에 대한 위치 정보를 추적하고 빌드되지만 예약되지 않은 인스턴스에 임시 위치를 제공합니다.

다중 셀 배포에서 이 데이터베이스에는 각 셀의 데이터베이스 연결을 지정하는 셀 매핑도 포함되어 있습니다.

cell0 데이터베이스
예약에 실패한 인스턴스에 대한 정보 전용 데이터베이스.
슈퍼 컨덕터
이 서비스는 글로벌 서비스와 각 계산 셀 간의 조정을 위한 다중 셀 배포에만 있습니다. 또한 이 서비스는 실패한 인스턴스 정보를 cell0 데이터베이스에 전송합니다.

1.3. 셀 특정 구성 요소 및 서비스

다음 구성 요소는 각 계산 셀에 배포됩니다.

셀 데이터베이스
인스턴스에 대한 대부분의 정보를 포함합니다. 글로벌 API, 컨덕터 및 계산 서비스에서 사용합니다.
컨덕터(conductor)
글로벌 서비스에서 데이터베이스 쿼리 및 장기 실행 작업을 조정하고 Compute 노드를 직접 데이터베이스 액세스로부터 보호합니다.
메세지 큐
셀 및 글로벌 서비스와 통신하기 위해 모든 서비스에서 사용하는 메시징 서비스.

1.4. 셀 배포 아키텍처

director가 설치하는 기본 오버클라우드에는 모든 컴퓨팅 노드에 대한 단일 셀이 있습니다. 다음 아키텍처 다이어그램에 설명된 대로 더 많은 셀을 추가하여 오버클라우드를 확장할 수 있습니다.

단일 셀 배포 아키텍처

다음 다이어그램에서는 기본 단일 셀 Overcloud에서 기본 구조 및 상호 작용의 예를 보여줍니다.

Single-cell deployment architecture

이 배포에서는 모든 서비스가 단일 컨덕터를 사용하여 계산 API와 계산 노드 간에 통신하고 단일 데이터베이스는 모든 실시간 인스턴스 데이터를 저장하도록 구성됩니다.

소규모 배포에서는 이 구성만으로도 충분할 수 있지만 글로벌 API 서비스 또는 데이터베이스가 실패하면 고가용성 구성에 관계없이 전체 계산 배포에서 정보를 보내거나 받을 수 없습니다.

다중 셀 배포 아키텍처

다음 다이어그램에서는 사용자 지정 다중 셀 Overcloud의 기본 구조 및 상호 작용의 예를 보여줍니다.

Multi-cell deployment architecture

이 배포에서 계산 노드는 각각 자체 컨덕터, 데이터베이스 및 메시지 큐가 있는 여러 셀로 나뉩니다. 글로벌 서비스는 슈퍼 컨덕터를 사용하여 각 셀과 통신하며, 글로벌 데이터베이스에는 전체 오버클라우드에 필요한 정보만 포함되어 있습니다.

셀 수준 서비스는 글로벌 서비스에 직접 액세스할 수 없습니다. 이러한 격리는 셀 장애 발생 시 추가적인 보안 및 안전하지 않은 기능을 제공합니다.

중요

첫 번째 셀에서 "기본값"이라는 계산 서비스를 실행하지 마십시오. 대신 컴퓨팅 노드를 개별적으로 포함하는 각각의 새 셀을 배포합니다.

1.5. 다중 셀 배포에 대한 고려 사항

다중 셀 배포의 최대 컴퓨팅 노드 수
모든 셀에서 최대 컴퓨팅 노드 수는 500입니다.
교차 셀 인스턴스 마이그레이션

한 셀의 호스트에서 다른 셀의 호스트로 인스턴스를 마이그레이션하는 것은 지원되지 않습니다. 이 제한은 다음 작업에 영향을 미칩니다.

  • 콜드 마이그레이션
  • 실시간 마이그레이션
  • 보류 해제
  • 크기 변경
  • 비우기
서비스 할당량

계산 서비스 할당량은 데이터베이스에서 정적으로 계산되지 않고 각 리소스 사용 지점에서 동적으로 계산됩니다. 다중 셀 배포에서 연결할 수 없는 셀은 실시간으로 사용 정보를 제공할 수 없으므로 셀에 다시 연결할 때 할당량을 초과할 수 있습니다.

배치 서비스 및 API 데이터베이스를 사용하여 실패한 셀 또는 연결할 수 없는 셀을 유지하기 위해 할당량 계산을 구성할 수 있습니다.

API 데이터베이스
계산 API 데이터베이스는 모든 셀에 대해 항상 전역적이며 각 셀에 대해 복제할 수 없습니다.
콘솔 프록시
콘솔 토큰 권한 부여는 셀 데이터베이스에 저장되므로 각 셀에 대한 콘솔 프록시를 구성해야 합니다. 각 콘솔 프록시 서버는 해당 셀 데이터베이스의 database.connection 정보에 액세스해야 합니다.
컴퓨팅 메타데이터 API

다중 셀 환경의 모든 셀에 대해 동일한 네트워크를 사용하는 경우 셀 간에 연결할 수 있도록 Compute 메타데이터 API를 전역적으로 실행해야 합니다. 계산 메타데이터 API가 전역적으로 실행되면 api_database.connection 정보에 액세스해야 합니다.

라우팅된 네트워크를 사용하여 여러 셀 환경을 배포하는 경우 각 셀에서 Compute 메타데이터 API를 별도로 실행하여 성능과 데이터 격리를 개선해야 합니다. 계산 메타데이터 API가 각 셀에서 실행되는 경우 neutron-metadata-agent 서비스는 해당 nova-api-metadata 서비스를 가리켜야 합니다.

NovaLocalMetadataPerCell 매개변수를 사용하여 컴퓨팅 메타데이터 API가 실행되는 위치를 제어합니다.

2장. 동일한 네트워크를 사용하여 다중 셀 환경 구성 및 배포

동일한 네트워크를 사용하여 여러 셀을 처리하도록 RHOSP(Red Hat OpenStack) 배포를 구성하려면 다음 작업을 수행해야 합니다.

  1. 오버클라우드 스택의 컨트롤 플레인에서 매개 변수 정보를 추출합니다.
  2. 셀 역할 파일을 생성합니다. 셀의 컴퓨팅 노드에 대한 기본 Compute 역할과 셀 컨트롤러 노드에 대해 전용 eachController 역할을 사용할 수 있습니다. 또한 다중 셀 환경에서 사용할 사용자 지정 역할(예: 각 셀 스택의 사용자 지정 역할)을 만들 수 있습니다. 사용자 지정 역할 생성에 대한 자세한 내용은 Composable services and custom roles 를 참조하십시오.
  3. œ Controller 역할에 대한 셀 컨트롤러 플레이버를 구성합니다.

    참고

    다중 셀 환경에 대한 사용자 지정 역할을 만든 경우 사용자 지정 역할에 대한 플레이버도 구성해야 합니다.

  4. 각 셀을 구성합니다.
  5. 각 셀 스택을 배포합니다.

2.1. 오버클라우드 스택 컨트롤 플레인에서 매개변수 정보 추출

기본 Overcloud 스택의 default 라는 첫 번째 셀에서 매개 변수 정보를 추출합니다.

절차

  1. stack 사용자로 언더클라우드에 로그인합니다.
  2. stackrc 파일을 소싱합니다.

    [stack@director ~]$ source ~/stackrc
  3. Overcloud 스택의 기본 셀에서 다중 셀 배포를 위한 새로운 공통 환경 파일로 셀 구성 및 암호 정보를 내보냅니다.

    (undercloud)$ sudo --preserve-env openstack overcloud cell export \
     --output-file common/default_cell_export.yaml

    이 명령은 EndpointMap,HostsEntry,AllNodesConfig,GlobalConfig 매개변수 및 암호 정보를 공통 환경 파일로 내보냅니다.

    작은 정보

    환경 파일이 이미 있는 경우 --force-overwrite 또는 -f 옵션을 사용하여 명령을 입력합니다.

2.2. 셀 역할 파일 생성

스택에서 동일한 네트워크를 사용하고 사용자 지정 역할이 필요하지 않은 경우 모든 셀 스택에서 사용할 공통 셀 역할 파일을 만들 수 있습니다.

절차

  • Compute 및œ Controller 역할이 포함된 cell_roles_data.yaml 이라는 새 역할 데이터 파일을 생성합니다.

    (undercloud)$ openstack overcloud roles generate \
      --roles-path /usr/share/openstack-tripleo-heat-templates/roles \
      -o common/cell_roles_data.yaml Compute CellController

2.3. Argo Controller 역할에 대한 호스트 지정

œ Controller 역할에 대한 베어 메탈 노드를 지정하려면, 를 사용하도록 플레이버 및 리소스 클래스를 구성해야 합니다. 이 역할 의 노드를 태그하는 데 사용할 플레이버와 리소스 클래스를 구성해야 합니다. 다음 절차에서는 Controller 역할에 대한 플레이버 및 베어 메탈 리소스 클래스를 생성합니다.

작은 정보

여러 셀 환경에 대한 사용자 지정 역할을 생성한 경우 다음 절차에 따라 사용자 지정 역할의 이름으로 셀 컨트롤러 이름을 대체하여 사용자 지정 역할에 대한 플레이버 및 리소스 클래스를 구성할 수 있습니다.

절차

  1. 셀 컨트롤러 노드의 cellcontroller Overcloud 플레이버를 생성합니다.

    (undercloud)$ openstack flavor create --id auto \
     --ram <ram_size_mb> --disk <disk_size_gb> \
     --vcpus <no_vcpus> cellcontroller
    • <ram_size_mb> 를 베어 메탈 노드의 RAM(MB)으로 바꿉니다.
    • <disk_size_gb> 를 베어 메탈 노드의 디스크 크기(GB)로 바꿉니다.
    • <no_vcpus> 를 베어 메탈 노드의 CPU 수로 바꿉니다.

      참고

      이러한 속성은 인스턴스를 예약하는 데 사용되지 않습니다. 그러나 계산 스케줄러는 디스크 크기를 사용하여 루트 파티션 크기를 결정합니다.

  2. 노드 목록을 검색하여 UUID를 확인합니다.

    (undercloud)$ openstack baremetal node list
  3. 사용자 지정 셀 컨트롤러 리소스 클래스를 사용하여 셀 컨트롤러로 지정할 각 베어 메탈 노드에 태그를 지정합니다.

    (undercloud)$ openstack baremetal node set \
     --resource-class baremetal.CELL-CONTROLLER <node>

    <node> 를 베어 메탈 노드의 ID로 바꿉니다.

  4. cellcontroller 플레이버를 사용자 지정 셀 컨트롤러 리소스 클래스와 연결합니다.

    (undercloud)$ openstack flavor set \
     --property resources:CUSTOM_BAREMETAL_CELL_CONTROLLER=1 \
      cellcontroller

    베어 메탈 서비스 노드의 리소스 클래스에 해당하는 사용자 지정 리소스 클래스의 이름을 확인하려면 리소스 클래스를 대문자로 변환하려면 각 문장 부호 표시를 밑줄로 바꾸고 접두사는 CUSTOM_ 로 바꿉니다.

    참고

    플레이버는 베어 메탈 리소스 클래스의 인스턴스 하나만 요청할 수 있습니다.

  5. Compute 스케줄러가 베어 메탈 플레이버 속성을 사용하여 인스턴스를 예약하지 못하도록 다음 플레이버 속성을 설정합니다.

    (undercloud)$ openstack flavor set \
     --property resources:VCPU=0 --property resources:MEMORY_MB=0 \
     --property resources:DISK_GB=0 cellcontroller

2.4. 동일한 네트워크를 사용하여 각 셀 스택 구성 및 배포

Overcloud 스택의 네트워크를 사용하도록 각 셀 스택을 구성하고 배포에서 셀을 추가 셀로 식별해야 합니다. 또한 노드 플레이버와 셀의 컨트롤러 및 컴퓨팅 노드 수를 구성해야 합니다.

절차

  1. 새 셀의 새 디렉토리를 생성합니다.

    (undercloud)$ mkdir cells
  2. 셀 특정 매개 변수(예: /cells/cell1.yaml ) 에 대해 셀 디렉터리 셀의 추가 셀 각각에 대한 새 환경 파일을 만듭니다.
  3. 각 환경 파일에 다음 매개변수를 추가하여 배포의 각 셀의 매개변수 값을 업데이트합니다.

    resource_registry:
      OS::TripleO::Network::Ports::OVNDBsVipPort: /usr/share/openstack-tripleo-heat-templates/network/ports/noop.yaml
      OS::TripleO::Network::Ports::RedisVipPort: /usr/share/openstack-tripleo-heat-templates/network/ports/noop.yaml
    
    parameter_defaults:
      # Disable network creation in order to use the `network_data.yaml` file from the overcloud stack,
      # and create ports for the nodes in the separate stacks on the existing networks.
      ManageNetworks: false
    
      # Specify that this is an additional cell
      NovaAdditionalCell: True
    
      # The DNS names for the VIPs for the cell
      CloudName: cell1.ooo.test
      CloudNameInternal: cell1.internalapi.ooo.test
      CloudNameStorage: cell1.storage.ooo.test
      CloudNameStorageManagement: cell1.storagemgmt.ooo.test
      CloudNameCtlplane: cell1.ctlplane.ooo.test
    
      # Map the flavors to use for the CellController and Compute roles
      OvercloudCellControllerFlavor: cellcontroller
      OvercloudComputeFlavor: compute
    
      # Number of controllers/computes in the cell
      CellControllerCount: 3
      ComputeCount: 1
    
      # Node names must be unique across all cells
      ComputeHostnameFormat: 'cell1-compute-%index%'
      CellControllerHostnameFormat: 'cell1-cellcontroller-%index%'
  4. 셀에 네트워크 리소스를 할당하고 셀을 네트워크에 등록하려면 각 환경 파일에 다음 매개 변수를 추가합니다.

    resource_registry:
      OS::TripleO::CellController::Net::SoftwareConfig: /home/stack/templates/nic-configs/cellcontroller.yaml
      OS::TripleO::Compute::Net::SoftwareConfig: /home/stack/templates/nic-configs/compute.yaml
  5. 다른 환경 파일을 사용하여 스택에 환경 파일을 추가하고 셀 스택을 배포합니다.

    (undercloud)$ openstack overcloud deploy --templates \
     --stack cell1 \
     -e [your environment files] \
     -r $HOME/common/cell_roles_data.yaml \
     -e $HOME/common/default_cell_export.yaml \
     -e $HOME/cells/cell1.yaml

    모든 셀 스택이 배포될 때까지 각 셀 스택에 대해 이 단계를 반복합니다.

2.5. 다음 단계

3장. 라우팅된 네트워크를 사용하여 다중 셀 환경 구성 및 배포

라우팅된 네트워크에서 여러 셀을 처리하도록 RHOSP(Red Hat OpenStack) 배포를 구성하려면 다음 작업을 수행해야 합니다.

  1. 오버클라우드 스택에서 셀 네트워크 라우팅을 위한 컨트롤 플레인을 준비합니다.
  2. 오버클라우드 스택의 컨트롤 플레인에서 매개 변수 정보를 추출합니다.
  3. 셀 스택에서 셀 네트워크 라우팅을 구성합니다.
  4. 각 스택의 셀 역할 파일을 생성합니다. 기본 Compute 역할을 셀에 있는 컴퓨팅 노드의 기본으로 사용할 수 있으며, 셀 컨트롤러 노드의 기본으로 전용 pvc Controller 역할을 사용할 수 있습니다. 다중 셀 환경에서 사용할 사용자 지정 역할을 만들 수도 있습니다. 사용자 지정 역할 생성에 대한 자세한 내용은 Composable services and custom roles 를 참조하십시오.
  5. 생성한 각 사용자 지정 역할에 대한 플레이버를 구성합니다.

    참고

    이 절차는 단일 컨트롤 플레인 네트워크가 있는 환경을 위한 절차입니다. 환경에 스파인 리프팅 네트워크 환경과 같은 여러 컨트롤 플레인 네트워크가 있는 경우 각 리플 네트워크에서 각 역할에 대한 플레이버를 생성하여 노드를 각 스트로크에 태그할 수 있습니다. 자세한 내용은 PVC 네트워크에 대한 플레이버 및 태그 지정 노드 생성을 참조하십시오.

  6. 각 셀을 구성합니다.
  7. 각 셀 스택을 배포합니다.

3.1. 사전 요구 사항

3.2. 셀 네트워크 라우팅을 위한 컨트롤 플레인 및 기본 셀 준비

셀과 통신하려면 오버클라우드 스택에서 경로를 구성해야 합니다. 이를 위해 기본 스택의 모든 네트워크와 서브넷을 정의하는 네트워크 데이터 파일을 만들고 이 파일을 사용하여 Overcloud 스택과 셀 스택을 모두 배포합니다.

절차

  1. stack 사용자로 언더클라우드에 로그인합니다.
  2. stackrc 파일을 소싱합니다.

    [stack@director ~]$ source ~/stackrc
  3. 공통 스택 구성을 위한 새 디렉터리를 생성합니다.

    (undercloud)$ mkdir common
  4. 기본 network_data_subnets_routed.yaml 파일을 common 디렉터리에 복사하여 오버클라우드 스택에 구성 가능한 네트워크를 추가합니다.

    (undercloud)$ cp /usr/share/openstack-tripleo-heat-templates/network_data_subnets_routed.yaml ~/common/network_data_routed_multi_cell.yaml

    구성 가능 네트워크에 대한 자세한 내용은 Advanced Overcloud Customization 가이드의 Custom composable networks 를 참조하십시오.

  5. 네트워크의 /common/network_data_routed_multi_cell.yaml 에서 구성을 업데이트하고 간편한 식별을 위해 셀 서브넷 이름을 업데이트합니다(예: internal_api_leaf1을 internal_ api_cell1 로 변경합니다.
  6. 각 역할의 NIC 템플릿의 인터페이스에 <network_name>InterfaceRoutes 가 포함되어 있는지 확인합니다. 예를 들면 다음과 같습니다.

                -
                   type: vlan
                   vlan_id:
                       get_param: InternalApiNetworkVlanID
                   addresses:
                   -
                     ip_netmask:
                         get_param: InternalApiIpSubnet
                   routes:
                     get_param: InternalApiInterfaceRoutes
  7. 다른 환경 파일을 사용하여 오버클라우드 스택에 network_data_routed_multi_cell.yaml 파일을 추가하고 오버클라우드를 배포합니다.

    (undercloud)$ openstack overcloud deploy --templates \
     --stack overcloud \
     -n /home/stack/common/network_data_routed_multi_cell.yaml \
     -e [your environment files]

3.3. 오버클라우드 스택 컨트롤 플레인에서 매개변수 정보 추출

기본 Overcloud 스택의 default 라는 첫 번째 셀에서 매개 변수 정보를 추출합니다.

절차

  1. stack 사용자로 언더클라우드에 로그인합니다.
  2. stackrc 파일을 소싱합니다.

    [stack@director ~]$ source ~/stackrc
  3. Overcloud 스택의 기본 셀에서 다중 셀 배포를 위한 새로운 공통 환경 파일로 셀 구성 및 암호 정보를 내보냅니다.

    (undercloud)$ sudo --preserve-env openstack overcloud cell export \
     --output-file common/default_cell_export.yaml

    이 명령은 EndpointMap,HostsEntry,AllNodesConfig,GlobalConfig 매개변수 및 암호 정보를 공통 환경 파일로 내보냅니다.

    작은 정보

    환경 파일이 이미 있는 경우 --force-overwrite 또는 -f 옵션을 사용하여 명령을 입력합니다.

3.4. 라우팅된 네트워크의 셀 역할 파일 생성

스택마다 다른 네트워크를 사용하는 경우 사용자 지정 셀 역할을 포함하는 각 셀 스택에 대한 셀 역할 파일을 만듭니다.

참고

각 사용자 지정 역할에 대한 플레이버를 생성해야 합니다. 자세한 내용은 셀 역할에 대한 호스트 지정을 참조하십시오.

절차

  1. 셀 스택에 필요한 다른 역할과 함께 wallController 역할을 포함하는 새 역할 데이터 파일을 생성합니다. 다음 예제에서는 역할 데이터 파일 cell1_roles_data.yaml을 생성합니다. 이 파일에는 컨트롤 컨트롤러 및 계산 역할이 포함됩니다.

    (undercloud)$ openstack overcloud roles generate \
      --roles-path /usr/share/openstack-tripleo-heat-templates/roles \
      -o cell1/cell1_roles_data.yaml \
      Compute:ComputeCell1 \
      CellController:CellControllerCell1
  2. 새 셀 역할 파일의 각 역할 정의에 HostnameFormatDefault 를 추가합니다.

    - name: ComputeCell1
      ...
      HostnameFormatDefault: '%stackname%-compute-cell1-%index%'
      ServicesDefault:
      ...
      networks:
      ...
    - name: CellControllerCell1
      ...
      HostnameFormatDefault: '%stackname%-cellcontrol-cell1-%index%'
      ServicesDefault:
      ...
      networks:
      ...
  3. 아직 없는 경우 Networking 서비스(neutron) DHCP 및 메타데이터 에이전트를 Compute Cell1 및œControllerCell1 역할에 추가합니다.

    - name: ComputeCell1
      ...
      HostnameFormatDefault: '%stackname%-compute-cell1-%index%'
      ServicesDefault:
      - OS::TripleO::Services::NeutronDhcpAgent
      - OS::TripleO::Services::NeutronMetadataAgent
      ...
      networks:
      ...
    - name: CellControllerCell1
      ...
      HostnameFormatDefault: '%stackname%-cellcontrol-cell1-%index%'
      ServicesDefault:
      - OS::TripleO::Services::NeutronDhcpAgent
      - OS::TripleO::Services::NeutronMetadataAgent
      ...
      networks:
      ...
  4. network_data_routed_multi_cell.yaml 에서 구성한 서브넷을 ComputeCell1 및œ ControllerCell1 역할에 추가합니다.

    - name: ComputeCell1
      ...
      networks:
        InternalApi:
          subnet: internal_api_subnet_cell1
        Tenant:
          subnet: tenant_subnet_cell1
        Storage:
          subnet: storage_subnet_cell1
    ...
    - name: CellControllerCell1
      ...
      networks:
        External:
          subnet: external_subnet
        InternalApi:
          subnet: internal_api_subnet_cell1
        Storage:
          subnet: storage_subnet_cell1
        StorageMgmt:
          subnet: storage_mgmt_subnet_cell1
        Tenant:
          subnet: tenant_subnet_cell1

3.5. 셀 역할에 대한 호스트 지정

셀 역할의 베어 메탈 노드를 지정하려면 셀 역할의 노드에 태그를 지정하는 데 사용할 플레이버 및 리소스 클래스를 구성해야 합니다. 다음 절차를 수행하여 cellcontrollercell1 역할에 대한 플레이버 및 베어 메탈 리소스 클래스를 생성합니다. 셀 컨트롤러 이름을 사용자 지정 역할 이름으로 대체하여 각 사용자 지정 역할에 대해 이 절차를 반복합니다.

절차

  1. cell1 컨트롤러 노드에 대한 cellcontrollercell1 Overcloud 플레이버를 생성합니다.

    (undercloud)$ openstack flavor create --id auto \
     --ram <ram_size_mb> --disk <disk_size_gb> \
     --vcpus <no_vcpus> cellcontrollercell1
    • <ram_size_mb> 를 베어 메탈 노드의 RAM(MB)으로 바꿉니다.
    • <disk_size_gb> 를 베어 메탈 노드의 디스크 크기(GB)로 바꿉니다.
    • <no_vcpus> 를 베어 메탈 노드의 CPU 수로 바꿉니다.

      참고

      이러한 속성은 인스턴스를 예약하는 데 사용되지 않습니다. 그러나 계산 스케줄러는 디스크 크기를 사용하여 루트 파티션 크기를 결정합니다.

  2. 노드 목록을 검색하여 UUID를 확인합니다.

    (undercloud)$ openstack baremetal node list
  3. 사용자 지정 셀 컨트롤러 리소스 클래스를 사용하여 셀 컨트롤러로 지정할 각 베어 메탈 노드에 태그를 지정합니다.

    (undercloud)$ openstack baremetal node set \
     --resource-class baremetal.CELL-CONTROLLER <node>

    <node> 를 베어 메탈 노드의 ID로 바꿉니다.

  4. cellcontrollercell1 플레이버를 사용자 지정 셀 컨트롤러 리소스 클래스와 연결합니다.

    (undercloud)$ openstack flavor set \
     --property resources:CUSTOM_BAREMETAL_CELL_CONTROLLER=1 \
      cellcontrollercell1

    베어 메탈 서비스 노드의 리소스 클래스에 해당하는 사용자 지정 리소스 클래스의 이름을 확인하려면 리소스 클래스를 대문자로 변환하려면 각 문장 부호 표시를 밑줄로 바꾸고 접두사는 CUSTOM_ 로 바꿉니다.

    참고

    플레이버는 베어 메탈 리소스 클래스의 인스턴스 하나만 요청할 수 있습니다.

  5. Compute 스케줄러가 베어 메탈 플레이버 속성을 사용하여 인스턴스를 예약하지 못하도록 다음 플레이버 속성을 설정합니다.

    (undercloud)$ openstack flavor set \
     --property resources:VCPU=0 --property resources:MEMORY_MB=0 \
     --property resources:DISK_GB=0 cellcontrollercell1

3.6. 라우팅된 네트워크를 사용하여 각 셀 스택 구성 및 배포

다음 절차를 수행하여 하나의 셀 스택인 cell1을 구성합니다. 모든 셀 스택을 배포할 때까지 배포할 추가 셀 스택에 대해 절차를 반복합니다.

절차

  1. 셀별 매개 변수(예: /home/stack/cell1/cell1.yaml )의 셀 디렉터리에 추가 셀에 대한 새 환경 파일을 만듭니다.
  2. 환경 파일에 다음 매개변수를 추가합니다.

    resource_registry:
      OS::TripleO::CellControllerCell1::Net::SoftwareConfig: /home/stack/templates/nic-configs/cellcontroller.yaml
      OS::TripleO::ComputeCell1::Net::SoftwareConfig: /home/stack/templates/nic-configs/compute.yaml
      OS::TripleO::Network::Ports::OVNDBsVipPort: /usr/share/openstack-tripleo-heat-templates/network/ports/noop.yaml
      OS::TripleO::Network::Ports::RedisVipPort: /usr/share/openstack-tripleo-heat-templates/network/ports/noop.yaml
    
    parameter_defaults:
      #Disable network creation in order to use the `network_data.yaml` file from the overcloud stack,
      # and create ports for the nodes in the separate stacks on the existing networks.
      ManageNetworks: false
    
      # Specify that this is an additional cell
      NovaAdditionalCell: True
    
      # The DNS names for the VIPs for the cell
      CloudName: cell1.ooo.test
      CloudNameInternal: cell1.internalapi.ooo.test
      CloudNameStorage: cell1.storage.ooo.test
      CloudNameStorageManagement: cell1.storagemgmt.ooo.test
      CloudNameCtlplane: cell1.ctlplane.ooo.test
    
      # Map the flavors to use for the CellController and Compute roles
      OvercloudCellControllerCell1Flavor: cellcontrollercell1
      OvercloudComputeCell1Flavor: computecell1
    
      # Number of controllers/computes in the cell
      CellControllerCell1Count: 3
      ComputeCell1Count: 1
  3. 글로벌 컨트롤러 대신 각 셀에서 Compute 메타데이터 API를 실행하려면 셀 환경 파일에 다음 매개변수를 추가합니다.

    parameter_defaults:
      NovaLocalMetadataPerCell: True
  4. 셀의 가상 IP 주소(VIP) 정보를 셀 환경 파일에 추가합니다.

    parameter_defaults:
      ...
      VipSubnetMap:
        InternalApi: internal_api_cell1
        Storage: storage_cell1
        StorageMgmt: storage_mgmt_cell1
        External: external_subnet

    그러면 셀 컨트롤러 노드가 연결된 L2 네트워크 세그먼트와 연결된 서브넷에 가상 IP 주소가 생성됩니다.

  5. 다른 환경 파일을 사용하여 스택에 환경 파일을 추가하고 셀 스택을 배포합니다.

    (undercloud)$ openstack overcloud deploy --templates \
     --stack cell1 \
     -e [your environment files] \
     -r /home/stack/cell1/cell1_roles_data.yaml \
     -n /home/stack/common/network_data_spine_leaf.yaml \
     -e /home/stack/common/default_cell_export.yaml \
     -e /home/stack/cell1/cell1.yaml

3.7. 배포 후 새 셀 서브넷 추가

다중 셀 환경을 배포한 후 오버클라우드 스택에 새 셀 서브넷을 추가하려면 'UPDATE' 를 포함하도록 NetworkDeploymentActions 값을 업데이트해야 합니다.

절차

  1. 오버클라우드 스택의 환경 파일에 다음 구성을 추가하여 새 셀 서브넷으로 네트워크 구성을 업데이트합니다.

    parameter_defaults:
      NetworkDeploymentActions: ['CREATE','UPDATE']
  2. 새 셀 서브넷의 구성을 /common/network_data_routed_multi_cell.yaml 에 추가합니다.
  3. 오버클라우드 스택을 배포합니다.

    (undercloud)$ openstack overcloud deploy --templates \
     --stack overcloud \
     -n /home/stack/common/network_data_routed_multi_cell.yaml \
     -e [your environment files]
  4. 선택 사항: 다음 배포의 기본값으로 NetworkDeploymentActions 를 재설정합니다.

    parameter_defaults:
      NetworkDeploymentActions: ['CREATE']

3.8. 다음 단계

4장. Compute 서비스 내에서 셀 생성 및 관리

셀 스택을 사용하여 오버클라우드를 배포한 후 Compute 서비스 내에서 셀을 생성해야 합니다. 계산 서비스 내에서 셀을 생성하려면 글로벌 API 데이터베이스의 셀 및 메시지 대기열 매핑 항목을 생성합니다. 그런 다음 컨트롤러 노드 중 하나에서 셀 호스트 검색을 실행하여 Compute 노드를 셀에 추가할 수 있습니다.

셀을 생성하려면 다음 작업을 수행해야 합니다.

  1. nova-manage 유틸리티를 사용하여 글로벌 API 데이터베이스에 셀 및 메시지 대기열 매핑 레코드를 생성합니다.
  2. 각 셀에 컴퓨팅 노드를 추가합니다.
  3. 각 셀의 가용 영역을 생성합니다.
  4. 각 셀의 모든 계산 노드를 셀의 가용성 영역에 추가합니다.

4.1. 사전 요구 사항

  • 여러 셀을 사용하여 오버클라우드를 구성하고 배포했습니다.

4.2. Compute 서비스 내에서 셀 생성

새 셀 스택을 사용하여 오버클라우드를 배포한 후 Compute 서비스 내에서 셀을 생성해야 합니다. 계산 서비스 내에서 셀을 생성하려면 글로벌 API 데이터베이스의 셀 및 메시지 대기열 매핑 항목을 생성합니다.

참고

만들고 실행하는 각 셀에 대해 이 프로세스를 반복해야 합니다. Ansible 플레이북의 단계를 자동화할 수 있습니다. Ansible 플레이북의 예는 OpenStack 커뮤니티 문서 의 셀 및 검색 계산 노드 만들기 섹션을 참조하십시오. 커뮤니티 문서는 현 상태이며 공식적으로 지원되지 않습니다.

절차

  1. 컨트롤 플레인 및 셀 컨트롤러의 IP 주소를 가져옵니다.

    $ CTRL_IP=$(openstack server list -f value -c Networks --name overcloud-controller-0 | sed 's/ctlplane=//')
    $ CELL_CTRL_IP=$(openstack server list -f value -c Networks --name cell1-cellcontroller-0 | sed 's/ctlplane=//')
  2. 모든 컨트롤러 노드에 셀 정보를 추가합니다. 이 정보는 Undercloud에서 셀 엔드포인트에 연결하는 데 사용됩니다. 다음 예제에서는 접두사 cell1 을 사용하여 셀 시스템만 지정하고 컨트롤러 시스템을 제외합니다.

    (undercloud)$ CELL_INTERNALAPI_INFO=$(ssh heat-admin@${CELL_CTRL_IP} \
     egrep cell1.*\.internalapi /etc/hosts)
    (undercloud)$ ansible -i /usr/bin/tripleo-ansible-inventory \
     Controller -b -m lineinfile -a "dest=/etc/hosts line=\"$CELL_INTERNALAPI_INFO\""
  3. transport_url 매개 변수에서 컨트롤러 셀의 메시지 큐 끝점과 database .connection 매개 변수에서 컨트롤러 셀에 대한 데이터베이스 연결을 가져옵니다.

    (undercloud)$ CELL_TRANSPORT_URL=$(ssh tripleo-admin@${CELL_CTRL_IP} \
     sudo crudini --get /var/lib/config-data/puppet-generated/nova/etc/nova/nova.conf \
     DEFAULT transport_url)
    (undercloud)$ CELL_MYSQL_VIP=$(ssh tripleo-admin@${CELL_CTRL_IP} \
     sudo crudini --get /var/lib/config-data/puppet-generated/nova/etc/nova/nova.conf \
     database connection | awk -F[@/] '{print $4}')
  4. 글로벌 컨트롤러 노드 중 하나에 로그인하여 셀을 생성합니다.

    $ ssh heat-admin@${CTRL_IP} sudo podman \
     exec -i -u root nova_api \
     nova-manage cell_v2 create_cell --name cell1 \
     --database_connection "{scheme}://{username}:{password}@$CELL_MYSQL_VIP/nova?{query}" \
     --transport-url "$CELL_TRANSPORT_URL"
  5. 셀이 생성되고 cell 목록에 표시되는지 확인합니다.

    $ ssh heat-admin@${CTRL_IP} sudo podman \
     exec -i -u root nova_api \
     nova-manage cell_v2 list_cells --verbose
  6. 컨트롤러 노드에서 Compute 서비스를 다시 시작하십시오.

    $ ansible -i /usr/bin/tripleo-ansible-inventory Controller -b -a \
    "systemctl restart tripleo_nova_api tripleo_nova_conductor tripleo_nova_scheduler"
  7. 셀 컨트롤러 서비스가 프로비저닝되었는지 확인합니다.

    (overcloud)$ openstack compute service list -c Binary -c Host -c Status -c State
    +----------------+-------------------------+---------+-------+
    | Binary         | Host                    | Status  | State |
    +----------------+-------------------------+---------+-------+
    | nova-conductor | controller-0.ostest     | enabled | up    |
    | nova-scheduler | controller-0.ostest     | enabled | up    |
    | nova-conductor | cellcontroller-0.ostest | enabled | up    |
    | nova-compute   | compute-0.ostest        | enabled | up    |
    | nova-compute   | compute-1.ostest        | enabled | up    |
    +----------------+-------------------------+---------+-------+

4.3. 셀에 컴퓨팅 노드 추가

컨트롤러 노드 중 하나에서 셀 호스트 검색을 실행하여 계산 노드를 검색하고 node-to-cell 매핑으로 API 데이터베이스를 업데이트합니다.

절차

  1. stack 사용자로 언더클라우드에 로그인합니다.
  2. 셀에 대한 컨트롤 플레인의 IP 주소를 가져오고 host discovery 명령을 입력하여 컴퓨팅 호스트를 셀에 노출하고 할당합니다.

    $ CTRL_IP=$(openstack server list -f value -c Networks --name overcloud-controller-0 | sed 's/ctlplane=//')
    
    $ ssh heat-admin@${CTRL_IP} sudo podman exec -i -u root nova_api \
      nova-manage cell_v2 discover_hosts --by-service --verbose
  3. Compute 호스트가 셀에 할당되었는지 확인합니다.

    $ ssh heat-admin@${CTRL_IP} sudo podman exec -i -u root nova_api \
      nova-manage cell_v2 list_hosts

4.4. 셀 가용성 영역 생성

각 셀에 대해 AZ(가용 영역)를 생성하여 해당 셀의 컴퓨팅 노드에서 생성된 인스턴스가 동일한 셀의 다른 컴퓨팅 노드로만 마이그레이션되도록 해야 합니다. 셀 간 인스턴스 마이그레이션은 지원되지 않습니다.

셀 AZ를 생성한 후 셀의 모든 컴퓨팅 노드를 셀 AZ에 추가해야 합니다. 기본 셀은 Compute 셀과 다른 가용성 영역에 있어야 합니다.

절차

  1. overcloudrc 파일을 소싱합니다.

    (undercloud)$ source ~/overcloudrc
  2. 셀에 대한 AZ를 생성합니다.

    (overcloud)# openstack aggregate create \
     --zone <availability_zone> \
     <aggregate_name>
    • <availability_zone> 을 가용성 영역에 할당할 이름으로 바꿉니다.
    • <aggregate_name> 을 호스트 집계에 할당할 이름으로 바꿉니다.
  3. 선택 사항: 가용성 영역에 메타데이터를 추가합니다.

    (overcloud)# openstack aggregate set --property <key=value> \
      <aggregate_name>
    • <key=value> 를 메타데이터 키-값 쌍으로 바꿉니다. 필요한 만큼 키-값 속성을 추가할 수 있습니다.
    • <aggregate_name> 을 가용성 영역 호스트 집계의 이름으로 바꿉니다.
  4. 셀에 할당된 컴퓨팅 노드 목록을 검색합니다.

    $ ssh heat-admin@${CTRL_IP} sudo podman exec -i -u root nova_api \
      nova-manage cell_v2 list_hosts
  5. 셀에 할당된 컴퓨팅 노드를 셀 가용성 영역에 추가합니다.

    (overcloud)# openstack aggregate add host <aggregate_name> \
      <host_name>
    • <aggregate_name> 을 컴퓨팅 노드를 추가할 가용성 영역 호스트 집계의 이름으로 바꿉니다.
    • <host_name> 을 가용성 영역에 추가할 컴퓨팅 노드 이름으로 바꿉니다.
참고
  • 이 단계에서 셀이 생성되지 않으므로 OS::TripleO::Services::NovaAZConfig 매개변수를 사용하여 AZ를 자동으로 생성할 수 없습니다.
  • 셀 간 인스턴스 마이그레이션은 지원되지 않습니다. 인스턴스를 다른 셀로 이동하려면 이전 셀에서 삭제하고 새 셀에서 다시 생성해야 합니다.

호스트 집계 및 가용성 영역에 대한 자세한 내용은 호스트 집계 생성 및 관리를 참조하십시오.

4.5. 셀에서 컴퓨팅 노드 삭제

셀에서 컴퓨팅 노드를 삭제하려면 셀에서 모든 인스턴스를 삭제하고 배치 데이터베이스에서 호스트 이름을 삭제해야 합니다.

절차

  1. 셀의 컴퓨팅 노드에서 모든 인스턴스를 삭제합니다.

    참고

    셀 간 인스턴스 마이그레이션은 지원되지 않습니다. 인스턴스를 삭제하고 다른 셀에서 다시 생성해야 합니다.

  2. 글로벌 컨트롤러 중 하나에서 셀에서 모든 컴퓨팅 노드를 삭제합니다.

    $ CTRL_IP=$(openstack server list -f value -c Networks --name overcloud-controller-0 | sed 's/ctlplane=//')
    
    $ ssh heat-admin@${CTRL_IP} sudo podman  \
     exec -i -u root nova_api \
     nova-manage cell_v2 list_hosts
    
    $ ssh heat-admin@${CTRL_IP} sudo podman  \
     exec -i -u root nova_api \
     nova-manage cell_v2 delete_host --cell_uuid <uuid> --host <compute>
  3. 배치 서비스에서 셀의 리소스 프로바이더를 삭제하여 나중에 동일한 호스트 이름을 가진 컴퓨팅 노드를 다른 셀에 추가하려는 경우 호스트 이름을 사용할 수 있는지 확인합니다.

    (undercloud)$ source ~/overcloudrc
    
    (overcloud)$ openstack resource provider list
    +--------------------------------------+---------------------------------------+------------+
    | uuid                                 | name                                  | generation |
    +--------------------------------------+---------------------------------------+------------+
    | 9cd04a8b-5e6c-428e-a643-397c9bebcc16 | computecell1-novacompute-0.site1.test |         11 |
    +--------------------------------------+---------------------------------------+------------+
    
    (overcloud)$ openstack resource provider  \
     delete 9cd04a8b-5e6c-428e-a643-397c9bebcc16

4.6. 셀 삭제

셀을 삭제하려면 먼저 셀에서 컴퓨팅 노드 삭제에 설명된 대로 셀에서 모든 인스턴스 및 컴퓨팅 노드를 삭제해야 합니다. 그런 다음 셀 자체와 셀 스택을 삭제합니다.

절차

  1. 글로벌 컨트롤러 중 하나에서 셀을 삭제합니다.

    $ CTRL_IP=$(openstack server list -f value -c Networks --name overcloud-controller-0 | sed 's/ctlplane=//')
    
    $ ssh heat-admin@${CTRL_IP} sudo podman  \
     exec -i -u root nova_api \
     nova-manage cell_v2 list_cells
    
    $ ssh heat-admin@${CTRL_IP} sudo podman  \
     exec -i -u root nova_api \
     nova-manage cell_v2 delete_cell --cell_uuid <uuid>
  2. Overcloud에서 셀 스택을 삭제합니다.

    $ openstack stack delete <stack name> --wait --yes && openstack  \
     overcloud plan delete <stack_name>
    참고

    컨트롤러 및 계산 셀에 별도의 셀 스택을 배포한 경우 먼저 컴퓨팅 셀 스택을 삭제한 다음 컨트롤러 셀 스택을 삭제합니다.

법적 공지

Copyright © 2023 Red Hat, Inc.
The text of and illustrations in this document are licensed by Red Hat under a Creative Commons Attribution–Share Alike 3.0 Unported license ("CC-BY-SA"). An explanation of CC-BY-SA is available at http://creativecommons.org/licenses/by-sa/3.0/. In accordance with CC-BY-SA, if you distribute this document or an adaptation of it, you must provide the URL for the original version.
Red Hat, as the licensor of this document, waives the right to enforce, and agrees not to assert, Section 4d of CC-BY-SA to the fullest extent permitted by applicable law.
Red Hat, Red Hat Enterprise Linux, the Shadowman logo, the Red Hat logo, JBoss, OpenShift, Fedora, the Infinity logo, and RHCE are trademarks of Red Hat, Inc., registered in the United States and other countries.
Linux® is the registered trademark of Linus Torvalds in the United States and other countries.
Java® is a registered trademark of Oracle and/or its affiliates.
XFS® is a trademark of Silicon Graphics International Corp. or its subsidiaries in the United States and/or other countries.
MySQL® is a registered trademark of MySQL AB in the United States, the European Union and other countries.
Node.js® is an official trademark of Joyent. Red Hat is not formally related to or endorsed by the official Joyent Node.js open source or commercial project.
The OpenStack® Word Mark and OpenStack logo are either registered trademarks/service marks or trademarks/service marks of the OpenStack Foundation, in the United States and other countries and are used with the OpenStack Foundation's permission. We are not affiliated with, endorsed or sponsored by the OpenStack Foundation, or the OpenStack community.
All other trademarks are the property of their respective owners.