Compute를 사용하여 배포 스케일링
다중 셀 오버클라우드 생성 및 구성 가이드
OpenStack Documentation Team
rhos-docs@redhat.com
초록
보다 포괄적 수용을 위한 오픈 소스 용어 교체
Red Hat은 코드, 문서, 웹 속성에서 문제가 있는 용어를 교체하기 위해 최선을 다하고 있습니다. 먼저 마스터(master), 슬레이브(slave), 블랙리스트(blacklist), 화이트리스트(whitelist) 등 네 가지 용어를 교체하고 있습니다. 이러한 변경 작업은 작업 범위가 크므로 향후 여러 릴리스에 걸쳐 점차 구현할 예정입니다. 자세한 내용은 CTO Chris Wright의 메시지를 참조하십시오.
Red Hat 문서에 관한 피드백 제공
문서 개선을 위한 의견을 보내 주십시오. Red Hat이 어떻게 이를 개선하는지 알려주십시오.
DDF(직접 문서 피드백) 기능 사용
특정 문장, 단락 또는 코드 블록에 대한 직접 주석은 피드백 추가 DDF 기능을 사용하십시오.
- 다중 페이지 HTML 형식으로 설명서를 봅니다.
- 문서 오른쪽 상단에 Feedback (피드백) 버튼이 표시되는지 확인합니다.
- 주석 처리하려는 텍스트 부분을 강조 표시합니다.
- 피드백 추가를 클릭합니다.
- 주석을 사용하여 Add Feedback (피드백 추가) 필드를 작성합니다.
- 선택 사항: 설명서 팀이 문제에 대한 자세한 내용을 문의할 수 있도록 이메일 주소를 추가하십시오.
- Submit(제출)을 클릭합니다.
1장. 다중 셀 오버클라우드 배포
셀을 사용하여 대규모 배포의 컴퓨팅 노드를 각각 인스턴스 정보가 포함된 메시지 대기열 및 전용 데이터베이스가 있는 그룹으로 나눌 수 있습니다.
기본적으로 director는 모든 컴퓨팅 노드에 대한 단일 셀로 오버클라우드를 설치합니다. 이 셀에는 모든 계산 서비스 및 데이터베이스와 모든 인스턴스 및 인스턴스 메타데이터가 포함됩니다. 대규모 배포의 경우 여러 셀이 있는 오버클라우드를 배포하여 더 많은 수의 컴퓨팅 노드를 수용할 수 있습니다. 새 오버클라우드를 설치할 때 또는 나중에 언제든지 셀을 환경에 추가할 수 있습니다.
다중 셀 배포에서 각 셀은 셀별 계산 서비스 및 데이터베이스의 독립 실행형 복사본을 실행하고 해당 셀의 인스턴스에 대해서만 인스턴스 메타데이터를 저장합니다. 글로벌 정보 및 셀 매핑은 글로벌 컨트롤러 셀에 저장되어 셀 중 하나가 실패하는 경우 보안 및 복구 기능을 제공합니다.
기존 오버클라우드에 셀을 추가하면 기본 셀의 컨덕터도 수퍼 컨덕터의 역할을 수행합니다. 이는 배포의 셀과 컨덕터(conductor) 통신과 오버클라우드의 성능에 부정적인 영향을 미칩니다. 또한 기본 셀을 오프라인으로 사용하는 경우 슈퍼 컨덕터를 오프라인으로 가져가 전체 오버클라우드 배포를 중지합니다. 따라서 기존 오버클라우드를 확장하려면 기본 셀에 컴퓨팅 노드를 추가하지 마십시오. 대신 생성한 새 셀에 Compute 노드를 추가하여 기본 셀이 수퍼 컨덕터 역할을 할 수 있도록 합니다.
다중 셀 오버클라우드를 생성하려면 다음 작업을 수행해야 합니다.
- 여러 셀을 처리하도록 오버클라우드를 구성하고 배포합니다.
- 배포 내에서 필요한 새 셀을 생성하고 프로비저닝합니다.
- 각 셀에 컴퓨팅 노드를 추가합니다.
- 각 계산 셀을 가용성 영역에 추가합니다.
1.1. 사전 요구 사항
- 필요한 수의 컨트롤러 노드가 있는 기본 오버클라우드를 배포했습니다.
1.2. 글로벌 구성 요소 및 서비스
다음 구성 요소는 계산 셀 수에 관계없이 각 Overcloud에 대해 한 번 컨트롤러 셀에 배포됩니다.
- 컴퓨팅 API
- 사용자에게 외부 REST API를 제공합니다.
- 컴퓨팅 스케줄러
- 인스턴스를 할당할 컴퓨팅 노드를 결정합니다.
- 배치 서비스
- 계산 리소스를 모니터링하고 인스턴스에 할당합니다.
- API 데이터베이스
계산 API 및 계산 스케줄러 서비스에서 인스턴스에 대한 위치 정보를 추적하고 빌드되지만 예약되지 않은 인스턴스에 임시 위치를 제공합니다.
다중 셀 배포에서 이 데이터베이스에는 각 셀의 데이터베이스 연결을 지정하는 셀 매핑도 포함되어 있습니다.
cell0
데이터베이스- 예약에 실패한 인스턴스에 대한 정보 전용 데이터베이스.
- 슈퍼 컨덕터
-
이 서비스는 글로벌 서비스와 각 계산 셀 간의 조정을 위한 다중 셀 배포에만 있습니다. 또한 이 서비스는 실패한 인스턴스 정보를
cell0
데이터베이스에 전송합니다.
1.3. 셀 특정 구성 요소 및 서비스
다음 구성 요소는 각 계산 셀에 배포됩니다.
- 셀 데이터베이스
- 인스턴스에 대한 대부분의 정보를 포함합니다. 글로벌 API, 컨덕터 및 계산 서비스에서 사용합니다.
- 컨덕터(conductor)
- 글로벌 서비스에서 데이터베이스 쿼리 및 장기 실행 작업을 조정하고 Compute 노드를 직접 데이터베이스 액세스로부터 보호합니다.
- 메세지 큐
- 셀 및 글로벌 서비스와 통신하기 위해 모든 서비스에서 사용하는 메시징 서비스.
1.4. 셀 배포 아키텍처
director가 설치하는 기본 오버클라우드에는 모든 컴퓨팅 노드에 대한 단일 셀이 있습니다. 다음 아키텍처 다이어그램에 설명된 대로 더 많은 셀을 추가하여 오버클라우드를 확장할 수 있습니다.
단일 셀 배포 아키텍처
다음 다이어그램에서는 기본 단일 셀 Overcloud에서 기본 구조 및 상호 작용의 예를 보여줍니다.
이 배포에서는 모든 서비스가 단일 컨덕터를 사용하여 계산 API와 계산 노드 간에 통신하고 단일 데이터베이스는 모든 실시간 인스턴스 데이터를 저장하도록 구성됩니다.
소규모 배포에서는 이 구성만으로도 충분할 수 있지만 글로벌 API 서비스 또는 데이터베이스가 실패하면 고가용성 구성에 관계없이 전체 계산 배포에서 정보를 보내거나 받을 수 없습니다.
다중 셀 배포 아키텍처
다음 다이어그램에서는 사용자 지정 다중 셀 Overcloud의 기본 구조 및 상호 작용의 예를 보여줍니다.
이 배포에서 계산 노드는 각각 자체 컨덕터, 데이터베이스 및 메시지 큐가 있는 여러 셀로 나뉩니다. 글로벌 서비스는 슈퍼 컨덕터를 사용하여 각 셀과 통신하며, 글로벌 데이터베이스에는 전체 오버클라우드에 필요한 정보만 포함되어 있습니다.
셀 수준 서비스는 글로벌 서비스에 직접 액세스할 수 없습니다. 이러한 격리는 셀 장애 발생 시 추가적인 보안 및 안전하지 않은 기능을 제공합니다.
첫 번째 셀에서 "기본값"이라는 계산 서비스를 실행하지 마십시오. 대신 컴퓨팅 노드를 개별적으로 포함하는 각각의 새 셀을 배포합니다.
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) 배포를 구성하려면 다음 작업을 수행해야 합니다.
- 오버클라우드 스택의 컨트롤 플레인에서 매개 변수 정보를 추출합니다.
-
셀 역할 파일을 생성합니다. 셀의 컴퓨팅 노드에 대한 기본
Compute
역할과 셀 컨트롤러 노드에 대해 전용eachController
역할을 사용할 수 있습니다. 또한 다중 셀 환경에서 사용할 사용자 지정 역할(예: 각 셀 스택의 사용자 지정 역할)을 만들 수 있습니다. 사용자 지정 역할 생성에 대한 자세한 내용은 Composable services and custom roles 를 참조하십시오. œ
Controller 역할에 대한 셀
컨트롤러 플레이버를 구성합니다.참고다중 셀 환경에 대한 사용자 지정 역할을 만든 경우 사용자 지정 역할에 대한 플레이버도 구성해야 합니다.
- 각 셀을 구성합니다.
- 각 셀 스택을 배포합니다.
2.1. 오버클라우드 스택 컨트롤 플레인에서 매개변수 정보 추출
기본 Overcloud 스택의 default
라는 첫 번째 셀에서 매개 변수 정보를 추출합니다.
절차
-
stack
사용자로 언더클라우드에 로그인합니다. stackrc
파일을 소싱합니다.[stack@director ~]$ source ~/stackrc
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
역할에 대한 플레이버 및 베어 메탈 리소스 클래스를 생성합니다.
여러 셀 환경에 대한 사용자 지정 역할을 생성한 경우 다음 절차에 따라 사용자 지정 역할의 이름으로 셀 컨트롤러 이름을 대체하여 사용자 지정 역할에 대한 플레이버 및 리소스 클래스를 구성할 수 있습니다.
절차
셀 컨트롤러 노드의
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 수로 바꿉니다.참고이러한 속성은 인스턴스를 예약하는 데 사용되지 않습니다. 그러나 계산 스케줄러는 디스크 크기를 사용하여 루트 파티션 크기를 결정합니다.
-
노드 목록을 검색하여 UUID를 확인합니다.
(undercloud)$ openstack baremetal node list
사용자 지정 셀 컨트롤러 리소스 클래스를 사용하여 셀 컨트롤러로 지정할 각 베어 메탈 노드에 태그를 지정합니다.
(undercloud)$ openstack baremetal node set \ --resource-class baremetal.CELL-CONTROLLER <node>
<node>
를 베어 메탈 노드의 ID로 바꿉니다.cellcontroller
플레이버를 사용자 지정 셀 컨트롤러 리소스 클래스와 연결합니다.(undercloud)$ openstack flavor set \ --property resources:CUSTOM_BAREMETAL_CELL_CONTROLLER=1 \ cellcontroller
베어 메탈 서비스 노드의 리소스 클래스에 해당하는 사용자 지정 리소스 클래스의 이름을 확인하려면 리소스 클래스를 대문자로 변환하려면 각 문장 부호 표시를 밑줄로 바꾸고 접두사는
CUSTOM_
로 바꿉니다.참고플레이버는 베어 메탈 리소스 클래스의 인스턴스 하나만 요청할 수 있습니다.
Compute 스케줄러가 베어 메탈 플레이버 속성을 사용하여 인스턴스를 예약하지 못하도록 다음 플레이버 속성을 설정합니다.
(undercloud)$ openstack flavor set \ --property resources:VCPU=0 --property resources:MEMORY_MB=0 \ --property resources:DISK_GB=0 cellcontroller
2.4. 동일한 네트워크를 사용하여 각 셀 스택 구성 및 배포
Overcloud 스택의 네트워크를 사용하도록 각 셀 스택을 구성하고 배포에서 셀을 추가 셀로 식별해야 합니다. 또한 노드 플레이버와 셀의 컨트롤러 및 컴퓨팅 노드 수를 구성해야 합니다.
절차
새 셀의 새 디렉토리를 생성합니다.
(undercloud)$ mkdir cells
-
셀 특정 매개 변수(예:
/cells/cell1.yaml
)에 대해
셀 디렉터리 셀의 추가 셀 각각에 대한 새 환경 파일을 만듭니다. 각 환경 파일에 다음 매개변수를 추가하여 배포의 각 셀의 매개변수 값을 업데이트합니다.
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%'
셀에 네트워크 리소스를 할당하고 셀을 네트워크에 등록하려면 각 환경 파일에 다음 매개 변수를 추가합니다.
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
다른 환경 파일을 사용하여 스택에 환경 파일을 추가하고 셀 스택을 배포합니다.
(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) 배포를 구성하려면 다음 작업을 수행해야 합니다.
- 오버클라우드 스택에서 셀 네트워크 라우팅을 위한 컨트롤 플레인을 준비합니다.
- 오버클라우드 스택의 컨트롤 플레인에서 매개 변수 정보를 추출합니다.
- 셀 스택에서 셀 네트워크 라우팅을 구성합니다.
-
각 스택의 셀 역할 파일을 생성합니다. 기본
Compute
역할을 셀에 있는 컴퓨팅 노드의 기본으로 사용할 수 있으며, 셀 컨트롤러 노드의 기본으로 전용 pvcController
역할을 사용할 수 있습니다. 다중 셀 환경에서 사용할 사용자 지정 역할을 만들 수도 있습니다. 사용자 지정 역할 생성에 대한 자세한 내용은 Composable services and custom roles 를 참조하십시오. 생성한 각 사용자 지정 역할에 대한 플레이버를 구성합니다.
참고이 절차는 단일 컨트롤 플레인 네트워크가 있는 환경을 위한 절차입니다. 환경에 스파인 리프팅 네트워크 환경과 같은 여러 컨트롤 플레인 네트워크가 있는 경우 각 리플 네트워크에서 각 역할에 대한 플레이버를 생성하여 노드를 각 스트로크에 태그할 수 있습니다. 자세한 내용은 PVC 네트워크에 대한 플레이버 및 태그 지정 노드 생성을 참조하십시오.
- 각 셀을 구성합니다.
- 각 셀 스택을 배포합니다.
3.1. 사전 요구 사항
- 라우팅된 네트워크에 대해 언더클라우드를 구성했습니다. 자세한 내용은 언더클라우드에서 라우팅된 스파인-리프형 구성을 참조하십시오.
3.2. 셀 네트워크 라우팅을 위한 컨트롤 플레인 및 기본 셀 준비
셀과 통신하려면 오버클라우드 스택에서 경로를 구성해야 합니다. 이를 위해 기본 스택의 모든 네트워크와 서브넷을 정의하는 네트워크 데이터 파일을 만들고 이 파일을 사용하여 Overcloud 스택과 셀 스택을 모두 배포합니다.
절차
-
stack
사용자로 언더클라우드에 로그인합니다. stackrc
파일을 소싱합니다.[stack@director ~]$ source ~/stackrc
공통 스택 구성을 위한 새 디렉터리를 생성합니다.
(undercloud)$ mkdir common
기본
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 를 참조하십시오.
-
네트워크의
/common/network_data_routed_multi_cell.yaml
에서 구성을 업데이트하고 간편한 식별을 위해 셀 서브넷 이름을 업데이트합니다(예:internal_api_leaf1을
로 변경합니다.internal_
api_cell1 각 역할의 NIC 템플릿의 인터페이스에
<network_name>InterfaceRoutes
가 포함되어 있는지 확인합니다. 예를 들면 다음과 같습니다.- type: vlan vlan_id: get_param: InternalApiNetworkVlanID addresses: - ip_netmask: get_param: InternalApiIpSubnet routes: get_param: InternalApiInterfaceRoutes
다른 환경 파일을 사용하여 오버클라우드 스택에
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
라는 첫 번째 셀에서 매개 변수 정보를 추출합니다.
절차
-
stack
사용자로 언더클라우드에 로그인합니다. stackrc
파일을 소싱합니다.[stack@director ~]$ source ~/stackrc
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. 라우팅된 네트워크의 셀 역할 파일 생성
스택마다 다른 네트워크를 사용하는 경우 사용자 지정 셀 역할을 포함하는 각 셀 스택에 대한 셀 역할 파일을 만듭니다.
각 사용자 지정 역할에 대한 플레이버를 생성해야 합니다. 자세한 내용은 셀 역할에 대한 호스트 지정을 참조하십시오.
절차
셀 스택에 필요한 다른 역할과 함께 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
새 셀 역할 파일의 각 역할 정의에
HostnameFormatDefault
를 추가합니다.- name: ComputeCell1 ... HostnameFormatDefault: '%stackname%-compute-cell1-%index%' ServicesDefault: ... networks: ... - name: CellControllerCell1 ... HostnameFormatDefault: '%stackname%-cellcontrol-cell1-%index%' ServicesDefault: ... networks: ...
아직 없는 경우 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: ...
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
역할에 대한 플레이버 및 베어 메탈 리소스 클래스를 생성합니다. 셀 컨트롤러 이름을 사용자 지정 역할 이름으로 대체하여 각 사용자 지정 역할에 대해 이 절차를 반복합니다.
절차
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 수로 바꿉니다.참고이러한 속성은 인스턴스를 예약하는 데 사용되지 않습니다. 그러나 계산 스케줄러는 디스크 크기를 사용하여 루트 파티션 크기를 결정합니다.
-
노드 목록을 검색하여 UUID를 확인합니다.
(undercloud)$ openstack baremetal node list
사용자 지정 셀 컨트롤러 리소스 클래스를 사용하여 셀 컨트롤러로 지정할 각 베어 메탈 노드에 태그를 지정합니다.
(undercloud)$ openstack baremetal node set \ --resource-class baremetal.CELL-CONTROLLER <node>
<node>
를 베어 메탈 노드의 ID로 바꿉니다.cellcontrollercell1
플레이버를 사용자 지정 셀 컨트롤러 리소스 클래스와 연결합니다.(undercloud)$ openstack flavor set \ --property resources:CUSTOM_BAREMETAL_CELL_CONTROLLER=1 \ cellcontrollercell1
베어 메탈 서비스 노드의 리소스 클래스에 해당하는 사용자 지정 리소스 클래스의 이름을 확인하려면 리소스 클래스를 대문자로 변환하려면 각 문장 부호 표시를 밑줄로 바꾸고 접두사는
CUSTOM_
로 바꿉니다.참고플레이버는 베어 메탈 리소스 클래스의 인스턴스 하나만 요청할 수 있습니다.
Compute 스케줄러가 베어 메탈 플레이버 속성을 사용하여 인스턴스를 예약하지 못하도록 다음 플레이버 속성을 설정합니다.
(undercloud)$ openstack flavor set \ --property resources:VCPU=0 --property resources:MEMORY_MB=0 \ --property resources:DISK_GB=0 cellcontrollercell1
3.6. 라우팅된 네트워크를 사용하여 각 셀 스택 구성 및 배포
다음 절차를 수행하여 하나의 셀 스택인 cell1을
구성합니다. 모든 셀 스택을 배포할 때까지 배포할 추가 셀 스택에 대해 절차를 반복합니다.
절차
-
셀별 매개 변수(예:
/home/stack/cell1/cell1.yaml
)의 셀 디렉터리에 추가 셀에 대한 새 환경 파일을 만듭니다. 환경 파일에 다음 매개변수를 추가합니다.
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
글로벌 컨트롤러 대신 각 셀에서 Compute 메타데이터 API를 실행하려면 셀 환경 파일에 다음 매개변수를 추가합니다.
parameter_defaults: NovaLocalMetadataPerCell: True
셀의 가상 IP 주소(VIP) 정보를 셀 환경 파일에 추가합니다.
parameter_defaults: ... VipSubnetMap: InternalApi: internal_api_cell1 Storage: storage_cell1 StorageMgmt: storage_mgmt_cell1 External: external_subnet
그러면 셀 컨트롤러 노드가 연결된 L2 네트워크 세그먼트와 연결된 서브넷에 가상 IP 주소가 생성됩니다.
다른 환경 파일을 사용하여 스택에 환경 파일을 추가하고 셀 스택을 배포합니다.
(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
값을 업데이트해야 합니다.
절차
오버클라우드 스택의 환경 파일에 다음 구성을 추가하여 새 셀 서브넷으로 네트워크 구성을 업데이트합니다.
parameter_defaults: NetworkDeploymentActions: ['CREATE','UPDATE']
-
새 셀 서브넷의 구성을
/common/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]
선택 사항: 다음 배포의 기본값으로
NetworkDeploymentActions
를 재설정합니다.parameter_defaults: NetworkDeploymentActions: ['CREATE']
3.8. 다음 단계
4장. Compute 서비스 내에서 셀 생성 및 관리
셀 스택을 사용하여 오버클라우드를 배포한 후 Compute 서비스 내에서 셀을 생성해야 합니다. 계산 서비스 내에서 셀을 생성하려면 글로벌 API 데이터베이스의 셀 및 메시지 대기열 매핑 항목을 생성합니다. 그런 다음 컨트롤러 노드 중 하나에서 셀 호스트 검색을 실행하여 Compute 노드를 셀에 추가할 수 있습니다.
셀을 생성하려면 다음 작업을 수행해야 합니다.
-
nova-manage
유틸리티를 사용하여 글로벌 API 데이터베이스에 셀 및 메시지 대기열 매핑 레코드를 생성합니다. - 각 셀에 컴퓨팅 노드를 추가합니다.
- 각 셀의 가용 영역을 생성합니다.
- 각 셀의 모든 계산 노드를 셀의 가용성 영역에 추가합니다.
4.1. 사전 요구 사항
- 여러 셀을 사용하여 오버클라우드를 구성하고 배포했습니다.
4.2. Compute 서비스 내에서 셀 생성
새 셀 스택을 사용하여 오버클라우드를 배포한 후 Compute 서비스 내에서 셀을 생성해야 합니다. 계산 서비스 내에서 셀을 생성하려면 글로벌 API 데이터베이스의 셀 및 메시지 대기열 매핑 항목을 생성합니다.
만들고 실행하는 각 셀에 대해 이 프로세스를 반복해야 합니다. Ansible 플레이북의 단계를 자동화할 수 있습니다. Ansible 플레이북의 예는 OpenStack 커뮤니티 문서 의 셀 및 검색 계산 노드 만들기 섹션을 참조하십시오. 커뮤니티 문서는 현 상태이며 공식적으로 지원되지 않습니다.
절차
컨트롤 플레인 및 셀 컨트롤러의 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=//')
모든 컨트롤러 노드에 셀 정보를 추가합니다. 이 정보는 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\""
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}')
글로벌 컨트롤러 노드 중 하나에 로그인하여 셀을 생성합니다.
$ 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"
셀이 생성되고 cell 목록에 표시되는지 확인합니다.
$ ssh heat-admin@${CTRL_IP} sudo podman \ exec -i -u root nova_api \ nova-manage cell_v2 list_cells --verbose
컨트롤러 노드에서 Compute 서비스를 다시 시작하십시오.
$ ansible -i /usr/bin/tripleo-ansible-inventory Controller -b -a \ "systemctl restart tripleo_nova_api tripleo_nova_conductor tripleo_nova_scheduler"
셀 컨트롤러 서비스가 프로비저닝되었는지 확인합니다.
(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 데이터베이스를 업데이트합니다.
절차
-
stack
사용자로 언더클라우드에 로그인합니다. 셀에 대한 컨트롤 플레인의 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
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 셀과 다른 가용성 영역에 있어야 합니다.
절차
overcloudrc
파일을 소싱합니다.(undercloud)$ source ~/overcloudrc
셀에 대한 AZ를 생성합니다.
(overcloud)# openstack aggregate create \ --zone <availability_zone> \ <aggregate_name>
-
<availability_zone>
을 가용성 영역에 할당할 이름으로 바꿉니다. -
<aggregate_name>
을 호스트 집계에 할당할 이름으로 바꿉니다.
-
선택 사항: 가용성 영역에 메타데이터를 추가합니다.
(overcloud)# openstack aggregate set --property <key=value> \ <aggregate_name>
-
<key=value>
를 메타데이터 키-값 쌍으로 바꿉니다. 필요한 만큼 키-값 속성을 추가할 수 있습니다. -
<aggregate_name>
을 가용성 영역 호스트 집계의 이름으로 바꿉니다.
-
셀에 할당된 컴퓨팅 노드 목록을 검색합니다.
$ ssh heat-admin@${CTRL_IP} sudo podman exec -i -u root nova_api \ nova-manage cell_v2 list_hosts
셀에 할당된 컴퓨팅 노드를 셀 가용성 영역에 추가합니다.
(overcloud)# openstack aggregate add host <aggregate_name> \ <host_name>
-
<aggregate_name>
을 컴퓨팅 노드를 추가할 가용성 영역 호스트 집계의 이름으로 바꿉니다. -
<host_name>
을 가용성 영역에 추가할 컴퓨팅 노드 이름으로 바꿉니다.
-
-
이 단계에서 셀이 생성되지 않으므로
OS::TripleO::Services::NovaAZConfig
매개변수를 사용하여 AZ를 자동으로 생성할 수 없습니다. - 셀 간 인스턴스 마이그레이션은 지원되지 않습니다. 인스턴스를 다른 셀로 이동하려면 이전 셀에서 삭제하고 새 셀에서 다시 생성해야 합니다.
호스트 집계 및 가용성 영역에 대한 자세한 내용은 호스트 집계 생성 및 관리를 참조하십시오.
4.5. 셀에서 컴퓨팅 노드 삭제
셀에서 컴퓨팅 노드를 삭제하려면 셀에서 모든 인스턴스를 삭제하고 배치 데이터베이스에서 호스트 이름을 삭제해야 합니다.
절차
셀의 컴퓨팅 노드에서 모든 인스턴스를 삭제합니다.
참고셀 간 인스턴스 마이그레이션은 지원되지 않습니다. 인스턴스를 삭제하고 다른 셀에서 다시 생성해야 합니다.
글로벌 컨트롤러 중 하나에서 셀에서 모든 컴퓨팅 노드를 삭제합니다.
$ 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>
배치 서비스에서 셀의 리소스 프로바이더를 삭제하여 나중에 동일한 호스트 이름을 가진 컴퓨팅 노드를 다른 셀에 추가하려는 경우 호스트 이름을 사용할 수 있는지 확인합니다.
(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. 셀 삭제
셀을 삭제하려면 먼저 셀에서 컴퓨팅 노드 삭제에 설명된 대로 셀에서 모든 인스턴스 및 컴퓨팅 노드를 삭제해야 합니다. 그런 다음 셀 자체와 셀 스택을 삭제합니다.
절차
글로벌 컨트롤러 중 하나에서 셀을 삭제합니다.
$ 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>
Overcloud에서 셀 스택을 삭제합니다.
$ openstack stack delete <stack name> --wait --yes && openstack \ overcloud plan delete <stack_name>
참고컨트롤러 및 계산 셀에 별도의 셀 스택을 배포한 경우 먼저 컴퓨팅 셀 스택을 삭제한 다음 컨트롤러 셀 스택을 삭제합니다.