단일 Cryostat 클러스터에 여러 RHOSO 환경 배포


Red Hat OpenStack Services on OpenShift 18.0

단일 Red Hat OpenShift Container Platform 클러스터의 OpenShift 환경에 여러 Red Hat OpenStack Services 배포

OpenStack Documentation Team

초록

네임스페이스 분리를 사용하여 단일 RHCS(Red Hat OpenShift Container Platform) 클러스터에서 OpenShift(RHOSO) 환경에 여러 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 에서 계정을 생성할 수 있습니다.

  1. 다음 링크를 클릭하여 문제 생성 페이지를 엽니다. 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
  2. 요약설명 필드를 작성합니다. 설명 필드에 문서 URL, 장 또는 섹션 번호, 문제에 대한 자세한 설명을 포함합니다. 양식의 다른 필드를 수정하지 마십시오.
  3. 생성을 클릭합니다.

1장. 네임스페이스 분리를 사용하여 여러 RHOSO 환경 생성

namspace 분리를 사용하여 단일 Red Hat OpenShift Container Platform(RHOCP) 클러스터에서 OpenShift(RHOSO) 환경에 여러 개의 독립 Red Hat OpenStack Services를 배포할 수 있습니다. 각 RHOSO 환경을 배포하려면 각 네임스페이스에 대해 여러 개의 격리된 네임스페이스와 격리된 네트워크를 생성한 다음 OpenShift에 Red Hat OpenStack Services 배포 절차를 사용하여 각 네임스페이스에 컨트롤 플레인과 데이터 플레인을 생성합니다.

Red Hat은 네임스페이스 분리가 있는 단일 클러스터에서 최대 5개의 RHOSO 환경을 지원합니다(예: 개발, 테스트, 스테이징, 프로덕션 환경).

네임스페이스 분리를 사용하여 여러 개의 독립 RHOSO 환경을 생성하려면 다음 작업을 완료해야 합니다.

  1. 분리된 각 RHOSO 환경에 대한 네트워킹을 계획합니다.
  2. 각 RHOSO 환경에 대한 네임스페이스를 생성합니다.
  3. 각 네임스페이스에 대한 Secret CR(사용자 정의 리소스)을 생성하여 해당 네임스페이스의 RHOSO 서비스 Pod에 대한 보안 액세스 권한을 제공합니다.
  4. 각 네임스페이스에 대해 NodeNetworkConfigurationPolicy CR을 구성합니다.
  5. 각 네임스페이스에 대해 NetworkAttachmentDefinition (net-attach-def) CR을 생성합니다.
  6. 각 네임스페이스에 대해 IPAddressPoolL2Advertisement CR을 만듭니다.
  7. 각 네임스페이스에 대해 NetConfig CR을 생성합니다.
  8. 각 네임스페이스에 대해 OpenStackControlPlane CR을 생성합니다.
  9. 각 네임스페이스에 대해 OpenStackDataPlaneNodeSetOpenStackDataPlaneDeployment CR을 생성합니다. 자세한 내용은 Creating the data plane in Deploying Red Hat OpenStack Services on OpenShift 를 참조하십시오.

1.1. 제한

  • Telemetry 시각화는 둘 이상의 네임스페이스에서 사용할 수 없습니다.
  • 여러 영역이 지원되지 않으므로 DCN(Distributed Compute nodes) 및 분산 영역과 같은 확인된 아키텍처는 지원되지 않습니다.

1.2. Operator 및 OpenStack 버전

Openstack Operator CRD(사용자 정의 리소스 정의)는 글로벌로 활성화되기 때문에 네임스페이스 분리를 사용하여 동일한 RHOSO 클러스터에서 호스팅되는 모든 RHOSO 배포는 동일한 RHOSO 버전에서 실행됩니다. 그러나 각 RHOSO 배포는 각 네임스페이스의 OpenStackVersion CR(사용자 정의 리소스)에서 서비스 컨테이너가 관리되므로 RHOSO에서 배포하는 다양한 버전의 서비스를 실행할 수 있습니다.

1.3. 단일 클러스터에서 여러 배포 업데이트

OpenShift(RHOSO)의 새 버전의 Red Hat OpenStack Services가 릴리스되면 모든 네임스페이스에서 마이너 업데이트 절차를 수행하여 RHOCP(Red Hat OpenShift Container Platform) 클러스터에서 호스팅되는 모든 컨트롤 플레인을 새 버전으로 업데이트해야 합니다.

마이너 업데이트를 수행하기 전에 배포된 모든 환경이 동일한 버전에 있는지 확인해야 합니다. 모든 환경에 문제가 발생하지 않도록 모든 환경에서 동시에 마이너 업데이트를 수행하지 마십시오. 프로덕션 환경에 롤아웃하기 전에 다음과 같이 환경에서 마이너 업데이트를 수행하고 테스트해야 합니다.

  1. 개발 환경
  2. 스테이징 환경
  3. 환경 테스트

1.4. 사전 요구 사항

  • 추가 호스팅 컨트롤 플레인 및 추가 리소스 소비를 수용하기에 충분한 리소스가 있는 운영 Cryostat 클러스터, 버전 4.18. 시스템 요구 사항은 배포 계획Red Hat OpenShift Container Platform 클러스터 요구 사항을 참조하십시오.
  • oc 명령줄 툴이 워크스테이션에 설치되어 있습니다.
  • cluster-admin 권한이 있는 사용자로 Cryostat 클러스터에 로그인되어 있습니다.
  • OpenStack Operator(openstack-operator)는 Cryostat 클러스터에 설치됩니다. 자세한 내용은 Operator 설치 및 준비를 참조하십시오.
  • Cryostat 클러스터는 여러 RHOSO 환경에 맞게 준비되었습니다.

    • 선택 사항: 각 RHOSO 클라우드 네임스페이스의 특정 컨트롤 플레인 및 데이터 플레인 Pod에 노드를 전용하도록 노드에 노드 선택기와 라벨을 구성했습니다. 자세한 내용은 Red Hat OpenStack Platform 배포를 위한 Red Hat OpenShift Container Platform 노드 구성을 참조하십시오.

      참고

      노드 선택기 및 라벨을 사용하여 각 네임스페이스에 대해 Pod를 분리하지 않은 경우 각 네임스페이스의 컨트롤 플레인 및 데이터 플레인 Pod가 동일한 Cryostat 작업자 노드에 예약될 수 있습니다.

    • Cryostat 클러스터의 스토리지 클래스를 생성했습니다. 모든 네임스페이스는 기본적으로 이 스토리지 클래스와 기본 PV(영구 볼륨)를 사용합니다. 필요한 경우 각 네임스페이스에 대해 별도의 스토리지 클래스와 PV를 생성할 수 있습니다. 자세한 내용은 스토리지 클래스 생성을 참조하십시오.
  • 각 RHOSO 환경에 전용 베어 메탈 리소스를 사용하고 있습니다.

1.5. 각 네임스페이스에 대한 격리된 네트워크 계획

각 네임스페이스에 대해 분리된 RHOSO 네트워크를 계획하려면 다음 작업을 완료해야 합니다.

  1. RHOSO 환경의 최소 네트워크 요구 사항을 검토합니다. RHOSO 네트워크 요구 사항에 대한 자세한 내용은 Cryo stat 네트워크 요구 사항 배포 계획에서 네트워크 계획을 참조하십시오.
  2. 동일한 Cryostat 클러스터에서 여러 RHOSO 환경을 지원하도록 네트워크 토폴로지를 계획하고 각 네임스페이스에 대해 RHOSO 네트워크를 계획합니다.
  3. RHOSO-dedicated NIC가 각 네임스페이스에 하나씩 있는 모든 Cryostat 작업자 노드에 있는지 확인하여 RHOSO 환경 간의 분리를 강화합니다. 이러한 인터페이스는 VLAN을 사용하여 추가 네트워크 격리를 수행합니다.
  4. 네임스페이스 인터페이스와 해당 네임스페이스의 컴퓨팅 노드 간 연결이 있는지 확인합니다.
  5. 각 네임스페이스의 VLAN ID와 서브넷이 겹치지 않는지 확인합니다.
  6. 각 네임스페이스에 대한 각 RHOSO 환경에 대한 네트워크를 계획합니다. 각 네임스페이스에는 모든 네트워크에 대한 고유한 네트워크 IP 주소가 있어야 합니다. 네임스페이스 간 IP 주소와 범위를 겹치지 마십시오. 필요한 네트워크 값에 대한 자세한 내용은 OpenShift에 Red Hat OpenStack Services 배포 의 기본 Red Hat OpenStack Services의 "기본 RHOSO 네트워크 " 표를 참조하십시오.

2장. 각 네임스페이스에 대한 네임스페이스 및 Secret CR 생성

Red Hat OpenShift Container Platform (RHOCP) 클러스터에 배포하려는 각 RHOSO(Red Hat OpenStack Services) 환경에 대해 다음 절차를 반복합니다.

2.1. openstack 네임스페이스 생성

RHSM(Red Hat OpenStack Services on OpenShift) 배포의 서비스 Pod를 위한 RHOCP(Red Hat OpenShift Container Platform) 환경에 네임스페이스를 생성해야 합니다. 각 RHOSO 배포의 서비스 Pod는 Cryostat 환경 내의 자체 네임스페이스에 있습니다.

사전 요구 사항

  • cluster-admin 권한이 있는 사용자로 Cryostat 클러스터에 액세스할 수 있는 워크스테이션에 로그인되어 있습니다.

프로세스

  1. 배포된 RHOSO 환경에 대한 openstack 프로젝트를 생성합니다.

    $ oc new-project openstack
  2. OpenStack Operator가 권한 있는 Pod 생성을 활성화하도록 openstack 네임스페이스에 레이블이 지정되어 있는지 확인합니다.

    $ oc get namespace openstack -ojsonpath='{.metadata.labels}' | jq
    {
      "kubernetes.io/metadata.name": "openstack",
      "pod-security.kubernetes.io/enforce": "privileged",
      "security.openshift.io/scc.podSecurityLabelSync": "false"
    }

    SCC(보안 컨텍스트 제약 조건)가 "권한"이 아닌 경우 다음 명령을 사용하여 변경합니다.

    $ oc label ns openstack security.openshift.io/scc.podSecurityLabelSync=false --overwrite
    $ oc label ns openstack pod-security.kubernetes.io/enforce=privileged --overwrite
  3. 선택 사항: openstack 네임스페이스에서 명령을 실행할 때 네임스페이스를 지정할 필요가 없도록 하려면 default 네임스페이스를 openstack 으로 설정합니다.

    $ oc project openstack

OpenShift(RHOSO) 서비스 Pod의 Red Hat OpenStack Services에 대한 보안 액세스를 제공하려면 Secret CR(사용자 정의 리소스)을 생성해야 합니다. 다음 절차에서는 각 서비스에 필요한 암호 형식을 사용하여 Secret CR을 생성합니다.

필요한 암호 및 유추 키를 생성하는 Secret CR의 예는 RHOSO 서비스 Pod에 대한 보안 액세스를 위해 예제 Secret CR을 참조하십시오.

주의

컨트롤 플레인이 배포된 후에는 서비스 암호를 변경할 수 없습니다. 컨트롤 플레인을 배포한 후 osp-secret 에서 서비스 암호가 변경되면 새 암호를 사용하도록 서비스가 재구성되지만 ID 서비스(keystone)에서 암호가 업데이트되지 않습니다. 이로 인해 서비스가 중단됩니다.

사전 요구 사항

  • python3-cryptography를 설치했습니다.

프로세스

  1. 워크스테이션에 Secret CR을 생성합니다(예: openstack_service_secret.yaml ).
  2. openstack_service_secret.yaml 에 다음 초기 구성을 추가합니다.

    apiVersion: v1
    data:
      AdminPassword: <base64_password>
      AodhPassword: <base64_password>
      BarbicanPassword: <base64_password>
      BarbicanSimpleCryptoKEK: <base64_fernet_key>
      CeilometerPassword: <base64_password>
      CinderPassword: <base64_password>
      DbRootPassword: <base64_password>
      DesignatePassword: <base64_password>
      GlancePassword: <base64_password>
      HeatAuthEncryptionKey: <base64_password>
      HeatPassword: <base64_password>
      IronicInspectorPassword: <base64_password>
      IronicPassword: <base64_password>
      ManilaPassword: <base64_password>
      MetadataSecret: <base64_password>
      NeutronPassword: <base64_password>
      NovaPassword: <base64_password>
      OctaviaPassword: <base64_password>
      PlacementPassword: <base64_password>
      SwiftPassword: <base64_password>
    kind: Secret
    metadata:
      name: osp-secret
      namespace: openstack
    type: Opaque
    • & lt;base64_password& gt;를 base64로 인코딩된 32자 키로 바꿉니다.

      참고

      HeatAuthEncryptionKey 암호는 오케스트레이션 서비스(heat) 암호화의 32자 키여야 합니다. 다른 모든 서비스의 암호 길이를 늘리면 HeatAuthEncryptionKey 암호가 32인지 확인하십시오.

      다음 명령을 사용하여 base64로 인코딩된 암호를 수동으로 생성할 수 있습니다.

      $ echo -n <password> | base64

      또는 Linux 워크스테이션을 사용하고 cat 과 같은 Bash 명령을 사용하여 Secret CR을 생성하는 경우 < base64_password >를 다음 명령으로 교체하여 각 서비스에 대해 임의의 암호를 자동으로 생성할 수 있습니다.

      $(tr -dc 'A-Za-z0-9' < /dev/urandom | head -c 32 | base64)
    • &lt ;base64_fernet_key >를 base64로 인코딩된 fernet 키로 바꿉니다. 다음 명령을 사용하여 수동으로 생성할 수 있습니다.

      $(python3 -c "from cryptography.fernet import Fernet; print(Fernet.generate_key().decode('UTF-8'))" | base64)
  3. 클러스터에 Secret CR을 생성합니다.

    $ oc create -f openstack_service_secret.yaml -n openstack
  4. Secret CR이 생성되었는지 확인합니다.

    $ oc describe secret osp-secret -n openstack

2.2.1. RHOSO 서비스 Pod에 대한 보안 액세스를 위한 Secret CR의 예

OpenShift(RHOSO) 서비스 Pod의 Red Hat OpenStack Services에 대한 보안 액세스를 제공하려면 Secret CR(사용자 정의 리소스) 파일을 생성해야 합니다.

Linux 워크스테이션을 사용하는 경우 필요한 암호 및 fernet 키를 생성하는 다음 Bash cat 명령을 사용하여 openstack_service_secret.yaml 이라는 Secret CR 파일을 생성할 수 있습니다.

$ cat <<EOF > openstack_service_secret.yaml
apiVersion: v1
data:
  AdminPassword: $(tr -dc 'A-Za-z0-9' < /dev/urandom | head -c 32 | base64)
  AodhPassword: $(tr -dc 'A-Za-z0-9' < /dev/urandom | head -c 32 | base64)
  BarbicanPassword: $(tr -dc 'A-Za-z0-9' < /dev/urandom | head -c 32 | base64)
  BarbicanSimpleCryptoKEK: $(python3 -c "from cryptography.fernet import Fernet; print(Fernet.generate_key().decode('UTF-8'))" | base64)
  CeilometerPassword: $(tr -dc 'A-Za-z0-9' < /dev/urandom | head -c 32 | base64)
  CinderPassword: $(tr -dc 'A-Za-z0-9' < /dev/urandom | head -c 32 | base64)
  DbRootPassword: $(tr -dc 'A-Za-z0-9' < /dev/urandom | head -c 32 | base64)
  DesignatePassword: $(tr -dc 'A-Za-z0-9' < /dev/urandom | head -c 32 | base64)
  GlancePassword: $(tr -dc 'A-Za-z0-9' < /dev/urandom | head -c 32 | base64)
  HeatAuthEncryptionKey: $(tr -dc 'A-Za-z0-9' < /dev/urandom | head -c 32 | base64)
  HeatPassword: $(tr -dc 'A-Za-z0-9' < /dev/urandom | head -c 32 | base64)
  IronicInspectorPassword: $(tr -dc 'A-Za-z0-9' < /dev/urandom | head -c 32 | base64)
  IronicPassword: $(tr -dc 'A-Za-z0-9' < /dev/urandom | head -c 32 | base64)
  ManilaPassword: $(tr -dc 'A-Za-z0-9' < /dev/urandom | head -c 32 | base64)
  MetadataSecret: $(tr -dc 'A-Za-z0-9' < /dev/urandom | head -c 32 | base64)
  NeutronPassword: $(tr -dc 'A-Za-z0-9' < /dev/urandom | head -c 32 | base64)
  NovaPassword: $(tr -dc 'A-Za-z0-9' < /dev/urandom | head -c 32 | base64)
  OctaviaHeartbeatKey $(tr -dc 'A-Za-z0-9' < /dev/urandom | head -c 32 | base64)
  OctaviaPassword: $(tr -dc 'A-Za-z0-9' < /dev/urandom | head -c 32 | base64)
  PlacementPassword: $(tr -dc 'A-Za-z0-9' < /dev/urandom | head -c 32 | base64)
  SwiftPassword: $(tr -dc 'A-Za-z0-9' < /dev/urandom | head -c 32 | base64)
kind: Secret
metadata:
  name: osp-secret
  namespace: openstack
type: Opaque
EOF

3장. 여러 RHOSO 환경을 위한 Cryostat 네트워크 준비

여러 RHOSO 환경에 맞게 RHOCP(Red Hat OpenShift Container Platform) 클러스터를 준비하려면 Cryostat 클러스터에서 Cryostat 네트워크를 구성해야 합니다.

3.1. OpenShift 네트워크의 기본 Red Hat OpenStack Services

다음 물리적 데이터 센터 네트워크는 일반적으로 OpenShift(RHOSO)의 Red Hat OpenStack Services에 대해 구현됩니다.

  • Control Plane network: OpenStack Operator에서 Ansible SSH 액세스에 사용하여 Red Hat OpenShift Container Platform(RHOCP) 환경에서 데이터 플레인 노드를 배포하고 연결합니다. 이 네트워크는 인스턴스의 실시간 마이그레이션에 데이터 플레인 노드에서도 사용됩니다.
  • 외부 네트워크:(선택 사항) 사용자 환경에 필요한 경우 사용됩니다. 예를 들어 다음 목적을 위해 외부 네트워크를 생성할 수 있습니다.

    • 가상 머신 인스턴스에 인터넷 액세스를 제공합니다.
    • 컨트롤 플레인과 분리된 플랫 공급자 네트워크를 생성하려면 다음을 수행합니다.
    • 컨트롤 플레인과 별도의 브릿지에 VLAN 공급자 네트워크를 구성하려면 다음을 수행합니다.
    • 컨트롤 플레인 네트워크 이외의 네트워크의 유동 IP를 사용하여 가상 머신 인스턴스에 대한 액세스를 제공합니다.
  • 내부 API 네트워크: RHOSO 구성 요소 간의 내부 통신에 사용됩니다.
  • 스토리지 네트워크: 블록 스토리지, RBD, NFS, FC 및 iSCSI에 사용됩니다.
  • 테넌트(프로젝트) 네트워크: 클라우드 배포 내의 가상 머신 인스턴스 간 데이터 통신에 사용됩니다.
  • Octavia 컨트롤러 네트워크: (선택 사항) 컨트롤 플레인에서 실행되는 로드 밸런싱 서비스(octavia) 컨트롤러를 연결하는 데 사용됩니다.
  • 스토리지 관리 네트워크: 스토리지 구성 요소에서 사용하는 (선택 사항)입니다. 예를 들어 Red Hat Ceph Storage는 HCI(하이퍼 컨버지드 인프라) 환경에서 스토리지 관리 네트워크를 cluster_network 로 사용하여 데이터를 복제합니다.

    참고

    Red Hat Ceph Storage 네트워크 구성에 대한 자세한 내용은 Red Hat Ceph Storage 구성 가이드의 Ceph 네트워크 구성을 참조하십시오.

다음 표에서는 RHOSO 배포에서 사용되는 기본 네트워크를 자세히 설명합니다. 필요한 경우 환경에 대한 네트워크를 업데이트할 수 있습니다.

참고

기본적으로 컨트롤 플레인 및 외부 네트워크는 VLAN을 사용하지 않습니다. VLAN을 사용하지 않는 네트워크는 별도의 NIC에 배치해야 합니다. 새 RHOSO 배포에서 컨트롤 플레인 네트워크에 VLAN을 사용할 수 있습니다. 트렁크된 인터페이스에서 Native VLAN을 VLAN이 아닌 네트워크로 사용할 수도 있습니다. 예를 들어 하나의 NIC에 컨트롤 플레인과 내부 API를 사용할 수 있으며 별도의 NIC에 VLAN이 없는 외부 네트워크를 사용할 수 있습니다.

Expand
표 3.1. 기본 RHOSO 네트워크
네트워크 이름CIDRNetConfig allocationRangeMetalLB IPAddressPool 범위net-attach-def ipam rangeOCP 작업자 nncp 범위

ctlplane

192.168.122.0/24

192.168.122.100 - 192.168.122.250

192.168.122.80 - 192.168.122.90

192.168.122.30 - 192.168.122.70

192.168.122.10 - 192.168.122.20

external

10.0.0.0/24

10.0.0.100 - 10.0.0.250

해당 없음

해당 없음

해당 없음

internalapi

172.17.0.0/24

172.17.0.100 - 172.17.0.250

172.17.0.80 - 172.17.0.90

172.17.0.30 - 172.17.0.70

172.17.0.10 - 172.17.0.20

storage

172.18.0.0/24

172.18.0.100 - 172.18.0.250

해당 없음

172.18.0.30 - 172.18.0.70

172.18.0.10 - 172.18.0.20

tenant

172.19.0.0/24

172.19.0.100 - 172.19.0.250

해당 없음

172.19.0.30 - 172.19.0.70

172.19.0.10 - 172.19.0.20

Octavia

172.23.0.0/24

해당 없음

해당 없음

172.23.0.30 - 172.23.0.70

해당 없음

storageMgmt

172.20.0.0/24

172.20.0.100 - 172.20.0.250

해당 없음

172.20.0.30 - 172.20.0.70

172.20.0.10 - 172.20.0.20

다음 표는 영역 및 랙마다 다른 IP 주소와 트래픽 소스로 사용되는 글로벌 bgpmainnet 을 사용하여 eth2eth3 을 사용하여 패브릭에 대한 연결을 설정하는 네트워크를 지정합니다.

Expand
표 3.2. 영역 연결
네트워크 이름영역 0영역 1영역 2

BGP Net1 (eth2)

100.64.0.0/24

100.64.1.0

100.64.2.0

BGP Net2 (eth3)

100.65.0.0/24

100.65.1.0/24

100.65.2.0

bgpmainnet (loopback)

99.99.0.0/24

99.99.1.0/24

99.99.2.0/24

3.2. 각 네임스페이스에 대한 RHOSO 네트워크 준비

RHOSO(Red Hat OpenStack Services on OpenShift) 서비스는 RHOCP(Red Hat OpenShift Container Platform) 워크로드로 실행됩니다. NMState Operator를 사용하여 작업자 노드를 필수 격리된 네트워크에 연결합니다. MetalLB Operator를 사용하여 격리된 네트워크에 내부 서비스 끝점을 노출합니다. 기본적으로 공용 서비스 끝점은 Cryostat 경로로 노출됩니다.

중요

네트워크 매니페스트는 컨트롤 플레인 인터페이스 이름을 직접 참조하므로 컨트롤 플레인 인터페이스 이름은 모든 노드에서 일관되어야 합니다. 컨트롤 플레인 인터페이스 이름이 일치하지 않으면 RHOSO 환경이 배포되지 않습니다. 물리적 인터페이스 이름이 노드에서 일관성이 없는 경우 다른 네트워크 매니페스트에서 참조할 수 있는 물리적 인터페이스에 대해 일관된 대체 이름을 구성하는 Linux 본딩을 생성해야 합니다.

참고

다음 절차의 예제에서는 IPv4 주소를 사용합니다. IPv4 주소 대신 IPv6 주소를 사용할 수 있습니다. 듀얼 스택(IPv4 및 IPv6)은 프로젝트(테넌트) 네트워크에서만 사용할 수 있습니다. IPv6 주소를 구성하는 방법에 대한 자세한 내용은 Cryostat 네트워킹 가이드의 다음 리소스를 참조하십시오.

NodeNetworkConfigurationPolicy CR(사용자 정의 리소스)은 클러스터 범위의 네트워크 구성 리소스이므로 생성할 때 네임스페이스에 할당되지 않습니다. 각 네임스페이스에 대해 NodeNetworkConfigurationPolicy (nncp) CR을 생성하여 Cryostat 클러스터에서 네임스페이스의 격리된 네트워크에 대한 인터페이스를 구성합니다. 다음 절차에서는 단일 네임스페이스에 대한 nncp CR 파일을 생성합니다. 해당 네임스페이스에 계획한 nncp 범위를 사용하여 생성한 각 네임스페이스에 대해 절차를 반복합니다.

참고

NodeNetworkConfigurationPolicy CR은 클러스터 범위의 리소스이므로 이름이 서로 충돌하지 않도록 해야 합니다.

프로세스

  1. 워크스테이션에 NodeNetworkConfigurationPolicy (nncp) CR 파일을 생성합니다(예: openstack-nncp.yaml ).
  2. Cryostat 클러스터에서 작업자 노드의 이름을 검색합니다.

    $ oc get nodes -l node-role.kubernetes.io/worker -o jsonpath="{.items[*].metadata.name}"
  3. 네트워크 구성을 검색합니다.

    $ oc get nns/<worker_node> -o yaml | more
    • & lt;worker_node >를 2단계에서 검색된 작업자 노드의 이름으로 바꿉니다(예: worker-1 ). 각 작업자 노드에 대해 이 단계를 반복합니다.
  4. nncp CR 파일에서 Cryostat 클러스터의 각 작업자 노드의 각 네임스페이스에 대해 격리된 각 네트워크의 인터페이스를 구성합니다.

    다음 예에서 nncp CR은 네트워크 격리를 위해 IPv4 주소와 함께 VLAN 인터페이스를 사용하도록 작업자 노드 1에서 osp_ns_1enp6s 0 인터페이스를 구성합니다.

    apiVersion: nmstate.io/v1
    kind: NodeNetworkConfigurationPolicy
    metadata:
      name: osp-enp6s0-worker-1
    spec:
      desiredState:
        interfaces:
        - description: internalapi vlan interface osp_ns_1
          ipv4:
            address:
            - ip: 172.17.0.10
              prefix-length: 24
            enabled: true
            dhcp: false
          ipv6:
            enabled: false
          name: internalapi_1
          state: up
          type: vlan
          vlan:
            base-iface: enp6s0
            id: 20
            reorder-headers: true
        - description: storage vlan interface osp_ns_1
          ipv4:
            address:
            - ip: 172.18.0.10
              prefix-length: 24
            enabled: true
            dhcp: false
          ipv6:
            enabled: false
          name: storage_1
          state: up
          type: vlan
          vlan:
            base-iface: enp6s0
            id: 21
            reorder-headers: true
        - description: tenant vlan interface osp_ns_1
          ipv4:
            address:
            - ip: 172.19.0.10
              prefix-length: 24
            enabled: true
            dhcp: false
          ipv6:
            enabled: false
          name: tenant_1
          state: up
          type: vlan
          vlan:
            base-iface: enp6s0
            id: 22
            reorder-headers: true
        - description: ctlplane interface osp_ns_1
          mtu: 1500
          name: enp6s0
          state: up
          type: ethernet
        - bridge:
            options:
              stp:
                enabled: false
            port:
            - name: enp6s0
              vlan: {}
          description: linux-bridge over ctlplane interface osp_ns_1
          ipv4:
            address:
            - ip: 192.168.122.11
              prefix-length: "24"
            dhcp: false
            enabled: true
          ipv6:
            enabled: false
          mtu: 1500
          name: ospbr_1
          state: up
          type: linux-bridge
        - description: octavia vlan interface osp_ns_1
          name: enp6s0.24
          state: up
          type: vlan
          vlan:
            base-iface: enp6s0
            id: 24
        - bridge:
            options:
              stp:
                enabled: false
            port:
            - name: enp6s0.24
          description: Configuring bridge octbr osp_ns_1
          mtu: 1500
          name: octbr_1
          state: up
          type: linux-bridge
      nodeSelector:
        kubernetes.io/hostname: worker-1
        node-role.kubernetes.io/worker: ""
  5. 클러스터에 nncp CR을 생성합니다.

    $ oc apply -f openstack-nncp.yaml
  6. nncp CR이 생성되었는지 확인합니다.

    $ oc get nncp -w
    NAME                        STATUS        REASON
    osp-enp6s0-worker-1   Progressing   ConfigurationProgressing
    osp-enp6s0-worker-1   Progressing   ConfigurationProgressing
    osp-enp6s0-worker-1   Available     SuccessfullyConfigured

3.2.2. 각 네임스페이스의 격리된 네트워크에 서비스 Pod 연결

NetworkAttachmentDefinition CR(사용자 정의 리소스)은 네임스페이스 범위 리소스입니다. 서비스 pod를 네트워크에 연결할 각 격리된 네트워크마다 NetworkAttachmentDefinition (net-attach-def) CR을 생성합니다. 다음 절차에서는 단일 네임스페이스에 대한 net-attach-def CR 파일을 생성합니다. 해당 네임스페이스에 계획한 ipam 범위를 사용하여 생성한 각 네임스페이스에 대해 절차를 반복합니다.

프로세스

  1. 워크스테이션에 NetworkAttachmentDefinition (net-attach-def) CR 파일을 생성합니다(예: openstack-net-attach-def.yaml ).
  2. NetworkAttachmentDefinition CR 파일에서 서비스 배포 Pod를 네트워크에 연결하도록 각 격리된 네트워크에 대한 NetworkAttachmentDefinition 리소스를 구성합니다. 다음 예제에서는 bridge 유형의 internalapi,스토리지,ctlplane테넌트 네트워크에 대한 NetworkAttachmentDefinition 리소스를 생성하고, 유형 bridge 의 로드 밸런싱 관리 네트워크인 octaviaNetworkAttachmentDefinition 리소스를 생성합니다.

    apiVersion: k8s.cni.cncf.io/v1
    kind: NetworkAttachmentDefinition
    metadata:
      name: internalapi
      namespace: osp_ns_1
    spec:
      config: |
        {
          "cniVersion": "0.3.1",
          "name": "internalapi",
          "type": "macvlan",
          "master": "internalapi_1",
          "ipam": {
            "type": "whereabouts",
            "range": "172.17.0.0/24",
            "range_start": "172.17.0.30",
            "range_end": "172.17.0.70"
          }
        }
    ---
    apiVersion: k8s.cni.cncf.io/v1
    kind: NetworkAttachmentDefinition
    metadata:
      name: ctlplane
      namespace: osp_ns_1
    spec:
      config: |
        {
          "cniVersion": "0.3.1",
          "name": "ctlplane",
          "type": "macvlan",
          "master": "ospbr_1",
          "ipam": {
            "type": "whereabouts",
            "range": "192.168.122.0/24",
            "range_start": "192.168.122.30",
            "range_end": "192.168.122.70"
          }
        }
    ---
    apiVersion: k8s.cni.cncf.io/v1
    kind: NetworkAttachmentDefinition
    metadata:
      name: storage
      namespace: osp_ns_1
    spec:
      config: |
        {
          "cniVersion": "0.3.1",
          "name": "storage",
          "type": "macvlan",
          "master": "storage_1",
          "ipam": {
            "type": "whereabouts",
            "range": "172.18.0.0/24",
            "range_start": "172.18.0.30",
            "range_end": "172.18.0.70"
          }
        }
    ---
    apiVersion: k8s.cni.cncf.io/v1
    kind: NetworkAttachmentDefinition
    metadata:
      name: tenant
      namespace: osp_ns_1
    spec:
      config: |
        {
          "cniVersion": "0.3.1",
          "name": "tenant",
          "type": "macvlan",
          "master": "tenant_1",
          "ipam": {
            "type": "whereabouts",
            "range": "172.19.0.0/24",
            "range_start": "172.19.0.30",
            "range_end": "172.19.0.70"
          }
        }
    ---
    apiVersion: k8s.cni.cncf.io/v1
    kind: NetworkAttachmentDefinition
    metadata:
      labels:
        osp/net: octavia
      name: octavia
      namespace: osp_ns_1
    spec:
      config: |
        {
          "cniVersion": "0.3.1",
          "name": "octavia",
          "type": "bridge",
          "bridge": "octbr_1",
          "ipam": {
            "type": "whereabouts",
            "range": "172.23.0.0/24",
            "range_start": "172.23.0.30",
            "range_end": "172.23.0.70",
            "routes": [
               {
                 "dst": "172.24.0.0/16",
                 "gw" : "172.23.0.150"
               }
             ]
          }
        }
    • metadata.namespace: 서비스가 배포되는 네임스페이스입니다.
    • "master": nncp CR에 정의된 대로 네트워크와 연결된 노드 인터페이스 이름입니다.
    • "IP AM": CNI IPAM 플러그인에서 .30 - .70 범위의 생성된 Pod에 IP를 할당합니다.
    • "range_start" - "range_end ": IP 주소 풀 범위는 MetalLB IPAddressPool 범위 및 NetConfig allocationRange 와 겹치지 않아야 합니다.
    • octavia 네트워크 연결은 로드 밸런서 가상 머신(amphorae) 및 OVN Operator가 관리하는 Open vSwitch Pod를 관리하는 pod를 연결하는 데 필요합니다.
  3. 클러스터에 NetworkAttachmentDefinition CR을 생성합니다.

    $ oc apply -f openstack-net-attach-def.yaml
  4. NetworkAttachmentDefinition CR이 생성되었는지 확인합니다.

    $ oc get net-attach-def -n openstack

3.2.3. 각 네임스페이스에 대해 RHOSO 네트워크 VIPS용 Cryostat 준비

IPAddressPoolL2Advertisement CR(사용자 정의 리소스)은 각 RHOSO 환경에 대해 metallb-system 네임 스페이스 내에서 생성해야 하는 네임스페이스 범위 리소스입니다. 가상 IP(VIP)가 발표되는 방법을 정의하는 L2Advertisement CR과 VIP로 사용할 수 있는 IP를 구성하려면 IPAddressPool CR을 생성해야 합니다. 계층 2 모드에서 한 노드는 로컬 네트워크에 서비스를 알리는 책임이 있다고 가정합니다. 다음 절차에서는 단일 네임스페이스에 대한 L2Advertisement CR 파일과 IPAddressPool CR 파일을 생성합니다. 해당 네임스페이스에 대해 계획한 MetalLB IPAddressPool 범위를 사용하여 생성한 각 네임스페이스에 대해 절차를 반복합니다.

참고

IPAddressPoolL2Advertisement CR은 metallb-system 네임스페이스에 있어야 하는 MetalLB 리소스입니다. 각 네임스페이스의 리소스는 동일한 metallb-system 네임스페이스를 사용해야 하므로 이름이 서로 충돌하지 않도록 해야 합니다.

프로세스

  1. 워크스테이션에 IPAddressPool CR 파일을 만듭니다(예: ipaddresspools_osp_ns_1.yaml ).
  2. IPAddressPool CR 파일에서 MetalLB에 권한이 있는 IP 주소 범위를 지정하도록 격리된 네트워크에서 IPAddressPool 리소스를 구성합니다.

    apiVersion: metallb.io/v1beta1
    kind: IPAddressPool
    metadata:
      name: internalapi_1
      namespace: metallb-system
    spec:
      addresses:
        - 172.17.0.80-172.17.0.90
      autoAssign: true
      avoidBuggyIPs: false
    ---
    apiVersion: metallb.io/v1beta1
    kind: IPAddressPool
    metadata:
      namespace: metallb-system
      name: ctlplane_1
    spec:
      addresses:
        - 192.168.122.80-192.168.122.90
      autoAssign: true
      avoidBuggyIPs: false
    ---
    apiVersion: metallb.io/v1beta1
    kind: IPAddressPool
    metadata:
      namespace: metallb-system
      name: storage_1
    spec:
      addresses:
        - 172.18.0.80-172.18.0.90
      autoAssign: true
      avoidBuggyIPs: false
    ---
    apiVersion: metallb.io/v1beta1
    kind: IPAddressPool
    metadata:
      namespace: metallb-system
      name: tenant_1
    spec:
      addresses:
        - 172.19.0.80-172.19.0.90
      autoAssign: true
      avoidBuggyIPs: false
    • spec.addresses: IPAddressPool 범위는 whereabouts IPAM 범위 및 NetConfig allocationRange 와 겹치지 않아야 합니다.

    다른 IPAddressPool 리소스 매개변수를 구성하는 방법에 대한 자세한 내용은 Cryostat 네트워킹 가이드의 MetalLB 주소 풀 구성 을 참조하십시오.

  3. 클러스터에 IPAddressPool CR을 생성합니다.

    $ oc apply -f ipaddresspools_osp_ns_1.yaml
  4. IPAddressPool CR이 생성되었는지 확인합니다.

    $ oc describe -n metallb-system IPAddressPool
  5. 워크스테이션에 L2Advertisement CR 파일을 생성합니다(예: l2advertisement_osp_ns_1.yaml ).
  6. L2Advertisement CR 파일에서 L2Advertisement CR을 구성하여 서비스를 로컬 네트워크에 알리는 노드를 정의합니다. 각 네트워크에 대해 하나의 L2Advertisement 리소스를 만듭니다.

    다음 예에서 각 L2Advertisement CR은 네트워크 주소 풀에서 요청된 VIP가 VLAN에 연결된 인터페이스에서 발표되도록 지정합니다.

    apiVersion: metallb.io/v1beta1
    kind: L2Advertisement
    metadata:
      name: internalapi_1
      namespace: metallb-system
    spec:
      ipAddressPools:
      - internalapi_1
      interfaces:
      - internalapi_1
      nodeSelectors:
      - matchLabels:
          node-role.kubernetes.io/worker: ""
    ---
    apiVersion: metallb.io/v1beta1
    kind: L2Advertisement
    metadata:
      name: ctlplane_1
      namespace: metallb-system
    spec:
      ipAddressPools:
      - ctlplane_1
      interfaces:
      - ospbr_1
      nodeSelectors:
      - matchLabels:
          node-role.kubernetes.io/worker: ""
    ---
    apiVersion: metallb.io/v1beta1
    kind: L2Advertisement
    metadata:
      name: storage_1
      namespace: metallb-system
    spec:
      ipAddressPools:
      - storage_1
      interfaces:
      - storage_1
      nodeSelectors:
      - matchLabels:
          node-role.kubernetes.io/worker: ""
    ---
    apiVersion: metallb.io/v1beta1
    kind: L2Advertisement
    metadata:
      name: tenant_1
      namespace: metallb-system
    spec:
      ipAddressPools:
      - tenant_1
      interfaces:
      - tenant_1
      nodeSelectors:
      - matchLabels:
          node-role.kubernetes.io/worker: ""
    • spec.interfaces: VLAN 주소 풀에서 요청된 VIP가 발표되는 인터페이스입니다.

    다른 L2Advertisement 리소스 매개변수를 구성하는 방법에 대한 자세한 내용은 Cryostat 네트워킹 가이드의 L2 광고 및 라벨을 사용하여 MetalLB 구성 을 참조하십시오.

  7. 클러스터에 L2Advertisement CR을 생성합니다.

    $ oc apply -f l2advertisement_osp_ns_1.yaml
  8. L2Advertisement CR이 생성되었는지 확인합니다.

    $ oc get -n metallb-system L2Advertisement
    NAME            IPADDRESSPOOLS    IPADDRESSPOOL SELECTORS   INTERFACES
    ctlplane_1      ["ctlplane_1"]                              ["ospbr_1"]
    internalapi_1   ["internalapi_1"]                           ["internalapi_1"]
    storage_1       ["storage_1"]                               ["storage_1"]
    tenant_1        ["tenant_1"]                                ["tenant_1"]
  9. 클러스터에 네트워크 백엔드로 OVNKubernetes가 있는 경우 MetalLB가 보조 네트워크 인터페이스에서 작동할 수 있도록 글로벌 전달을 활성화해야 합니다.

    1. 클러스터에서 사용하는 네트워크 백엔드를 확인합니다.

      $ oc get network.operator cluster --output=jsonpath='{.spec.defaultNetwork.type}'
    2. 백엔드가 OVNKubernetes인 경우 다음 명령을 실행하여 글로벌 IP 전달을 활성화합니다.

      $ oc patch network.operator cluster -p '{"spec":{"defaultNetwork":{"ovnKubernetesConfig":{"gatewayConfig":{"ipForwarding": "Global"}}}}}' --type=merge

3.3. 각 네임스페이스에 대한 데이터 플레인 네트워크 생성

데이터 플레인 네트워크를 생성하려면 NetConfig CR(사용자 정의 리소스)을 정의하고 데이터 플레인 네트워크의 모든 서브넷을 지정합니다. 데이터 플레인에 대해 하나 이상의 컨트롤 플레인 네트워크를 정의해야 합니다. VLAN 네트워크를 정의하여 구성 가능 네트워크(예: InternalAPI,Storage, External )에 대한 네트워크 격리를 생성할 수도 있습니다. 각 네트워크 정의에는 IP 주소 할당이 포함되어야 합니다. 다음 절차에서는 osp_ns_1 네임스페이스에 대한 NetConfig CR 파일을 생성합니다. 해당 네임스페이스에 계획한 allocationRange 범위를 사용하여 생성한 각 네임스페이스에 대해 절차를 반복합니다.

프로세스

  1. 워크스테이션에 netconfig_osp_ns_1.yaml 이라는 파일을 만듭니다.
  2. netconfig_osp_ns_1.yaml 에 다음 구성을 추가하여 NetConfig CR을 생성합니다.

    apiVersion: network.openstack.org/v1beta1
    kind: NetConfig
    metadata:
      name: openstacknetconfig
      namespace: osp_ns_1
  3. netconfig_osp_ns_1.yaml 파일에서 각 데이터 플레인 네트워크의 토폴로지를 정의합니다. 다음 예제에서는 데이터 플레인에 대한 격리된 네트워크를 생성합니다.

    spec:
      networks:
      - name: CtlPlane
        dnsDomain: ctlplane_1.example.com
        subnets:
        - name: subnet1
          allocationRanges:
          - end: 192.168.122.120
            start: 192.168.122.100
          - end: 192.168.122.200
            start: 192.168.122.150
          cidr: 192.168.122.0/24
          gateway: 192.168.122.1
      - name: InternalApi
        dnsDomain: internalapi_1.example.com
        subnets:
        - name: subnet1
          allocationRanges:
          - end: 172.17.0.250
            start: 172.17.0.100
          excludeAddresses:
          - 172.17.0.10
          - 172.17.0.12
          cidr: 172.17.0.0/24
          vlan: 20
      - name: External
        dnsDomain: external_1.example.com
        subnets:
        - name: subnet1
          allocationRanges:
          - end: 10.0.0.250
            start: 10.0.0.100
          cidr: 10.0.0.0/24
          gateway: 10.0.0.1
      - name: Storage
        dnsDomain: storage_1.example.com
        subnets:
        - name: subnet1
          allocationRanges:
          - end: 172.18.0.250
            start: 172.18.0.100
          cidr: 172.18.0.0/24
          vlan: 21
      - name: Tenant
        dnsDomain: tenant_1.example.com
        subnets:
        - name: subnet1
          allocationRanges:
          - end: 172.19.0.250
            start: 172.19.0.100
          cidr: 172.19.0.0/24
          vlan: 22
    • spec.networks.name: 네트워크의 이름입니다(예: CtlPlane ).
    • spec.networks.subnets: IPv4 서브넷 사양입니다.
    • spec.networks.subnets.name: 서브넷의 이름입니다(예: subnet1 ).
    • spec.networks.subnets.allocationRanges: NetConfig allocationRange. allocationRange 는 MetalLB IPAddressPool 범위 및 IP 주소 풀 범위와 겹치지 않아야 합니다.
    • spec.networks.subnets.excludeAddresses: 데이터 플레인 노드에서 사용해서는 안 되는 할당 범위의 IP 주소 선택적 목록입니다.
    • spec.networks.subnets.vlan: 네트워크 VLAN입니다. 기본 RHOSO 네트워크에 대한 자세한 내용은 OpenShift 네트워크의 기본 Red Hat OpenStack Services 를 참조하십시오.
  4. netconfig_osp_ns_1.yaml 정의 파일을 저장합니다.
  5. 데이터 플레인 네트워크를 생성합니다.

    $ oc create -f netconfig_osp_ns_1.yaml -n openstack
  6. 데이터 플레인 네트워크가 생성되었는지 확인하려면 openstacknetconfig 리소스를 확인합니다.

    $ oc get netconfig/openstacknetconfig -n openstack

    오류가 표시되면 기본 network-attach-definition 및 노드 네트워크 구성 정책을 확인합니다.

    $ oc get network-attachment-definitions -n openstack
    $ oc get nncp

4장. 네임스페이스에 대한 RHOSO 환경 생성

OpenShift에 Red Hat OpenStack Services 배포 지침에 따라 각 네임스페이스에 대한 컨트롤 플레인 및 데이터 플레인을 생성하고 각 네임스페이스의 네트워크 구성을 업데이트합니다.

4.1. 네임스페이스의 컨트롤 플레인 생성

각 네임스페이스에 대해 OpenStackControlPlane CR(사용자 정의 리소스)을 생성하고 해당 네임스페이스의 네트워크를 사용하여 로드 밸런서를 구성합니다. 다음 절차에서는 osp_ns_1 네임스페이스에 대한 OpenStackControlPlane CR을 생성합니다.

프로세스

  1. OpenShift에 Red Hat OpenStack Services 배포의 컨트롤 플레인 생성 절차에 따라 osp_ns_1 네임스페이스에 대한 OpenStackControlPlane CR을 생성합니다.
  2. 각 서비스의 로드 밸런서 구성을 찾아 해당 네임스페이스의 네트워크로 업데이트합니다.

      <service>:
        ...
            override:
              service:
                internal:
                  metadata:
                    annotations:
                      metallb.universe.tf/address-pool: internalapi_1
                      metallb.universe.tf/allow-shared-ip: internalapi_1
                      metallb.universe.tf/loadBalancerIPs: 172.17.0.80
                  spec:
                    type: LoadBalancer
    • MetalLB.universe.tf/address-pool: 서비스를 로드 밸런싱할 IP 주소를 할당하기 위한 IpAddressPool 입니다.
    • MetalLB.universe.tf/allow-shared-ip: 로드 밸런싱을 위해 에서 공유 IP 주소를 사용하는 IpAddressPool 입니다.

      참고

      rabbitmq의 여러 인스턴스와 같이 동일한 포트를 사용하는 서비스와 VIP를 공유할 수 없습니다.

    • MetalLB.universe.tf/loadBalancerIPs: 서비스 로드 밸런싱 시 사용할 IpAddressPool 범위에서 특정 VIP를 할당합니다.
  3. 네임스페이스의 전용 인터페이스에 대응하도록 datacentre 네트워크의 nicMappings 를 구성하여 ovn 서비스의 NIC 매핑을 업데이트하여 네임스페이스의 OVNController 리소스가 다른 네임스페이스와 분리되었는지 확인합니다.

    ...
        ovn:
          enabled: true
          template:
            ovnController:
              nicMappings:
                datacentre: ospbr_1
            ovnDBCluster:
              ovndbcluster-nb:
  4. 컨트롤 플레인을 업데이트합니다.

    $ oc apply -f osp_ns_1_control_plane.yaml -n openstack
  5. Cryostat가 OpenStackControlPlane CR과 관련된 리소스를 생성할 때까지 기다립니다. 다음 명령을 실행하여 상태를 확인합니다.

    $ oc get openstackcontrolplane -n osp_ns_1
    NAME 						    STATUS 	  MESSAGE
    control-plane-ns-1 	Unknown 	Setup started

    상태가 "Setup complete"인 경우 OpenStackControlPlane 리소스가 생성됩니다.

    작은 정보

    get 명령의 끝에 -w 옵션을 추가하여 배포 진행 상황을 추적합니다.

  6. 서비스 pod가 올바른 작업자 노드에서 실행 중인지 확인합니다.

4.2. 네임스페이스의 데이터 플레인 생성

각 네임스페이스에 대해 OpenStackDataPlaneNodeSet CR(사용자 정의 리소스)과 각 네임스페이스에 대한 OpenStackDataPlaneDeployment CR을 생성합니다. 다음 절차에서는 osp_ns_1 네임스페이스에 대한 OpenStackDataPlaneNodeSet CR 및 OpenStackDataPlaneDeployment CR을 생성합니다.

프로세스

  1. OpenShift에 Red Hat OpenStack Services 배포의 데이터 플레인 절차 생성 절차에 따라 osp_ns_1 네임스페이스에 대한 OpenStackDataPlaneNodeSet CR을 생성합니다.
  2. nodes 섹션을 찾아 노드가 속한 네임스페이스를 나타내는 각 노드의 고유한 이름으로 hostNameansibleVars.fqdn_internal_api 필드를 업데이트합니다.

      nodes:
        edpm-compute-0:
          hostName: edpm_1-compute-0
          networks:
          - name: ctlplane
            subnetName: subnet1
            defaultRoute: true
            fixedIP: 192.168.122.100
          - name: internalapi
            subnetName: subnet1
            fixedIP: 172.17.0.100
          - name: storage
            subnetName: subnet1
            fixedIP: 172.18.0.100
          - name: tenant
            subnetName: subnet1
            fixedIP: 172.19.0.100
          ansible:
            ansibleHost: 192.168.122.100
            ansibleUser: cloud-admin
            ansibleVars:
              fqdn_internal_api: edpm_1-compute-0.example.com
  3. 네임스페이스에 정의된 각 노드에 대해 정의된 네트워크의 IP 주소를 업데이트합니다.

      nodes:
        edpm-compute-0:
          ...
          networks:
          - name: ctlplane
            subnetName: subnet1
            defaultRoute: true
            fixedIP: 192.168.122.100
          - name: internalapi
            subnetName: subnet1
            fixedIP: 172.17.0.100
          - name: storage
            subnetName: subnet1
            fixedIP: 172.18.0.100
          - name: tenant
            subnetName: subnet1
            fixedIP: 172.19.0.100
          ansible:
            ansibleHost: 192.168.122.100
            ...
    • fixedIP: osp_ns_1 네임스페이스의 네트워크의 IP 주소로 설정합니다.
  4. 업데이트된 OpenStackDataPlaneNodeSet CR 정의 파일을 저장합니다.
  5. 업데이트된 OpenStackDataPlaneNodeSet CR 구성을 적용합니다.

    $ oc apply -f osp_ns_1_data_plane.yaml
  6. 상태가 SetupReady:인지 확인하여 데이터 플레인 리소스가 업데이트되었는지 확인합니다.

    $ oc wait openstackdataplanenodeset data-plane-ns-1 --for condition=SetupReady --timeout=10m

    상태가 SetupReady 이면 명령에서 condition met 메시지를 반환하고, 그렇지 않으면 시간 초과 오류가 반환됩니다.

  7. 워크스테이션에 파일을 생성하여 새 OpenStackDataPlaneDeployment CR을 정의합니다.

    apiVersion: dataplane.openstack.org/v1beta1
    kind: OpenStackDataPlaneDeployment
    metadata:
      name: <node_set_deployment_name>
    • & lt;node_set_deployment_name >을 OpenStackDataPlaneDeployment CR 이름으로 바꿉니다. 이름은 고유해야 하며 소문자 영숫자( 하이 프린) 또는 . (period)로 구성되어야 하며 영숫자 문자로 시작하고 끝나야 합니다.
    작은 정보

    수정된 노드 세트의 목적을 나타내는 정의 파일과 OpenStackDataPlaneDeployment CR에 고유하고 설명이 포함된 이름을 지정합니다.

  8. 수정한 OpenStackDataPlaneNodeSet CR을 추가합니다.

    spec:
      nodeSets:
        - <nodeSet_name>
  9. OpenStackDataPlaneDeployment CR 배포 파일을 저장합니다.
  10. 수정된 OpenStackDataPlaneNodeSet CR을 배포합니다.

    $ oc create -f osp_ns_1_data_plane_deploy.yaml -n openstack

    배포가 실행되는 동안 Ansible 로그를 볼 수 있습니다.

    $ oc get pod -l app=openstackansibleee -w
    $ oc logs -l app=openstackansibleee -f --max-log-requests 10

    oc 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
  11. 수정된 OpenStackDataPlaneNodeSet CR이 배포되었는지 확인합니다.

    $ oc get openstackdataplanedeployment -n openstack
    NAME             	STATUS   MESSAGE
    data-plane-ns-1     True     Setup Complete
    
    
    $ oc get openstackdataplanenodeset -n openstack
    NAME             	STATUS   MESSAGE
    data-plane-ns-1     True     NodeSet Ready

    상태가 데이터 플레인이 배포되지 않았음을 나타내는 경우 배포 문제를 해결합니다. 자세한 내용은 OpenShift에 Red Hat OpenStack Services 배포 가이드의 데이터 플레인 생성 및 배포 문제 해결을 참조하십시오.

법적 공지

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

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 소개

Red Hat은 기업이 핵심 데이터 센터에서 네트워크 에지에 이르기까지 플랫폼과 환경 전반에서 더 쉽게 작업할 수 있도록 강화된 솔루션을 제공합니다.

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

Red Hat은 코드, 문서, 웹 속성에서 문제가 있는 언어를 교체하기 위해 최선을 다하고 있습니다. 자세한 내용은 다음을 참조하세요.Red Hat 블로그.

Red Hat 문서 정보

Legal Notice

Theme

© 2026 Red Hat
맨 위로 이동