7.2. RHOSO 데이터 플레인에 Compute 서비스 채택


Compute(nova) 서비스를 OpenShift(RHOSO) 데이터 플레인의 Red Hat OpenStack Services에 채택합니다.

사전 요구 사항

  • 컴퓨팅 서비스(nova) 호스트에서 나머지 컨트롤 플레인 노드, 리포지토리 및 패키지를 중지했습니다. 자세한 내용은 인프라 관리 및 Compute 서비스 중지 를 참조하십시오.
  • NovaLibvirt 서비스에 Ceph 백엔드를 구성했습니다. 자세한 내용은 Ceph 백엔드 구성을 참조하십시오.
  • IP 주소 관리(IPAM)를 구성했습니다.

    $ oc apply -f - <<EOF
    apiVersion: network.openstack.org/v1beta1
    kind: NetConfig
    metadata:
      name: netconfig
    spec:
      networks:
      - name: ctlplane
        dnsDomain: ctlplane.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.example.com
        subnets:
        - name: subnet1
          allocationRanges:
          - end: 172.17.0.250
            start: 172.17.0.100
          cidr: 172.17.0.0/24
          vlan: 20
      - name: External
        dnsDomain: external.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.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: storagemgmt
        dnsDomain: storagemgmt.example.com
        subnets:
        - name: subnet1
          allocationRanges:
          - end: 172.20.0.250
            start: 172.20.0.100
          cidr: 172.20.0.0/24
          vlan: 23
      - name: tenant
        dnsDomain: tenant.example.com
        subnets:
        - name: subnet1
          allocationRanges:
          - end: 172.19.0.250
            start: 172.19.0.100
          cidr: 172.19.0.0/24
          vlan: 22
    EOF
  • neutron-sriov-nic-agent 가 컴퓨팅 서비스 노드에서 실행 중인 경우 물리적 장치 매핑이 OpenStackDataPlaneNodeSet CR(사용자 정의 리소스)에 정의된 값과 일치하는지 확인합니다. 자세한 내용은 director Operator 배포에서 설정 가져오기를 참조하십시오.
  • 업그레이드를 실행하는 스크립트를 실행하도록 쉘 변수를 정의했습니다.

    $ CEPH_FSID=$(oc get secret ceph-conf-files -o json | jq -r '.data."ceph.conf"' | base64 -d | grep fsid | sed -e 's/fsid = //')
    
    $ alias openstack="oc exec -t openstackclient -- openstack"
    
    $ DEFAULT_CELL_NAME="cell3" 
    1
    
    $ RENAMED_CELLS="cell1 cell2 $DEFAULT_CELL_NAME"
    
    $ declare -A COMPUTES_CELL1
    $ export COMPUTES_CELL1=( 
    2
    
      ["standalone.localdomain"]="192.168.122.100" 
    3
    
      # <compute1> 
    4
    
      # <compute2>
      # <compute3>
    )
    $ declare -A COMPUTES_CELL2
    $ export COMPUTES_CELL2=(
      # ...
    )
    $ declare -A COMPUTES_CELL3
    $ export COMPUTES_CELL3=(
      # ... 
    5
    
    )
    # ...
    
    $ declare -A COMPUTES_API_CELL1
    $ export COMPUTES_API_CELL1=( 
    6
    
      ["standalone.localdomain"]="172.17.0.100"
      # ...
    )
    # ...
    
    $ NODESETS=""
    $ for CELL in $(echo $RENAMED_CELLS); do
      ref="COMPUTES_$(echo ${CELL}|tr '[:lower:]' '[:upper:]')"
      eval names=\${!${ref}[@]}
      [ -z "$names" ] && continue
      NODESETS="'openstack-${CELL}', $NODESETS" 
    7
    
    done
    $ NODESETS="[${NODESETS%,*}]"
    1
    소스 클라우드 기본 셀은 채택 후 대상 클라우드에서 새 DEFAULT_CELL_NAME 을 확보합니다. 다중 셀 채택 시나리오에서는 소스 클라우드에서 마지막 셀의 증분 인덱스를 제공하여 원래 이름, 기본값 을 유지하거나 새 셀 기본 이름을 만들 수 있습니다. 예를 들어 마지막 셀의 증가된 인덱스가 cell5 인 경우 새 셀의 기본 이름은 cell6 입니다.
    2
    각 셀에 대해 ctlplaneinternalapi 네트워크에 연결된 Compute 서비스 노드의 이름 및 IP 주소로 &lt ;["standalone.localdomain"]="x.x.x" > 값과 COMPUTES_CELL<X > 값을 업데이트합니다. 각 네트워크에 정의된 실제 FQDN을 지정하지 마십시오. 컴퓨팅 노드의 연결된 각 네트워크에 대해 항상 동일한 호스트 이름을 사용합니다. 필요에 따라 소스 클라우드의 나머지 네트워크에 있는 IP 주소와 호스트 이름을 제공합니다. 또는 이 절차의 9단계에서 생성하는 파일을 수동으로 조정할 수 있습니다.
    3
    배포에 사용자 지정 DNS 도메인이 있는 경우 노드의 FQDN 값에 지정합니다. 이 값은 데이터 플레인 노드 세트 spec.nodes.<NODE NAME>.hostName 에서 사용됩니다.
    4
    소스 클라우드 cell1 셀의 모든 Compute 서비스 노드를 COMPUTES_CELL1 에 할당합니다. < compute1 > , < compute2 > , < compute3 >를 컴퓨팅 서비스 노드의 이름으로 바꿉니다.
    5
    소스 클라우드 기본 셀의 모든 컴퓨팅 서비스 노드를 COMPUTES_CELL<X > 및 COMPUTES_API_CELL<X>' 에 할당합니다. 여기서 < X >는 DEFAULT_CELL_NAME 환경 변수 값입니다. 이 예제에서 DEFAULT_CELL_NAME 환경 변수 값은 cell3 과 같습니다.
    6
    각 셀에 대해 ctlplaneinternalapi 네트워크에 연결된 컴퓨팅 서비스 노드의 이름 및 IP 주소로 &lt ;["standalone.localdomain"]="192.168.122.100" > 값과 COMPUTES_API_CELL 값을 업데이트합니다. 각 네트워크에 정의된 실제 FQDN을 지정하지 마십시오. 연결된 각 네트워크에 동일한 호스트 이름을 사용합니다. 필요에 따라 소스 클라우드의 나머지 네트워크에 있는 IP 주소와 호스트 이름을 제공합니다. 또는 이 절차의 9단계에서 생성하는 파일을 수동으로 조정할 수 있습니다.
    7
    셀에 대한 노드 세트가 생성되지 않기 때문에 컴퓨팅 노드를 포함하지 않는 셀은 이 템플릿에서 생략됩니다.
    참고

    기본 셀을 사용하여 소스 클라우드를 배포하고 채택 중에 이름을 변경하려면 다음 예와 같이 사용할 새 이름을 정의합니다.

    $ DEFAULT_CELL_NAME="cell1"
    $ RENAMED_CELLS="cell1"
참고

libvirt에 대한 Compute 서비스에서 로컬 스토리지 백엔드를 구성하는 경우 CEPH_FSID 매개변수의 값을 설정하지 마십시오. 스토리지 백엔드는 소스 클라우드 스토리지 백엔드와 일치해야 합니다. 채택 중에는 스토리지 백엔드를 변경할 수 없습니다.

프로세스

  1. 데이터 플레인 노드에 대한 SSH 인증 보안을 생성합니다.

    $ oc apply -f - <<EOF
    apiVersion: v1
    kind: Secret
    metadata:
        name: dataplane-adoption-secret
    data:
        ssh-privatekey: |
    $(cat <path_to_SSH_key> | base64 | sed 's/^/        /')
    EOF
    • & lt;path_to_SSH_key& gt;를 SSH 키 경로로 바꿉니다.
  2. ssh 키 쌍 nova-migration-ssh-key 시크릿을 생성합니다.

    $ cd "$(mktemp -d)"
    $ ssh-keygen -f ./id -t ecdsa-sha2-nistp521 -N ''
    $ oc get secret nova-migration-ssh-key || oc create secret generic nova-migration-ssh-key \
      --from-file=ssh-privatekey=id \
      --from-file=ssh-publickey=id.pub \
      --type kubernetes.io/ssh-auth
    $ rm -f id*
    $ cd -
  3. TLS Everywhere가 활성화된 경우 기존 RHOSP 배포 암호와 일치하도록 LIBVIRT_PASSWORD 를 설정합니다.

    declare -A TRIPLEO_PASSWORDS
    TRIPLEO_PASSWORDS[default]="$HOME/overcloud-passwords.yaml"
    LIBVIRT_PASSWORD=$(cat ${TRIPLEO_PASSWORDS[default]} | grep ' LibvirtTLSPassword:' | awk -F ': ' '{ print $2; }')
    LIBVIRT_PASSWORD_BASE64=$(echo -n "$LIBVIRT_PASSWORD" | base64)
    1. TLS-e가 활성화되면 libvirt-secret을 생성합니다.

      $ oc apply -f - <<EOF
      apiVersion: v1
      kind: Secret
      metadata:
        name: libvirt-secret
      type: Opaque
      data:
        LibvirtPassword: ${LIBVIRT_PASSWORD_BASE64}
      EOF
  4. libvirt의 로컬 스토리지 백엔드를 구성하기 위해 모든 셀에 사용할 구성 맵을 생성합니다.

    $ oc apply -f - <<EOF
    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: nova-cells-global-config
    data: 
    1
    
      99-nova-compute-cells-workarounds.conf: | 
    2
    
        [workarounds]
        disable_compute_service_check_for_ffu=true
    EOF
    1
    ConfigMap데이터 리소스는 모든 셀에 대한 구성 파일을 제공합니다.
    2
    우선 순위에 따라 03 에서 99 까지 <*.conf > 파일을 인덱싱해야 합니다. & lt;99-*.conf > 파일은 우선 순위가 가장 높은 반면 03 미만의 인덱스는 내부 사용을 위해 예약되어 있습니다.
    참고

    실시간 클라우드를 채택하는 경우 cell1 기본 nova-extra-config 구성 맵에 저장된 기본 nova 데이터 플레인 서비스에 대한 추가 구성을 수행해야 할 수 있습니다. cell1 기본 nova -extra-config 구성 맵의 기존 구성을 삭제하거나 덮어쓰지 마십시오. 구성을 덮어쓰면 nova-extra-config 구성 맵의 특정 콘텐츠를 사용하는 데이터 위치 서비스가 손상될 수 있습니다.

  5. libvirt에 대해 Red Hat Ceph Storage 백엔드를 구성합니다.

    $ oc apply -f - <<EOF
    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: nova-cells-global-config
    data:
      99-nova-compute-cells-workarounds.conf: |
        [workarounds]
        disable_compute_service_check_for_ffu=true
      03-ceph-nova.conf: |
        [libvirt]
        images_type=rbd
        images_rbd_pool=vms
        images_rbd_ceph_conf=/etc/ceph/ceph.conf
        images_rbd_glance_store_name=default_backend
        images_rbd_glance_copy_poll_interval=15
        images_rbd_glance_copy_timeout=600
        rbd_user=openstack
        rbd_secret_uuid=$CEPH_FSID
    EOF
    참고

    다중 셀 구성이 있는 Red Hat Ceph Storage 환경의 경우 nova-custom-ceph-cellXnova-compute-extraconfig-cellX 와 유사한 구성 맵 및 Red Hat OpenStack Platform 데이터 플레인 서비스의 이름을 지정해야 합니다.

  6. 컴퓨팅 서비스 셀에 대한 데이터 플레인 서비스를 생성하여 사전 업그레이드 해결 방법을 활성화하고 선택한 스토리지 백엔드에 대한 Compute 서비스를 구성합니다.

    for CELL in $(echo $RENAMED_CELLS); do
     $ oc apply -f - <<EOF
    ---
    apiVersion: dataplane.openstack.org/v1beta1
    kind: OpenStackDataPlaneService
    metadata:
      name: nova-$CELL
    spec:
      dataSources: 
    1
    
        - secretRef:
            name: nova-$CELL-compute-config 
    2
    
        - secretRef:
            name: nova-migration-ssh-key 
    3
    
        - configMapRef:
            name: nova-cells-global-config
      playbook: osp.edpm.nova
      caCerts: combined-ca-bundle
      edpmServiceType: nova
      containerImageFields:
      - NovaComputeImage
      - EdpmIscsidImage
    EOF
      done
    • TLS Everywhere가 활성화된 경우 OpenStackDataPlaneService CR에 다음 콘텐츠를 추가합니다.

        tlsCerts:
          contents:
            - dnsnames
            - ips
          networks:
            - ctlplane
          issuer: osp-rootca-issuer-internal
          edpmRoleServiceName: nova
        caCerts: combined-ca-bundle
        edpmServiceType: nova
      1
      cell<X>에 대한 로컬 메타데이터 서비스를 활성화하려면 spec.dataSources.secretRef 를 추가하여 자동 생성된 nova-cell<X>-metadata-neutron-config 시크릿을 참조합니다. Compute 서비스 Adopting에 설명된 대로 OpenStackControlPlane/openstack CR에서 spec.nova.template.cellTemplates.cell<X>.metadataServiceTemplate.enable 설정해야 합니다. 단일 최상위 메타데이터를 구성하거나 셀당 메타데이터를 정의할 수 있습니다.
      2
      각 셀에 대해 nova-cell<X>-compute-config 자동 생성기입니다.
      3
      Compute 서비스와 관련된 각 사용자 정의 OpenStackDataPlaneService CR에 대해 nova-cell<X>-compute-confignova-migration-ssh-key 참조를 추가해야 합니다.
      참고

      컴퓨팅 서비스 셀에 대한 데이터 플레인 서비스를 생성할 때 다음 고려 사항을 검토하십시오.

      • 이 예에서는 동일한 nova-migration-ssh-key 키가 셀 간에 공유됩니다. 그러나 다른 셀에 대해 다른 키를 사용해야 합니다.
      • 간단한 구성 덮어쓰기의 경우 사용자 정의 데이터 플레인 서비스가 필요하지 않습니다. 그러나 셀 cell1 을 재구성하기 위해 가장 안전한 옵션은 사용자 지정 서비스 및 전용 구성 맵을 생성하는 것입니다.
      • cell1nova 라는 기본 OpenStackDataPlaneService CR과 nova-extra-config 구성 맵으로 이미 관리됩니다. 기본 데이터 플레인 서비스 nova 정의를 변경하지 마십시오. RHOSO Operator가 OLM으로 업데이트되면 변경 사항이 손실됩니다.
      • 셀이 여러 노드 세트에 걸쳐 사용자 지정 OpenStackDataPlaneService 리소스에 노드 세트와 관련된 이름을 지정합니다(예: nova-cell1-nfvnova-cell1-enterprise ). 그런 다음 자동 생성 구성 맵의 이름은 nova-cell1-nfv-extra-confignova-cell1-enterprise-extra-config 입니다.
      • 동일한 셀의 여러 노드 세트에 있는 노드의 다양한 구성도 지원되지만 이 가이드에서는 다루지 않습니다.
  7. 서브스크립션 관리자의 시크릿을 생성합니다.

    $ oc create secret generic subscription-manager \
    --from-literal rhc_auth='{"login": {"username": "<subscription_manager_username>", "password": "<subscription_manager_password>"}}'
    • &lt ;subscription_manager_username&gt;을 해당 사용자 이름으로 바꿉니다.
    • & lt;subscription_manager_password&gt;를 해당 암호로 바꿉니다.
  8. Red Hat 레지스트리의 시크릿을 생성합니다.

    $ oc create secret generic redhat-registry \
    --from-literal edpm_container_registry_logins='{"registry.redhat.io": {"<registry_username>": "<registry_password>"}}'
    • &lt ;registry_username&gt;을 해당 사용자 이름으로 바꿉니다.
    • &lt ;registry_password&gt;를 해당 암호로 바꿉니다.

      참고

      OpenStackDataPlaneService CR의 dataSources 필드에서 subscription-manager 시크릿을 참조할 필요가 없습니다. 시크릿은 nodeTemplate 필드의 ansibleVarsFrom 속성에 노드별 OpenStackDataPlaneNodeSet CR을 사용하여 이미 전달되었습니다.

  9. 각 셀에 대한 데이터 플레인 노드 세트 정의를 생성합니다.

    $ declare -A names
    $ for CELL in $(echo $RENAMED_CELLS); do
      ref="COMPUTES_$(echo ${CELL}|tr '[:lower:]' '[:upper:]')"
      eval names=\${!${ref}[@]}
      ref_api="COMPUTES_API_$(echo ${CELL}|tr '[:lower:]' '[:upper:]')"
      [ -z "$names" ] && continue
      ind=0
      rm -f computes-$CELL
      for compute in $names; do
        ip="${ref}['$compute']"
        ip_api="${ref_api}['$compute']"
        cat >> computes-$CELL << EOF
        ${compute}:
          hostName: $compute 
    1
    
          ansible:
            ansibleHost: $compute
          networks: 
    2
    
          - defaultRoute: true
            fixedIP: ${!ip}
            name: ctlplane
            subnetName: subnet1
          - name: internalapi
            subnetName: subnet1
            fixedIP: ${!ip_api}
          - name: storage
            subnetName: subnet1
          - name: tenant
            subnetName: subnet1
    EOF
        ind=$(( ind + 1 ))
      done
    
      test -f computes-$CELL || continue
      cat > nodeset-${CELL}.yaml <<EOF
    apiVersion: dataplane.openstack.org/v1beta1
    kind: OpenStackDataPlaneNodeSet
    metadata:
      name: openstack-$CELL 
    3
    
    spec:
      tlsEnabled: false 
    4
    
      networkAttachments:
          - ctlplane
      preProvisioned: true
      services:
        - redhat
        - bootstrap
        - download-cache
        - configure-network
        - validate-network
        - install-os
        - configure-os
        - ssh-known-hosts
        - run-os
        - reboot-os
        - install-certs
        - ovn
        - neutron-metadata
        - libvirt
        - nova-$CELL
        - telemetry 
    5
    
      env:
        - name: ANSIBLE_CALLBACKS_ENABLED
          value: "profile_tasks"
        - name: ANSIBLE_FORCE_COLOR
          value: "True"
        - name: ANSIBLE_VERBOSITY
          value: '3'
      nodeTemplate:
        ansibleSSHPrivateKeySecret: dataplane-adoption-secret
        ansible:
          ansibleUser: root
          ansibleVarsFrom:
          - secretRef:
              name: subscription-manager
          - secretRef:
              name: redhat-registry
          ansibleVars:
            rhc_release: 9.2
            rhc_repositories:
                - {name: "*", state: disabled}
                - {name: "rhel-9-for-x86_64-baseos-eus-rpms", state: enabled}
                - {name: "rhel-9-for-x86_64-appstream-eus-rpms", state: enabled}
                - {name: "rhel-9-for-x86_64-highavailability-eus-rpms", state: enabled}
                - {name: "rhoso-18.0-for-rhel-9-x86_64-rpms", state: enabled}
                - {name: "fast-datapath-for-rhel-9-x86_64-rpms", state: enabled}
                - {name: "rhceph-7-tools-for-rhel-9-x86_64-rpms", state: enabled}
            edpm_bootstrap_release_version_package: []
            # edpm_network_config
            # Default nic config template for a EDPM node
            # These vars are edpm_network_config role vars
            edpm_network_config_template: |
               ---
               {% set mtu_list = [ctlplane_mtu] %}
               {% for network in nodeset_networks %}
               {% set _ = 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: nic1
                   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_network_config_nmstate: false
            # Control resolv.conf management by NetworkManager
            # false = disable NetworkManager resolv.conf update (default)
            # true = enable NetworkManager resolv.conf update
            edpm_bootstrap_network_resolvconf_update: false
            edpm_network_config_hide_sensitive_logs: false
            #
            # These vars are for the network config templates themselves and are
            # considered EDPM network defaults.
            neutron_physical_bridge_name: br-ctlplane 
    6
    
            neutron_public_interface_name: eth0
    
            # edpm_nodes_validation
            edpm_nodes_validation_validate_controllers_icmp: false
            edpm_nodes_validation_validate_gateway_icmp: false
    
            # edpm ovn-controller configuration
            edpm_ovn_bridge_mappings: <bridge_mappings> 
    7
    
            edpm_ovn_bridge: br-int
            edpm_ovn_encap_type: geneve
            ovn_monitor_all: true
            edpm_ovn_remote_probe_interval: 60000
            edpm_ovn_ofctrl_wait_before_clear: 8000
    
            timesync_ntp_servers:
            - hostname: clock.redhat.com
            - hostname: clock2.redhat.com
    
            edpm_bootstrap_command: |
              # FIXME: perform dnf upgrade for other packages in EDPM ansible
              # here we only ensuring that decontainerized libvirt can start
              dnf -y upgrade openstack-selinux
              rm -f /run/virtlogd.pid
    
            gather_facts: false
            # edpm firewall, change the allowed CIDR if needed
            edpm_sshd_configure_firewall: true
            edpm_sshd_allowed_ranges: ['192.168.122.0/24']
    
            # Do not attempt OVS major upgrades here
            edpm_ovs_packages:
            - openvswitch3.3
            edpm_default_mounts: 
    8
    
              - path: /dev/hugepages<size>
                opts: pagesize=<size>
                fstype: hugetlbfs
                group: hugetlbfs
      nodes:
    EOF
      cat computes-$CELL >> nodeset-${CELL}.yaml
    done
    1
    배포에 사용자 지정 DNS 도메인이 있는 경우 노드의 FQDN을 지정합니다.
    2
    데이터 플레인 연결 다운 타임을 방지하려면 네트워크 구성이 소스 클라우드 구성과 일치해야 합니다. ctlplane 네트워크가 먼저 있어야 합니다. 이 명령은 ctlplaneinternalapi 네트워크에 있는 호스트의 IP 주소만 유지합니다. 다른 격리된 네트워크에 대해 이 단계를 반복하거나 결과 파일을 수동으로 업데이트합니다.
    3
    openstack-cell1,openstack-cell2 와 같은 노드 세트 이름을 사용합니다. 컴퓨팅 노드가 포함된 셀에 대한 노드 세트만 생성합니다.
    4
    TLS Everywhere가 활성화된 경우 tlsEnabledtrue 로 변경합니다.
    5
    Telemetry 서비스를 채택하지 않는 경우 서비스 목록에서 생략합니다.
    6
    데이터 플레인 연결 다운타임을 방지하려면 브리지 이름 및 기타 OVN 및 Networking 서비스 관련 값이 소스 클라우드 구성과 일치해야 합니다.
    7
    & lt;bridge_mappings >를 구성의 브리지 매핑 값으로 바꿉니다(예: "datacentre:br-ctlplane" ).
    8
    대규모 페이지를 구성하려면 < size& gt;를 페이지 크기로 바꿉니다. 다중 크기의 대규모 페이지를 구성하려면 목록에 더 많은 항목을 생성합니다. 마운트 지점이 소스 클라우드 구성과 일치해야 합니다.
    참고

    채택하기 전에 컴퓨팅 서비스 노드에서 사용한 OpenStackDataPlaneNodeSet CR에서 동일한 ovn-controller 설정을 사용해야 합니다. 이 구성은 Open vSwitch 데이터베이스의 Open_vSwitch 테이블의 external_ids 열에 저장됩니다.

    $ ovs-vsctl list Open .
    ...
    external_ids        : {hostname=standalone.localdomain, ovn-bridge=br-int, ovn-bridge-mappings=<bridge_mappings>, ovn-chassis-mac-mappings="datacentre:1e:0a:bb:e6:7c:ad", ovn-encap-ip="172.19.0.100", ovn-encap-tos="0", ovn-encap-type=geneve, ovn-match-northd-version=False, ovn-monitor-all=True, ovn-ofctrl-wait-before-clear="8000", ovn-openflow-probe-interval="60", ovn-remote="tcp:ovsdbserver-sb.openstack.svc:6642", ovn-remote-probe-interval="60000", rundir="/var/run/openvswitch", system-id="2eec68e6-aa21-4c95-a868-31aeafc11736"}
    ...
  10. 각 Compute 셀에 대해 OpenStackDataPlaneNodeSet CR을 배포합니다.

    $ for CELL in $(echo $RENAMED_CELLS); do
    > test -f nodeset-${CELL}.yaml || continue
    > oc apply -f nodeset-${CELL}.yaml
    > done
  11. Block Storage 서비스(cinder)에 Red Hat Ceph Storage 백엔드를 사용하는 경우 채택된 데이터 플레인 워크로드를 준비합니다.

    $ for CELL in $(echo $RENAMED_CELLS); do
      test -f nodeset-${CELL}.yaml || continue
    $ oc patch osdpns/openstack-$CELL --type=merge --patch "
      spec:
        services:
          - redhat
          - bootstrap
          - download-cache
          - configure-network
          - validate-network
          - install-os
          - configure-os
          - ssh-known-hosts
          - run-os
          - reboot-os
          - ceph-client
          - install-certs
          - ovn
          - neutron-metadata
          - libvirt
          - nova-$CELL
          - telemetry
        nodeTemplate:
          extraMounts:
          - extraVolType: Ceph
            volumes:
            - name: ceph
              secret:
                secretName: ceph-conf-files
            mounts:
            - name: ceph
              mountPath: "/etc/ceph"
              readOnly: true
      "
    done
    참고

    ceph-clientceph-hci-pre 서비스를 제외하고 원래 OpenStackDataPlaneNodeSet CR의 동일한 서비스 목록을 사용해야 합니다.

  12. 선택사항: OpenStackDataPlaneNodeSet CR에서 neutron-sriov-nic-agent 를 활성화합니다.

    $ for CELL in $(echo $RENAMED_CELLS); do
      test -f nodeset-${CELL}.yaml || continue
    $ oc patch openstackdataplanenodeset openstack-$CELL --type='json' --patch='[
      {
        "op": "add",
        "path": "/spec/services/-",
        "value": "neutron-sriov"
      }, {
        "op": "add",
        "path": "/spec/nodeTemplate/ansible/ansibleVars/edpm_neutron_sriov_agent_SRIOV_NIC_physical_device_mappings",
        "value": "dummy_sriov_net:dummy-dev"
      }, {
        "op": "add",
        "path": "/spec/nodeTemplate/ansible/ansibleVars/edpm_neutron_sriov_agent_SRIOV_NIC_resource_provider_bandwidths",
        "value": "dummy-dev:40000000:40000000"
      }, {
        "op": "add",
        "path": "/spec/nodeTemplate/ansible/ansibleVars/edpm_neutron_sriov_agent_SRIOV_NIC_resource_provider_hypervisors",
        "value": "dummy-dev:standalone.localdomain"
      }]'
      done
  13. 선택사항: OpenStackDataPlaneNodeSet CR에서 neutron-dhcp 를 활성화합니다.

    $ for CELL in $(echo $RENAMED_CELLS); do
      test -f nodeset-${CELL}.yaml || continue
    $ oc patch openstackdataplanenodeset openstack-$CELL --type='json' --patch='[
      {
        "op": "add",
        "path": "/spec/services/-",
        "value": "neutron-dhcp"
      }]'
    done
    참고

    Bare Metal Provisioning 서비스(ironic)에 대해 OVN과 함께 neutron-dhcp 를 사용하려면 Networking 서비스(neutron)의 disable_ovn_dhcp_for_baremetal_ports 구성 옵션을 true 로 설정해야 합니다. NeutronAPI 사양에서 이 구성을 설정할 수 있습니다.

    ..
    spec:
      serviceUser: neutron
       ...
          customServiceConfig: |
              [DEFAULT]
              dhcp_agent_notification = True
              [ovn]
              disable_ovn_dhcp_for_baremetal_ports = true
  14. pre-adoption 검증을 실행합니다.

    1. 검증 서비스를 생성합니다.

      $ oc apply -f - <<EOF
      apiVersion: dataplane.openstack.org/v1beta1
      kind: OpenStackDataPlaneService
      metadata:
        name: pre-adoption-validation
      spec:
        playbook: osp.edpm.pre_adoption_validation
      EOF
    2. 검증만 실행하는 OpenStackDataPlaneDeployment CR을 생성합니다.

      $ oc apply -f - <<EOF
      apiVersion: dataplane.openstack.org/v1beta1
      kind: OpenStackDataPlaneDeployment
      metadata:
        name: openstack-pre-adoption
      spec:
        nodeSets: $NODESETS
        servicesOverride:
        - pre-adoption-validation
      EOF
      참고

      다른 OpenStackDataPlaneService CR에 대해 다른 마이그레이션 SSH 키를 생성한 경우 셀을 나타내는 각 노드 세트 또는 노드 세트에 대해 별도의 OpenStackDataPlaneDeployment CR도 정의해야 합니다.

    3. 검증이 완료되면 Ansible EE Pod의 상태가 Completed 인지 확인합니다.

      $ watch oc get pod -l app=openstackansibleee
      $ oc logs -l app=openstackansibleee -f --max-log-requests 20
    4. 배포가 Ready 상태가 될 때까지 기다립니다.

      $ oc wait --for condition=Ready openstackdataplanedeployment/openstack-pre-adoption --timeout=10m
      중요

      openstack-pre-adoption 검증이 실패하는 경우 Ansible 로그를 참조하여 실패한 항목을 확인한 다음 다음 문제 해결 옵션을 시도해야 합니다.

      • 호스트 이름 검증에 실패한 경우 데이터 플레인 노드의 호스트 이름이 OpenStackDataPlaneNodeSet CR에 올바르게 나열되어 있는지 확인합니다.
      • 커널 인수 검사에 실패한 경우 OpenStackDataPlaneNodeSet CR의 edpm_kernel_argsedpm_kernel_hugepages 변수의 커널 인수 구성이 RHOSP(Red Hat OpenStack Platform) 17.1 노드에서 사용한 커널 인수 구성과 동일한지 확인합니다.
      • tuned 프로필 검사에 실패한 경우 OpenStackDataPlaneNodeSet CR의 edpm_tuned_profile 변수가 RHOSP 17.1 노드에 설정된 것과 동일한 프로필을 사용하도록 구성되어 있는지 확인합니다.
  15. 나머지 director Operator 서비스를 제거합니다.

    1. OpenStackDataPlaneService CR을 생성하여 채택 중인 데이터 플레인 서비스를 정리합니다.

      $ oc apply -f - <<EOF
      apiVersion: dataplane.openstack.org/v1beta1
      kind: OpenStackDataPlaneService
      metadata:
        name: tripleo-cleanup
      spec:
        playbook: osp.edpm.tripleo_cleanup
      EOF
    2. OpenStackDataPlaneDeployment CR을 생성하여 정리를 실행합니다.

      $ oc apply -f - <<EOF
      apiVersion: dataplane.openstack.org/v1beta1
      kind: OpenStackDataPlaneDeployment
      metadata:
        name: tripleo-cleanup
      spec:
        nodeSets: $NODESETS
        servicesOverride:
        - tripleo-cleanup
      EOF
  16. 정리가 완료되면 OpenStackDataPlaneDeployment CR을 배포합니다.

    $ oc apply -f - <<EOF
    apiVersion: dataplane.openstack.org/v1beta1
    kind: OpenStackDataPlaneDeployment
    metadata:
      name: openstack
    spec:
      nodeSets: $NODESETS
    EOF
    참고

    Networker 노드와 같이 배포할 다른 노드 세트가 있는 경우 이 단계의 nodeSets 목록에 추가하거나 나중에 별도의 OpenStackDataPlaneDeployment CR을 생성할 수 있습니다. 배포 후에는 OpenStackDataPlaneDeployment CR에 새 노드 세트를 추가할 수 없습니다.

검증

  1. 모든 Ansible EE Pod가 Completed 상태에 도달하는지 확인합니다.

    $ watch oc get pod -l app=openstackansibleee
    $ oc logs -l app=openstackansibleee -f --max-log-requests 20
  2. 데이터 플레인 노드 세트가 Ready 상태가 될 때까지 기다립니다.

    $ for CELL in $(echo $RENAMED_CELLS); do
    > oc wait --for condition=Ready osdpns/openstack-$CELL --timeout=30m
    > done
  3. Networking 서비스(neutron) 에이전트가 실행 중인지 확인합니다.

    $ oc exec openstackclient -- openstack network agent list
    +--------------------------------------+------------------------------+------------------------+-------------------+-------+-------+----------------------------+
    | ID                                   | Agent Type                   | Host                   | Availability Zone | Alive | State | Binary                     |
    +--------------------------------------+------------------------------+------------------------+-------------------+-------+-------+----------------------------+
    | 174fc099-5cc9-4348-b8fc-59ed44fcfb0e | DHCP agent                   | standalone.localdomain | nova              | :-)   | UP    | neutron-dhcp-agent         |
    | 10482583-2130-5b0d-958f-3430da21b929 | OVN Metadata agent           | standalone.localdomain |                   | :-)   | UP    | neutron-ovn-metadata-agent |
    | a4f1b584-16f1-4937-b2b0-28102a3f6eaa | OVN Controller agent         | standalone.localdomain |                   | :-)   | UP    | ovn-controller             |
    +--------------------------------------+------------------------------+------------------------+-------------------+-------+-------+----------------------------+
참고

director Operator 셀 컨트롤러에서 모든 서비스를 제거한 후 셀 컨트롤러를 분리할 수 있습니다. 새 셀 컴퓨팅 노드를 생성하려면 해제된 컨트롤러를 새 데이터 플레인 호스트로 다시 프로비저닝하고 해당 셀 또는 새 셀의 노드 세트에 추가합니다.

다음 단계

Red Hat logoGithubredditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

Red Hat을 사용하는 고객은 신뢰할 수 있는 콘텐츠가 포함된 제품과 서비스를 통해 혁신하고 목표를 달성할 수 있습니다. 최신 업데이트를 확인하세요.

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

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

Red Hat 소개

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

Theme

© 2026 Red Hat
맨 위로 이동