DCN(Distributed Compute Node) 아키텍처 배포
Openshift에서 Red Hat OpenStack Services의 엣지 및 스토리지 구성
초록
Red Hat 문서에 관한 피드백 제공 링크 복사링크가 클립보드에 복사되었습니다!
문서 개선을 위한 의견을 보내 주십시오. Red Hat이 어떻게 더 나은지 알려주십시오.
Create Issue 양식을 사용하여 OpenShift (RHOSO) 또는 이전 Red Hat OpenStack Platform (RHOSP)의 Red Hat OpenStack Services 문서에 대한 피드백을 제공합니다. RHOSO 또는 RHOSP 문서에 대한 문제를 생성할 때 RHOSO Jira 프로젝트에 문제가 기록되어 피드백의 진행 상황을 추적할 수 있습니다.
문제 생성 양식을 완료하려면 Jira에 로그인해야 합니다. Red Hat Jira 계정이 없는 경우 https://issues.redhat.com 에서 계정을 생성할 수 있습니다.
- 다음 링크를 클릭하여 문제 생성 페이지를 엽니다. https://issues.redhat.com/secure/CreateIssueDetails!init.jspa?pid=12336920&summary=Documentation%20feedback:%20%3CAdd%20summary%20here%3E&issuetype=1&description=<Include+the+documentation+URL,+the%20chapter+or+section+number,+and+a+detailed+description+of+the+issue.>&components=12391143&priority=10300
- 요약 및 설명 필드를 작성합니다. 설명 필드에 문서 URL, 장 또는 섹션 번호, 문제에 대한 자세한 설명을 포함합니다. 양식의 다른 필드를 수정하지 마십시오.
- 생성을 클릭합니다.
1장. DCN 이해 링크 복사링크가 클립보드에 복사되었습니다!
RHOSP(Red Hat OpenStack Platform) 17.1에서 OpenShift(RHOSO) 18.0.3의 Red Hat OpenStack Services로 업그레이드는 현재 DCN(Distributed Compute Node) 배포에는 지원되지 않습니다.
DCN(Distributed Compute node) 아키텍처는 중앙 집중식 컨트롤 플레인을 공유하는 동안 컴퓨팅 및 스토리지 노드를 원격으로 배포해야 하는 에지 사용 사례입니다. DCN 아키텍처를 사용하면 성능 향상을 위해 운영 요구에 보다 전략적으로 워크로드를 배치할 수 있습니다.
중앙 위치는 최소한 Red Hat OpenShift Container Platform (RHOCP) 클러스터에 설치된 RHOSO 컨트롤 플레인으로 구성됩니다. 컴퓨팅 노드는 중앙 위치에 배포할 수도 있습니다. 에지 위치는 컴퓨팅 및 선택적 스토리지 노드로 구성됩니다.
DCN 아키텍처는 OpenStack 리소스의 사이트별 스케줄링을 보장하기 위해 여러 가용성 영역(AZ)으로 구성됩니다.
각 사이트를 고유한 AZ로 구성합니다. 이 가이드에서는 중앙 사이트에서 az0 을 사용하고 첫 번째 에지 위치는 az1 을 사용합니다. 이름 지정 규칙을 사용하여 AZ 이름이 사이트별로 고유하도록 할 수 있습니다.
DCN 아키텍처는 hub-and-spoke 라우팅 네트워크 배포입니다. DCN은 RHOSO를 사용한 라우팅된 프로비저닝 및 컨트롤 플레인 네트워킹을 위한 스파인-리프트 배포와 비교됩니다.
- 허브는 핵심 라우터 및 데이터 센터 게이트웨이(DC-GW)가 있는 중앙 사이트입니다. 허브는 지리적으로 분산된 사이트를 관리하는 컨트롤 플레인을 호스팅합니다.
-
발표자는 원격 에지 사이트입니다. 각 사이트는
OpenStackDataPlaneNodeSet사용자 정의 리소스를 사용하여 정의됩니다. RHCS(Red Hat Ceph Storage)는 스토리지 백엔드로 사용됩니다. RHCS를 하이퍼컨버지드 구성으로 배포하거나 독립 실행형 스토리지 백엔드로 배포할 수 있습니다.
에지 사이트에서 인스턴스를 시작하면 필요한 이미지가 로컬 Image 서비스(glance) 저장소에 자동으로 복사됩니다. 인스턴스 시작 중에 시간을 절약하기 위해 glance multistore를 사용하여 중앙 이미지 저장소의 이미지를 에지 사이트로 복사할 수 있습니다.
1.1. DCN 아키텍처에 필요한 소프트웨어 링크 복사링크가 클립보드에 복사되었습니다!
다음 표는 DCN(Distributed Compute Node) 아키텍처의 OpenShift(RHOSO)에 Red Hat OpenStack Services를 배포하는 데 필요한 소프트웨어 및 최소 버전을 보여줍니다.
| 플랫폼 | 버전 | 선택 사항 |
|---|---|---|
| Red Hat OpenShift Container Platform | 4.16 | 없음 |
| Red Hat Enterprise Linux | 9.2 | 없음 |
| Red Hat OpenStack Platform | 18.0.3 | 없음 |
| Red Hat Ceph Storage | 7 또는 8 | 제공됨 |
1.2. DCN 스토리지 링크 복사링크가 클립보드에 복사되었습니다!
중앙 위치 또는 에지 사이트를 다음 세 구성 중 하나로 배포할 수 있습니다.
- 스토리지 없음.
- 하이퍼컨버지드 Ceph 스토리지 사용.
- RHCS(Red Hat Ceph Storage)를 독립 실행형 스토리지 백엔드로 사용합니다.
배포하는 스토리지는 배포하는 사이트 전용입니다. DCN 아키텍처는 Red Hat OpenShift Container Platform (RHOCP) 클러스터의 중앙 위치에 배포된 각 사이트의 Image 서비스(glance) Pod 및 Block Storage 서비스(cinder) Pod를 사용합니다.
스토리지 없이 배포된 에지 사이트의 경우 집계 캐시 명령을 사용하여 Compute 서비스(nova) 캐시에 이미지를 저장할 수 있습니다. Compute 서비스에서 이미지 서비스 이미지를 캐싱하면 WAN 링크에서 이미지를 다운로드하는 프로세스를 방지하여 인스턴스의 부팅 시간이 단축됩니다.
예제:
$ openstack aggregate cache image <dcn0> <myimage>
-
&
lt;dcn0>을 가용성 영역의 이름으로 바꿉니다. -
&
lt;myimage>를 이미지 이름으로 바꿉니다.
Red Hat OpenStack Services on OpenShift(RHOSO)는 Red Hat Ceph Storage 7 및 8의 외부 배포를 지원합니다. Red Hat Ceph Storage를 참조하는 구성 예제에서는 릴리스 7 정보를 사용합니다. Red Hat Ceph Storage 8을 사용하는 경우 그에 따라 구성 예제를 조정합니다.
2장. DCN(Distributed Compute Node) 배포 계획 링크 복사링크가 클립보드에 복사되었습니다!
DCN 아키텍처를 계획할 때 필요한 기술이 사용 가능하고 지원되는지 확인하십시오.
2.1. DCN 아키텍처의 스토리지 고려 사항 링크 복사링크가 클립보드에 복사되었습니다!
DCN(Distributed Compute Node) 아키텍처를 사용하여 OpenShift의 Red Hat OpenStack Services on OpenShift(RHOSO) 배포에 연결된 스토리지는 보다 일반적인 아키텍처와 비교할 때 특정 자선 및 지원 차이점이 있습니다.
다음 기능은 현재 DCN 아키텍처에서 지원되지 않습니다.
- 에지 사이트 간에 볼륨을 복사합니다. 볼륨에서 이미지를 생성하고 Image 서비스(glance)를 사용하여 이미지를 복사하여 이 문제를 해결할 수 있습니다. 이미지가 복사되면 이미지에서 볼륨을 생성할 수 있습니다.
- 에지 사이트의 Ceph Rados Gateway(RGW).
- 에지 사이트의 CephFS입니다.
- 에지 사이트의 HA(인스턴스 고가용성)입니다.
- 에지 사이트 간 RBD 미러링.
-
에지 사이트 또는 중앙 위치에서 에지 사이트로 실시간 또는 콜드 인스턴스 마이그레이션. 사이트 경계 내에서만 인스턴스를 마이그레이션할 수 있습니다. 사이트 간에 이미지를 이동하려면 이미지를 스냅샷을 작성하고
glance image-import를 사용해야 합니다.
또한 다음을 고려해야 합니다.
- 이미지를 에지 사이트에 복사하기 전에 중앙 위치에 업로드해야 합니다. 각 이미지의 사본은 중앙 위치의 이미지 서비스에 있어야 합니다.
- 이미지, 컴퓨팅 및 블록 스토리지 서비스에 RBD 스토리지 드라이버를 사용해야 합니다.
- 중앙 위치를 포함한 각 사이트에 대해 고유한 가용성 영역을 할당합니다.
- 에지 사이트에서 중앙 위치로 오프라인 볼륨을 마이그레이션하거나 그 반대의 경우도 마찬가지입니다. 에지 사이트 간에 직접 볼륨을 마이그레이션할 수 없습니다.
2.2. DCN 아키텍처의 네트워킹 고려 사항 링크 복사링크가 클립보드에 복사되었습니다!
DCN(Distributed Compute Node) 아키텍처를 사용하는 RHOSO 배포에는 더 일반적인 아키텍처와 비교했을 때 특정 자선 및 지원 차이점이 있습니다.
다음 기능은 현재 DCN 아키텍처에서 지원되지 않습니다.
- DPDK 노드의 DHCP
- TC Flower Hardware Offload
다음 ML2/OVN 네트워킹 기술이 완전히 지원됩니다.
- 라우팅된 공급자 네트워크
- Neutron AZ가 지원되는 OVN GW(네트워크 노드)
또한 다음을 고려해야 합니다.
- 네트워크 대기 시간: RTT(Round-trip Time)로 측정된 대기 시간을 조정하여 허용 가능한 성능을 유지하기 위해 예상되는 동시 API 작업 수를 조정합니다. 최대 TCP/IP 처리량은 RTT에 비례하지 않습니다. 커널 TCP 매개변수를 조정하여 높은 대역폭으로 대기 시간이 높은 연결로 일부 문제를 완화할 수 있습니다. 사이트 간 통신이 100ms를 초과하면 Red Hat 지원팀에 문의하십시오.
- 네트워크 중단: 에지 사이트에서 중앙 사이트에 일시적으로 연결이 끊어지면 중단 기간 동안 영향을 받는 에지 사이트에서 컨트롤 플레인 API 또는 CLI 작업을 실행할 수 없습니다. 예를 들어 에지 사이트의 컴퓨팅 노드는 결과적으로 인스턴스의 스냅샷을 생성하거나 인증 토큰을 발행하거나 이미지를 삭제할 수 없습니다. 일반 컨트롤 플레인 API 및 CLI 작업은 이 중단 중에 계속 작동하고 작동 중인 다른 에지 사이트를 계속 제공할 수 있습니다.
- 이미지 유형: Ceph 스토리지를 사용하여 DCN 아키텍처를 배포할 때 원시 이미지를 사용해야 합니다.
이미지 크기 조정:
- 컴퓨팅 이미지: 컴퓨팅 이미지는 중앙 위치에서 다운로드합니다. 이러한 이미지는 프로비저닝 중에 중앙 사이트에서 에지 사이트로 필요한 모든 네트워크를 통해 전송되는 대용량 파일입니다.
- 인스턴스 이미지: 에지에 블록 스토리지가 없는 경우 이미지 서비스 이미지는 처음 사용하는 동안 WAN을 통과합니다. 이미지는 나중에 사용할 수 있도록 대상 에지 노드에 로컬로 복사되거나 캐시됩니다. 이미지에 크기 제한이 없습니다. 전송 시간은 사용 가능한 대역폭 및 네트워크 대기 시간에 따라 다릅니다.
- 공급자 네트워크는 DCN 배포를 위한 가장 일반적인 접근 방식입니다. Networking 서비스(neutron)는 사용 가능한 네트워크를 연결할 수 있는 위치를 확인하지 않습니다. 예를 들어 에지 사이트 A에서만 "site-a"라는 공급자 네트워크를 사용하는 경우 네트워킹 서비스는 작동하지 않는 사이트 B의 인스턴스에 "site-a"를 연결할 수 없습니다.
- 사이트별 네트워크: 특정 사이트에 특정 네트워크를 사용하는 경우 DCN 네트워킹의 제한이 발생합니다. 컴퓨팅 노드에 중앙 집중식 중성자를 배포할 때 네트워킹 서비스에 특정 컴퓨팅 노드를 원격 노드로 식별하는 트리거가 없습니다. 결과적으로 컴퓨팅 노드는 다른 컴퓨팅 노드 목록을 수신하고 서로 자동으로 터널을 형성합니다. 터널은 중앙 위치를 통해 에지에서 에지로 구성됩니다. VXLAN 또는 GENEVE를 사용하는 경우 모든 사이트의 모든 컴퓨팅 노드는 로컬 또는 원격지 여부에 관계없이 다른 모든 컴퓨팅 노드와 터널을 형성합니다. 어디에서나 동일한 네트워크를 사용하는 경우에는 문제가 되지 않습니다. VLAN을 사용하면 Networking 서비스에 모든 컴퓨팅 노드에 동일한 브릿지 매핑이 있고 모든 VLAN을 모든 사이트에서 사용할 수 있어야 합니다.
- 에지 서버가 사전 프로비저닝되지 않은 경우 라우팅된 세그먼트에서 인트로스펙션 및 프로비저닝을 위해 DHCP 릴레이를 구성해야 합니다.
- 라우팅은 클라우드 또는 각 에지 사이트를 허브에 연결하는 네트워킹 인프라에 구성해야 합니다. 각 RHOSO 클러스터 네트워크(외부, 내부 API 등)에 L3 서브넷을 할당하는 네트워킹 설계를 구현해야 합니다. BGP를 사용하는 경우 RHOSO 컨트롤 플레인 및 데이터 플레인 노드에서 알리는 경로를 알아보려면 이러한 위치의 라우터에 BGP를 구성해야 합니다.
2.3. internalapi 네트워크의 IP 주소 풀 크기 조정 링크 복사링크가 클립보드에 복사되었습니다!
이미지 서비스 Operator는 glance-az0-internal.openstack.svc:9292 와 같은 자체 DNS 이름을 사용하여 각 이미지 서비스 Pod에 대한 끝점을 생성합니다. 각 가용성 영역의 각 Compute 서비스 및 블록 스토리지 서비스는 동일한 가용성 영역의 Image 서비스(glance) API 서버를 사용합니다. 예를 들어 OpenStackControlPlane CR(사용자 정의 리소스)에서 cinderVolumes 필드를 업데이트할 때 customServiceConfig 아래에 glance_api_servers 라는 필드를 추가합니다.
cinderVolumes:
az0:
customServiceConfig: |
[DEFAULT]
enabled_backends = az0
glance_api_servers = https://glance-az0-internal.openstack.svc:9292
이미지 서비스 끝점 DNS 이름은 내부 메타데이터 주석으로 표시된 대로 internalapi 주소 풀의 로드 밸런서 IP 주소에 매핑됩니다.
[glance_store]
default_backend = ceph
[ceph]
rbd_store_ceph_conf = /etc/ceph/ceph.conf
store_description = "ceph RBD backend"
rbd_store_pool = images
rbd_store_user = openstack
rbd_thin_provisioning = True
networkAttachments:
- storage
override:
service:
internal:
metadata:
annotations:
metallb.universe.tf/address-pool: internalapi
metallb.universe.tf/allow-shared-ip: internalapi
metallb.universe.tf/loadBalancerIPs: 172.17.0.80
이 주소 풀의 주소 범위는 DCN 사이트 수에 따라 크기가 지정되어야 합니다. 예를 들어 다음은 internalapi 네트워크에서 사용 가능한 주소 10개만 보여줍니다.
$ oc get ipaddresspool -n metallb-system
NAME AUTO ASSIGN AVOID BUGGY IPS ADDRESSES
ctlplane true false ["192.168.122.80-192.168.122.90"]
internalapi true false ["172.17.0.80-172.17.0.90"]
storage true false ["172.18.0.80-172.18.0.90"]
tenant true false ["172.19.0.80-172.19.0.90"]
Glance Operator가 서비스 엔드포인트 및 경로를 생성했는지 확인하려면 OpenStackControlPlane CR의 glance 섹션을 업데이트한 후 다음과 같은 명령을 사용합니다.
$ oc get svc | grep glance
glance-az0-internal LoadBalancer 172.30.217.178 172.17.0.80 9292:32134/TCP 24h
glance-az0-public ClusterIP 172.30.78.47 <none> 9292/TCP 24h
glance-az1-internal LoadBalancer 172.30.52.123 172.17.0.81 9292:31679/TCP 23h
glance-c1ca8-az0-external-api ClusterIP None <none> 9292/TCP 24h
glance-c1ca8-az0-internal-api ClusterIP None <none> 9292/TCP 24h
glance-c1ca8-az1-edge-api ClusterIP None <none> 9292/TCP 23h
$ oc get route | grep glance
glance-az0-public glance-az0-public-openstack.apps.ocp.openstack.lab glance-az0-public glance-az0-public reencrypt/Redirect None
glance-default-public glance-default-public-openstack.apps.ocp.openstack.lab glance-default-public glance-default-public reencrypt/Redirect None
3장. Operator 설치 및 준비 링크 복사링크가 클립보드에 복사되었습니다!
OpenShift(RHOSO) OpenStack Operator(openstack-operator)에 Red Hat OpenStack Services를 설치하고 작동 중인 Red Hat OpenShift Container Platform(RHOCP) 클러스터에 RHOSO 컨트롤 플레인을 생성합니다. Cryostat 웹 콘솔을 사용하여 OpenStack Operator를 설치합니다. workstation에서 컨트롤 플레인 설치 작업 및 모든 데이터 플레인 생성 작업을 수행합니다.
RHOSO 버전을 OpenStack Operator 및 OpenStackVersion CR(사용자 정의 리소스)에 매핑하는 방법에 대한 자세한 내용은 https://access.redhat.com/articles/7125383 에서 Red Hat 기술 자료 문서를 참조하십시오.
3.1. 사전 요구 사항 링크 복사링크가 클립보드에 복사되었습니다!
운영 중인 Cryostat 클러스터, 버전 4.18. 시스템 요구 사항은 배포 계획 의 Red Hat OpenShift Container Platform 클러스터 요구 사항을 참조하십시오.
- RHOSO 컨트롤 플레인 호스팅에 대한 최소 hardware 요구 사항은 Minimum Cryostat 하드웨어 요구 사항을 참조하십시오.
- 최소 네트워크 요구 사항은 Cryostat 네트워크 요구 사항을 참조하십시오.
-
openstack-operator를 설치하기 전에 설치해야 하는 Operator 목록은 Cryostat 소프트웨어 요구 사항을 참조하십시오.
-
oc명령줄 툴이 워크스테이션에 설치되어 있습니다. -
cluster-admin권한이 있는 사용자로 Cryostat 클러스터에 로그인되어 있습니다.
3.2. OpenStack Operator 설치 링크 복사링크가 클립보드에 복사되었습니다!
RHOCP(Red Hat OpenShift Container Platform) 웹 콘솔에서 OperatorHub를 사용하여 Cryostat 클러스터에 OpenStack Operator(openstack-operator)를 설치합니다. Operator를 설치한 후 클러스터에서 OpenStack Operator를 시작하도록 OpenStack Operator 초기화 리소스의 단일 인스턴스를 구성합니다.
프로세스
-
cluster-admin권한이 있는 사용자로 Cryostat 웹 콘솔에 로그인합니다. - Operators → OperatorHub 를 선택합니다.
-
키워드로 필터링 필드에
OpenStack을 입력합니다. -
Red Hatsource 레이블을 사용하여 OpenStack Operator 타일을 클릭합니다. - Operator에 대한 정보를 확인하고 Install을 클릭합니다.
- Operator 설치 페이지의 설치된 네임스페이스 목록에서 "Operator 권장 네임스페이스: openstack-operators" 를 선택합니다.
- Operator 설치 페이지의 업데이트 승인 목록에서 "수동"을 선택합니다. 보류 중인 Operator 업데이트를 수동으로 승인하는 방법에 대한 자세한 내용은 Cryostat Operator 가이드에서 보류 중인 Operator 업데이트를 수동으로 승인 합니다.
-
openstack-operators네임스페이스에서 Operator를 사용할 수 있도록 설치를 클릭합니다. 상태가 성공이면 OpenStack Operator가설치됩니다. - Create OpenStack 을 클릭하여 OpenStack 만들기 페이지를 엽니다.
-
OpenStack 생성 페이지에서 생성 을 클릭하여 OpenStack Operator 초기화 리소스의 인스턴스를 생성합니다.
openstack인스턴스의 Status 가Conditions: Ready인 경우 OpenStack Operator를 사용할 준비가 되었습니다.
4장. DCN 컨트롤 플레인 배포 링크 복사링크가 클립보드에 복사되었습니다!
DCN(Distributed Compute Node) 아키텍처를 사용하여 OpenShift(RHOSO)에 Red Hat OpenStack Services를 배포하려면 RHOCP(Red Hat OpenShift Container Platform)를 설치하고 RHOSO 컨트롤 플레인을 설치합니다. RHOSO 컨트롤 플레인 준비에 대한 자세한 내용은 OpenShift 에서 Red Hat OpenStack Services 용 Red Hat OpenShift Container Platform 준비를 참조하십시오.
컨트롤 플레인을 배포하기 전에 Cryostat 네트워크도 구성해야 합니다. RHOSO의 DCN 배포에는 더 많은 수의 서브넷을 관리해야 합니다. 사용하는 서브넷은 사용자 환경에 따라 다릅니다. 이 문서에서는 각 예제에서 다음 구성을 사용합니다.
| 중앙 위치 (AZ-0) | AZ-1 | AZ-2 | |
|---|---|---|---|
| 컨트롤 플레인 | 192.168.122.0/24 | 192.168.133.0/24 | 192.168.144.0/24 |
| 외부 | 10.0.0.0/24 | 10.0.10.0/24 | 10.0.20.0/24 |
| 내부 | 172.17.0.0/24 | 172.17.10.0/24 | 172.17.20.0/24 |
| 스토리지 | 172.18.0.0/24 | 172.18.10.0/24 | 172.18.20.0/24 |
| 테넌트 | 172.19.0.0/24 | 172.19.10.0/24 | 172.19.20.0/24 |
| 스토리지 관리 | 172.20.0.0/24 | 172.20.10.0/24 | 172.20.20.0/24 |
4.1. DCN의 스파인-리프 네트워크 토폴로지 생성 링크 복사링크가 클립보드에 복사되었습니다!
DCN(Distributed Compute Node) 아키텍처의 지리적으로 분산된 노드는 라우팅된 스파인-리프 네트워크 토폴로지를 사용하여 상호 연결됩니다.
다음 CR을 구성해야 합니다.
- NodeNetworkConfigurationPolicy
-
NodeNetworkConfigurationPolicyCR을 사용하여 Cryostat 클러스터의 각 작업자 노드에서 각 격리된 네트워크의 인터페이스를 구성합니다. - NetworkAttachmentDefinition
-
NetworkAttachmentDefinitionCR을 사용하여 서비스 Pod를 격리된 네트워크에 연결합니다. - L2Advertisement
-
L2Advertisement리소스를 사용하여 VIP(가상 IP)의 발표 방법을 정의합니다. - IPAddressPool
-
IPAddressPool리소스를 사용하여 VIP로 사용할 수 있는 IP를 구성합니다. - NetConfig
-
NetConfigCR을 사용하여 데이터 플레인 네트워크의 서브넷을 지정합니다. - OpenStackControlPlane
-
OpenStackControlPlane를 사용하여 OpenShift에서 OpenStack 서비스를 정의하고 구성합니다.
4.2. DCN 네트워킹 준비 링크 복사링크가 클립보드에 복사되었습니다!
분산 컴퓨팅 노드 아키텍처를 배포할 때 중앙 위치 컨트롤 플레인을 먼저 배포합니다. RHOSO(Red Hat OpenStack Services on OpenShift) 서비스는 RHOCP(Red Hat OpenShift Container Platform) 워크로드로 실행됩니다.
사전 요구 사항
- OpenStack Operator 설치
프로세스
-
OpenStack 서비스를 호스팅하는 Cryostat 클러스터의 각 작업자 노드에 대해 워크스테이션에
NodeNetworkConfigurationPolicy(nncp) CR 정의 파일을 생성합니다. nncpCR 파일에서 각 격리된 네트워크의 인터페이스를 구성합니다. 각 서비스 인터페이스에는 고유한 주소가 있어야 합니다.apiVersion: nmstate.io/v1 kind: NodeNetworkConfigurationPolicy metadata: labels: osp/nncm-config-type: standard name: worker-0 namespace: openstack spec: desiredState: dns-resolver: config: search: [] server: - 192.168.122.1 interfaces: - description: internalapi vlan interface ipv4: address: - ip: 172.17.0.10 prefix-length: "24" dhcp: false enabled: true ipv6: enabled: false mtu: 1496 name: internalapi state: up type: vlan vlan: base-iface: enp7s0 id: "20" - description: storage vlan interface ipv4: address: - ip: 172.18.0.10 prefix-length: "24" dhcp: false enabled: true ipv6: enabled: false mtu: 1496 name: storage state: up type: vlan vlan: base-iface: enp7s0 id: "21" - description: tenant vlan interface ipv4: address: - ip: 172.19.0.10 prefix-length: "24" dhcp: false enabled: true ipv6: enabled: false mtu: 1496 name: tenant state: up type: vlan vlan: base-iface: enp7s0 id: "22" - description: ctlplane interface mtu: 1500 name: enp7s0 state: up type: ethernet - bridge: options: stp: enabled: false port: - name: enp7s0 vlan: {} description: linux-bridge over ctlplane interface ipv4: address: - ip: 192.168.122.10 prefix-length: "24" dhcp: false enabled: true ipv6: enabled: false mtu: 1500 name: ospbr state: up type: linux-bridge각 원격 위치의 네트워크에
route-rules속성 및 경로 구성을 각nncpCR 파일에 추가합니다.route-rules: config: [] routes: config: - destination: 192.168.133.0/24 next-hop-address: 192.168.122.1 next-hop-interface: ospbr table-id: 254 - destination: 192.168.144.0/24 next-hop-address: 192.168.122.1 next-hop-interface: ospbr table-id: 254 - destination: 172.17.10.0/24 next-hop-address: 172.17.0.1 next-hop-interface: internalapi table-id: 254 - destination: 172.18.10.0/24 next-hop-address: 172.18.0.1 next-hop-interface: storage table-id: 254 - destination: 172.19.10.0/24 next-hop-address: 172.19.0.1 next-hop-interface: tenant table-id: 254 - destination: 172.17.20.0/24 next-hop-address: 172.17.0.1 next-hop-interface: internalapi table-id: 254 - destination: 172.18.20.0/24 next-hop-address: 172.18.0.1 next-hop-interface: storage table-id: 254 - destination: 172.19.20.0/24 next-hop-address: 172.19.0.1 next-hop-interface: tenant table-id: 254 nodeSelector: kubernetes.io/hostname: worker-0 node-role.kubernetes.io/worker: ""참고각 서비스 네트워크는 각 원격 위치에서 동일한 네트워크로 라우팅됩니다. 예를 들어,
internapi네트워크(172.17.0.0/24)에는 172.17.0.1의 로컬 라우터를 통해 각 원격 위치(172.17.10.0/24 및 172.17.20.0/24)에서internalapi네트워크에 대한 경로가 있습니다.클러스터에
nncpCR을 생성합니다.$ oc create -f worker0-nncp.yaml $ oc create -f worker1-nncp.yaml $ oc create -f worker2-nncp.yaml각 네트워크에 대한
NetworkAttachmentDefinitionCR 정의 파일을 생성합니다. 동일한 기능의 네트워크에 대한 각 원격 위치에 대한 경로를 포함합니다. 예를 들어internalapiNetworkAttachmentDefinition은 자체 서브넷 범위와 원격 사이트의internalapi네트워크에 대한 경로를 지정합니다.internalapi네트워크에 대한NetworkAttachmentDefinitionCR 정의 파일을 생성합니다.apiVersion: k8s.cni.cncf.io/v1 kind: NetworkAttachmentDefinition metadata: labels: osp/net: internalapi osp/net-attach-def-type: standard name: internalapi namespace: openstack spec: config: | { "cniVersion": "0.3.1", "name": "internalapi", "type": "macvlan", "master": "internalapi", "ipam": { "type": "whereabouts", "range": "172.17.0.0/24", "range_start": "172.17.0.30", "range_end": "172.17.0.70", "routes": [ { "dst": "172.17.10.0/24", "gw": "172.17.0.1" }, { "dst": "172.17.20.0/24", "gw": "172.17.0.1" } ] } }제어네트워크에 대한NetworkAttachmentDefinitionCR 정의 파일을 생성합니다.apiVersion: k8s.cni.cncf.io/v1 kind: NetworkAttachmentDefinition metadata: labels: osp/net: ctlplane osp/net-attach-def-type: standard name: ctlplane namespace: openstack spec: config: | { "cniVersion": "0.3.1", "name": "ctlplane", "type": "macvlan", "master": "ospbr", "ipam": { "type": "whereabouts", "range": "192.168.122.0/24", "range_start": "192.168.122.30", "range_end": "192.168.122.70", "routes": [ { "dst": "192.168.133.0/24", "gw": "192.168.122.1" }, { "dst": "192.168.144.0/24", "gw": "192.168.122.1" } ] } }스토리지네트워크에 대한NetworkAttachmentDefinitionCR 정의 파일을 생성합니다.apiVersion: k8s.cni.cncf.io/v1 kind: NetworkAttachmentDefinition metadata: labels: osp/net: storage osp/net-attach-def-type: standard name: storage namespace: openstack spec: config: | { "cniVersion": "0.3.1", "name": "storage", "type": "macvlan", "master": "storage", "ipam": { "type": "whereabouts", "range": "172.18.0.0/24", "range_start": "172.18.0.30", "range_end": "172.18.0.70", "routes": [ { "dst": "172.18.10.0/24", "gw": "172.18.0.1" }, { "dst": "172.18.20.0/24", "gw": "172.18.0.1" } ] } }테넌트네트워크에 대한NetworkAttachmentDefinitionCR 정의 파일을 생성합니다.apiVersion: k8s.cni.cncf.io/v1 kind: NetworkAttachmentDefinition metadata: labels: osp/net: tenant osp/net-attach-def-type: standard name: tenant namespace: openstack spec: config: | { "cniVersion": "0.3.1", "name": "tenant", "type": "macvlan", "master": "tenant", "ipam": { "type": "whereabouts", "range": "172.19.0.0/24", "range_start": "172.19.0.30", "range_end": "172.19.0.70", "routes": [ { "dst": "172.19.10.0/24", "gw": "172.19.0.1" }, { "dst": "172.19.20.0/24", "gw": "172.19.0.1" } ] } }
NetworkAttachmentDefinitionCR을 생성합니다.$ oc create -f internalapi-net-attach-def.yaml $ oc create -f control-net-attach-def.yaml $ oc create -f storage-net-attach-def.yaml $ oc create -f tenant-net-attach-def.yamlNetConfig CR 정의 파일을 만들어 VIP(가상 IP)로 사용할 수 있는 IP를 정의합니다.
dnsDomain필드에 정의된 각 네트워크는 각 지역에 대한allocationRanges를 사용합니다. 이러한 범위는 Whereabouts IPAM 범위와 중복될 수 없습니다.다음과 유사한 컨트롤 플레인 네트워킹에 대해 추가된 할당 범위를 사용하여 파일을 생성합니다.
apiVersion: network.openstack.org/v1beta1 kind: NetConfig metadata: name: netconfig namespace: openstack spec: networks: - dnsDomain: ctlplane.example.com mtu: 1500 name: ctlplane subnets: - allocationRanges: - end: 192.168.122.120 start: 192.168.122.100 - end: 192.168.122.170 start: 192.168.122.150 cidr: 192.168.122.0/24 gateway: 192.168.122.1 name: subnet1 routes: - destination: 192.168.133.0/24 nexthop: 192.168.122.1 - destination: 192.168.144.0/24 nexthop: 192.168.122.1 - allocationRanges: - end: 192.168.133.120 start: 192.168.133.100 - end: 192.168.133.170 start: 192.168.133.150 cidr: 192.168.133.0/24 gateway: 192.168.133.1 name: subnet2 routes: - destination: 192.168.122.0/24 nexthop: 192.168.133.1 - destination: 192.168.144.0/24 nexthop: 192.168.133.1 - allocationRanges: - end: 192.168.144.120 start: 192.168.144.100 - end: 192.168.144.170 start: 192.168.144.150 cidr: 192.168.144.0/24 gateway: 192.168.144.1 name: subnet3 routes: - destination: 192.168.122.0/24 nexthop: 192.168.144.1 - destination: 192.168.133.0/24 nexthop: 192.168.144.1internalapi네트워크의 할당 범위를 추가합니다.- dnsDomain: internalapi.example.com mtu: 1496 name: internalapi subnets: - allocationRanges: - end: 172.17.0.250 start: 172.17.0.100 cidr: 172.17.0.0/24 name: subnet1 routes: - destination: 172.17.10.0/24 nexthop: 172.17.0.1 - destination: 172.17.20.0/24 nexthop: 172.17.0.1 vlan: 20 - allocationRanges: - end: 172.17.10.250 start: 172.17.10.100 cidr: 172.17.0.0/24 name: subnet2 routes: - destination: 172.17.0.0/24 nexthop: 172.17.10.1 - destination: 172.17.20.0/24 nexthop: 172.17.10.1 vlan: 30 - allocationRanges: - end: 172.17.20.250 start: 172.17.20.100 cidr: 172.17.20.0/24 name: subnet3 routes: - destination: 172.17.0.0/24 nexthop: 172.17.20.1 - destination: 172.17.10.0/24 nexthop: 172.17.20.1 vlan: 40외부네트워크의 할당 범위를 추가합니다.- dnsDomain: external.example.com mtu: 1500 name: external subnets: - allocationRanges: - end: 10.0.0.250 start: 10.0.0.100 cidr: 10.0.0.0/24 name: subnet1 vlan: 22 - dnsDomain: external.example.com mtu: 1500 name: external subnets: - allocationRanges: - end: 10.0.10.250 start: 10.0.10.100 cidr: 10.0.10.0/24 name: subnet2 vlan: 22 - dnsDomain: external.example.com mtu: 1500 name: external subnets: - allocationRanges: - end: 10.0.20.250 start: 10.0.20.100 cidr: 10.0.20.0/24 name: subnet3 vlan: 22 - dnsDomain: storage.example.com mtu: 1496 name: storage subnets: - allocationRanges: - end: 172.18.0.250 start: 172.18.0.100 cidr: 172.18.0.0/24 name: subnet1 routes: - destination: 172.18.10.0/24 nexthop: 172.18.0.1 - destination: 172.18.20.0/24 nexthop: 172.18.0.1 vlan: 21 - allocationRanges: - end: 172.18.10.250 start: 172.18.10.100 cidr: 172.18.10.0/24 name: subnet2 routes: - destination: 172.18.0.0/24 nexthop: 172.18.10.1 - destination: 172.18.20.0/24 nexthop: 172.18.10.1 vlan: 31 - allocationRanges: - end: 172.18.20.250 start: 172.18.20.100 cidr: 172.18.20.0/24 name: subnet3 routes: - destination: 172.18.0.0/24 nexthop: 172.18.20.1 - destination: 172.18.10.0/24 nexthop: 172.18.20.1 vlan: 41테넌트네트워크의 할당 범위를 추가합니다.- dnsDomain: tenant.example.com mtu: 1496 name: tenant subnets: - allocationRanges: - end: 172.19.0.250 start: 172.19.0.100 cidr: 172.19.0.0/24 name: subnet1 routes: - destination: 172.19.10.0/24 nexthop: 172.19.0.1 - destination: 172.19.20.0/24 nexthop: 172.19.0.1 vlan: 22 - allocationRanges: - end: 172.19.10.250 start: 172.19.10.100 cidr: 172.19.10.0/24 name: subnet2 routes: - destination: 172.19.0.0/24 nexthop: 172.19.10.1 - destination: 172.19.20.0/24 nexthop: 172.19.10.1 vlan: 32 - allocationRanges: - end: 172.19.20.250 start: 172.19.20.100 cidr: 172.19.20.0/24 name: subnet3 routes: - destination: 172.19.0.0/24 nexthop: 172.19.20.1 - destination: 172.19.10.0/24 nexthop: 172.19.20.1 vlan: 42storagemgmt네트워크의 할당 범위를 추가합니다.- dnsDomain: storagemgmt.example.com mtu: 1500 name: storagemgmt subnets: - allocationRanges: - end: 172.20.0.250 start: 172.20.0.100 cidr: 172.20.0.0/24 name: subnet1 routes: - destination: 172.20.10.0/24 nexthop: 172.20.0.1 - destination: 172.20.20.0/24 nexthop: 172.20.0.1 vlan: 23 - allocationRanges: - end: 172.20.10.250 start: 172.20.10.100 cidr: 172.20.10.0/24 name: subnet2 routes: - destination: 172.20.0.0/24 nexthop: 172.20.10.1 - destination: 172.20.20.0/24 nexthop: 172.20.10.1 vlan: 33 - allocationRanges: - end: 172.20.20.250 start: 172.20.20.100 cidr: 172.20.20.0/24 name: subnet3 routes: - destination: 172.20.0.0/24 nexthop: 172.20.20.1 - destination: 172.20.10.0/24 nexthop: 172.20.20.1 vlan: 43
NetConfig CR을 생성합니다.
oc create -f netconfig
4.3. DCN 컨트롤 플레인 생성 링크 복사링크가 클립보드에 복사되었습니다!
RHOSO(Red Hat OpenStack Services on OpenShift) 컨트롤 플레인에는 클라우드를 관리하는 RHOSO 서비스가 포함되어 있습니다. RHOSO 서비스는 Red Hat OpenShift Container Platform (RHOCP) 워크로드로 실행됩니다.
사전 요구 사항
-
OpenStack Operator(
openstack-operator)가 설치되어 있습니다. - Cryostat 클러스터는 RHOSO 네트워크를 위해 준비되었습니다.
Cryostat 클러스터는
openstack-operators네임스페이스와 컨트롤 플레인 네임스페이스(기본openstack) 간의 통신을 방지하는 네트워크 정책으로 구성되지 않습니다. 다음 명령을 사용하여 클러스터의 기존 네트워크 정책을 확인합니다.$ oc get networkpolicy -n openstack-
cluster-admin권한이 있는 사용자로 Cryostat 클러스터에 액세스할 수 있는 워크스테이션에 로그인되어 있습니다.
프로세스
openstack_control_plane.yaml이라는 워크스테이션에 파일을 생성하여OpenStackControlPlaneCR을 정의합니다.apiVersion: core.openstack.org/v1beta1 kind: OpenStackControlPlane metadata: name: openstack-control-plane namespace: openstackspec필드를 사용하여 Pod에 대한 보안 액세스 권한을 제공하기 위해 생성한SecretCR과 Red Hat OpenShift Container Platform(RHOCP) 클러스터 스토리지 백엔드에 대해 생성하는storageClass를 지정합니다.apiVersion: core.openstack.org/v1beta1 kind: OpenStackControlPlane metadata: name: openstack-control-plane namespace: openstack spec: secret: osp-secret storageClass: <RHOCP_storage_class>- <RHOCP_storage_class>를 Cryostat 클러스터 스토리지 백엔드용으로 생성한 스토리지 클래스로 바꿉니다.
서비스 구성을 추가합니다. 필요한 모든 서비스에 대한 서비스 구성을 포함합니다.
Block Storage 서비스(cinder):
cinder: uniquePodNames: false apiOverride: route: {} template: customServiceConfig: | [DEFAULT] storage_availability_zone = az0 databaseInstance: openstack secret: osp-secret cinderAPI: replicas: 3 override: service: internal: metadata: annotations: metallb.universe.tf/address-pool: internalapi metallb.universe.tf/allow-shared-ip: internalapi metallb.universe.tf/loadBalancerIPs: 172.17.0.80 spec: type: LoadBalancer cinderScheduler: replicas: 1 cinderVolumes: az0: networkAttachments: - storage replicas: 0참고RHOSO 18.0.3에서 secret의 전파를 허용하려면
uniquePodNames필드를false값으로 설정해야 합니다. 자세한 내용은 OSPRH-11240 에서 참조하십시오.참고-
replicas필드를0으로 설정합니다. 복제본 수가 변경되고 스토리지가 구성된 후 추가cinderVolume서비스가 추가됩니다. -
template 섹션의
storage_availability_zone필드를az0로 설정합니다. 모든 블록 스토리지 서비스(cinder) Pod는cinderBackup,cinderVolume등과 같은 이 값을 상속합니다.backend_availability_zone을 지정하여cinderVolume서비스에 대해 이 AZ를 덮어쓸 수 있습니다.
-
컴퓨팅 서비스(nova):
nova: apiOverride: route: {} template: apiServiceTemplate: replicas: 3 override: service: internal: metadata: annotations: metallb.universe.tf/address-pool: internalapi metallb.universe.tf/allow-shared-ip: internalapi metallb.universe.tf/loadBalancerIPs: 172.17.0.80 spec: type: LoadBalancer metadataServiceTemplate: replicas: 3 override: service: metadata: annotations: metallb.universe.tf/address-pool: internalapi metallb.universe.tf/allow-shared-ip: internalapi metallb.universe.tf/loadBalancerIPs: 172.17.0.80 spec: type: LoadBalancer schedulerServiceTemplate: replicas: 3 override: service: metadata: annotations: metallb.universe.tf/address-pool: internalapi metallb.universe.tf/allow-shared-ip: internalapi metallb.universe.tf/loadBalancerIPs: 172.17.0.80 spec: type: LoadBalancer cellTemplates: cell0: cellDatabaseAccount: nova-cell0 cellDatabaseInstance: openstack cellMessageBusInstance: rabbitmq hasAPIAccess: true cell1: cellDatabaseAccount: nova-cell1 cellDatabaseInstance: openstack-cell1 cellMessageBusInstance: rabbitmq-cell1 noVNCProxyServiceTemplate: enabled: true networkAttachments: - ctlplane hasAPIAccess: true secret: osp-secret데이터 플레인의 DNS 서비스:
dns: template: options: - key: server values: - 192.168.122.1 - key: server values: - 192.168.122.2 override: service: metadata: annotations: metallb.universe.tf/address-pool: ctlplane metallb.universe.tf/allow-shared-ip: ctlplane metallb.universe.tf/loadBalancerIPs: 192.168.122.80 spec: type: LoadBalancer replicas: 2Galera
galera: templates: openstack: storageRequest: 5000M secret: osp-secret replicas: 3 openstack-cell1: storageRequest: 5000M secret: osp-secret replicas: 3Identity 서비스(keystone)
keystone: apiOverride: route: {} template: override: service: internal: metadata: annotations: metallb.universe.tf/address-pool: internalapi metallb.universe.tf/allow-shared-ip: internalapi metallb.universe.tf/loadBalancerIPs: 172.17.0.80 spec: type: LoadBalancer databaseInstance: openstack secret: osp-secret replicas: 3Image 서비스(glance):
glance: apiOverrides: default: route: {} template: databaseInstance: openstack storage: storageRequest: 10G secret: osp-secret keystoneEndpoint: default glanceAPIs: default: replicas: 0 override: service: internal: metadata: annotations: metallb.universe.tf/address-pool: internalapi metallb.universe.tf/allow-shared-ip: internalapi metallb.universe.tf/loadBalancerIPs: 172.17.0.80 spec: type: LoadBalancer networkAttachments: - storage참고처음에
replicas필드를 값0으로 설정해야 합니다. 복제본 수가 변경되고 스토리지가 구성된 후 추가glanceAPI서비스가 추가됩니다.키 관리 서비스(barbican):
barbican: apiOverride: route: {} template: databaseInstance: openstack secret: osp-secret barbicanAPI: replicas: 3 override: service: internal: metadata: annotations: metallb.universe.tf/address-pool: internalapi metallb.universe.tf/allow-shared-ip: internalapi metallb.universe.tf/loadBalancerIPs: 172.17.0.80 spec: type: LoadBalancer barbicanWorker: replicas: 3 barbicanKeystoneListener: replicas: 1Memcached
memcached: templates: memcached: replicas: 3Networking 서비스(neutron):
neutron: apiOverride: route: {} template: customServiceConfig: | [DEFAULT] network_scheduler_driver = neutron.scheduler.dhcp_agent_scheduler.AZAwareWeightScheduler default_availability_zones = az0 [ml2_type_vlan] network_vlan_ranges = datacentre:1:1000 [neutron] physnets = datacentre replicas: 3 override: service: internal: metadata: annotations: metallb.universe.tf/address-pool: internalapi metallb.universe.tf/allow-shared-ip: internalapi metallb.universe.tf/loadBalancerIPs: 172.17.0.80 spec: type: LoadBalancer databaseInstance: openstack secret: osp-secret networkAttachments: - internalapi-
DHCP 에이전트가 배포된 경우
network_scheduler_driver를neutron.scheduler.dhcp_agent_scheduler.AZAwareWeightScheduler값으로 설정합니다. OVN
ovn: template: ovnController: external-ids: availability-zones: - az0 enable-chassis-as-gateway: true ovn-bridge: br-int ovn-encap-type: geneve system-id: random networkAttachment: tenant nicMappings: datacentre: ospbr ovnDBCluster: ovndbcluster-nb: replicas: 3 dbType: NB storageRequest: 10G networkAttachment: internalapi ovndbcluster-sb: replicas: 3 dbType: SB storageRequest: 10G networkAttachment: internalapi ovnNorthd: networkAttachment: internalapi배치 서비스(장자리)
placement: apiOverride: route: {} template: override: service: internal: metadata: annotations: metallb.universe.tf/address-pool: internalapi metallb.universe.tf/allow-shared-ip: internalapi metallb.universe.tf/loadBalancerIPs: 172.17.0.80 spec: type: LoadBalancer databaseInstance: openstack replicas: 3 secret: osp-secretRabbitMQ
rabbitmq: templates: rabbitmq: replicas: 3 override: service: metadata: annotations: metallb.universe.tf/address-pool: internalapi metallb.universe.tf/loadBalancerIPs: 172.17.0.85 spec: type: LoadBalancer rabbitmq-cell1: replicas: 3 override: service: metadata: annotations: metallb.universe.tf/address-pool: internalapi metallb.universe.tf/loadBalancerIPs: 172.17.0.86 spec: type: LoadBalancer
컨트롤 플레인을 생성합니다.
oc create -f openstack_control_plane.yaml -n openstack
4.4. Ceph 비밀 키 사이트 배포 링크 복사링크가 클립보드에 복사되었습니다!
여러 Ceph 백엔드가 있는 DCN(Distributed Compute Node) 환경을 배포할 때 각 백엔드에 대해 Ceph 키를 생성합니다. 보안을 위해 최소 Ceph 키 수를 각 사이트에 배포합니다. 각 위치에 대해 하나의 시크릿을 생성합니다.
- 각 Ceph 백엔드의 키를 기본 위치의 보안에 추가합니다.
- 기본 Ceph 백엔드의 키와 추가 위치마다 로컬 ceph 백엔드를 추가합니다.
세 위치( az0,az1, az2 )의 경우 세 가지 시크릿이 있어야 합니다. 위치 az1 및 az2 각각 로컬 백엔드에 대한 키와 az0 의 키가 있습니다. 위치 az0 에는 모든 Ceph 백엔드 키가 포함되어 있습니다.
Ceph가 각 에지 위치에 배포된 후 필요한 시크릿을 생성하고 각각에 대한 인증 키 및 구성 파일을 수집합니다. 또는 필요에 따라 각 Ceph 백엔드를 배포하고 각 에지 배포로 시크릿을 업데이트할 수 있습니다.
프로세스
az0위치에 대한 시크릿을 생성합니다.스토리지가 필요한 모든 에지 사이트에 RHCS(Red Hat Ceph Storage)를 이미 배포한 경우 모든 인증 키 및
conf파일이 포함된az0의 시크릿을 생성합니다.oc create secret generic ceph-conf-az-0 \ --from-file=az0.client.openstack.keyring \ --from-file=az0.conf \ --from-file=az1.client.openstack.keyring \ --from-file=az1.conf \ --from-file=az2.client.openstack.keyring \ --from-file=az2.conf -n openstackRHCS를 모든 에지 사이트에 배포하지 않은 경우
az0의 인증 키와conf파일이 포함된az0의 시크릿을 생성합니다.oc create secret generic ceph-conf-az-0 \ --from-file=az0.client.openstack.keyring \ --from-file=az0.conf -n openstack
가용성 영역 1(az1)의 에지 위치에 RHCS를 배포할 때 로컬 백엔드의 인증 키 및
conf파일이 포함된 위치의 시크릿을 생성합니다.az1oc create secret generic ceph-conf-az-1 \ --from-file=az0.client.openstack.keyring \ --from-file=az0.conf \ --from-file=az1.client.openstack.keyring \ --from-file=az1.conf -n openstack필요한 경우 중앙 위치의 시크릿을 업데이트합니다.
oc delete secret ceph-conf-az-0 -n openstack oc create secret generic ceph-conf-az-0 \ --from-file=az0.client.openstack.keyring \ --from-file=az0.conf \ --from-file=az1.client.openstack.keyring \ --from-file=az1.conf -n openstack가용성 영역 2(az2)의 에지 위치에 RHCS를 배포할 때 로컬 백엔드의 인증 키 및
conf파일이 포함된 위치의 시크릿을 생성합니다.az2oc create secret generic ceph-conf-az-2 \ --from-file=az0.client.openstack.keyring \ --from-file=az0.conf \ --from-file=az2.client.openstack.keyring \ --from-file=az2.conf -n openstack필요한 경우 중앙 위치의 시크릿을 업데이트합니다.
oc delete secret ceph-conf-az-0 -n openstack oc create secret generic ceph-conf-az-0 \ --from-file=az0.client.openstack.keyring \ --from-file=az0.conf \ --from-file=az1.client.openstack.keyring \ --from-file=az1.conf \ --from-file=az1.client.openstack.keyring \ --from-file=az1.conf \ --from-file=az2.client.openstack.keyring \ --from-file=az2.conf[선택 사항] 필요한 키 생성을 완료하면
openstack네임스페이스에 표시되는지 확인할 수 있습니다.oc get secret -n openstack -o name | grep ceph-conf출력 예:
secret/ceph-conf-az-0 secret/ceph-conf-az-1 secret/ceph-conf-az-2OpenStackDataPlaneNodeSet을 생성할 때extraMounts필드에서 적절한 키를 사용합니다.apiVersion: dataplane.openstack.org/v1beta1 kind: OpenStackDataPlaneNodeSet metadata: name: openstack-edpm-dcn-0 namespace: openstack spec: ... nodeTemplate: extraMounts: - extraVolType: Ceph volumes: - name: ceph secret: secretName: ceph-conf-az-0 mounts: - name: ceph mountPath: "/etc/ceph" readOnly: true데이터 플레인 NodeSet을 생성할 때
OpenStackControlPlaneCR(사용자 정의 리소스)도 시크릿 이름으로 업데이트해야 합니다.apiVersion: core.openstack.org/v1beta1 kind: OpenStackControlPlane spec: extraMounts: - name: v1 region: r1 extraVol: - propagation: - az0 - CinderBackup extraVolType: Ceph volumes: - name: ceph secret: name: ceph-conf-az-0 mounts: - name: ceph mountPath: "/etc/ceph" readOnly: true - propagation: - az1 extraVolType: Ceph volumes: - name: ceph secret: name: ceph-conf-az-1 mounts: - name: ceph mountPath: "/etc/ceph" readOnly: true ...참고CinderBackup서비스가 배포의 일부인 경우 포드 이름에 가용성 영역이 없으므로 전파 목록에 포함해야 합니다.OpenStackControlPlaneCR에서glanceAPIs필드를 업데이트하면 Image 서비스(glance) Pod 이름이extraMounts 전파인스턴스와 일치합니다.glanceAPIs: az0: customServiceConfig: | ... az1: customServiceConfig: | ...OpenStackControlPlaneCR에서cinderVolumes필드를 업데이트할 때 Block Storage 서비스(cinder) Pod 이름도extraMounts 전파 인스턴스 s와 일치해야 합니다.kind: OpenStackControlPlane spec: <...> cinder <...> cinderVolumes: az0: <...> az1: <...>
5장. DCN 노드 세트 배포 링크 복사링크가 클립보드에 복사되었습니다!
노드 세트는 중앙 위치에 배포하든 원격 위치에 배포하든 동일한 프로시저를 사용하여 배포됩니다. 각 엣지 위치를 별도의 가용 영역에 배포합니다. 예를 들어 az0 에 설정된 중앙 위치 노드를 배포하고 az1 에 첫 번째 에지 사이트를 배포합니다.
5.1. 데이터 플레인 노드 네트워크 구성 링크 복사링크가 클립보드에 복사되었습니다!
Red Hat Ceph Storage 네트워킹 요구 사항을 수용하도록 데이터 플레인 노드 네트워크를 구성해야 합니다.
사전 요구 사항
- 컨트롤 플레인 배포가 완료되었지만 Ceph Storage를 사용하도록 수정되지 않았습니다.
- 데이터 플레인 노드는 운영 체제를 통해 사전 프로비저닝되었습니다.
- 데이터 플레인 노드는 Ansible에서 사용할 수 있는 SSH 키를 통해 액세스할 수 있습니다.
- HCI를 사용하는 경우 데이터 플레인 노드에 Ceph OSD로 사용할 수 있는 디스크가 있습니다.
- 사용 가능한 데이터 플레인 노드가 3개 이상 있어야 합니다. 중복을 위해서는 Ceph Storage 클러스터에 최소 3개의 노드가 있어야 합니다.
프로세스
dcn-data-plane-networks.yaml이라는 워크스테이션에 파일을 생성하여 데이터 플레인 노드 네트워크를 구성하는OpenStackDataPlaneNodeSetCR을 정의합니다.apiVersion: dataplane.openstack.org/v1beta1 kind: OpenStackDataPlaneNodeSet metadata: name: dcn-data-plane-networks namespace: openstack spec: env: - name: ANSIBLE_FORCE_COLOR value: "True"노드에 적용할 서비스를 지정합니다.
spec: ... services: - bootstrap - configure-network - validate-network - install-os - ceph-hci-pre - configure-os - ssh-known-hosts - run-os - reboot-os데이터 플레인에서 edpm_enable_chassis_gw 및 edpm_ovn_availability_zones 필드를 설정합니다.
spec: env: - name: ANSIBLE_FORCE_COLOR value: "True" networkAttachments: - ctlplane nodeTemplate: ansible: ansiblePort: 22 ansibleUser: cloud-admin ansibleVars: edpm_enable_chassis_gw: true edpm_ovn_availability_zones: - az0선택 사항:
ceph-hci-pre서비스는edpm_ceph_hci_pre edpm-ansible역할을 사용하여 네트워크 구성 후 Red Hat Ceph Storage 서비스를 호스팅할 데이터 플레인 노드를 준비합니다. 기본적으로 이 역할의edpm_ceph_hci_pre_enabled_services매개변수에는RBD,RGW및NFS서비스만 포함됩니다. DCN은 DCN 사이트의RBD서비스만 지원합니다. HCI를 배포하는 경우edpm_ceph_hci_pre_enabled_services매개변수를 추가하고 ceph RBD 서비스만 추가하여 RGW 및 NFS 서비스를 비활성화합니다.apiVersion: dataplane.openstack.org/v1beta1 kind: OpenStackDataPlaneNodeSet metadata: name: openstack-edpm namespace: openstack spec: env: - name: ANSIBLE_FORCE_COLOR value: "True" networkAttachments: - ctlplane nodeTemplate: ansible: ansiblePort: 22 ansibleUser: cloud-admin ansibleVars: edpm_ceph_hci_pre_enabled_services: - ceph_mon - ceph_mgr - ceph_osd ...참고대시보드와 같은 기타 서비스가 HCI 노드와 함께 배포되는 경우
edpm_ceph_hci_pre_enabled_services매개 변수 목록에 추가해야 합니다. 이 역할에 대한 자세한 내용은 edpm_ceph_hci_pre 역할을 참조하십시오.스토리지 관리를 위해 Red Hat Ceph Storage 클러스터 네트워크를 구성합니다.
다음 예제에는 3개의 노드가 있습니다. 스토리지 관리가
VLAN23에 있다고 가정합니다.apiVersion: dataplane.openstack.org/v1beta1 kind: OpenStackDataPlaneNodeSet metadata: name: openstack-edpm namespace: openstack spec: env: - name: ANSIBLE_FORCE_COLOR value: "True" networkAttachments: - ctlplane nodeTemplate: ansible: ansiblePort: 22 ansibleUser: cloud-admin ansibleVars: edpm_ceph_hci_pre_enabled_services: - ceph_mon - ceph_mgr - ceph_osd edpm_fips_mode: check edpm_iscsid_image: {{ registry_url }}/openstack-iscsid:{{ image_tag }} edpm_logrotate_crond_image: {{ registry_url }}/openstack-cron:{{ image_tag }} edpm_network_config_hide_sensitive_logs: false edpm_network_config_os_net_config_mappings: edpm-compute-0: nic1: 52:54:00:1e:af:6b nic2: 52:54:00:d9:cb:f4 edpm-compute-1: nic1: 52:54:00:f2:bc:af nic2: 52:54:00:f1:c7:dd edpm-compute-2: nic1: 52:54:00:dd:33:14 nic2: 52:54:00:50:fb:c3 edpm_network_config_template: | --- {% set mtu_list = [ctlplane_mtu] %} {% for network in nodeset_networks %} {{ mtu_list.append(lookup(vars, networks_lower[network] ~ _mtu)) }} {%- endfor %} {% set min_viable_mtu = mtu_list | max %} network_config: - type: ovs_bridge name: {{ neutron_physical_bridge_name }} mtu: {{ min_viable_mtu }} use_dhcp: false dns_servers: {{ ctlplane_dns_nameservers }} domain: {{ dns_search_domains }} addresses: - ip_netmask: {{ ctlplane_ip }}/{{ ctlplane_cidr }} routes: {{ ctlplane_host_routes }} members: - type: interface name: nic2 mtu: {{ min_viable_mtu }} # force the MAC address of the bridge to this interface primary: true {% for network in nodeset_networks %} - type: vlan mtu: {{ lookup(vars, networks_lower[network] ~ _mtu) }} vlan_id: {{ lookup(vars, networks_lower[network] ~ _vlan_id) }} addresses: - ip_netmask: {{ lookup(vars, networks_lower[network] ~ _ip) }}/{{ lookup(vars, networks_lower[network] ~ _cidr) }} routes: {{ lookup(vars, networks_lower[network] ~ _host_routes) }} {% endfor %} edpm_neutron_metadata_agent_image: {{ registry_url }}/openstack-neutron-metadata-agent-ovn:{{ image_tag }} edpm_nodes_validation_validate_controllers_icmp: false edpm_nodes_validation_validate_gateway_icmp: false edpm_selinux_mode: enforcing edpm_sshd_allowed_ranges: - 192.168.111.0/24 - 192.168.122.0/24 - 192.168.133.0/24 - 192.168.144.0/24 edpm_sshd_configure_firewall: true enable_debug: false gather_facts: false image_tag: current-podified neutron_physical_bridge_name: br-ex neutron_public_interface_name: eth0 service_net_map: nova_api_network: internalapi nova_libvirt_network: internalapi storage_mgmt_cidr: "24" storage_mgmt_host_routes: [] storage_mgmt_mtu: 9000 storage_mgmt_vlan_id: 23 storage_mtu: 9000 timesync_ntp_servers: - hostname: pool.ntp.org ansibleSSHPrivateKeySecret: dataplane-ansible-ssh-private-key-secret managementNetwork: ctlplane networks: - defaultRoute: true name: ctlplane subnetName: subnet1 - name: internalapi subnetName: subnet1 - name: storage subnetName: subnet1 - name: tenant subnetName: subnet1 nodes: edpm-compute-0: ansible: host: 192.168.122.100 hostName: compute-0 networks: - defaultRoute: true fixedIP: 192.168.122.100 name: ctlplane subnetName: subnet1 - name: internalapi subnetName: subnet1 - name: storage subnetName: subnet1 - name: storagemgmt subnetName: subnet1 - name: tenant subnetName: subnet1 edpm-compute-1: ansible: host: 192.168.122.101 hostName: compute-1 networks: - defaultRoute: true fixedIP: 192.168.122.101 name: ctlplane subnetName: subnet1 - name: internalapi subnetName: subnet1 - name: storage subnetName: subnet1 - name: storagemgmt subnetName: subnet1 - name: tenant subnetName: subnet1 edpm-compute-2: ansible: host: 192.168.122.102 hostName: compute-2 networks: - defaultRoute: true fixedIP: 192.168.122.102 name: ctlplane subnetName: subnet1 - name: internalapi subnetName: subnet1 - name: storage subnetName: subnet1 - name: storagemgmt subnetName: subnet1 - name: tenant subnetName: subnet1 preProvisioned: true services: - bootstrap - configure-network - validate-network - install-os - ceph-hci-pre - configure-os - ssh-known-hosts - run-os - reboot-osCR을 적용합니다.
$ oc apply -f <dataplane_cr_file>&
lt;dataplane_cr_file>을 파일 이름으로 바꿉니다.참고Ansible은
OpenStackDataPlaneDeploymentCRD가 생성될 때까지 네트워크를 구성하거나 검증하지 않습니다.
-
OpenShift에 Red Hat OpenStack Services 배포 가이드에 설명된 대로
OpenStackDataPlaneDeployment CRD를 생성합니다. 이 가이드에는OpenStackDataPlaneNodeSetCRD 파일이 정의되어 데이터 플레인 노드에서 서비스를 구성할 수 있습니다. https://docs.redhat.com/en/documentation/red_hat_openstack_services_on_openshift/18.0/html/deploying_red_hat_openstack_services_on_openshift/assembly_creating-the-data-plane 네트워크가 구성되었는지 확인하려면 다음 단계를 완료합니다.
- 데이터 플레인 노드에 SSH를 수행합니다.
-
ip a명령을 사용하여 구성된 네트워크를 표시합니다. - 스토리지 네트워크가 구성된 네트워크 목록에 있는지 확인합니다.
5.2. 하이퍼컨버지드 Red Hat Ceph Storage 구성 및 배포 링크 복사링크가 클립보드에 복사되었습니다!
다음 단계는 특히 RHCS(Red Hat Ceph Storage)의 하이퍼컨버지드 구성용이며 외부 RHCS 클러스터를 배포한 경우에는 필요하지 않습니다.
구성 파일을 편집하고 cephadm 유틸리티를 사용하여 Red Hat Ceph Storage를 구성하고 배포합니다.
프로세스
- Red Hat Ceph Storage 구성 파일을 편집합니다.
스토리지 및 스토리지관리네트워크 범위를 추가합니다. Red Hat Ceph Storage는스토리지네트워크를 Red Hat Ceph Storagepublic_network로 사용하고스토리지 관리네트워크를cluster_network로 사용합니다.다음 예제는
스토리지네트워크 범위가172.18.0.0/24이고 스토리지관리네트워크 범위는172.20.0.0/24인 구성 파일 항목에 대한 것입니다.[global] public_network = 172.18.0.0/24 cluster_network = 172.20.0.0/24Compute 서비스와 Ceph OSD 서비스 간에 배치 경계를 추가합니다. CPU 및 메모리 경합을 줄이기 위해 배치된 Compute 서비스와 Ceph OSD 서비스 간에 경계를 설정해야 합니다.
다음은 다음 경계가 설정된 Ceph 구성 파일 항목의 예입니다.
[osd] osd_memory_target_autotune = true osd_numa_auto_affinity = true [mgr] mgr/cephadm/autotune_memory_target_ratio = 0.2이 예에서는 OSD 데몬이
osd_memory_target옵션을 기반으로 메모리 사용을 조정하도록osd_memory_target_autotune매개변수가true로 설정됩니다.autotune_memory_target_ratio의 기본값은 Cryostat입니다. 이는 시스템의 전체 RAM의 70%가 자동 조정되지 않은 Ceph 데몬에서 사용하는 메모리를 제거하는 시작점임을 의미합니다. 나머지 메모리는 OSD로 나뉩니다. 모든 OSD에osd_memory_target_autotune이 true로 설정되어 있다고 가정합니다. HCI 배포의 경우 Compute 서비스에 더 많은 메모리를 사용할 수 있도록mgr/cephadm/autotune_memory_target_ratio를 0.2로 설정할 수 있습니다.서비스 배치에 대한 자세한 내용은 NUMA 노드의 HCI 환경에서 서비스 배치를 참조하십시오.
참고배포 후 이러한 값을 조정해야 하는 경우
ceph config set osd <key> <value> 명령을사용합니다.데이터 플레인 노드에 편집된 구성 파일을 사용하여 Ceph Storage를 배포합니다.
$ cephadm bootstrap --config <config_file> --mon-ip <data_plane_node_ip> --skip-monitoring-stack-
&
lt;config_file>을 Ceph 구성 파일의 이름으로 바꿉니다. &
lt;data_plane_node_ip>를 Red Hat CephStorage가 설치될 데이터 플레인 노드의 스토리지 네트워크 IP 주소로 바꿉니다.참고--skip-monitoring-stack옵션은cephadm bootstrap명령에서 모니터링 서비스 배포를 건너뛰는 데 사용됩니다. 이렇게 하면 모니터링 서비스가 이전에 이전 프로세스의 일부로 배포된 경우 Red Hat Ceph Storage 배포가 성공적으로 완료됩니다.모니터링 서비스가 배포되지 않은 경우 모니터링 서비스 활성화에 대한 정보 및 절차는 Red Hat Ceph Storage 설명서를 참조하십시오.
-
&
- Red Hat Ceph Storage 클러스터가 첫 번째 EDPM 노드에 부트 스트랩된 후 Red Hat Ceph Storage 설치 가이드의 Red Hat Ceph Storage 설치를 참조하여 다른 EDPM 노드를 Ceph 클러스터에 추가합니다.
5.3. DCN 데이터 플레인 구성 링크 복사링크가 클립보드에 복사되었습니다!
Red Hat Ceph Storage는 데이터 플레인 노드에서 사용할 수 있도록 스토리지 솔루션으로 구성해야 합니다.
사전 요구 사항
- Red Hat Ceph Storage 통합 절차를 완료합니다.
프로세스
-
OpenStackDataPlaneNodeSetCR을 편집합니다. Compute 서비스(nova)에
cephx키 및 구성 파일을 사용할 수 있도록 하려면extraMounts매개변수를 사용합니다.다음은 이를 위해
extraMounts매개변수를 사용하는 예입니다.apiVersion: dataplane.openstack.org/v1beta1 kind: OpenStackDataPlaneNodeSet spec: ... nodeTemplate: extraMounts: - extraVolType: Ceph volumes: - name: ceph secret: secretName: ceph-conf-files mounts: - name: ceph mountPath: "/etc/ceph" readOnly: trueConfigMap을 생성하여 Compute 서비스(nova)에 필요한 구성 세부 정보를 추가합니다.ceph-nova-az0.yaml이라는 파일을 생성하고 다음과 유사한 내용을 추가합니다. 로컬 가용성 영역의 Image 서비스(glance) 끝점을 추가하고cross_az_attach매개변수를 false로 설정해야 합니다.apiVersion: v1 kind: ConfigMap metadata: name: ceph-nova-az0 namespace: openstack data: 03-ceph-nova.conf: [libvirt] images_type = rbd images_rbd_pool = vms images_rbd_ceph_conf = /etc/ceph/az0.conf images_rbd_glance_store_name = az0 images_rbd_glance_copy_poll_interval = 15 images_rbd_glance_copy_timeout = 600 rbd_user = openstack rbd_secret_uuid = 9cfb3a03-3f91-516a-881e-a675f67c30ea hw_disk_discard = unmap volume_use_multipath = False [glance] endpoint_override = http://glance-az0-internal.openstack.svc:9292 valid_interfaces = internal [cinder] cross_az_attach = False catalog_info = volumev3:cinderv3:internalURLConfigMap을 생성합니다.oc create -f ceph-nova-az0.yamlConfigMap을 사용할 사용자 지정 Compute(nova) 서비스를 생성합니다.
nova-custom-az0.yaml이라는 파일을 생성하고 다음과 유사한 내용을 추가합니다.dataSources필드에서 방금 생성한ConfigMap의 이름을 추가해야 합니다.apiVersion: dataplane.openstack.org/v1beta1 kind: OpenStackDataPlaneService metadata: name: nova-custom-ceph-az0 spec: addCertMounts: false caCerts: combined-ca-bundle dataSources: - configMapRef: name: ceph-nova-az0 - secretRef: name: nova-cell1-compute-config - secretRef: name: nova-migration-ssh-key edpmServiceType: nova playbook: osp.edpm.nova tlsCerts: default: contents: - dnsnames - ips edpmRoleServiceName: nova issuer: osp-rootca-issuer-internal networks: - ctlplane사용자 정의 서비스를 생성합니다.
oc create -f nova-custom-ceph-az0.yaml참고각 가용성 영역에 대해 고유한
ConfigMap및 사용자 지정 Compute 서비스를 생성해야 합니다. 이전 단계에 표시된 대로 이러한 파일 이름의 끝에 가용성 영역을 추가합니다.-
CR에서
서비스목록을 찾습니다. 서비스목록을 편집하여 데이터 플레인 노드 네트워크 구성에서 제거된 모든 서비스를 복원합니다. 전체서비스목록을 복원하면 나머지 작업을 실행하여 HCI 환경 구성을 완료할 수 있습니다.다음은 굵은 추가
서비스가 포함된 전체 서비스목록의 예입니다.apiVersion: dataplane.openstack.org/v1beta1 kind: OpenStackDataPlaneNodeSet spec: ... services: - bootstrap - configure-network - validate-network - install-os - ceph-hci-pre - configure-os - ssh-known-hosts - run-os - reboot-os - install-certs - ceph-client - ovn - neutron-metadata - libvirt - nova-custom-ceph-az0참고기본 서비스 목록을 복원하는 것 외에도
run-os서비스 뒤에ceph-client서비스가 추가됩니다.ceph-client서비스는 EDPM 노드를 Red Hat Ceph Storage 서버의 클라이언트로 구성합니다. 이 서비스는 클라이언트가 Red Hat Ceph Storage 서버에 연결하는 데 필요한 파일을 배포합니다.ceph-hci-pre서비스는 HCI를 배포하는 경우에만 필요합니다.선택 사항: 컴퓨팅 노드를 컴퓨팅 서비스(nova) 셀에 다른 환경에서와 동일하게 할당할 수 있습니다.
OpenStackDataPlaneNodeSetCR의nova서비스를 사용자 정의nova서비스로 교체합니다.apiVersion: dataplane.openstack.org/v1beta1 kind: OpenStackDataPlaneNodeSet metadata: name: openstack-cell2 spec: services: - download-cache - bootstrap - configure-network - validate-network - install-os - configure-os - ssh-known-hosts - run-os - ovn - libvirt - *nova-cell-custom*자세한 내용은 OpenStackDataPlaneNodeSetSR을 컴퓨팅 셀에 연결을 참조하십시오.
참고셀을 사용하는 경우
neutron-metadata서비스는 셀마다 고유하며 별도로 정의됩니다. 예를 들면neutron-metadata-cell1입니다.apiVersion: dataplane.openstack.org/v1beta1 kind: OpenStackDataPlaneService metadata: labels: app.kubernetes.io/instance: neutron-metadata-cell1 app.kubernetes.io/name: openstackdataplaneservice app.kubernetes.io/part-of: openstack-operator name: neutron-metadata-cell1 ...nova-custom-ceph서비스는 각 가용성 영역마다 고유하며 별도로 정의됩니다. 예를 들면nova-custom-ceph-az0입니다.apiVersion: dataplane.openstack.org/v1beta1 kind: OpenStackDataPlaneService metadata: labels: app.kubernetes.io/instance: nova-custom-ceph-az0 app.kubernetes.io/name: openstackdataplaneservice app.kubernetes.io/part-of: openstack-operator name: nova-custom-ceph-az0 namespace: openstack선택 사항: RHCS(Red Hat Ceph Storage)를 하이퍼컨버지드 솔루션으로 배포하는 경우 다음 단계를 완료합니다.
ConfigMap을 생성하여reserved_host_memory_mb매개변수를 구성에 적합한 값으로 설정합니다.다음은 이 목적에 사용되는 ConfigMap의 예입니다.
apiVersion: v1 kind: ConfigMap metadata: name: reserved-memory-nova data: 04-reserved-memory-nova.conf: | [DEFAULT] reserved_host_memory_mb=75000참고Compute 서비스 스케줄러가 동일한 서버의 Ceph OSD에 메모리를 제공하지 않도록
reserved_host_memory_mb매개변수의 값을 설정할 수 있습니다. 이 예제에서는 하이퍼바이저의 기본 예약 메모리 외에 호스트당 OSD당 5GB를 예약합니다. IOPS에 최적화된 클러스터에서는 각 OSD에 더 많은 메모리를 예약하여 성능을 향상시킬 수 있습니다. 5GB 번호는 시작 지점으로 제공되며 필요한 경우 추가로 조정할 수 있습니다.OpenStackDataPlaneService/nova-custom-ceph-az파일을 편집합니다. 이전에 생성한ceph-nova-az0이라는OpenStackDataPlaneServiceCR의configMaps목록에reserved-memory-nova를 추가합니다.kind: OpenStackDataPlaneService <...> spec: configMaps: - ceph-nova - reserved-memory-nova
CR 변경 사항을 적용합니다.
$ oc apply -f <dataplane_cr_file>&
lt;dataplane_cr_file>을 파일 이름으로 바꿉니다.참고Ansible은
OpenStackDataPlaneDeploymentCRD가 생성될 때까지 네트워크를 구성하거나 검증하지 않습니다.
-
OpenShift에 Red Hat OpenStack Services 배포 가이드에 설명된 대로
OpenStackDataPlaneDeployment CRD를 생성합니다. 이 가이드에는OpenStackDataPlaneNodeSetCRD 파일이 정의되어 데이터 플레인 노드에서 서비스를 구성할 수 있습니다. https://docs.redhat.com/en/documentation/red_hat_openstack_services_on_openshift/18.0/html/deploying_red_hat_openstack_services_on_openshift/assembly_creating-the-data-plane
example-node-set-resource
5.4. 노드 세트 리소스 예 링크 복사링크가 클립보드에 복사되었습니다!
다음 예제에는 세 개의 노드가 있습니다. 스토리지 관리 네트워크 범위가 172.20.0.0/24 이고 vlan23 이라고 가정합니다.
apiVersion: dataplane.openstack.org/v1beta1
kind: OpenStackDataPlaneNodeSet
metadata:
name: openstack-edpm
namespace: openstack
spec:
env:
- name: ANSIBLE_FORCE_COLOR
value: "True"
networkAttachments:
- ctlplane
nodeTemplate:
ansible:
ansiblePort: 22
ansibleUser: cloud-admin
ansibleVars:
edpm_ceph_hci_pre_enabled_services:
- ceph_mon
- ceph_mgr
- ceph_osd
edpm_fips_mode: check
edpm_iscsid_image: {{ registry_url }}/openstack-iscsid:{{ image_tag }}
edpm_logrotate_crond_image: {{ registry_url }}/openstack-cron:{{ image_tag }}
edpm_network_config_hide_sensitive_logs: false
edpm_network_config_os_net_config_mappings:
edpm-compute-0:
nic1: 52:54:00:1e:af:6b
nic2: 52:54:00:d9:cb:f4
edpm-compute-1:
nic1: 52:54:00:f2:bc:af
nic2: 52:54:00:f1:c7:dd
edpm-compute-2:
nic1: 52:54:00:dd:33:14
nic2: 52:54:00:50:fb:c3
edpm_network_config_template: |
---
{% set mtu_list = [ctlplane_mtu] %}
{% for network in nodeset_networks %}
{{ mtu_list.append(lookup(vars, networks_lower[network] ~ _mtu)) }}
{%- endfor %}
{% set min_viable_mtu = mtu_list | max %}
network_config:
- type: ovs_bridge
name: {{ neutron_physical_bridge_name }}
mtu: {{ min_viable_mtu }}
use_dhcp: false
dns_servers: {{ ctlplane_dns_nameservers }}
domain: {{ dns_search_domains }}
addresses:
- ip_netmask: {{ ctlplane_ip }}/{{ ctlplane_cidr }}
routes: {{ ctlplane_host_routes }}
members:
- type: interface
name: nic2
mtu: {{ min_viable_mtu }}
# force the MAC address of the bridge to this interface
primary: true
{% for network in nodeset_networks %}
- type: vlan
mtu: {{ lookup(vars, networks_lower[network] ~ _mtu) }}
vlan_id: {{ lookup(vars, networks_lower[network] ~ _vlan_id) }}
addresses:
- ip_netmask:
{{ lookup(vars, networks_lower[network] ~ _ip) }}/{{ lookup(vars, networks_lower[network] ~ _cidr) }}
routes: {{ lookup(vars, networks_lower[network] ~ _host_routes) }}
{% endfor %}
edpm_neutron_metadata_agent_image: {{ registry_url }}/openstack-neutron-metadata-agent-ovn:{{ image_tag }}
edpm_nodes_validation_validate_controllers_icmp: false
edpm_nodes_validation_validate_gateway_icmp: false
edpm_selinux_mode: enforcing
edpm_sshd_allowed_ranges:
- 192.168.111.0/24
- 192.168.122.0/24
- 192.168.133.0/24
- 192.168.144.0/24
edpm_sshd_configure_firewall: true
enable_debug: false
gather_facts: false
image_tag: current-podified
neutron_physical_bridge_name: br-ex
neutron_public_interface_name: eth0
service_net_map:
nova_api_network: internalapi
nova_libvirt_network: internalapi
storage_mgmt_cidr: "24"
storage_mgmt_host_routes: []
storage_mgmt_mtu: 9000
storage_mgmt_vlan_id: 23
storage_mtu: 9000
timesync_ntp_servers:
- hostname: pool.ntp.org
ansibleSSHPrivateKeySecret: dataplane-ansible-ssh-private-key-secret
managementNetwork: ctlplane
networks:
- defaultRoute: true
name: ctlplane
subnetName: subnet1
- name: internalapi
subnetName: subnet1
- name: storage
subnetName: subnet1
- name: tenant
subnetName: subnet1
- name: external
subnetName: external1
nodes:
edpm-compute-0:
ansible:
host: 192.168.122.100
hostName: compute-0
networks:
- defaultRoute: true
fixedIP: 192.168.122.100
name: ctlplane
subnetName: subnet1
- name: internalapi
subnetName: subnet1
- name: storage
subnetName: subnet1
- name: storagemgmt
subnetName: subnet1
- name: tenant
subnetName: subnet1
- name: external
subnetName: external1
edpm-compute-1:
ansible:
host: 192.168.122.101
hostName: compute-1
networks:
- defaultRoute: true
fixedIP: 192.168.122.101
name: ctlplane
subnetName: subnet1
- name: internalapi
subnetName: subnet1
- name: storage
subnetName: subnet1
- name: storagemgmt
subnetName: subnet1
- name: tenant
subnetName: subnet1
- name: external
subnetName: external1
edpm-compute-2:
ansible:
host: 192.168.122.102
hostName: compute-2
networks:
- defaultRoute: true
fixedIP: 192.168.122.102
name: ctlplane
subnetName: subnet1
- name: internalapi
subnetName: subnet1
- name: storage
subnetName: subnet1
- name: storagemgmt
subnetName: subnet1
- name: tenant
subnetName: subnet1
- name: external
subnetName: external1
preProvisioned: true
services:
- bootstrap
- configure-network
- validate-network
- install-os
- ceph-hci-pre
- configure-os
- ssh-known-hosts
- run-os
- reboot-os
네트워크 연결 키에 스토리지 관리 네트워크를 추가할 필요가 없습니다.
5.5. 컨트롤 플레인 업데이트 링크 복사링크가 클립보드에 복사되었습니다!
중앙 위치에 데이터 플레인을 배포한 후 컨트롤 플레인을 업데이트해야 합니다.
사전 요구 사항
- OpenShift에서 Red Hat OpenStack 서비스를 사용하여 중앙 위치에 설정된 노드를 배포했습니다.
- RHCS(Red Hat Ceph Storage)를 배포했습니다.
프로세스
선택 사항:
openstack_control_plane.yaml파일에서 블록 스토리지 백업 서비스를 구성합니다.cinderBackup: customServiceConfig: | [DEFAULT] backup_driver = cinder.backup.drivers.ceph.CephBackupDriver backup_ceph_pool = backups backup_ceph_user = openstack블록 스토리지 백업 서비스 구성에 대한 자세한 내용은 Block Storage 백업 서비스 구성을 참조하십시오.
openstack_control_plane.yaml파일에서 Block Storage cinder 볼륨 서비스를 업데이트합니다.cinderVolumes: az0: customServiceConfig: | [DEFAULT] enabled_backends = ceph glance_api_servers = https://glance-az0-internal.openstack.svc:9292 [ceph] volume_backend_name = ceph volume_driver = cinder.volume.drivers.rbd.RBDDriver rbd_ceph_conf = /etc/ceph/az0.conf rbd_user = openstack rbd_pool = volumes rbd_flatten_volume_from_snapshot = False rbd_secret_uuid = 795dcbca-e715-5ac3-9b7e-a3f5c64eb89f rbd_cluster_name = az0 backend_availability_zone = az0블록 스토리지 볼륨 서비스 구성에 대한 자세한 내용은 볼륨 서비스 구성을 참조하십시오.
openstack_control_plane.yaml파일에 extraMounts 필드를 추가하여 Red Hat Ceph Storage 보안에 액세스해야 하는 서비스를 정의합니다.extraMounts: - extraVol: - extraVolType: Ceph mounts: - mountPath: /etc/ceph name: ceph readOnly: true propagation: - az0 - CinderBackup volumes: - name: ceph projected: sources: - secret: name: ceph-conf-az-0openstack_control_plane.yaml파일에서 Image 서비스(glance)를 업데이트하여 Block Storage 서비스를 백엔드로 구성합니다.glanceAPIs: az0: customServiceConfig: | [DEFAULT] enabled_import_methods = [web-download,copy-image,glance-direct] enabled_backends = az0:rbd [glance_store] default_backend = az0 [az0] rbd_store_ceph_conf = /etc/ceph/az0.conf store_description = "az0 RBD backend" rbd_store_pool = images rbd_store_user = openstack rbd_thin_provisioning = TrueOpenStackControlPlaneCR에 대한 변경 사항을 적용합니다.oc apply -f openstack_control_plane.yaml호스트 집계에 AZ를 추가합니다. 이를 통해 OpenStack 관리자는 이미지 메타데이터를 기반으로 지리적 위치에 워크로드를 예약할 수 있습니다.
openstackclientpod의 터미널을 엽니다.# oc rsh openstackclient새 OpenStack 집계를 생성합니다.
$ openstack aggregate create <aggregate_name>OpenStack 집계에 AZ 이름으로 레이블을 지정합니다.
$ openstack aggregate set --zone <availability_zone> <aggregate_name>AZ의 각 호스트를 집계에 추가합니다.
$ openstack aggregate add host <aggregate_name> <compute_node_1> $ openstack aggregate add host <aggregate_name> <compute_node_2> ...
5.6. DCN 에지 위치 배포 후 컨트롤 플레인 업데이트 링크 복사링크가 클립보드에 복사되었습니다!
OpenStackDataPlaneNodeSet CR(사용자 정의 리소스)을 사용하여 추가 노드 세트를 생성할 수 있습니다. 배포 중인 사이트와 관련된 고유한 가용성 영역과 VLAN, NIC 매핑 및 IP 주소를 사용합니다. OpenStackDataPlaneNodeSet 배포에 대한 자세한 내용은 데이터 플레인 생성을 참조하십시오.
스토리지를 사용하여 DCN 노드 세트를 배포할 때 중앙 위치에서 OpenStackControlPlane CR의 두 필드를 업데이트해야 합니다.
-
cinderVolumes -
glanceAPIs - Neutron
- OVN
셀을 사용하는 경우 새 DCN 사이트에 대한 셀도 구성해야 합니다.
사전 요구 사항
- 중앙 위치를 배포했습니다.
-
추가
OpenStackDataPlane노드 세트를 배포했습니다.
프로세스
neutron 서비스 구성에서 customServiceConfig 필드를 업데이트하여 새 가용성 영역 및 네트워크 리프를 추가합니다.
customServiceConfig: | [DEFAULT] router_scheduler_driver = neutron.scheduler.l3_agent_scheduler.AZLeastRoutersScheduler network_scheduler_driver = neutron.scheduler.dhcp_agent_scheduler.AZAwareWeightScheduler default_availability_zones = az0,az1 [ml2_type_vlan] network_vlan_ranges = datacentre:1:1000,leaf1:1:1000 [neutron] physnets = datacentre,leafOVN 서비스 구성에서 가용성 영역을 업데이트합니다.
ovnController: external-ids: availability-zones: - az0 - az1 enable-chassis-as-gateway ovn-bridge: br-int onv-enap-type: geneve system-id: random networkAttachment: tenant nicMappings: datacentre: ospbrOpenStackControlPlaneCR에서cinderVolumes필드를 업데이트하여 원격 위치의 가용성 영역 정의를 추가합니다. 각 가용성 영역의 각 cinder 볼륨 서비스는 가용성 영역에 Glance API 서버를 사용합니다. For example,glance_api_servers = https://glance-az1-internal.openstack.svc:9292:cinderVolumes: az0: customServiceConfig: | [DEFAULT] .... az1: customServiceConfig: | [DEFAULT] enabled_backends = ceph glance_api_servers = https://glance-az1-internal.openstack.svc:9292 [ceph] volume_backend_name = az1 volume_driver = cinder.volume.drivers.rbd.RBDDriver rbd_ceph_conf = /etc/ceph/az1.conf rbd_user = openstack rbd_pool = volumes rbd_flatten_volume_from_snapshot = False rbd_secret_uuid = 19ccdd60-79a0-5f0f-aece-ece700e514f8 rbd_cluster_name = az1 backend_availability_zone = az1Image 서비스(glance) Pod를 ID 서비스(keystone) 카탈로그에 등록합니다.
DCN에서 이미지 서비스 Pod는 각 노드 세트에 대해 배포됩니다. 단일 이미지 서비스 포드는 언제든지 ID 서비스(keystone) 카탈로그에 등록됩니다. 이러한 이유로 최상위 Glance CR에서 keystoneEndpoint 매개변수가 정의되고 노출됩니다. 단일 인스턴스가 배포되지 않는 한 기본 OpenStackControlPlane CR을 적용하기 전에 operator를 선택할 수 있으며 keystone에 등록해야 하는 인스턴스를 적용할 수 있습니다. 기본 끝점은
az0glance API이므로 keystoneEndpoint는 az0으로 설정됩니다.spec: <...> glance: enabled: true keystoneEndpoint: az0 glanceAPIs: az0: apiTimeout: 60glanceAPIs필드를 업데이트합니다.az0에서 노드 세트의 경우glanceAPIs필드는 중앙 위치에 대한 이미지 서비스 Pod를 구성합니다. AZ1에 설정된 추가 노드를 추가하면glanceAPIs필드에 AZ0 및 AZ1에 대한 Image 서비스(glance) Pod 정의가 포함되도록OpenStackControlPlaneCR이 업데이트됩니다. 또한 AZ1의 이미지 서비스 Pod는 중앙 위치에 대한 ceph 백엔드를 정의하고 중앙 위치에 대한 AZ0 이미지 서비스 Pod가 AZ1의 ceph 백엔드 정의를 갖도록 업데이트됩니다.glanceAPIs: az1: customServiceConfig: | [DEFAULT] enabled_import_methods = [web-download,copy-image,glance-direct] enabled_backends = az0:rbd,az1:rbd [glance_store] default_backend = az1 [az1] rbd_store_ceph_conf = /etc/ceph/az1.conf store_description = "az1 RBD backend" rbd_store_pool = images rbd_store_user = openstack rbd_thin_provisioning = True [az0] rbd_store_ceph_conf = /etc/ceph/az0.conf store_description = "az0 RBD backend" rbd_store_pool = images rbd_store_user = openstack rbd_thin_provisioning = True networkAttachments: - storage override: service: internal: metadata: annotations: metallb.universe.tf/address-pool: internalapi metallb.universe.tf/allow-shared-ip: internalapi metallb.universe.tf/loadBalancerIPs: 172.17.0.81 spec: type: LoadBalancer replicas: 2 type: edge az0: customServiceConfig: | [DEFAULT] enabled_import_methods = [web-download,copy-image,glance-direct] enabled_backends = az0:rbd,az1:rbd [glance_store] default_backend = az0 [az0] rbd_store_ceph_conf = /etc/ceph/az0.conf store_description = "az0 RBD backend" rbd_store_pool = images rbd_store_user = openstack rbd_thin_provisioning = True [az1] rbd_store_ceph_conf = /etc/ceph/az1.conf store_description = "az1 RBD backend" rbd_store_pool = images rbd_store_user = openstack rbd_thin_provisioning = True networkAttachments: - storage override: service: internal: metadata: annotations: metallb.universe.tf/address-pool: internalapi metallb.universe.tf/allow-shared-ip: internalapi metallb.universe.tf/loadBalancerIPs: 172.17.0.80 spec: type: LoadBalancer replicas: 3 type: split참고가용성 영역
az0은분할유형이며 다른 모든 가용성 영역은에지유형입니다.분할 유형은 이미지를 업로드할 때 클라우드 사용자가 사용할 수 있는 것입니다. Cinder 또는 Nova가 Glance와 상호 작용할 때 로컬인 Glance를 구성할 수 있도록 에지 유형이 생성됩니다. Glance Pod에 기본 분할 Glance Pod 및 2개의 복제본에 대해 복제본을 3개 이상 사용하고 워크로드에 비례하여 복제본을 늘립니다.
선택 사항: 셀 구성을 업데이트합니다.
기본적으로 모든 가용성 영역(AZ)의 컴퓨팅 노드는
cell1이라는 공통 셀에 배치됩니다. 컴퓨팅 노드를 별도의 셀로 분할하여 대규모 배포의 성능을 향상시킬 수 있습니다. DCN 배포의 경우 각 가용성 영역을 자체 셀에 배치합니다. 자세한 내용은 컨트롤 플레인에 컴퓨팅 셀 추가를 참조하십시오.OpenStackControlPlaneCR에 대한 변경 사항을 적용합니다.oc apply -f openstack_control_plane.yaml추가된 각 추가 에지 사이트에 대해 컨트롤 플레인을 계속 업데이트합니다. 필요에 따라 RHCS(Red Hat Storage Service)를 OpenShift 시크릿에 추가합니다.
neutron 서비스 구성에서 customServiceConfig 필드를 업데이트하여 새 가용성 영역 및 네트워크 리프를 추가합니다.
customServiceConfig: | [DEFAULT] router_scheduler_driver = neutron.scheduler.l3_agent_scheduler.AZLeastRoutersScheduler network_scheduler_driver = neutron.scheduler.dhcp_agent_scheduler.AZAwareWeightScheduler default_availability_zones = az0,az1,az2 [ml2_type_vlan] network_vlan_ranges = datacentre:1:1000,leaf1:1:1000,leaf2:1:1000 [neutron] physnets = datacentre,leaf1,leaf2OVN 서비스 구성에서 가용성 영역을 업데이트합니다.
ovnController: external-ids: availability-zones: - az0 - az1 - az2 enable-chassis-as-gateway ovn-bridge: br-int onv-enap-type: geneve system-id: random networkAttachment: tenant nicMappings: datacentre: ospbrcinderVolumes서비스 필드에 추가 가용성 영역을 추가합니다.cinderVolumes: az0: customServiceConfig: | [DEFAULT] ... az1: customServiceConfig: | [DEFAULT] ... az2: customServiceConfig: | [DEFAULT] enabled_backends = ceph glance_api_servers = https://glance-az2-internal.openstack.svc:9292 [ceph] volume_backend_name = ceph volume_driver = cinder.volume.drivers.rbd.RBDDriver rbd_ceph_conf = /etc/ceph/az2.conf rbd_user = openstack rbd_pool = volumes rbd_flatten_volume_from_snapshot = False rbd_secret_uuid = 5c0c7a8e-55b1-5fa8-bc5c-9756b7862d2f rbd_cluster_name = az2 backend_availability_zone = az2glanceAPIs필드에 추가 가용성 영역을 추가합니다.AZ를 추가할 때 각 이미지 서비스 포드 정의에 중앙 위치(AZ0)의 스토리지 구성과 자체 로컬 ceph 구성이 포함되어 있는지 확인해야 합니다. 또한 중앙 위치에 다른 모든 사이트의 스토리지 정의가 있는지 확인해야 합니다. 이렇게 하면 중앙 위치 이미지 서비스 Pod와 지리적으로 분산된 노드 세트를 위한 이미지 서비스 Pod 간의 허브 및 대화 상대 관계가 생성됩니다.
glanceAPIs: az0: customServiceConfig: | [DEFAULT] enabled_import_methods = [web-download,copy-image,glance-direct] enabled_backends = az0:rbd,az1:rbd,az2:rbd [glance_store] default_backend = az0 [az0] rbd_store_ceph_conf = /etc/ceph/az0.conf store_description = "az0 RBD backend" rbd_store_pool = images rbd_store_user = openstack rbd_thin_provisioning = True [az1] rbd_store_ceph_conf = /etc/ceph/az1.conf store_description = "az1 RBD backend" rbd_store_pool = images rbd_store_user = openstack rbd_thin_provisioning = True [az2] rbd_store_ceph_conf = /etc/ceph/az2.conf store_description = "az2 RBD backend" rbd_store_pool = images rbd_store_user = openstack rbd_thin_provisioning = True networkAttachments: - storage override: service: internal: metadata: annotations: metallb.universe.tf/address-pool: internalapi metallb.universe.tf/allow-shared-ip: internalapi metallb.universe.tf/loadBalancerIPs: 172.17.0.80 spec: type: LoadBalancer replicas: 3 type: split az1: customServiceConfig: | [DEFAULT] enabled_import_methods = [web-download,copy-image,glance-direct] enabled_backends = az0:rbd,az1:rbd [glance_store] default_backend = az1 [az1] rbd_store_ceph_conf = /etc/ceph/az1.conf store_description = "az1 RBD backend" rbd_store_pool = images rbd_store_user = openstack rbd_thin_provisioning = True [az0] rbd_store_ceph_conf = /etc/ceph/az0.conf store_description = "az0 RBD backend" rbd_store_pool = images rbd_store_user = openstack rbd_thin_provisioning = True networkAttachments: - storage override: service: internal: metadata: annotations: metallb.universe.tf/address-pool: internalapi metallb.universe.tf/allow-shared-ip: internalapi metallb.universe.tf/loadBalancerIPs: 172.17.0.81 spec: type: LoadBalancer replicas: 2 type: edge az2: customServiceConfig: | [DEFAULT] enabled_import_methods = [web-download,copy-image,glance-direct] enabled_backends = az0:rbd,az2:rbd [glance_store] default_backend = az2 [az2] rbd_store_ceph_conf = /etc/ceph/az2.conf store_description = "az2 RBD backend" rbd_store_pool = images rbd_store_user = openstack rbd_thin_provisioning = True [az0] rbd_store_ceph_conf = /etc/ceph/az0.conf store_description = "az0 RBD backend" rbd_store_pool = images rbd_store_user = openstack rbd_thin_provisioning = True networkAttachments: - storage override: service: internal: metadata: annotations: metallb.universe.tf/address-pool: internalapi metallb.universe.tf/allow-shared-ip: internalapi metallb.universe.tf/loadBalancerIPs: 172.17.0.82 spec: type: LoadBalancer replicas: 2 type: edge
OpenStackControlPlaneCR에 대한 변경 사항을 적용합니다.oc apply -f openstack_control_plane.yaml호스트 집계에 AZ를 추가합니다. 이를 통해 OpenStack 관리자는
--availabliity-zone인수를 전달하여 지리적 위치에 워크로드를 예약할 수 있습니다.openstackclientpod의 터미널을 엽니다.# oc rsh openstackclient새 OpenStack 집계를 생성합니다.
$ openstack aggregate create <aggregate_name>OpenStack 집계에 AZ 이름으로 레이블을 지정합니다.
$ openstack aggregate set --zone <availability_zone> <aggregate_name>AZ의 각 호스트를 집계에 추가합니다.
$ openstack aggregate add host <aggregate_name> <compute_node_1> $ openstack aggregate add host <aggregate_name> <compute_node_2> ...
5.7. DCN 사이트에서 노드 세트에 노드 추가 링크 복사링크가 클립보드에 복사되었습니다!
기존 OpenStackDataPlaneNodeSet CR(사용자 정의 리소스)의 nodes 섹션에 새 노드를 추가하여 사이트의 데이터 플레인을 확장할 수 있습니다.
사전 요구 사항
- 추가하는 노드가 사전 프로비저닝됩니다. 사전 프로비저닝에 대한 자세한 내용은 사전 프로비저닝된 노드를 사용하여 OpenStackDataPlaneNodeSet CR 생성 을 참조하십시오.
프로세스
-
업데이트할 노드 세트의
OpenStackDataPlaneNodeSet매니페스트 파일을 엽니다(예:openstack_data_plane.yaml). 노드 세트에 새 노드를 추가합니다.
apiVersion: dataplane.openstack.org/v1beta1 kind: OpenStackDataPlaneNodeSet metadata: name: openstack-node-set spec: preProvisioned: True nodes: ... edpm-compute-3: hostName: edpm-compute-3 ansible: ansibleHost: 192.168.122.103 networks: - name: CtlPlane subnetName: subnet1 defaultRoute: true fixedIP: 192.168.122.103 - name: InternalApi subnetName: subnet1 - name: Storage subnetName: subnet1 - name: Tenant subnetName: subnet1 ...OpenStackDataPlaneNodeSet매니페스트 파일에서edpm_network_config_os_net_config_mappings를 편집하여 새 호스트의 mac 주소를 추가합니다.... edpm_network_config_os_net_config_mappings: edpm-compute-0: nic1: 52:54:00:1e:af:6b nic2: 52:54:00:d9:cb:f4 edpm-compute-1: nic1: 52:54:00:f2:bc:af nic2: 52:54:00:f1:c7:dd edpm-compute-2: nic1: 52:54:00:dd:33:14 nic2: 52:54:00:50:fb:c3 edpm-compute-3: nic1: 52:54:12:8b:be:9a nic2: 52:54:12:8b:be:9b(선택 사항) HCI를 사용하여 데이터 플레인 배포에 노드를 추가하는 경우 다음을 완료해야 합니다.
Compute 서비스(nova)의
cephx키 및 구성 파일을 정의하려면extraMounts매개변수가 있어야 합니다.OpenStackDataPlaneNodeSet매니페스트 파일에extraMounts구성이 있는지 확인합니다.apiVersion: dataplane.openstack.org/v1beta1 kind: OpenStackDataPlaneNodeSet spec: ... nodeTemplate: extraMounts: - extraVolType: Ceph volumes: - name: ceph secret: secretName: ceph-conf-files mounts: - name: ceph mountPath: "/etc/ceph" readOnly: true노드에 적용할 추가 서비스를 지정합니다.
apiVersion: dataplane.openstack.org/v1beta1 kind: OpenStackDataPlaneNodeSet spec: ... services: - bootstrap - configure-network - validate-network - install-os - ceph-hci-pre - configure-os - ssh-known-hosts - run-os - reboot-os - install-certs - ceph-client - ovn - neutron-metadata - libvirt - nova-custom-ceph-az0참고DCN 데이터 플레인을 구성할 때
nova-custom-ceph-az0서비스가 생성되며 이 단계 중에 있어야 합니다. 자세한 내용은 DCN 데이터 플레인 구성을 참조하십시오.
-
OpenStackDataPlaneNodeSet매니페스트 파일을 저장합니다. 업데이트된
OpenStackDataPlaneNodeSetCR 구성을 적용합니다.$ oc apply -f <data-plane-custom-resource-file>-
&
lt;data-plane-custom-resource-file>을 편집한 매니페스트 파일의 이름으로 바꿉니다.
-
&
상태가
SetupReady:인지 확인하여 데이터 플레인 리소스가 업데이트되었는지 확인합니다.$ oc wait openstackdataplanenodeset <node-set-name> --for condition=SetupReady --timeout=10m-
&
lt;node-set-name>을 노드를 추가하는OpenStackDataPlaneNodeSetCR의 이름으로 바꿉니다.
상태가
SetupReady이면 명령에서condition met메시지를 반환하고, 그렇지 않으면 시간 초과 오류가 반환됩니다. 데이터 플레인 조건 및 상태에 대한 자세한 내용은 OpenShift에 Red Hat OpenStack Services 배포 의 데이터 플레인 조건 및 상태를 참조하십시오.-
&
워크스테이션에 파일을 생성하여
OpenStackDataPlaneDeploymentCR을 정의합니다.apiVersion: dataplane.openstack.org/v1beta1 kind: OpenStackDataPlaneDeployment metadata: name: <node_set_scaling_deployment_name>-
&
lt;node_set_scaling_deployment_name>을OpenStackDataPlaneDeploymentCR 이름으로 바꿉니다. 이름은 고유해야 하며 이전에 생성한OpenStackDataPlaneDeployment과 일치할 수 없습니다. 선택한 이름은 소문자 영숫자(-(하이프린) 또는.(period)로 구성되어야 하며 영숫자 문자로 시작하고 끝나야 합니다.
작은 정보수정된 노드 세트의 목적을 나타내는 정의 파일과
OpenStackDataPlaneDeploymentCR에 고유하고 설명이 포함된 이름을 지정합니다.-
&
수정한
OpenStackDataPlaneNodeSetCR을 추가합니다.spec: nodeSets: - <nodeSet_name>-
OpenStackDataPlaneDeploymentCR 배포 파일을 저장합니다. 수정된
OpenStackDataPlaneNodeSetCR을 배포합니다.$ oc create -f openstack_data_plane_deploy.yaml -n openstack배포가 실행되는 동안 Ansible 로그를 볼 수 있습니다.
$ oc get pod -l app=openstackansibleee -w $ oc logs -l app=openstackansibleee -f --max-log-requests 10oc logs명령에서 다음 오류와 유사한 오류를 반환하는 경우--max-log-requests값을 늘립니다.error: you are attempting to follow 19 log streams, but maximum allowed concurrency is 10, use --max-log-requests to increase the limit수정된
OpenStackDataPlaneNodeSetCR이 배포되었는지 확인합니다.$ oc get openstackdataplanedeployment -n openstack NAME NODESETS STATUS MESSAGE openstack-data-plane ["openstack-data-plane"] True Setup Complete $ oc get openstackdataplanenodeset -n openstack NAME STATUS MESSAGE openstack-data-plane True NodeSet Ready반환된 상태의 의미에 대한 자세한 내용은 OpenShift에 Red Hat OpenStack Services 배포 의 데이터 플레인 조건 및 상태를 참조하십시오.
상태가 데이터 플레인이 배포되지 않았음을 나타내는 경우 배포 문제를 해결합니다. 문제 해결에 대한 자세한 내용은 OpenShift에 Red Hat OpenStack Services 배포를 참조하십시오.
(선택 사항): HCI를 사용하여 데이터 플레인 배포에 노드를 추가하는 경우 노드를 Ceph OSD 노드로 구성하고 배치된 Red Hat Ceph Storage 클러스터를 사용하도록 구성해야 합니다. 자세한 내용은 다음 리소스를 참조하십시오.
새 노드가 컴퓨팅 노드인 경우 온라인 상태로 전환해야 합니다.
컴퓨팅 노드를 연결된 컴퓨팅 셀에 매핑합니다.
$ oc rsh nova-cell0-conductor-0 nova-manage cell_v2 discover_hosts --verbose추가 셀을 생성하지 않은 경우 이 명령은 컴퓨팅 노드를
cell1에 매핑합니다.openstackclientPod의 원격 쉘에 액세스하고 배포된 컴퓨팅 노드가 컨트롤 플레인에 표시되는지 확인합니다.$ oc rsh -n openstack openstackclient $ openstack hypervisor list참고백엔드에서 Ceph Orchestrator를 사용하여 기존 Red Hat Ceph Storage 클러스터에 호스트를 추가합니다. 자세한 내용은 [Ceph Orchestrator를 사용하여 호스트 추가]를 참조하십시오.
노드 세트 또는 해당 위치에 해당하는 가용성 영역(AZ)에 새 호스트를 추가합니다.
openstackclientpod의 터미널을 엽니다.$ oc rsh openstackclientAZ 집계에 호스트를 추가합니다.
$ openstack aggregate add host <availability_zone> <compute_node_3>-
&
lt;availability_zone>을 새 호스트가 있는 AZ 이름으로 바꿉니다. -
&
lt;compute_node_3>를 노드 세트에 추가하는 호스트 이름으로 바꿉니다.
-
&
6장. RHOSO DCN 배포에서 DCN 사이트 제거 링크 복사링크가 클립보드에 복사되었습니다!
DCN 구성에서 사용되지 않는 에지 위치 및 가용성 영역을 제거할 수 있습니다.
6.1. RHOSO DCM 배포에서 에지 사이트 해제 링크 복사링크가 클립보드에 복사되었습니다!
배포된 노드 세트에서 하드웨어를 회수하는 데 더 이상 필요하지 않은 에지 사이트입니다.
사전 요구 사항
DCN 사이트의 모든 데이터 및 워크로드는 마이그레이션됩니다.
중요이 절차를 완료한 후 저장되지 않은 데이터와 마이그레이션되지 않은 워크로드가 손실됩니다.
절차
제거하려는 DCN 사이트의 호스트 집계를 삭제합니다(예: "az2).
워크스테이션에서 OpenStackClient Pod의 원격 쉘에 액세스합니다.
$ oc rsh -n openstack openstackclient선택 사항: 호스트 집계에 할당된 컴퓨팅 노드를 확인합니다.
# openstack aggregate show <aggregate_name>호스트 집계에서 할당된 컴퓨팅 노드를 제거하려면 각 컴퓨팅 노드에 대해 다음 명령을 입력합니다.
# openstack aggregate remove host <aggregate_name> \ <host_name>-
&
lt;aggregate_name>을 제거할 DCN 사이트에 해당하는 집계로 바꿉니다(예: "az2"). -
&
lt;host_name>을 제거 중인 집계의 각 호스트로 바꿉니다.
-
&
집계를 제거합니다.
openstack aggregate delete <aggregate_name>-
&
lt;aggregate_name>을 제거할 DCN 사이트에 해당하는 집계로 바꿉니다(예: "az2").
-
&
openstackclient Pod를 종료합니다.
$ exit
선택 사항: 셀을 제거합니다.
- 워크스테이션에서 OpenStackControlPlane CR 파일 openstack_control_plane.yaml을 엽니다.
cellTemplates에서 셀 정의를 제거합니다.cellTemplates: cell0: hasAPIAccess: true.. cellDatabaseAccount: nova-cell0 cellDatabaseInstance: openstack cellMessageBusInstance: rabbitmq cell1: hasAPIAccess: true cellDatabaseAccount: nova-cell1 cellDatabaseInstance: openstack-cell1 cellMessageBusInstance: rabbitmq-cell1 cell2: hasAPIAccess: true cellDatabaseAccount: nova-cell2 cellDatabaseInstance: openstack-cell2 cellMessageBusInstance: rabbitmq-cell2 - cell3: - hasAPIAccess: true - cellDatabaseAccount: nova-cell3 - cellDatabaseInstance: openstack-cell3 - cellMessageBusInstance: rabbitmq-cell3OpenStackControlPlane CR에서 셀별 RabbitMQ 정의를 삭제합니다.
spec: ... rabbitmq: templates: ... rabbitmq-<cellname>: ...'OpenStackControlPlane CR 파일에서 셀별 Galera 정의를 삭제합니다.
spec: ... galera: templates: ... openstack-<cellname>: ...컨트롤 플레인을 업데이트합니다.
$ oc apply -f openstack_control_plane.yaml -n openstack
DCN 사이트의 Block Storage(cinder) Pod를 제거합니다.
볼륨 목록을 가져옵니다.
$ openstack volume service list예
+------------------+--------------------------+------+---------+-------+----------------------------+ | Binary | Host | Zone | Status | State | Updated At | +------------------+--------------------------+------+---------+-------+----------------------------+ | cinder-scheduler | cinder-e479e-scheduler-0 | nova | enabled | down | 2024-11-10T16:29:40.000000 | | cinder-scheduler | cinder-scheduler-0 | nova | enabled | up | 2024-11-12T19:11:08.000000 | | cinder-volume | cinder-volume-az0-0@ceph | az0 | enabled | up | 2024-11-12T19:11:09.000000 | | cinder-backup | cinder-backup-0 | nova | enabled | up | 2024-11-12T19:11:08.000000 | | cinder-backup | cinder-backup-1 | nova | enabled | up | 2024-11-12T19:11:13.000000 | | cinder-backup | cinder-backup-2 | nova | enabled | up | 2024-11-12T19:11:16.000000 | | cinder-volume | cinder-volume-az1-0@ceph | az1 | enabled | up | 2024-11-12T19:11:15.000000 | | cinder-volume | cinder-volume-az2-0@ceph | az2 | enabled | up | 2024-11-12T17:28:28.000000 | +------------------+--------------------------+------+---------+-------+----------------------------+제거 중인 가용성 영역(AZ)의 블록 스토리지 볼륨 서비스를 비활성화합니다.
$ openstack volume service set \ --disable cinder-volume-az2-0@ceph cinder-volume블록 스토리지 볼륨이 비활성화되었는지 확인합니다.
openstack volume service list예
+------------------+--------------------------+------+----------+-------+----------------------------+ | Binary | Host | Zone | Status | State | Updated At | +------------------+--------------------------+------+----------+-------+----------------------------+ | cinder-scheduler | cinder-e479e-scheduler-0 | nova | enabled | down | 2024-11-10T16:29:40.000000 | | cinder-scheduler | cinder-scheduler-0 | nova | enabled | up | 2024-11-12T19:23:38.000000 | | cinder-volume | cinder-volume-az0-0@ceph | az0 | enabled | up | 2024-11-12T19:23:29.000000 | | cinder-backup | cinder-backup-0 | nova | enabled | up | 2024-11-12T19:23:38.000000 | | cinder-backup | cinder-backup-1 | nova | enabled | up | 2024-11-12T19:23:33.000000 | | cinder-backup | cinder-backup-2 | nova | enabled | up | 2024-11-12T19:23:36.000000 | | cinder-volume | cinder-volume-az1-0@ceph | az1 | enabled | up | 2024-11-12T19:23:35.000000 | | cinder-volume | cinder-volume-az2-0@ceph | az2 | disabled | up | 2024-11-12T19:23:24.000000 | +------------------+--------------------------+------+----------+-------+----------------------------+OpenStackControlPlane 매니페스트 파일
openstack_control_plane.yaml을 엽니다. 다음 예와 같이 제거 중인 사이트의CinderVolumePod를 제거합니다.cinderVolumes: az2: customServiceConfig: | [DEFAULT] enabled_backends = ceph glance_api_servers = https://glance-az2-internal.openstack.svc:9292 [ceph] volume_backend_name = ceph volume_driver = cinder.volume.drivers.rbd.RBDDriver rbd_ceph_conf = /etc/ceph/az2.conf rbd_user = openstack rbd_pool = volumes rbd_flatten_volume_from_snapshot = False rbd_secret_uuid = 795dcbca-e715-5ac3-9b7e-a3f5c64eb89f rbd_cluster_name = az2 backend_availability_zone = az2
제거하려는 DCN 사이트의 cinder 볼륨 서비스를 제거하십시오.
cinder 스케줄러 Pod에 대한 쉘을 엽니다.
oc rsh cinder-scheduler-0cinder 볼륨 서비스를 제거합니다.
cinder-manage service remove cinder-volume cinder-volume-az2-0@ceph쉘 종료
$ exit
제거 중인 사이트의
GlanceAPIPod를 제거합니다.openstack-control-plane.yaml CR(사용자 정의 리소스) 파일에서 az2 필드와 그 아래의 모든 필드를 제거합니다.
glanceAPIs: az0: <...> az1: <...> az2: apiTimeout: 60 customServiceConfig: | [DEFAULT] enabled_import_methods = [web-download,copy-image,glance-direct] enabled_backends = az0:rbd,az2:rbd [glance_store] default_backend = az2 [az0] rbd_store_ceph_conf = /etc/ceph/az0.conf store_description = "az0 RBD backend" rbd_store_pool = images rbd_store_user = openstack rbd_thin_provisioning = True [az2] rbd_store_ceph_conf = /etc/ceph/az2.conf store_description = "az2 RBD backend" rbd_store_pool = images rbd_store_user = openstack rbd_thin_provisioning = True imageCache: cleanerScheduler: '*/30 * * * *' prunerScheduler: 1 0 * * * size: "" networkAttachments: - storage override: service: internal: metadata: annotations: metallb.universe.tf/address-pool: internalapi metallb.universe.tf/allow-shared-ip: internalapi metallb.universe.tf/loadBalancerIPs: 172.17.0.82 spec: type: LoadBalancer replicas: 1 resources: {} storage: {} tls: api: internal: {} public: {} type: edge컨트롤 플레인을 다시 적용합니다.
oc apply -f openstack-control-plane.yamlImage 서비스(glance) Pod가 제거되었는지 확인합니다.
$ oc get pods | grep glance | grep -v purge예
glance-e479e-az0-external-api-0 3/3 Running 0 2d glance-e479e-az0-external-api-1 3/3 Running 0 2d glance-e479e-az0-external-api-2 3/3 Running 0 2d glance-e479e-az0-internal-api-0 3/3 Running 0 2d glance-e479e-az0-internal-api-1 3/3 Running 0 2d glance-e479e-az0-internal-api-2 3/3 Running 0 2d glance-e479e-az1-edge-api-0참고glance-e4793-az2-edge-api-0이 이 목록에 표시되지 않습니다.az2 Pod가 제거되었는지 확인합니다.
$ oc get pods | grep cinder-volume예
cinder-volume-az0-0 2/2 Running 0 2d cinder-volume-az1-0 2/2 Running 0 2d
DCN 사이트에서 Ceph 클러스터를 제거합니다.
Ceph 클러스터를 종료하지만 호스트의 전원을 끄지 마십시오. 자세한 내용은 Ceph Orchestrator를 사용하여 클러스터 전원을 끄고 재부팅합니다.
참고다음 단계를 완료하려면 호스트의 전원을 켜야 합니다.
제거된 Ceph 클러스터에 액세스하는 데 사용된 시크릿을 제거합니다.
$ oc delete secret ceph-conf-az-2 -n openstackaz2에서 ceph 클러스터의 시크릿을 포함하지 않도록 중앙 사이트의 시크릿을 다시 생성합니다. 예를 들어 세 개의 가용성 영역인
az0,az1및az2가 있고az2에 해당하는 에지 위치를 제거하는 경우 다음을 실행합니다.oc delete secret cent-conf-az-0 -n openstack oc create secret generic ceph-conf-az-0 \ --from-file=az0.client.openstack.keyring \ --from-file=az-.conf \ --from-file=az1.client.openstack.keyring \ --from-file=az1.conf -n openstackOpenStackControlPlane에서
extraMounts를 편집하여 제거 중인 AZ 및 제거된 보안에 대한 참조를 제거합니다. 예를 들어 AZ2의 경우 다음 목록 요소를 제거합니다.- propagation: - az2 extraVolType: Ceph volumes: - name: ceph secret: name: ceph-conf-az-2
-
노드 세트를 제거합니다.
az2가용성 영역에 해당하는 노드 세트를 제거하려면 OpenStackDataPlaneNodeSet 리소스 제거 의 단계를 완료합니다.
7장. DCN 노드 제거 링크 복사링크가 클립보드에 복사되었습니다!
DCN 사이트에서 더 이상 필요하지 않은 경우 노드를 제거하여 하드웨어를 다시 사용할 수 있습니다.
- 호스트에서 모든 인스턴스를 마이그레이션합니다. 자세한 내용은 Cold migrating an instance 를 참조하십시오.
- 호스트 집계에서 컴퓨팅 노드를 제거합니다. 자세한 내용은 호스트 집계에서 컴퓨팅 노드 제거를 참조하십시오.
- HCI를 실행하는 경우 Ceph 클러스터에서 호스트를 제거해야 합니다. 자세한 내용은 Ceph Orchestrator를 사용하여 호스트 제거를 참조하십시오.
- 데이터 플레인에서 컴퓨팅 노드를 제거합니다. 자세한 내용은 데이터 플레인에서 컴퓨팅 노드 제거를 참조하십시오.
7.1. 콜드 마이그레이션 인스턴스 링크 복사링크가 클립보드에 복사되었습니다!
인스턴스를 콜드 마이그레이션하려면 인스턴스를 중지하고 다른 컴퓨팅 노드로 이동합니다. 콜드 마이그레이션은 PCI 패스스루를 사용하는 인스턴스 마이그레이션과 같이 실시간 마이그레이션이 용이할 수 없는 마이그레이션 시나리오를 용이하게 합니다. 스케줄러는 대상 컴퓨팅 노드를 자동으로 선택합니다. 자세한 내용은 마이그레이션 제한 조건 을 참조하십시오.
절차
워크스테이션에서
OpenStackClientPod의 원격 쉘에 액세스합니다.$ oc rsh -n openstack openstackclient인스턴스를 콜드 마이그레이션하려면 다음 명령을 입력하여 전원을 끄고 인스턴스를 이동합니다.
$ openstack server migrate <instance> --wait-
&
lt;instance>를 마이그레이션할 인스턴스의 이름 또는 ID로 바꿉니다. -
로컬에 저장된 볼륨을 마이그레이션하는 경우
--block-migration플래그를 지정합니다. -
마이그레이션이 완료될 때까지 기다려야 함을 나타내려면
--wait플래그를 지정합니다.
-
&
- 인스턴스 마이그레이션이 완료될 때까지 기다리는 동안 다른 터미널 창을 열고 마이그레이션 상태를 확인할 수 있습니다. 자세한 내용은 마이그레이션 상태 확인을 참조하십시오.
인스턴스 상태를 확인합니다.
$ openstack server list --all-projects"VERIFY_RESIZE" 상태는 마이그레이션을 확인하거나 되돌리야 함을 나타냅니다.
마이그레이션이 예상대로 작동한 경우 확인합니다.
$ openstack server resize --confirm <instance>&
lt;instance>를 마이그레이션할 인스턴스의 이름 또는 ID로 바꿉니다. "ACTIVE" 상태는 인스턴스를 사용할 준비가 되었음을 나타냅니다.마이그레이션이 예상대로 작동하지 않으면 되돌립니다.
$ openstack server resize --revert <instance>&
lt;instance>를 인스턴스의 이름 또는 ID로 바꿉니다.
인스턴스를 다시 시작합니다.
$ openstack server start <instance>&
lt;instance>를 인스턴스의 이름 또는 ID로 바꿉니다.선택 사항: 유지보수를 위해 소스 컴퓨팅 노드를 비활성화한 경우 새 인스턴스를 할당할 수 있도록 노드를 다시 활성화해야 합니다.
$ openstack compute service set <source> nova-compute --enable&
lt;source>를 소스 컴퓨팅 노드의 호스트 이름으로 바꿉니다.OpenStackClientPod를 종료합니다.$ exit
7.2. 호스트 집계에서 컴퓨팅 노드 제거 링크 복사링크가 클립보드에 복사되었습니다!
OpenStackClient Pod를 사용하여 호스트 집계에서 컴퓨팅 노드를 제거할 수 있습니다.
절차
워크스테이션에서 OpenStackClient Pod의 원격 쉘에 액세스합니다.
$ oc rsh -n openstack openstackclient호스트 집계에 할당된 모든 컴퓨팅 노드 목록을 확인합니다.
# openstack aggregate show <aggregate_name>호스트 집계에서 할당된 컴퓨팅 노드를 제거하려면 다음 명령을 입력합니다.
# openstack aggregate remove host <aggregate_name> <host_name>-
컴퓨팅 노드를 제거하려면 &
lt;aggregate_name>을 호스트 집계 이름으로 바꿉니다. -
&
lt;host_name>을 호스트 집계에서 삭제할 컴퓨팅 노드의 이름으로 바꿉니다.
-
컴퓨팅 노드를 제거하려면 &
7.3. Ceph Orchestrator를 사용하여 호스트 제거 링크 복사링크가 클립보드에 복사되었습니다!
HCI(하이퍼 컨버지드 인프라)를 실행하는 동안 DCN 클러스터에서 노드를 제거할 수 있습니다.
사전 요구 사항
- DCN 클러스터에서 HCI를 실행 중입니다.
- 모든 노드에 대한 루트 수준 액세스 권한이 있습니다.
- 제거 중인 호스트가 스토리지 클러스터에 추가됩니다.
- cephadm 은 서비스를 제거할 노드에 배포됩니다.
프로세스
Cephadm 쉘에 로그인합니다.
[root@host01 ~]# cephadm shell호스트 세부 정보를 가져옵니다.
[ceph: root@host01 /]# ceph orch host ls호스트의 모든 데몬을 드레이닝합니다.
[ceph: root@host01 /]# ceph orch host drain <hostname>&
lt;hostname>을 제거할 호스트의 이름으로 바꿉니다.Red Hat Ceph Storage 서비스 관리에 대한 자세한 내용은 Red Hat Ceph Storage 7 관리 가이드를 참조하십시오.
OSD 제거 상태를 확인합니다.
[ceph: root@host01 /]# ceph orch osd rm statusOSD에 배치 그룹(PG)이 없는 경우 스토리지 클러스터에서 OSD가 해제되어 제거됩니다.
스토리지 클러스터에서 모든 데몬이 제거되었는지 확인합니다.
[ceph: root@host01 /]# ceph orch ps <hostname>-
&
lt;hostname>을 제거할 호스트의 이름으로 바꿉니다.
-
&
호스트를 제거합니다.
[ceph: root@host01 /]# ceph orch host rm <hostname>-
&
lt;hostname>을 제거할 호스트의 이름으로 바꿉니다.
-
&
7.4. 데이터 플레인에서 컴퓨팅 노드 제거 링크 복사링크가 클립보드에 복사되었습니다!
데이터 플레인의 노드 세트에서 컴퓨팅 노드를 삭제할 수 있습니다. 노드 세트에서 모든 노드를 제거하는 경우 데이터 플레인에서 노드 세트도 제거해야 합니다.
사전 요구 사항
-
cluster-admin권한이 있는 사용자로 Cryostat 클러스터에 로그인되어 있습니다. - 컴퓨팅 노드의 워크로드가 다른 컴퓨팅 노드로 마이그레이션되었습니다.
프로세스
openstackclientpod의 원격 쉘에 액세스합니다.$ oc rsh -n openstack openstackclient삭제하려는 컴퓨팅 노드의 IP 주소를 검색합니다.
$ openstack hypervisor list컴퓨팅 노드 목록을 검색하여 삭제하려는 노드의 이름과 UUID를 확인합니다.
$ openstack compute service list제거할 컴퓨팅 노드에서
nova-compute서비스를 비활성화합니다.$ openstack compute service set <hostname> nova-compute --disable작은 정보--disable-reason옵션을 사용하여 서비스가 비활성화되는 이유에 대한 간단한 설명을 추가합니다. 이는 Compute 서비스를 재배포하려는 경우에 유용합니다.OpenStackClientPod를 종료합니다.$ exit컴퓨팅 노드에 SSH로 연결하고
ovn및nova-compute컨테이너를 중지합니다.$ ssh -i <key_file_name> cloud-admin@<node_IP_address> [cloud-admin@<hostname> ~]$ sudo systemctl stop edpm_ovn_controller [cloud-admin@<hostname> ~]$ sudo systemctl stop edpm_ovn_metadata_agent [cloud-admin@<hostname> ~]$ sudo systemctl stop edpm_nova_compute-
&
lt;key_file_name>을 Ansible에서 RHEL 노드를 관리할 수 있도록 생성한 SSH 키 쌍 파일의 이름 및 위치로 바꿉니다. -
&
lt;node_IP_address>를 2단계에서 검색한 컴퓨팅 노드의 IP 주소로 바꿉니다.
-
&
노드가 재부팅되는 경우 데이터베이스에서 에이전트가 자동으로 시작되고 등록되지 않도록
ovn및nova-compute컨테이너를 관리하는systemd장치 파일을 제거합니다.[cloud-admin@<hostname> ~]$ sudo rm -f /etc/systemd/system/edpm_ovn_controller [cloud-admin@<hostname> ~]$ sudo rm -f /etc/systemd/system/edpm_ovn_metadata_agent [cloud-admin@<hostname> ~]$ sudo rm -f /etc/systemd/system/edpm_nova_compute컴퓨팅 노드에서 연결을 끊습니다.
$ exitopenstackclient의 원격 쉘에 액세스 :$ oc rsh -n openstack openstackclient컴퓨팅 노드를 제거할 네트워크 에이전트를 삭제합니다.
$ openstack network agent list [--host <hostname>] $ openstack network agent delete <agent_id>제거할 컴퓨팅 노드의
nova-compute서비스를 삭제합니다.$ openstack compute service delete <node_uuid>-
&
lt;node_uuid>를 3단계에서 검색한 노드의 UUID로 바꿉니다.
-
&
OpenStackClientPod를 종료합니다.$ exitOpenStackDataPlaneNodeSetCR에서 노드를 제거합니다.$ oc patch openstackdataplanenodeset/<node_set_name> --type json --patch '[{ "op": "remove", "path": "/spec/nodes/<node_name>" }]'-
&
lt;node_set_name>을 노드가 속한OpenStackDataPlaneNodeSetCR의 이름으로 바꿉니다. -
&
lt;node_name>을OpenStackDataPlaneNodeSetCR의nodes섹션에 정의된 노드 이름으로 바꿉니다.
-
&
워크스테이션에 파일을 생성하여
OpenStackDataPlaneDeploymentCR을 정의하여 컴퓨팅 노드로 설정된 노드를 업데이트합니다.apiVersion: dataplane.openstack.org/v1beta1 kind: OpenStackDataPlaneDeployment metadata: name: <node_set_deployment_name>-
&
lt;node_set_deployment_name>을OpenStackDataPlaneDeploymentCR 이름으로 바꿉니다. 이름은 고유해야 하며 소문자 영숫자(하이프린) 또는.(period)로 구성되어야 하며 영숫자 문자로 시작하고 끝나야 합니다.
작은 정보수정된 노드 세트의 목적을 나타내는 정의 파일과
OpenStackDataPlaneDeploymentCR에 고유하고 설명이 포함된 이름을 지정합니다.-
&
노드를 제거한
OpenStackDataPlaneNodeSetCR을 추가합니다.spec: nodeSets: - <nodeSet_name>나열된 노드 세트를 배포할 때
OpenStackDataPlaneDeploymentCR에서ssh-known-hosts서비스만 실행하도록 지정합니다.spec: servicesOverride: - ssh-known-hosts-
OpenStackDataPlaneDeploymentCR 배포 파일을 저장합니다. ssh-known-hosts서비스를 배포하여 나머지 노드의 알려진 호스트 목록에서 삭제된 노드를 삭제합니다.$ oc create -f openstack_data_plane_deploy.yaml -n openstack배포가 실행되는 동안 Ansible 로그를 볼 수 있습니다.
$ oc get pod -l app=openstackansibleee -w $ oc logs -l app=openstackansibleee -f --max-log-requests 10oc logs명령에서 다음 오류와 유사한 오류를 반환하는 경우--max-log-requests값을 늘립니다.error: you are attempting to follow 19 log streams, but maximum allowed concurrency is 10, use --max-log-requests to increase the limit수정된
OpenStackDataPlaneNodeSetCR이 배포되었는지 확인합니다.$ oc get openstackdataplanedeployment -n openstack NAME NODESETS STATUS MESSAGE openstack-data-plane ["openstack-data-plane"] True Setup Complete $ oc get openstackdataplanenodeset -n openstack NAME STATUS MESSAGE openstack-data-plane True NodeSet Ready반환된 상태의 의미에 대한 자세한 내용은 OpenShift에 Red Hat OpenStack Services 배포 의 데이터 플레인 조건 및 상태를 참조하십시오.
상태가 데이터 플레인이 배포되지 않았음을 나타내는 경우 배포 문제를 해결합니다. 자세한 내용은 OpenShift에 Red Hat OpenStack Services 배포를 통해 데이터 플레인 생성 및 배포 문제 해결을 참조하십시오.
8장. 엣지 스토리지 검증 링크 복사링크가 클립보드에 복사되었습니다!
중앙 및 에지 사이트의 배포가 작동하는지 확인하려면 Glance 다중 저장소 및 인스턴스 생성을 테스트합니다. openstackclient pod를 사용하여 OpenStack 관리자로 명령을 테스트할 수 있습니다.
로컬 파일 시스템에서 사용할 수 있거나 웹 서버에서 사용할 수 있는 이미지를 Glance로 가져올 수 있습니다.
중앙 위치에서 이미지를 사용하는 인스턴스가 없는 경우에도 중앙 사이트에 이미지 복사본을 항상 저장합니다.
8.1. DCN 환경에서 이미지 서비스 저장소 보기 링크 복사링크가 클립보드에 복사되었습니다!
glance 다중 저장소를 테스트하기 전에 이미지 서비스 저장소를 사용할 수 있는지 확인합니다.
프로세스
glance stores-info명령을 사용하여 이미지 서비스를 통해 사용할 수 있는 저장소를 확인합니다. 다음 예제에서는 central, dcn1, dcn2의 세 가지 저장소를 사용할 수 있습니다. 이는 각각 중앙 위치 및 에지 사이트의 Glance 저장소에 해당합니다.$ glance stores-info +----------+----------------------------------------------------------------------------------+ | Property | Value | +----------+----------------------------------------------------------------------------------+ | stores | [{"default": "true", "id": "az0", "description": "central rbd glance | | | store"}, {"id": "az1", "description": "z1 rbd glance store"}, | | | {"id": "az2", "description": "az2 rbd glance store"}] | +----------+----------------------------------------------------------------------------------+
8.2. 로컬 파일에서 가져오기 링크 복사링크가 클립보드에 복사되었습니다!
이미지를 중앙 위치의 저장소에 먼저 업로드한 다음 이미지를 원격 사이트에 복사해야 합니다.
이미지 파일이 RAW 형식인지 확인합니다. 이미지가 원시 형식이 아닌 경우 이미지를 이미지 서비스로 가져오기 전에 이미지를 변환해야 합니다.
$ file cirros-0.5.1-x86_64-disk.img cirros-0.5.1-x86_64-disk.img: QEMU QCOW2 Image (v3), 117440512 bytes $ qemu-img convert -f qcow2 -O raw cirros-0.5.1-x86_64-disk.img cirros-0.5.1-x86_64-disk.raw이미지를 중앙 사이트의 기본 백엔드로 가져옵니다.
openstack image create \ --disk-format raw --container-format bare \ --name cirros --file cirros-0.5.1-x86_64-disk.raw \ --store central
8.3. 웹 서버에서 이미지 가져오기 링크 복사링크가 클립보드에 복사되었습니다!
이미지가 웹 서버에서 호스팅되는 경우 GlanceImageImportPlugins 매개변수를 사용하여 이미지를 여러 저장소에 업로드할 수 있습니다.
이 절차에서는 Image 서비스(glance)에서 기본 이미지 변환 플러그인이 활성화되어 있다고 가정합니다. 이 기능은 QCOW2 파일 형식을 Ceph RBD에 가장 적합한 RAW 이미지로 자동 변환합니다. glance image-show ID | grep disk_format 을 실행하여 Glance 이미지가 RAW 형식인지 확인할 수 있습니다.
절차
glance명령의image-create-via-import매개 변수를 사용하여 웹 서버에서 이미지를 가져옵니다.--stores매개변수를 사용합니다.# glance image-create-via-import \ --disk-format qcow2 \ --container-format bare \ --name cirros \ --uri http://download.cirros-cloud.net/0.4.0/cirros-0.4.0-x86_64-disk.img \ --import-method web-download \ --stores az0,az1이 예에서는 qcow2 cirros 이미지가 공식 Cirros 사이트에서 다운로드되고 Glance에 따라 RAW로 변환되고
--stores매개변수에서 지정하는 대로 중앙 사이트 및 에지 사이트 1로 가져옵니다.참고또는
--stores를--all-stores True로 교체하여 모든 저장소에 이미지를 업로드할 수 있습니다.
8.4. 이미지를 새 사이트에 복사 링크 복사링크가 클립보드에 복사되었습니다!
기존 이미지를 중앙 위치에서 에지 사이트로 복사할 수 있으므로 새로 설정된 위치에서 이전에 생성된 이미지에 액세스할 수 있습니다.
복사 작업에 glance 이미지의 UUID를 사용합니다.
ID=$(openstack image show cirros -c id -f value) glance image-import $ID --stores az1,az2 --import-method copy-image참고이 예에서
--stores옵션은cirros이미지가 중앙 사이트인az0에서 에지 사이트az1및az2로 복사되도록 지정합니다. 또는 현재 이미지가 없는 모든 저장소에 이미지를 업로드하는--all-stores True옵션을 사용할 수 있습니다.이미지 사본이 각 저장소에 있는지 확인합니다. 속성 맵의 마지막 항목인
stores키는az0,az1,az2로 설정됩니다.$ openstack image show $ID | grep properties | properties | os_glance_failed_import=', os_glance_importing_to_stores=', os_hash_algo=sha512, os_hash_value=6b813aa46bb90b4da216a4d19376593fa3f4fc7e617f03a92b7fe11e9a3981cbe8f0959dbebe36225e5f53dc4492341a4863cac4ed1ee0909f3fc78ef9c3e869, os_hidden=False, stores=az0,az1 |
해당 사이트에 사용하는 VM이 없는 경우에도 항상 중앙 사이트에 이미지 사본을 저장합니다.
8.5. 에지 사이트의 인스턴스가 이미지 기반 볼륨으로 부팅될 수 있는지 확인 링크 복사링크가 클립보드에 복사되었습니다!
에지 사이트의 이미지를 사용하여 영구 루트 볼륨을 생성할 수 있습니다.
절차
볼륨으로 생성할 이미지의 ID를 식별하고 해당 ID를
openstack volume create명령에 전달합니다.IMG_ID=$(openstack image show cirros -c id -f value) openstack volume create --size 8 --availability-zone az1 pet-volume-az1 --image $IMG_ID새로 생성된 볼륨의 볼륨 ID를 확인하고
openstack server create명령에 전달합니다.VOL_ID=$(openstack volume show -f value -c id pet-volume-az1) openstack server create --flavor tiny --key-name az1-key --network az1-network --security-group basic --availability-zone az1 --volume $VOL_ID pet-server-az1az1에지 사이트의 ceph-mon 컨테이너에서 rbd 명령을 실행하여 volumes 풀을 나열하여 볼륨이 이미지를 기반으로 하는지 확인할 수 있습니다.$ sudo cephadm shell -- rbd -p volumes ls -l NAME SIZE PARENT FMT PROT LOCK volume-28c6fc32-047b-4306-ad2d-de2be02716b7 8 GiB images/8083c7e7-32d8-4f7a-b1da-0ed7884f1076@snap 2 excl $인스턴스의 루트 볼륨의 cinder 스냅샷을 만들 수 있는지 확인합니다. 정리된 스냅샷을 생성하기 위해 서버가 데이터를 정지하도록 중지되었는지 확인합니다. 인스턴스가 꺼져 있을 때 볼륨 상태가
in-use상태로 유지되므로 --force 옵션을 사용합니다.openstack server stop pet-server-az1 openstack volume snapshot create pet-volume-az1-snap --volume $VOL_ID --force openstack server start pet-server-az1az1Ceph 클러스터에 volumes 풀의 콘텐츠를 나열하여 새로 생성된 스냅샷을 표시합니다.$ sudo cephadm shell -- rbd -p volumes ls -l NAME SIZE PARENT FMT PROT LOCK volume-28c6fc32-047b-4306-ad2d-de2be02716b7 8 GiB images/8083c7e7-32d8-4f7a-b1da-0ed7884f1076@snap 2 excl volume-28c6fc32-047b-4306-ad2d-de2be02716b7@snapshot-a1ca8602-6819-45b4-a228-b4cd3e5adf60 8 GiB images/8083c7e7-32d8-4f7a-b1da-0ed7884f1076@snap 2 yes
8.6. 사이트 간에 이미지 스냅샷을 생성하고 복사할 수 있는지 확인 링크 복사링크가 클립보드에 복사되었습니다!
스냅샷을 암호화하고 glance image-import 를 사용하여 중앙 위치에 복사할 수 있는지 확인합니다.
az1위치에 새 이미지를 생성할 수 있는지 확인합니다. 데이터를 정지하여 정리된 스냅샷을 생성하기 위해 서버가 중지되었는지 확인합니다.NOVA_ID=$(openstack server show pet-server-az1 -f value -c id) openstack server stop $NOVA_ID openstack server image create --name cirros-snapshot $NOVA_ID openstack server start $NOVA_IDaz1에지 사이트의 이미지를 Glance의 기본 백엔드인 중앙 위치로 다시 복사합니다.IMAGE_ID=$(openstack image show cirros-snapshot -f value -c id) glance image-import $IMAGE_ID --stores az0 --import-method copy-image
8.7. 엣지 사이트에서 백업 및 복원 테스트 링크 복사링크가 클립보드에 복사되었습니다!
AZ( Edge 사이트 가용 영역) 및 중앙 AZ에서 Block Storage 서비스(cinder) 볼륨을 백업하고 복원할 수 있습니다. cinder-backup 서비스는 중앙 AZ에서 실행되며 백업은 중앙 AZ에 저장됩니다. 블록 스토리지 서비스는 에지 사이트에 백업을 저장하지 않으며 에지 사이트 간에 직접 백업 및 복원 작업을 지원하지 않습니다.
사전 요구 사항
- 블록 스토리지 백업 서비스는 중앙 AZ에 배포됩니다. 자세한 내용은 컨트롤 플레인 업데이트를 참조하십시오.
- Block Storage(cinder) REST API 마이크로 버전 3.51 이상
-
모든 사이트에서 공통
openstackcephx 클라이언트 이름을 사용합니다.
프로세스
첫 번째 DCN 사이트에 볼륨 백업을 생성합니다.
$ openstack --os-volume-api-version 3.51 volume backup create \ --name <volume_backup> --availability-zone <az0> <edge_volume>-
&
lt;volume_backup>을 볼륨 백업의 이름으로 바꿉니다. -
&
lt;az0>을cinder-backup서비스를 호스팅하는 중앙 가용 영역의 이름으로 바꿉니다. &
lt;edge_volume>을 백업할 볼륨의 이름으로 바꿉니다.참고Ceph 인증 키에 문제가 있는 경우 호스트에서 컨테이너로 인증 키를 복사하도록
cinder-backup컨테이너를 다시 시작해야 할 수 있습니다.
-
&
두 번째 DCN 사이트의 새 볼륨으로 백업을 복원합니다.
$ openstack --os-volume-api-version 3.47 volume create \ --backup <volume_backup> --availability-zone <az_2> <new_volume>-
&
lt;az_2>를 백업을 복원하려는 가용성 영역의 이름으로 바꿉니다. -
&
lt;new_volume>을 새 볼륨의 이름으로 바꿉니다. -
&
lt;volume_backup>을 이전 단계에서 생성한 볼륨 백업 이름으로 바꿉니다.
-
&