Bare Metal Provisioning

Red Hat OpenStack Platform 17.0

베어 메탈 프로비저닝 서비스(ironic) 설치 및 구성

초록

클라우드 사용자의 물리적 시스템을 프로비저닝하고 관리하도록 Red Hat OpenStack Platform 환경의 오버클라우드에 베어 메탈 프로비저닝 서비스를 설치 및 구성합니다.

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

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

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

문서 개선을 위한 의견을 보내 주십시오. 우리가 어떻게 그것을 더 잘 만들 수 있는지 알려주십시오.

Direct Documentation feedback(DDF) 함수 사용

특정 문장, 단락 또는 코드 블록에 대한 직접 코멘트를 위해서는 DDF 함수 추가 를 사용하십시오.

  1. Multi-page HTML 형식으로 설명서를 확인합니다.
  2. 문서의 오른쪽 위에 사용자 지정 단추가 표시되는지 확인합니다.Ensure that you see the Feedback button in the upper right corner of the document.
  3. 주석하려는 텍스트 부분을 강조 표시합니다.
  4. 피드백 추가를 클릭합니다.
  5. 코멘트와 함께 피드백 추가 필드를 완료합니다.
  6. 선택 사항: 문서 팀에서 문제 해결을 위해 연락할 수 있도록 이메일 주소를 추가하십시오.
  7. 제출을 클릭합니다.

1장. Bare Metal Provisioning 서비스(ironic) 기능

Bare Metal Provisioning 서비스(ironic) 구성 요소를 사용하여 클라우드 사용자의 베어 메탈 인스턴스로 물리적 머신을 프로비저닝하고 관리합니다. 베어 메탈 인스턴스를 프로비저닝하고 관리하기 위해 베어 메탈 프로비저닝 서비스는 오버클라우드의 다음 RHOSP(Red Hat OpenStack Platform) 서비스와 상호 작용합니다.

  • Compute 서비스(nova)는 가상 머신 인스턴스 관리에 대한 스케줄링, 테넌트 할당량 및 사용자 방향 API를 제공합니다. 베어 메탈 프로비저닝 서비스는 하드웨어 관리를 위한 관리 API를 제공합니다.
  • Identity 서비스(keystone)는 요청 인증을 제공하고 베어 메탈 프로비저닝 서비스를 통해 다른 RHOSP 서비스를 찾도록 지원합니다.
  • Image 서비스(glance)는 디스크 및 인스턴스 이미지 및 이미지 메타데이터를 관리합니다.
  • Networking 서비스(neutron)는 DHCP 및 네트워크 구성을 제공하며 부팅 시에 연결된 가상 또는 물리적 네트워크를 프로비저닝합니다.
  • Object Storage 서비스(swift)는 일부 드라이버의 임시 이미지 URL을 노출합니다.

베어 메탈 프로비저닝 서비스 구성 요소

베어 메탈 프로비저닝 서비스는 ironic-* 라는 서비스로 구성됩니다. 다음 서비스는 코어 베어 메탈 프로비저닝 서비스입니다.

베어 메탈 프로비저닝 API(ironic-api)
이 서비스는 외부 REST API를 사용자에게 제공합니다. API는 원격 프로시저 호출(RPC)을 통해 베어 메탈 프로비저닝 실행자에게 애플리케이션 요청을 보냅니다.
Bare Metal Provisioningconductor(ironic-conductor)

이 서비스는 드라이버를 사용하여 다음 베어 메탈 노드 관리 작업을 수행합니다.

  • 베어 메탈 노드를 추가, 편집 및 삭제합니다.
  • IPMI, Redfish 또는 기타 벤더별 프로토콜을 사용하여 베어 메탈 노드의 전원을 켜거나 끕니다.
  • 베어 메탈 노드를 프로비저닝, 배포, 정리합니다.
Bare Metal Provisioninginspector(ironic-inspector)
이 서비스는 베어 메탈 인스턴스를 예약하는 데 필요한 베어 메탈 노드의 하드웨어 속성을 검색하고 검색된 이더넷 MAC에 대해 베어 메탈 프로비저닝 서비스 포트를 생성합니다.
베어 메탈 프로비저닝 데이터베이스
이 데이터베이스는 하드웨어 정보 및 상태를 추적합니다.
메시지 큐
모든 서비스는 이 메시징 서비스를 사용하여 ironic-apiironic-conductor 간의 RPC 구현을 포함하여 서로 통신합니다.
베어 메탈 프로비저닝 에이전트(ironic-python-agent)
이 서비스는 ironic-conductorironic-inspector 서비스에 원격 액세스, 대역 내 하드웨어 제어 및 하드웨어 인트로스펙션을 제공하기 위해 임시 램디스크에서 실행됩니다.

베어 메탈 인스턴스 프로비저닝

베어 메탈 프로비저닝 서비스는 iPXE를 사용하여 물리적 머신을 베어 메탈 인스턴스로 프로비저닝합니다. 다음 다이어그램에서는 클라우드 사용자가 기본 드라이버와 새 베어 메탈 인스턴스를 시작할 때 프로비저닝 프로세스 중에 RHOSP 서비스가 상호 작용하는 방법을 간략하게 설명합니다.

The PXE Provisioning Process

2장. 베어 메탈 프로비저닝 요구 사항

클라우드 사용자가 베어 메탈 인스턴스를 시작할 수 있는 오버클라우드를 제공하려면 RHOSP(Red Hat OpenStack Platform) 환경에 필요한 하드웨어 및 네트워크 구성이 있어야 합니다.

2.1. 하드웨어 요구 사항

프로비저닝을 위해 클라우드 사용자가 사용할 베어 메탈 머신의 하드웨어 요구 사항은 운영 체제에 따라 다릅니다. Red Hat Enterprise Linux 설치의 하드웨어 요구 사항에 대한 자세한 내용은 Red Hat Enterprise Linux 제품 설명서를 참조하십시오.

프로비저닝을 위해 클라우드 사용자가 사용할 수 있는 모든 베어 메탈 머신에는 다음과 같은 기능이 있어야 합니다.

  • 베어 메탈 네트워크에 연결할 NIC입니다.
  • ironic-conductor 서비스에서 연결할 수 있는 네트워크에 연결된 전원 관리 인터페이스(예: Redfish 또는 IPMI)입니다. 기본적으로 ironic-conductor 는 구성 가능 역할을 사용하고 ironic-conductor 를 다른 위치에서 실행하지 않는 한 모든 컨트롤러 노드에서 실행됩니다.
  • 베어 메탈 네트워크에서 PXE 부팅 배포의 다른 모든 NIC에서 PXE 부팅을 비활성화합니다.

2.2. 네트워킹 요구사항

베어 메탈 네트워크는 다음 작업에 사용할 베어 메탈 프로비저닝 서비스용 사설 네트워크여야 합니다.

  • 오버클라우드의 베어 메탈 머신의 프로비저닝 및 관리
  • 노드가 프로비저닝되지 않은 경우 베어 메탈 노드를 정리합니다.
  • 베어 메탈 머신에 대한 테넌트 액세스.

베어 메탈 네트워크는 베어 메탈 시스템을 검색하는 DHCP 및 PXE 부팅 기능을 제공합니다. 베어 메탈 프로비저닝 서비스에서 PXE 부팅 및 DHCP 요청을 제공할 수 있도록 이 네트워크는 트렁크된 인터페이스에서 기본 VLAN을 사용해야 합니다.

베어 메탈 머신은 RHOSP(Red Hat OpenStack Platform) 환경의 컨트롤 플레인 네트워크에 직접 액세스할 수 있으므로 오버클라우드의 베어 메탈 프로비저닝 서비스는 신뢰할 수 있는 테넌트 환경을 위해 설계되었습니다. 따라서 기본 베어 메탈 네트워크는 ironic-conductor 서비스에 플랫 네트워크를 사용합니다.

기본 플랫 프로비저닝 네트워크는 테넌트가 컨트롤 플레인 네트워크를 방해할 수 있기 때문에 고객 환경에 보안 문제가 발생할 수 있습니다. 이 위험을 방지하기 위해 컨트롤 플레인에 액세스할 수 없는 베어 메탈 프로비저닝 서비스에 대해 사용자 정의 구성 가능 베어 메탈 프로비저닝 네트워크를 구성할 수 있습니다.

베어 메탈 네트워크는 프로비저닝용으로 태그를 지정하지 않아야 하며 베어 메탈 프로비저닝 API에도 액세스할 수 있어야 합니다. director 프로비저닝 네트워크라고도 하는 컨트롤 플레인 네트워크는 항상 태그가 지정되지 않습니다. 다른 네트워크에는 태그를 지정할 수 있습니다.

베어 메탈 프로비저닝 서비스를 호스팅하는 컨트롤러 노드는 베어 메탈 네트워크에 액세스할 수 있어야 합니다.

베어 메탈 머신이 PXE 부팅으로 구성된 NIC는 의 베어 메탈 네트워크에 액세스해야 합니다.

베어 메탈 네트워크는 OpenStack Operator가 생성합니다. 클라우드 사용자는 공용 OpenStack API 및 베어 메탈 네트워크에 직접 액세스할 수 있습니다. 기본 플랫 베어 메탈 네트워크를 사용하면 클라우드 사용자에게 컨트롤 플레인에 대한 간접 액세스 권한이 있습니다.

베어 메탈 프로비저닝 서비스는 노드 정리에 베어 메탈 네트워크를 사용합니다.

2.2.1. 기본 베어 메탈 네트워크

기본 베어 메탈 프로비저닝 서비스 배포 아키텍처의 베어 메탈 네트워크는 컨트롤 플레인 네트워크와 분리됩니다. 베어 메탈 네트워크는 테넌트 네트워크 역할을 하는 플랫 네트워크입니다. 이 네트워크는 director 프로비저닝 네트워크라는 컨트롤 플레인의 베어 메탈 프로비저닝 서비스로 라우팅해야 합니다. 격리된 베어 메탈 네트워크를 정의하는 경우 베어 메탈 노드는 PXE 부팅할 수 없습니다.

기본 베어 메탈 네트워크 아키텍처 다이어그램

Default bare metal network architecture diagram

2.2.2. 사용자 정의 구성 가능 베어 메탈 네트워크

베어 메탈 프로비저닝 서비스 배포 아키텍처에서 사용자 정의 구성 가능 베어 메탈 네트워크를 사용하는 경우 베어 메탈 네트워크는 컨트롤 플레인에 액세스할 수 없는 사용자 지정 구성 가능 네트워크입니다. 컨트롤 플레인에 대한 액세스를 제한하려면 사용자 정의 구성 가능 베어 메탈 네트워크를 사용합니다.

3장. 베어 메탈 프로비저닝 서비스를 사용하여 오버클라우드 배포

베어 메탈 프로비저닝 서비스(ironic)를 사용하여 오버클라우드를 배포하려면 베어 메탈 네트워크를 생성 및 구성하고 베어 메탈 프로비저닝을 활성화하도록 오버클라우드를 구성해야 합니다.

  1. 베어 메탈 네트워크를 생성합니다. 컨트롤러 노드에서 provisioning 네트워크 인터페이스를 재사용하여 플랫 네트워크를 생성하거나 사용자 지정 네트워크를 생성할 수 있습니다.

  2. 베어 메탈 프로비저닝을 활성화하도록 오버클라우드를 설정합니다.

참고

OVN(Open Virtual Network)을 사용하는 경우 베어 메탈 프로비저닝 서비스는 ironic-overcloud.yaml 파일인 neutron-dhcp-agent 에 정의된 DHCP 에이전트에서만 지원됩니다. OVN의 기본 제공 DHCP 서버는 베어 메탈 노드를 프로비저닝하거나 프로비저닝 네트워크의 DHCP를 제공할 수 없습니다. iPXE 체인 로드를 활성화하려면 dnsmasq에서 --dhcp-match 태그를 설정해야 OVN DHCP 서버에서 지원되지 않습니다.

사전 요구 사항

3.1. 기본 플랫 네트워크 구성

기본 플랫 베어 메탈 네트워크를 사용하려면 컨트롤러 노드에서 provisioning 네트워크 인터페이스를 재사용하여 베어 메탈 프로비저닝 서비스(ironic)의 브릿지를 생성합니다.

절차

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

    [stack@director ~]$ source ~/stackrc
  3. /home/stack/templates/nic-configs/controller.yaml 파일을 수정하여 컨트롤러 노드 eth1 에서 프로비저닝 네트워크 인터페이스를 재사용하여 베어 메탈 네트워크의 브릿지를 생성합니다.

    network_config:
    - type: ovs_bridge
      name: br-baremetal
      use_dhcp: false
      members:
        - type: interface
          name: eth1
      addresses:
        - ip_netmask:
            list_join:
            - /
            - - get_param: ControlPlaneIp
              - get_param: ControlPlaneSubnetCidr
    참고

    프로비저닝 네트워크를 재사용하여 생성할 때 베어 메탈 네트워크에 태그를 지정할 수 없습니다.

  4. network-environment.yaml 파일의 NeutronBridgeMappings 매개변수에 br-baremetal 를 추가합니다.

    parameter_defaults:
      NeutronBridgeMappings: datacentre:br-ex,baremetal:br-baremetal
  5. network-environment.yaml 파일의 NeutronFlatNetworks 매개변수로 지정된 네트워크 목록에 baremetal 을 추가합니다.

    parameter_defaults:
      NeutronBridgeMappings: datacentre:br-ex,baremetal:br-baremetal
      NeutronFlatNetworks: datacentre,baremetal

3.2. 사용자 지정 IPv4 프로비저닝 네트워크 구성

IPv4를 통해 오버클라우드를 프로비저닝하고 배포할 사용자 지정 IPv4 프로비저닝 네트워크를 만듭니다.

절차

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

    $ source ~/stackrc
  3. network_data.yaml 파일을 환경 파일 디렉터리에 복사합니다.

    (undercloud) [stack@host01 ~]$ cp /usr/share/openstack-tripleo-heat-templates/network_data.yaml /home/stack/templates/network_data.yaml
  4. network_data.yaml 파일에 오버클라우드 프로비저닝의 새 네트워크를 추가합니다.

    # custom network for overcloud provisioning
    - name: OcProvisioning
      name_lower: oc_provisioning
      vip: true
      vlan: 205
      ip_subnet: '<ipv4_subnet_address>/<ipv4_mask>'
      allocation_pools: [{'start': '<ipv4_start_address>', 'end': '<ipv4_end_address>'}]
    • & lt;ipv4_subnet_address& gt;를 IPv4 서브넷의 IPv4 주소로 바꿉니다.
    • & lt;ipv4_mask& gt;를 IPv4 서브넷의 IPv4 네트워크 마스크로 바꿉니다.
    • < ipv4_start_address > 및 < ipv4_end_address >를 주소 할당에 사용할 IPv4 범위로 바꿉니다.
  5. 새 IPv4 프로비저닝 네트워크를 사용하도록 ServiceNetMap 구성에서 IronicApiNetworkIronicNetwork 를 구성합니다.

    ServiceNetMap:
      IronicApiNetwork: oc_provisioning
      IronicNetwork: oc_provisioning
  6. 새 네트워크를 로컬 컨트롤러 NIC 구성 파일에 인터페이스로 추가합니다.

    network_config:
    - type: vlan
      vlan_id:
        get_param: OcProvisioningNetworkVlanID
      addresses:
      - ip_netmask:
          get_param: OcProvisioningIpSubnet
  7. roles_data.yaml 파일을 환경 파일 디렉터리에 복사합니다.

    (undercloud) [stack@host01 ~]$ cp /usr/share/openstack-tripleo-heat-templates/roles_data.yaml /home/stack/templates/roles_data.yaml
  8. 컨트롤러의 새 네트워크를 roles_data.yaml 파일에 추가합니다.

    networks:
      ...
      OcProvisioning:
        subnet: oc_provisioning_subnet
  9. 아직 없는 경우 roles_data.yaml 파일의 Ironic 역할에 IronicInspector 서비스를 포함합니다.

    ServicesDefault:
      OS::TripleO::Services::IronicInspector

3.3. 사용자 지정 IPv6 프로비저닝 네트워크 구성

IPv6을 통해 오버클라우드를 프로비저닝하고 배포할 사용자 지정 IPv6 프로비저닝 네트워크를 만듭니다.

절차

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

    [stack@director ~]$ source ~/stackrc
  3. network_data.yaml 파일을 환경 파일 디렉터리에 복사합니다.

    (undercloud) [stack@host01 ~]$ cp /usr/share/openstack-tripleo-heat-templates/network_data.yaml /home/stack/templates/network_data.yaml
  4. 오버클라우드 프로비저닝의 새 IPv6 네트워크를 network_data.yaml 파일에 추가합니다.

    # custom network for IPv6 overcloud provisioning
    - name: OcProvisioningIPv6
      vip: true
      name_lower: oc_provisioning_ipv6
      vlan: 10
      ipv6: true
      ipv6_subnet: '<ipv6_subnet_address>/<ipv6_prefix>'
      ipv6_allocation_pools: [{'start': '<ipv6_start_address>', 'end': '<ipv6_end_address>'}]
      gateway_ipv6: '<ipv6_gw_address>'
    • & lt;ipv6_subnet_address& gt;를 IPv6 서브넷의 IPv6 주소로 바꿉니다.
    • & lt;ipv6_prefix& gt;를 IPv6 서브넷의 IPv6 네트워크 접두사로 바꿉니다.
    • < ipv6_start_address > 및 < ipv6_end_address >를 주소 할당에 사용할 IPv6 범위로 바꿉니다.
    • & lt;ipv6_gw_address& gt;를 게이트웨이의 IPv6 주소로 바꿉니다.
  5. 환경 파일 디렉터리에 새 파일 network_environment_overrides.yaml 을 생성합니다.

    $ touch /home/stack/templates/network_environment_overrides.yaml
  6. 새 IPv6 프로비저닝 네트워크를 사용하도록 network_environment_overrides.yaml 파일에서 IronicApiNetworkIronicNetwork 를 구성합니다.

    ServiceNetMap:
      IronicApiNetwork: oc_provisioning_ipv6
      IronicNetwork: oc_provisioning_ipv6
  7. IronicIpVersion 매개변수를 6 으로 설정합니다.

    parameter_defaults:
      IronicIpVersion: 6
  8. RabbitIPv6,MysqlIPv6RedisIPv6 매개 변수를 활성화합니다.

    parameter_defaults:
      RabbitIPv6: True
      MysqlIPv6: True
      RedisIPv6: True
  9. 새 네트워크를 로컬 컨트롤러 NIC 구성 파일에 인터페이스로 추가합니다.

    network_config:
    - type: vlan
      vlan_id:
        get_param: OcProvisioningIPv6NetworkVlanID
      addresses:
      - ip_netmask:
          get_param: OcProvisioningIPv6IpSubnet
  10. roles_data.yaml 파일을 환경 파일 디렉터리에 복사합니다.

    (undercloud) [stack@host01 ~]$ cp /usr/share/openstack-tripleo-heat-templates/roles_data.yaml /home/stack/templates/roles_data.yaml
  11. Controller 역할의 새 네트워크를 roles_data.yaml 파일에 추가합니다.

    networks:
      ...
      - OcProvisioningIPv6
  12. 아직 없는 경우 roles_data.yaml 파일의 Ironic 역할에 IronicInspector 서비스를 포함합니다.

    ServicesDefault:
      OS::TripleO::Services::IronicInspector

3.4. 베어 메탈 프로비저닝을 활성화하도록 오버클라우드 설정

환경 파일을 사용하여 Bare Metal Provisioning 서비스(ironic)가 활성화된 오버클라우드를 배포합니다. /usr/share/openstack-tripleo-heat-templates/environments/services 디렉터리에 있는 예제 템플릿 중 하나를 사용할 수 있습니다.

  • OVS: ironic.yaml을 사용하는 배포의 경우
  • OVN: ironic-overcloud.yaml을 사용하는 배포의 경우

다음 절차에서는 ironic-overcloud.yaml 파일을 사용하여 베어 메탈 프로비저닝 서비스를 활성화하도록 배포를 구성하는 방법을 설명합니다.

절차

  1. 베어 메탈 템플릿 예제를 환경 파일 디렉터리에 복사합니다.

    $ cp /usr/share/openstack-tripleo-heat-templates/environments/services/ironic-overcloud.yaml /home/stack/templates/ironic-overcloud.yaml
  2. 선택 사항: 프로비저닝 전과 간에 베어 메탈 머신에서 수행되는 정리 유형을 구성합니다.

    parameter_defaults:
      IronicCleaningDiskErase: <cleaning_type>

    & lt;cleaning_type& gt;을 다음 값 중 하나로 바꿉니다.

    • Full: (기본값) 전체 정리를 수행합니다.
    • metadata: 파티션 테이블만 정리합니다. 이러한 유형의 정리는 정리 과정을 상당히 가속화합니다. 그러나 다중 테넌트 환경에서 배포가 덜 보호되므로 신뢰할 수 있는 테넌트 환경에서만 이 옵션을 사용합니다.
  3. 선택 사항: 기본 드라이버에 드라이버를 추가합니다.

    parameter_defaults:
      IronicEnabledHardwareTypes: ipmi,idrac,ilo,[additional_driver_1],...,[additional_driver_n]

    [additional_driver_1] 및 선택적으로 [additional_driver_n] 까지 모든 드라이버를 활성화할 추가 드라이버로 바꿉니다.

  4. 베어 메탈 인트로스펙션을 활성화하려면 예제 ironic-inspector.yaml 파일을 환경 파일 디렉터리에 복사합니다.

    $ cp /usr/share/openstack-tripleo-heat-templates/environments/services/ironic-inspector.yaml /home/stack/templates/ironic-inspector.yaml
  5. 환경에 ironic-inspector.yaml 을 구성합니다.

    parameter_defaults:
      IronicInspectorSubnets:
        - ip_range: <ip_range>
      IPAImageURLs: '["http://<ip_address>:<port>/agent.kernel", "http://<ip_address>:<port>/agent.ramdisk"]'
      IronicInspectorInterface: '<baremetal_interface>'
    • & lt;ip_range& gt;를 해당 환경의 IP 범위로 바꿉니다. 여러 범위를 지정할 수 있습니다.
    • & lt;ip_address>:<port >를 IPA 커널 및 램디스크를 호스팅하는 웹 서버의 IP 주소 및 포트로 바꿉니다. 언더클라우드에서 사용하는 것과 동일한 이미지를 사용하려면 IP 주소를 언더클라우드 IP 주소로 설정하고 포트를 8088 로 설정합니다. 이 매개변수를 생략하는 경우 각 컨트롤러 노드에 대한 대안을 포함해야 합니다.
    • & lt;baremetal_interface >를 베어 메탈 네트워크 인터페이스로 교체합니다(예: br-baremetal ).
  6. 새 역할 및 사용자 정의 환경 파일을 다른 환경 파일과 함께 스택에 추가하고 오버클라우드를 배포합니다.

    (undercloud)$ openstack overcloud deploy --templates \
      -e [your environment files] \
      -e /home/stack/templates/node-info.yaml
      -r /home/stack/templates/roles_data.yaml \
      -e /usr/share/openstack-tripleo-heat-templates/network-environment.yaml \
      -e /home/stack/templates/network_environment_overrides.yaml
      -n /home/stack/templates/network_data.yaml
      -e /home/stack/templates/ironic-overcloud.yaml \
    참고

    이후 파일의 설정이 우선하므로 openstack overcloud deploy 명령에 환경 파일을 전달하는 순서가 중요합니다. 따라서 네트워크 구성 파일 후 오버클라우드에서 베어 메탈 프로비저닝을 활성화하고 구성하는 환경 파일을 명령에 전달해야 합니다.

3.5. 베어 메탈 프로비저닝 서비스 테스트

OpenStack Integration Test Suite를 사용하여 Red Hat OpenStack 배포를 확인할 수 있습니다. 자세한 내용은 OpenStack Integration Test Suite 가이드 를 참조하십시오.

Bare Metal Provisioning 서비스에 대한 추가 확인 방법은 다음과 같습니다.

  1. 관리 사용자로 ID에 액세스하도록 쉘을 구성합니다.

    $ source ~/overcloudrc
  2. nova-compute 서비스가 컨트롤러 노드에서 실행되고 있는지 확인합니다.

    $ openstack compute service list -c Binary -c Host -c Status
  3. 기본 ironic 드라이버를 변경한 경우 필요한 드라이버가 활성화되어 있는지 확인합니다.

    $ openstack baremetal driver list
  4. ironic 엔드포인트가 나열되는지 확인합니다.

    $ openstack catalog list

3.6. 추가 리소스

4장. 배포 후 베어 메탈 프로비저닝 서비스 구성

Bare Metal Provisioning 서비스(ironic)를 사용하여 오버클라우드를 배포한 후 베어 메탈 워크로드에 대한 환경을 준비하기 위해 몇 가지 추가 구성을 완료해야 할 수 있습니다.

  • 네트워킹을 설정합니다.
  • 노드 정리를 구성합니다.
  • 베어 메탈 노드의 베어 메탈 플레이버 및 이미지를 생성합니다.
  • 배포 인터페이스를 구성합니다.
  • 가상 미디어 부팅 구성.
  • 가상 및 물리적 시스템 프로비저닝을 분리합니다.

사전 요구 사항

4.1. OpenStack 네트워킹 구성

DHCP, PXE 부팅 및 기타 요구 사항에 맞게 Bare Metal Provisioning 서비스와 통신하도록 OpenStack Networking을 구성합니다. 다음과 같은 두 가지 방법으로 베어 메탈 네트워크를 구성할 수 있습니다.

  • Ironic Conductor 서비스에 플랫 베어 메탈 네트워크를 사용합니다. 이 네트워크는 컨트롤 플레인 네트워크의 Ironic 서비스로 라우팅해야 합니다.
  • 사용자 지정 구성 가능 네트워크를 사용하여 Overcloud에 Ironic 서비스를 구현합니다.

이 섹션의 절차에 따라 베어 메탈에 프로비저닝할 단일 플랫 네트워크의 OpenStack Networking을 구성하거나 사용하지 않은 격리된 네트워크 또는 플랫 네트워크에 의존하지 않는 새로운 구성 가능 네트워크를 구성합니다. 이 구성에서는 ML2 플러그인 및 Open vSwitch 에이전트를 사용합니다.

4.1.1. 플랫 베어 메탈 네트워크에서 베어 메탈 프로비저닝 서비스와 통신하도록 OpenStack Networking 구성

OpenStack Networking 서비스를 호스팅하는 서버에서 root 사용자로 다음 절차의 모든 단계를 수행합니다.

사전 요구 사항

절차

  1. 관리 사용자로 ID에 액세스하도록 쉘을 구성합니다.

    $ source ~/overcloudrc
  2. 베어 메탈 인스턴스를 프로비저닝할 flat 네트워크를 생성합니다.

    $ openstack network create \
      --provider-network-type flat \
      --provider-physical-network baremetal \
      --share NETWORK_NAME

    NETWORK_NAME 을 이 네트워크의 이름으로 바꿉니다. 가상 네트워크를 구현하는 물리적 네트워크의 이름(이 경우 baremetal)은 ~/templates/network-environment.yaml 파일에서 이전에 설정되었습니다. NeutronBridgeMappings.

  3. flat 네트워크에 서브넷을 생성합니다.

    $ openstack subnet create \
      --network NETWORK_NAME \
      --subnet-range NETWORK_CIDR \
      --ip-version 4 \
      --gateway GATEWAY_IP \
      --allocation-pool start=START_IP,end=END_IP \
      --dhcp SUBNET_NAME

    다음 값을 바꿉니다.

    • SUBNET_NAME 을 서브넷의 이름으로 바꿉니다.
    • NETWORK_NAME 을 이전 단계에서 만든 프로비저닝 네트워크의 이름으로 바꿉니다.
    • NETWORK_CIDR 을 서브넷이 나타내는 IP 주소 블록의 CIDR(Classless Inter-Domain Routing) 표현으로 바꿉니다. tekton_IP로 시작하고 END _IP 로 끝나는 범위에서 지정하는 IP 주소 블록은 NETWORK_CIDR로 지정된 IP 주소 블록 내에 있어야 합니다.
    • GATEWAY_IP 를 새 서브넷의 게이트웨이 역할을 하는 라우터 인터페이스의 IP 주소 또는 호스트 이름으로 바꿉니다. 이 주소는 NETWORK_CIDR 에서 지정한 IP 주소 블록 내에 있어야 하지만, OPENSHIFT_IP로 시작하고 END _IP 로 끝나는 범위에 의해 지정된 IP 주소 블록 외부에 있어야 합니다.
    • jenkinsfile_IP 를 유동 IP 주소가 할당되는 새 서브넷 내의 IP 주소 범위의 시작을 나타내는 IP 주소로 바꿉니다.
    • END_IP 를 유동 IP 주소가 할당되는 새 서브넷 내의 IP 주소 범위 끝을 나타내는 IP 주소로 바꿉니다.
  4. 네트워크 및 서브넷의 라우터를 만들어 OpenStack Networking 서비스가 메타데이터 요청을 제공하는지 확인합니다.

    $ openstack router create ROUTER_NAME

    ROUTER_NAME 을 라우터의 이름으로 바꿉니다.

  5. 새 라우터에 서브넷을 연결합니다.

    $ openstack router add subnet ROUTER_NAME BAREMETAL_SUBNET

    ROUTER_NAME 을 라우터의 이름으로 바꾸고 BAREMETAL_SUBNET 을 이전에 생성한 서브넷의 ID 또는 이름으로 바꿉니다. 이를 통해 cloud-init 의 메타데이터 요청을 제공하고 노드를 구성할 수 있습니다.

4.1.2. 사용자 지정 구성 가능 베어 메탈 네트워크에서 베어 메탈 프로비저닝 서비스와 통신하도록 OpenStack Networking 구성

OpenStack Networking 서비스를 호스팅하는 서버에서 root 사용자로 다음 절차의 모든 단계를 수행합니다.

사전 요구 사항

절차

  1. 배포 중에 생성한 OcProvisioning 네트워크와 일치하는 VlanID를 사용하여 vlan 네트워크를 만듭니다. 정리 네트워크의 기본 이름과 일치하도록 새 네트워크 프로비저닝 의 이름을 지정합니다.

    (overcloud) [stack@host01 ~]$ openstack network create \
      --share \
      --provider-network-type vlan \
      --provider-physical-network datacentre \
      --provider-segment 205 provisioning

    오버클라우드 네트워크의 이름이 프로비저닝 되지 않은 경우 IronicProvisioningNetwork 매개변수를 provisioning 으로 설정하고 오버클라우드를 재배포합니다.

    ~/templates/ironic.yaml

    parameter_defaults:
      IronicProvisioningNetwork:
        default: provisioning
        description: Name or UUID of the overcloud network used for provisioning bare metal nodes, if IronicDefaultNetworkInterface is set to "neutron". The default value can be left during the initial deployment and should be changed to an actual UUID in a post-deployment stack update.
        type: string

4.2. 노드 정리 구성

기본적으로 Bare Metal Provisioning 서비스는 노드 정리에 provisioning 이라는 네트워크를 사용합니다. 그러나 네트워크 이름은 OpenStack Networking에서 고유하지 않으므로 테넌트가 동일한 이름으로 네트워크를 생성할 수 있으므로 베어 메탈 프로비저닝 서비스와 충돌할 수 있습니다. 충돌을 방지하려면 네트워크 UUID를 사용합니다.

사전 요구 사항

절차

  1. 노드 정리를 구성하려면 베어 메탈 프로비저닝 서비스를 호스팅하는 컨트롤러에 공급자 네트워크 UUID를 지정합니다.

    ~/templates/ironic.yaml

    parameter_defaults:
        IronicCleaningNetwork: <UUID>

    <UUID> 를 이전 단계에서 생성한 베어 메탈 네트워크의 UUID로 바꿉니다.

    openstack network show 명령을 사용하여 UUID를 찾을 수 있습니다.

    openstack network show NETWORK_NAME -f value -c id
    참고

    초기 오버클라우드 배포 후에는 네트워크의 UUID를 사전에 사용할 수 없으므로 이 설정을 수행해야 합니다.

  2. 변경 사항을 적용하려면 openstack overcloud deploy 를 사용하여 오버클라우드를 재배포합니다. 배포 명령에 대한 자세한 내용은 베어 메탈 프로비저닝 서비스를 사용하여 오버클라우드 배포를 참조하십시오.

4.2.1. 수동으로 노드 정리

노드 정리를 수동으로 시작하려면 노드가 manageable 상태여야 합니다.

노드 정리에는 다음 두 가지 모드가 있습니다.

metadata만 정리 - 지정된 노드의 모든 디스크에서 파티션을 제거합니다. 이는 더 빠른 깔끔한 사이클이지만 파티션 테이블만 지워지기 때문에 보안이 떨어집니다. 이 모드는 신뢰할 수 있는 테넌트 환경에서만 사용합니다.

Full clean - ATA 보안 강화 또는 축소를 사용하여 모든 디스크에서 모든 데이터를 제거합니다. 완료하는 데 몇 시간이 걸릴 수 있습니다.

사전 요구 사항

절차

메타데이터 를 정리하려면 다음을 수행합니다.

$ openstack baremetal node clean _UUID_ \
    --clean-steps '[{"interface": "deploy", "step": "erase_devices_metadata"}]'

완전한 클린을 시작하려면 다음을 수행하십시오.

$ openstack baremetal node clean _UUID_ \
    --clean-steps '[{"interface": "deploy", "step": "erase_devices"}]'

UUID 를 정리하려는 노드의 UUID로 바꿉니다.

정리에 성공하면 노드 상태가 manageable 로 돌아갑니다. 상태가 clean failed 인 경우 last_error 필드에 실패 원인을 검사합니다.

4.3. 베어 메탈 플레이버 및 리소스 클래스 생성

특정 워크로드에 대한 베어 메탈 노드를 태그하는 데 사용할 플레이버 및 리소스 클래스를 생성해야 합니다.

절차

  1. 오버클라우드 인증 정보 파일을 소싱합니다.

    $ source ~/overcloudrc
  2. 베어 메탈 노드에 대한 새 인스턴스 플레이버를 생성합니다.

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

      참고

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

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

    (overcloud)$ openstack baremetal node list
  4. 사용자 지정 베어 메탈 리소스 클래스로 각 베어 메탈 노드에 태그를 지정합니다.

    (overcloud)$ openstack baremetal node set \
     --resource-class baremetal.<CUSTOM> <node>
    • & lt;CUSTOM >을 리소스 클래스의 용도를 식별하는 문자열로 바꿉니다. 예를 들어 GPU 로 설정하여 GPU 워크로드에 대해 지정할 베어 메탈 노드를 태그하는 데 사용할 사용자 지정 GPU 리소스 클래스를 생성합니다.
    • & lt;node& gt;를 베어 메탈 노드의 ID로 바꿉니다.
  5. 베어 메탈 노드의 새 인스턴스 플레이버를 사용자 정의 리소스 클래스에 연결합니다.

    (overcloud)$ openstack flavor set \
     --property resources:CUSTOM_BAREMETAL_<CUSTOM>=1 \
     baremetal

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

    참고

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

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

    (overcloud)$ openstack flavor set \
     --property resources:VCPU=0 \
     --property resources:MEMORY_MB=0 \
     --property resources:DISK_GB=0 baremetal
  7. 새 플레이버에 올바른 값이 있는지 확인합니다.

    (overcloud)$ openstack flavor list

4.4. 베어 메탈 이미지 생성

Bare Metal Provisioning 서비스(ironic)를 포함하는 오버클라우드에는 두 개의 이미지 세트가 필요합니다. 배포 중에 베어 메탈 프로비저닝 서비스는 배포 이미지에서 베어 메탈 노드를 부팅하고 사용자 이미지를 노드에 복사합니다.

배포 이미지
베어 메탈 프로비저닝 서비스는 배포 이미지를 사용하여 베어 메탈 노드를 부팅하고 베어 메탈 노드에 사용자 이미지를 복사합니다. 배포 이미지는 커널 이미지와 ramdisk 이미지로 구성됩니다.
사용자 이미지

사용자 이미지는 베어 메탈 노드에 배포하는 이미지입니다. 사용자 이미지에는 커널 이미지와 ramdisk 이미지도 있지만 사용자 이미지에는 기본 이미지가 포함되어 있습니다. 기본 이미지는 루트 파티션 또는 전체 디스크 이미지입니다.

  • 전체 디스크 이미지는 파티션 테이블 및 부트 로더가 포함된 이미지입니다. 베어 메탈 프로비저닝 서비스는 노드가 localboot를 지원하므로 전체 디스크 이미지로 배포된 노드의 후속 재부팅을 제어하지 않습니다.
  • 루트 파티션 이미지에 는 운영 체제의 루트 파티션만 포함됩니다. 루트 파티션을 사용하는 경우 배포 이미지가 이미지 서비스에 로드된 후 노드 속성에 노드 부팅 이미지로 배포 이미지를 설정할 수 있습니다. 노드를 재부팅하면 netboot를 사용하여 사용자 이미지를 가져옵니다.

이 섹션의 예제에서는 루트 파티션 이미지를 사용하여 베어 메탈 노드를 프로비저닝합니다.

4.4.1. 배포 이미지 준비

언더클라우드가 오버클라우드를 배포할 때 이미 생성되었기 때문에 배포 이미지를 생성할 필요가 없습니다. 배포 이미지는 두 개의 이미지로 구성됩니다. 커널 이미지와 램디스크 이미지:

/tftpboot/agent.kernel
/tftpboot/agent.ramdisk

이러한 이미지는 종종 홈 디렉토리에 있으며, 삭제한 적이 있거나 다른 위치에서 압축을 풀 수 있습니다. 홈 디렉토리에 없는 경우에도 rhosp-director-images-ipa 패키지가 설치되어 있는 경우 해당 이미지는 /usr/share/rhosp-director-images/ironic-python-agent*.tar 파일에 있습니다.

사전 요구 사항

절차

이미지를 추출하여 이미지 서비스에 업로드합니다.

$ openstack image create \
  --container-format aki \
  --disk-format aki \
  --public \
  --file ./tftpboot/agent.kernel bm-deploy-kernel
$ openstack image create \
  --container-format ari \
  --disk-format ari \
  --public \
  --file ./tftpboot/agent.ramdisk bm-deploy-ramdisk

4.4.2. 사용자 이미지 준비

필요한 최종 이미지는 베어 메탈 노드에 배포하는 사용자 이미지입니다. 사용자 이미지에는 기본 이미지와 함께 커널 및 ramdisk도 있습니다. 이러한 패키지를 다운로드하여 설치하려면 먼저 요구 사항에 맞게 전체 디스크 이미지 환경 변수를 구성해야 합니다.

4.4.3. 사용자 이미지 설치

사용자 이미지를 구성한 다음 이미지를 Image 서비스(glance)에 업로드합니다.

사전 요구 사항

절차

  1. 고객 포털에서 Red Hat Enterprise Linux KVM 게스트 이미지를 다운로드합니다.
  2. DIB_LOCAL_IMAGE 를 다운로드한 이미지로 정의합니다.

    $ export DIB_LOCAL_IMAGE=rhel-8.0-x86_64-kvm.qcow2
  3. 등록 정보를 설정합니다. Red Hat 고객 포털을 사용하는 경우 다음 정보를 구성해야 합니다.

    $ export REG_USER='USER_NAME'
    $ export REG_PASSWORD='PASSWORD'
    $ export REG_AUTO_ATTACH=true
    $ export REG_METHOD=portal
    $ export https_proxy='IP_address:port' (if applicable)
    $ export http_proxy='IP_address:port' (if applicable)

    Red Hat Satellite를 사용하는 경우 다음 정보를 구성해야 합니다.

    $ export REG_USER='USER_NAME'
    $ export REG_PASSWORD='PASSWORD'
    $ export REG_SAT_URL='<SATELLITE URL>'
    $ export REG_ORG='<SATELLITE ORG>'
    $ export REG_ENV='<SATELLITE ENV>'
    $ export REG_METHOD=<METHOD>

    오프라인 리포지토리가 있는 경우 DIB_YUM_REPO_octets를 로컬 리포지토리 구성으로 정의할 수 있습니다.

    $ export DIB_YUM_REPO_CONF=<path-to-local-repository-config-file>
  4. diskimage-builder 툴을 사용하여 사용자 이미지를 생성합니다.

    $ export DIB_RELEASE=8
    $ disk-image-create rhel baremetal -o rhel-image

    이 명령은 커널을 rhel-image.vmlinuz 로 추출하고 초기 ramdisk를 rhel-image.initrd 로 추출합니다.

  5. 이미지 서비스에 이미지를 업로드합니다.

    $ KERNEL_ID=$(openstack image create \
      --file rhel-image.vmlinuz --public \
      --container-format aki --disk-format aki \
      -f value -c id rhel-image.vmlinuz)
    $ RAMDISK_ID=$(openstack image create \
      --file rhel-image.initrd --public \
      --container-format ari --disk-format ari \
      -f value -c id rhel-image.initrd)
    $ openstack image create \
      --file rhel-image.qcow2   --public \
      --container-format bare \
      --disk-format qcow2 \
      --property kernel_id=$KERNEL_ID \
      --property ramdisk_id=$RAMDISK_ID \
      rhel-image

4.5. 실제 머신을 베어 메탈 노드로 추가

베어 메탈 노드를 등록하는 방법은 다음 두 가지가 있습니다.

  1. 노드 세부 정보를 사용하여 인벤토리 파일을 준비하고, 파일을 베어 메탈 프로비저닝 서비스로 가져오고, 노드를 사용할 수 있도록 합니다.
  2. 물리적 머신을 베어 메탈 노드로 등록한 다음 하드웨어 세부 정보를 수동으로 추가하고 각 이더넷 MAC 주소에 대한 포트를 생성합니다. overcloudrc 파일이 있는 모든 노드에서 다음 단계를 수행할 수 있습니다.

컴퓨팅 리소스 추적기가 정기적으로 동기화되므로 실제 머신을 등록한 후 Compute에 새 리소스에 즉시 알림이 표시되지 않습니다. 다음 주기적인 작업이 실행된 후 변경 사항을 볼 수 있습니다. /etc/nova/nova.conf 파일에서 scheduler_driver_task_period 를 사용하여 주기적인 작업의 빈도를 업데이트할 수 있습니다. 기본 기간은 60초입니다.

4.5.1. 인벤토리 파일을 사용하여 베어 메탈 노드 등록

노드 세부 정보를 사용하여 인벤토리 파일을 준비하고, 파일을 Bare Metal Provisioning 서비스(ironic)로 가져오고 노드를 사용할 수 있도록 합니다.

사전 요구 사항

절차

  1. 노드 세부 정보가 포함된 인벤토리 파일 overcloud-nodes.yaml 을 생성합니다. 하나의 파일에 여러 노드를 등록할 수 있습니다.

    nodes:
        - name: node0
          driver: ipmi
          driver_info:
            ipmi_address: <ipmi_ip>
            ipmi_username: <user>
            ipmi_password: <password>
          properties:
            cpus: <cpu_count>
            cpu_arch: <cpu_arch>
            memory_mb: <memory>
            local_gb: <root_disk>
            root_device:
                serial: <serial>
          ports:
            - address: <mac_address>
    • & lt;ipmi_ip >를 베어 메탈 컨트롤러 주소로 교체합니다.
    • &lt ;user&gt;를 사용자 이름으로 바꿉니다.
    • &lt ;password&gt;를 암호로 바꿉니다.
    • & lt;cpu_count& gt;를 CPU 수로 바꿉니다.
    • & lt;cpu_arch >를 CPU의 아키텍처 유형으로 바꿉니다.
    • & lt;memory& gt;를 MiB의 메모리 양으로 바꿉니다.
    • & lt;root_disk >를 GiB의 루트 디스크 크기로 교체합니다. 시스템에 디스크가 여러 개인 경우에만 필요합니다.
    • & lt;serial >을 배포에 사용할 디스크의 일련 번호로 바꿉니다.
    • & lt;mac_address& gt;를 PXE 부팅에 사용되는 NIC의 MAC 주소로 바꿉니다.
  2. overcloudrc 파일을 소싱합니다.

    $ source ~/overcloudrc
  3. 인벤토리 파일을 베어 메탈 프로비저닝 서비스로 가져옵니다.

    $ openstack baremetal create overcloud-nodes.yaml

    이제 노드가 등록 상태에 있습니다.

  4. 배포 커널을 지정하고 각 노드에 램디스크를 배포합니다.

    $ openstack baremetal node set <node> \
      --driver-info deploy_kernel=<kernel_file> \
      --driver-info deploy_ramdisk=<initramfs_file>
    • & lt;node& gt;를 노드의 이름 또는 ID로 바꿉니다.
    • < kernel_file >을 .kernel 이미지의 경로로 바꿉니다(예: file:///var/lib/ironic/httpboot/agent.kernel ).
    • < initramfs_file >을 .initramfs 이미지 경로로 바꿉니다(예: file:///var/lib/ironic/httpboot/agent.ramdisk ).
  5. 선택 사항: 각 노드의 IPMI 암호화 제품군을 지정합니다.

    $ openstack baremetal node set <node> \
     --driver-info ipmi_cipher_suite=<version>
    • & lt;node& gt;를 노드의 이름 또는 ID로 바꿉니다.
    • & lt;version >을 노드에서 사용할 암호화 제품군 버전으로 바꿉니다. 다음 유효한 값 중 하나로 설정합니다.

      • 3 - 노드는 SHA1 암호화 제품군과 AES-128을 사용합니다.
      • 17 - 노드는 SHA256 암호화 제품군과 함께 AES-128을 사용합니다.
  6. 노드의 프로비저닝 상태를 available:로 설정합니다.

    $ openstack baremetal node manage <node>
    $ openstack baremetal node provide <node>

    노드 정리를 활성화한 경우 베어 메탈 프로비저닝 서비스는 노드를 정리합니다.

  7. 노드에서 로컬 부팅 옵션을 설정합니다.

    $ openstack baremetal node set <node> --property capabilities="boot_option:local"
  8. 노드가 등록되어 있는지 확인합니다.

    $ openstack baremetal node list

    노드 등록과 해당 상태가 표시되는 경우 지연이 발생할 수 있습니다.

4.5.2. 수동으로 베어 메탈 노드 등록

물리적 머신을 베어 메탈 노드로 등록한 다음 하드웨어 세부 정보를 수동으로 추가하고 각 이더넷 MAC 주소에 대한 포트를 생성합니다. overcloudrc 파일이 있는 모든 노드에서 다음 단계를 수행할 수 있습니다.

사전 요구 사항

절차

  1. 언더클라우드 호스트에 stack 사용자로 로그인합니다.
  2. 오버클라우드 인증 정보 파일을 소싱합니다.

    (undercloud)$ source ~/overcloudrc
  3. 새 노드를 추가합니다.

    $ openstack baremetal node create --driver <driver_name> --name <node_name>
    • & lt;driver_name& gt;을 드라이버의 이름으로 교체합니다(예: ipmi ).
    • & lt;node_name >을 새 베어 메탈 노드의 이름으로 바꿉니다.
  4. 노드가 생성될 때 노드에 할당된 UUID를 기록해 둡니다.
  5. 등록된 각 노드의 부팅 옵션을 local 로 설정합니다.

    $ openstack baremetal node set \
      --property capabilities="boot_option:local" <node>

    & lt;node& gt;를 베어 메탈 노드의 UUID로 바꿉니다.

  6. 배포 커널을 지정하고 노드 드라이버에 대해 램디스크를 배포합니다.

    $ openstack baremetal node set <node> \
      --driver-info deploy_kernel=<kernel_file> \
      --driver-info deploy_ramdisk=<initramfs_file>
    • & lt;node& gt;를 베어 메탈 노드의 ID로 바꿉니다.
    • < kernel_file >을 .kernel 이미지의 경로로 바꿉니다(예: file:///var/lib/ironic/httpboot/agent.kernel ).
    • < initramfs_file >을 .initramfs 이미지 경로로 바꿉니다(예: file:///var/lib/ironic/httpboot/agent.ramdisk ).
  7. 노드의 하드웨어 사양과 일치하도록 노드 속성을 업데이트합니다.

    $ openstack baremetal node set <node> \
      --property cpus=<cpu> \
      --property memory_mb=<ram> \
      --property local_gb=<disk> \
      --property cpu_arch=<arch>
    • & lt;node& gt;를 베어 메탈 노드의 ID로 바꿉니다.
    • & lt;cpu& gt;를 CPU 수로 바꿉니다.
    • &lt ;ram&gt;을 RAM(MB)으로 바꿉니다.
    • &lt ;disk&gt;를 디스크 크기(GB)로 바꿉니다.
    • &lt ;arch& gt;를 아키텍처 유형으로 바꿉니다.
  8. 선택 사항: 각 노드의 IPMI 암호화 제품군을 지정합니다.

    $ openstack baremetal node set <node> \
     --driver-info ipmi_cipher_suite=<version>
    • & lt;node& gt;를 베어 메탈 노드의 ID로 바꿉니다.
    • & lt;version >을 노드에서 사용할 암호화 제품군 버전으로 바꿉니다. 다음 유효한 값 중 하나로 설정합니다.

      • 3 - 노드는 SHA1 암호화 제품군과 AES-128을 사용합니다.
      • 17 - 노드는 SHA256 암호화 제품군과 함께 AES-128을 사용합니다.
  9. 선택 사항: 여러 디스크가 있는 경우 루트 장치 힌트를 설정하여 배포에 사용할 디스크의 배포 램디스크를 알립니다.

    $ openstack baremetal node set <node> \
      --property root_device='{"<property>": "<value>"}'
    • & lt;node& gt;를 베어 메탈 노드의 ID로 바꿉니다.
    • < property > 및 < value >를 배포에 사용할 디스크에 대한 세부 정보(예: root_device='{"size)로 바꿉니다. "128"}'

      RHOSP에서는 다음 속성을 지원합니다.

      • 모델 (문자열): 장치 식별자.
      • vendor (문자열): 장치 벤더.
      • serial (문자열): 디스크 일련 번호입니다.
      • hctl (문자열): host:Channel:Target:Lun( SCSI용)
      • 크기 (정수): 장치 크기(GB)입니다.
      • wwn (문자열): 고유한 스토리지 식별자입니다.
      • wwn_with_extension (문자열): 공급업체 확장이 추가된 고유한 스토리지 식별자입니다.
      • wwn_vendor_extension (문자열): 고유한 벤더 스토리지 식별자입니다.
      • rotational (Boolean): 회전 장치(HDD)의 경우 true이고, 그렇지 않으면 false(SSD)입니다.
      • 이름 (문자열): 장치 이름(예: /dev/sdb1)은 이 속성을 영구 이름이 있는 장치에만 사용합니다.

        참고

        둘 이상의 속성을 지정하는 경우 장치는 해당 속성과 모두 일치해야 합니다.

  10. provisioning 네트워크에서 NIC의 MAC 주소를 사용하여 포트를 생성하여 Bare Metal Provisioning 서비스에 노드 네트워크 카드를 알립니다.

    $ openstack baremetal port create --node <node_uuid> <mac_address>
    • & lt;node& gt;를 베어 메탈 노드의 고유 ID로 바꿉니다.
    • & lt;mac_address& gt;를 PXE 부팅에 사용되는 NIC의 MAC 주소로 바꿉니다.
  11. 노드의 구성을 검증합니다.

    $ openstack baremetal node validate <node>
    +------------+--------+---------------------------------------------+
    | Interface  | Result | Reason                                      |
    +------------+--------+---------------------------------------------+
    | boot       | False  | Cannot validate image information for node  |
    |            |        | a02178db-1550-4244-a2b7-d7035c743a9b        |
    |            |        | because one or more parameters are missing  |
    |            |        | from its instance_info. Missing are:        |
    |            |        | ['ramdisk', 'kernel', 'image_source']       |
    | console    | None   | not supported                               |
    | deploy     | False  | Cannot validate image information for node  |
    |            |        | a02178db-1550-4244-a2b7-d7035c743a9b        |
    |            |        | because one or more parameters are missing  |
    |            |        | from its instance_info. Missing are:        |
    |            |        | ['ramdisk', 'kernel', 'image_source']       |
    | inspect    | None   | not supported                               |
    | management | True   |                                             |
    | network    | True   |                                             |
    | power      | True   |                                             |
    | raid       | True   |                                             |
    | storage    | True   |                                             |
    +------------+--------+---------------------------------------------+

    검증 출력 결과는 다음과 같습니다.

    • false: 인터페이스가 검증에 실패했습니다. 제공된 이유로 instance_info 매개 변수 [\'ramdisk', \'kernel' 및 \'image_source'] 가 누락된 경우 Compute 서비스가 배포 프로세스 시작 부분에 누락된 매개변수를 채우므로 이 시점에서 설정되지 않았을 수 있습니다. 전체 디스크 이미지를 사용하는 경우 검증을 전달하도록 image_source 만 설정해야 할 수 있습니다.
    • true: 인터페이스가 검증을 통과했습니다.
    • 없음: 드라이버에서 인터페이스가 지원되지 않습니다.

4.6. Redfish 가상 미디어 부팅 구성

중요

이 기능은 이번 릴리스에서 기술 프리뷰로 제공되므로 Red Hat에서 완전히 지원되지 않습니다. 테스트 용도로만 사용해야 하며 프로덕션 환경에 배포해서는 안 됩니다. 기술 프리뷰 기능에 대한 자세한 내용은 적용 범위 상세 정보를 참조하십시오.

BMC(Baseboard Management Controller)에서 가상 드라이브 중 하나에 부팅 이미지를 삽입할 수 있도록 Redfish 가상 미디어 부팅을 사용하여 노드의 BMC에 부팅 이미지를 공급할 수 있습니다. 그 후 노드는 가상 드라이브에서 해당 이미지에 있는 운영 체제로 부팅할 수 있습니다.

Redfish 하드웨어 유형은 가상 미디어를 통한 배포, 복구 및 사용자 이미지 부팅을 지원합니다. Bare Metal Provisioning 서비스(ironic)는 노드와 연결된 커널 및 램디스크 이미지를 사용하여 노드 배포 시 UEFI 또는 BIOS 부팅 모드에 대한 부팅 가능한 ISO 이미지를 빌드합니다. 가상 미디어 부팅의 주요 장점은 PXE의 TFTP 이미지 전송 단계를 제거하고 대신 HTTP GET 또는 기타 방법을 사용할 수 있다는 것입니다.

4.6.1. Redfish 가상 미디어 부팅을 사용하여 베어 메탈 서버 배포

중요

이 기능은 이번 릴리스에서 기술 프리뷰로 제공되므로 Red Hat에서 완전히 지원되지 않습니다. 테스트 용도로만 사용해야 하며 프로덕션 환경에 배포해서는 안 됩니다. 기술 프리뷰 기능에 대한 자세한 내용은 적용 범위 상세 정보를 참조하십시오.

가상 미디어를 통해 redfish 하드웨어 유형으로 노드를 부팅하려면 부팅 인터페이스를 redfish-virtual-media로 설정하고 UEFI 노드의 경우 ESP(EFI 시스템 파티션) 이미지를 정의합니다. 다음으로 등록된 노드가 Redfish 가상 미디어 부팅을 사용하도록 설정합니다.

사전 요구 사항

  • undercloud.conf 파일의 enabled_hardware_types 매개변수로 활성화된 Redfish 드라이버
  • 등록된 베어 메탈 노드
  • Image 서비스(glance)의 IPA 및 인스턴스 이미지
  • UEFI 노드의 경우 Image 서비스(glance)에서 ESP(EFI 시스템 파티션) 이미지 사용 가능
  • 베어 메탈 플레이버
  • 정리 및 프로비저닝을 위한 네트워크
  • Sushy 라이브러리 설치

    $ sudo yum install sushy

절차

  1. Bare Metal 서비스(ironic) 부팅 인터페이스를 redfish-virtual-media로 설정합니다.

    $ openstack baremetal node set --boot-interface redfish-virtual-media $NODE_NAME

    $ NODE_NAME을 노드 이름으로 바꿉니다.

  2. UEFI 노드의 경우 부팅 모드를 uefi로 설정합니다.

    $ openstack baremetal node set --property capabilities="boot_mode:uefi" $NODE_NAME

    $ NODE_NAME을 노드 이름으로 바꿉니다.

    참고

    BIOS 노드의 경우 이 단계를 완료하지 마십시오.

  3. UEFI 노드의 경우 ESP(EFI 시스템 파티션) 이미지를 정의합니다.

    $ openstack baremetal node set --driver-info bootloader=$ESP $NODE_NAME

    $ESP를 glance 이미지 UUID 또는 ESP 이미지 URL로 바꾸고 $NODE_NAME을 노드 이름으로 바꿉니다.

    참고

    BIOS 노드의 경우 이 단계를 완료하지 마십시오.

  4. 베어 메탈 노드에서 포트를 생성하고 베어 메탈 노드에서 NIC의 MAC 주소와 포트를 연결합니다.

    $ openstack baremetal port create --pxe-enabled True --node $UUID $MAC_ADDRESS

    $UUID를 베어 메탈 노드의 UUID로 바꾸고 $MAC_ADDRESS를 베어 메탈 노드에 있는 NIC의 MAC 주소로 바꿉니다.

  5. 새 베어 메탈 서버를 생성합니다.

    $ openstack server create \
        --flavor baremetal \
        --image $IMAGE \
        --network $NETWORK \
        test_instance

    $IMAGE$NETWORK 를 사용하려는 이미지 및 네트워크의 이름으로 바꿉니다.

4.7. 호스트 집계를 사용하여 물리적 시스템 프로비저닝과 가상 시스템 프로비저닝 분리

OpenStack Compute는 호스트 집계를 사용하여 가용성 영역을 분할하고 특정 공유 속성이 있는 노드를 그룹화합니다. 인스턴스가 프로비저닝되면 Compute 스케줄러는 플레이버의 속성을 호스트 집계에 할당된 속성과 비교하고, 실제 시스템 또는 가상 시스템에서 인스턴스가 올바른 집계 및 올바른 호스트에 프로비저닝되도록 합니다.

다음 작업을 수행하려면 이 섹션의 단계를 완료합니다.

  • 플레이버에 baremetal 속성을 추가하고 true 또는 false 로 설정합니다.
  • 일치하는 baremetal 속성을 사용하여 베어 메탈 호스트 및 컴퓨팅 노드에 대해 별도의 호스트 집계를 생성합니다. 집계로 그룹화된 노드는 이 속성을 상속합니다.

사전 요구 사항

절차

  1. baremetal 플레이버에서 baremetal 속성을 true 로 설정합니다.

    $ openstack flavor set baremetal --property baremetal=true
  2. 가상 인스턴스에서 사용하는 플레이버에서 baremetal 속성을 false 로 설정합니다.

    $ openstack flavor set FLAVOR_NAME --property baremetal=false
  3. baremetal-hosts 라는 호스트 집계를 생성합니다.

    $ openstack aggregate create --property baremetal=true baremetal-hosts
  4. 각 컨트롤러 노드를 baremetal-hosts 집계에 추가합니다.

    $ openstack aggregate add host baremetal-hosts HOSTNAME
    참고

    NovaIronic 서비스를 사용하여 구성 가능 역할을 생성한 경우 이 서비스가 있는 모든 노드를 baremetal-hosts 집계에 추가합니다. 기본적으로 컨트롤러 노드만 NovaIronic 서비스가 있습니다.

  5. virtual-hosts 라는 호스트 집계를 생성합니다.

    $ openstack aggregate create --property baremetal=false virtual-hosts
  6. 각 컴퓨팅 노드를 virtual-hosts 집계에 추가합니다.

    $ openstack aggregate add host virtual-hosts HOSTNAME
  7. 오버클라우드를 배포할 때 다음 Compute 필터 스케줄러를 추가하지 않은 경우 _/etc/nova/nova.conf_ 파일의 scheduler_default_filters 아래 기존 목록에 지금 추가합니다.

    AggregateInstanceExtraSpecsFilter

5장. 베어 메탈 노드 관리

Bare Metal Provisioning 서비스(ironic)가 포함된 오버클라우드를 배포한 후 등록된 베어 메탈 노드에서 물리적 머신을 프로비저닝하고 오버클라우드에 베어 메탈 인스턴스를 시작할 수 있습니다.

사전 요구 사항

5.1. 베어 메탈 인스턴스 시작

명령줄 또는 OpenStack 대시보드에서 인스턴스를 시작할 수 있습니다.

사전 요구 사항

5.1.1. 명령줄 인터페이스를 사용하여 인스턴스 시작

OpenStack Client CLI를 사용하여 베어 메탈 인스턴스를 생성할 수 있습니다.

사전 요구 사항

절차

  1. Identity 서비스(keystone)에 관리 사용자로 액세스할 쉘을 구성합니다.

    $ source ~/overcloudrc
  2. 베어 메탈 인스턴스를 생성합니다.

    $ openstack server create \
     --nic net-id=<network_uuid> \
     --flavor baremetal \
     --image <image_uuid> \
     myBareMetalInstance
    • & lt;network_uuid >를 베어 메탈 프로비저닝 서비스와 함께 사용하도록 생성한 네트워크의 고유 식별자로 바꿉니다.
    • & lt;image_uuid >를 인스턴스에 필요한 소프트웨어 프로필이 있는 이미지의 고유 식별자로 바꿉니다.
  3. 인스턴스의 상태를 확인합니다.

    $ openstack server list --name myBareMetalInstance

5.1.2. 대시보드를 사용하여 인스턴스 시작

대시보드 그래픽 사용자 인터페이스를 사용하여 베어 메탈 인스턴스를 배포합니다.

사전 요구 사항

절차

  1. http[s]://DASHBOARD_IP/dashboard 에서 대시보드에 로그인합니다.
  2. Project > Compute > Instances를 클릭합니다.
  3. Launch Instance 를 클릭합니다.

    • 세부 정보 탭에서 Instance Name 을 지정하고 Count 용으로 1 을 선택합니다.
    • Source 탭에서 Select Boot Source 에서 Image 를 선택한 다음 + (더하기) 기호를 클릭하여 운영 체제 디스크 이미지를 선택합니다. Allocated 로 이동하도록 선택한 이미지입니다.
    • Flavor (플레이버) 탭에서 baremetal 을 선택합니다.
    • Networks 탭에서 + (plus) 및 - (minus) 버튼을 사용하여 필요한 네트워크를 Available 에서 Allocated 로 이동합니다. 베어 메탈 프로비저닝 서비스에 대해 생성한 공유 네트워크가 여기에서 선택되어 있는지 확인합니다.
    • 인스턴스를 보안 그룹에 할당하려면 Security Groups (보안 그룹) 탭에서 화살표를 사용하여 그룹을 Allocated.
  4. Launch Instance 를 클릭합니다.

5.2. 베어 메탈 프로비저닝 서비스에서 포트 그룹 구성

참고

베어 메탈 노드의 포트 그룹 기능은 이번 릴리스에서 기술 프리뷰 로 제공되므로 Red Hat에서 완전히 지원되지 않습니다. 테스트 용도로만 사용해야 하며 프로덕션 환경에 배포해서는 안 됩니다. 기술 프리뷰 기능에 대한 자세한 내용은 적용 범위 상세 정보를 참조하십시오.

포트 그룹(bonds)은 여러 네트워크 인터페이스를 하나의 '보딩' 인터페이스로 집계하는 방법을 제공합니다. 포트 그룹 구성은 항상 개별 포트 구성보다 우선합니다.

포트 그룹에 물리적 네트워크가 있는 경우 해당 포트 그룹의 모든 포트에 동일한 물리적 네트워크가 있어야 합니다. 베어 메탈 프로비저닝 서비스는 configdrive 를 사용하여 인스턴스에서 포트 그룹 구성을 지원합니다.

참고

Bare Metal Provisioning 서비스 API 버전 1.26에서는 포트 그룹 구성을 지원합니다. .Prerequisites

5.2.1. 스위치에서 수동으로 포트 그룹 구성

베어 메탈 배포에서 포트 그룹을 구성하려면 스위치에서 수동으로 포트 그룹을 구성해야 합니다. 이름 지정이 스위치에 따라 다를 수 있으므로 스위치의 모드 및 속성이 베어 메탈 측의 모드 및 속성에 해당하는지 확인해야 합니다.

참고

iPXE를 사용하여 배포를 부팅해야 하는 경우 프로비저닝 및 정리에는 포트 그룹을 사용할 수 없습니다.

포트 그룹 폴백을 사용하면 연결이 실패하면 포트 그룹의 모든 포트가 개별 스위치 포트로 폴백될 수 있습니다. 스위치에서 포트 그룹 대체를 지원하는지 여부에 따라 --support-standalone-ports--unsupport-standalone-ports 옵션을 사용할 수 있습니다.

사전 요구 사항

5.2.2. 베어 메탈 프로비저닝 서비스에서 포트 그룹 구성

여러 네트워크 인터페이스를 결합한 단일 인터페이스로 집계하는 포트 그룹을 생성합니다.

사전 요구 사항

절차

  1. 속하는 노드, 이름, 주소, 모드, 속성 및 독립 실행형 포트에 대체를 지원하는지 확인하여 포트 그룹을 만듭니다.

    # openstack baremetal port group create --node NODE_UUID --name NAME --address MAC_ADDRESS --mode MODE  --property miimon=100 --property xmit_hash_policy="layer2+3" --support-standalone-ports

    openstack baremetal port group set 명령을 사용하여 포트 그룹을 업데이트할 수도 있습니다.

    주소를 지정하지 않으면 배포된 인스턴스 포트 그룹 주소가 OpenStack Networking 포트와 동일합니다. neutron 포트를 연결하지 않으면 포트 그룹 구성이 실패합니다.

    인터페이스 연결 중에 포트 그룹은 포트보다 우선 순위가 높으므로 먼저 사용됩니다. 현재 인터페이스 연결 요청에 포트 그룹 또는 포트가 필요한지 여부를 지정할 수 없습니다. 포트가 없는 포트 그룹은 무시됩니다.

    참고

    이미지에서 또는 configdrive 를 생성하여 노드의 instance_info 에 추가하여 독립형 모드에서 포트 그룹을 수동으로 구성해야 합니다. 포트 그룹 구성이 작동하려면 cloud-init 버전 0.7.7 이상이 있는지 확인합니다.

  2. 포트를 포트 그룹과 연결합니다.

    • 포트 생성 중:

      # openstack baremetal port create --node NODE_UUID --address MAC_ADDRESS --port-group test
    • 포트 업데이트 중:

      # openstack baremetal port set PORT_UUID --port-group PORT_GROUP_UUID
  3. cloud-init 가 있거나 본딩을 지원하는 이미지를 제공하여 인스턴스를 부팅합니다.

    포트 그룹이 올바르게 구성되었는지 확인하려면 다음 명령을 실행합니다.

    # cat /proc/net/bonding/bondX

    여기서 X 는 구성된 각 포트 그룹에 대해 cloud-init 가 자동으로 생성되는 번호입니다. 0 으로 시작하고 구성된 각 포트 그룹에 대해 하나씩 증가합니다.

5.3. IP 주소 매핑을 위한 호스트 확인

다음 명령을 사용하여 어떤 호스트 및 베어 메탈 노드에 할당되는 IP 주소를 확인합니다. 이러한 명령을 사용하면 호스트에 직접 액세스하지 않고도 언더클라우드에서 IP 매핑으로 호스트를 볼 수 있습니다.

사전 요구 사항

절차

  1. 다음 명령을 실행하여 각 호스트의 IP 주소를 표시합니다.

    (undercloud) [stack@host01 ~]$ openstack stack output show overcloud HostsEntry --max-width 80
    
    +--------------+---------------------------------------------------------------+
    | Field        | Value                                                         |
    +--------------+---------------------------------------------------------------+
    | description  | The content that should be appended to your /etc/hosts if you |
    |              | want to get                                                   |
    |              | hostname-based access to the deployed nodes (useful for       |
    |              | testing without                                               |
    |              | setting up a DNS).                                            |
    |              |                                                               |
    | output_key   | HostsEntry                                                    |
    | output_value | 172.17.0.10 overcloud-controller-0.localdomain overcloud-     |
    |              | controller-0                                                  |
    |              | 10.8.145.18 overcloud-controller-0.external.localdomain       |
    |              | overcloud-controller-0.external                               |
    |              | 172.17.0.10 overcloud-controller-0.internalapi.localdomain    |
    |              | overcloud-controller-0.internalapi                            |
    |              | 172.18.0.15 overcloud-controller-0.storage.localdomain        |
    |              | overcloud-controller-0.storage                                |
    |              | 172.21.2.12 overcloud-controller-0.storagemgmt.localdomain    |
    |              | overcloud-controller-0.storagemgmt                            |
    |              | 172.16.0.15 overcloud-controller-0.tenant.localdomain         |
    |              | overcloud-controller-0.tenant                                 |
    |              | 10.8.146.13 overcloud-controller-0.management.localdomain     |
    |              | overcloud-controller-0.management                             |
    |              | 10.8.146.13 overcloud-controller-0.ctlplane.localdomain       |
    |              | overcloud-controller-0.ctlplane                               |
    |              |                                                               |
    |              | 172.17.0.21 overcloud-compute-0.localdomain overcloud-        |
    |              | compute-0                                                     |
    |              | 10.8.146.12 overcloud-compute-0.external.localdomain          |
    |              | overcloud-compute-0.external                                  |
    |              | 172.17.0.21 overcloud-compute-0.internalapi.localdomain       |
    |              | overcloud-compute-0.internalapi                               |
    |              | 172.18.0.20 overcloud-compute-0.storage.localdomain           |
    |              | overcloud-compute-0.storage                                   |
    |              | 10.8.146.12 overcloud-compute-0.storagemgmt.localdomain       |
    |              | overcloud-compute-0.storagemgmt                               |
    |              | 172.16.0.16 overcloud-compute-0.tenant.localdomain overcloud- |
    |              | compute-0.tenant                                              |
    |              | 10.8.146.12 overcloud-compute-0.management.localdomain        |
    |              | overcloud-compute-0.management                                |
    |              | 10.8.146.12 overcloud-compute-0.ctlplane.localdomain          |
    |              | overcloud-compute-0.ctlplane                                  |
    |              |                                                               |
    |              |                                                               |
    |              |                                                               |
    |              |                                                               |
    |              | 10.8.145.16  overcloud.localdomain                            |
    |              | 10.8.146.7  overcloud.ctlplane.localdomain                    |
    |              | 172.17.0.19  overcloud.internalapi.localdomain                |
    |              | 172.18.0.19  overcloud.storage.localdomain                    |
    |              | 172.21.2.16  overcloud.storagemgmt.localdomain                |
    +--------------+---------------------------------------------------------------+
  2. 특정 호스트를 필터링하려면 다음 명령을 실행합니다.

    (undercloud) [stack@host01 ~]$ openstack stack output show overcloud HostsEntry -c output_value -f value | grep overcloud-controller-0
    
    172.17.0.12 overcloud-controller-0.localdomain overcloud-controller-0
    10.8.145.18 overcloud-controller-0.external.localdomain overcloud-controller-0.external
    172.17.0.12 overcloud-controller-0.internalapi.localdomain overcloud-controller-0.internalapi
    172.18.0.12 overcloud-controller-0.storage.localdomain overcloud-controller-0.storage
    172.21.2.13 overcloud-controller-0.storagemgmt.localdomain overcloud-controller-0.storagemgmt
    172.16.0.19 overcloud-controller-0.tenant.localdomain overcloud-controller-0.tenant
    10.8.146.13 overcloud-controller-0.management.localdomain overcloud-controller-0.management
    10.8.146.13 overcloud-controller-0.ctlplane.localdomain overcloud-controller-0.ctlplane
  3. 호스트를 베어 메탈 노드에 매핑하려면 다음 명령을 실행합니다.

    (undercloud) [stack@host01 ~]$ openstack baremetal node list --fields uuid name instance_info -f json
    [
      {
        "UUID": "c0d2568e-1825-4d34-96ec-f08bbf0ba7ae",
        "Instance Info": {
          "root_gb": "40",
          "display_name": "overcloud-compute-0",
          "image_source": "24a33990-e65a-4235-9620-9243bcff67a2",
          "capabilities": "{\"boot_option\": \"local\"}",
          "memory_mb": "4096",
          "vcpus": "1",
          "local_gb": "557",
          "configdrive": "******",
          "swap_mb": "0",
          "nova_host_id": "host01.lab.local"
        },
        "Name": "host2"
      },
      {
        "UUID": "8c3faec8-bc05-401c-8956-99c40cdea97d",
        "Instance Info": {
          "root_gb": "40",
          "display_name": "overcloud-controller-0",
          "image_source": "24a33990-e65a-4235-9620-9243bcff67a2",
          "capabilities": "{\"boot_option\": \"local\"}",
          "memory_mb": "4096",
          "vcpus": "1",
          "local_gb": "557",
          "configdrive": "******",
          "swap_mb": "0",
          "nova_host_id": "host01.lab.local"
        },
        "Name": "host3"
      }
    ]

5.4. 가상 네트워크 인터페이스 연결 및 분리

베어 메탈 프로비저닝 서비스에는 가상 네트워크 인터페이스 간의 매핑을 관리하는 데 사용할 수 있는 API가 있습니다. 예를 들어 OpenStack Networking 서비스의 인터페이스와 실제 인터페이스(NIC)가 있습니다. 가상 네트워크 인터페이스(VIF)를 물리적 네트워크 인터페이스(PIF) 매핑 논리로 설정하도록 각 Bare Metal Provisioning 노드에 대해 이러한 인터페이스를 구성할 수 있습니다. 인터페이스를 구성하려면 openstack baremetal node vif* 명령을 사용합니다.

사전 요구 사항

절차

  1. 베어 메탈 노드에 현재 연결된 VIF ID를 나열합니다.

    $ openstack baremetal node vif list baremetal-0
    +--------------------------------------+
    | ID                                   |
    +--------------------------------------+
    | 4475bc5a-6f6e-466d-bcb6-6c2dce0fba16 |
    +--------------------------------------+
  2. VIF를 연결한 후 베어 메탈 프로비저닝 서비스는 OpenStack Networking 서비스의 가상 포트를 물리적 포트의 실제 MAC 주소로 업데이트합니다. 이 포트 주소를 확인합니다.

    $ openstack port show 4475bc5a-6f6e-466d-bcb6-6c2dce0fba16 -c mac_address -c fixed_ips
    +-------------+-----------------------------------------------------------------------------+
    | Field       | Value                                                                       |
    +-------------+-----------------------------------------------------------------------------+
    | fixed_ips   | ip_address='192.168.24.9', subnet_id='1d11c677-5946-4733-87c3-23a9e06077aa' |
    | mac_address | 00:2d:28:2f:8d:95                                                           |
    +-------------+-----------------------------------------------------------------------------+
  3. baremetal-0 노드를 생성한 네트워크에 새 포트를 만듭니다.

    $ openstack port create --network baremetal --fixed-ip ip-address=192.168.24.24 baremetal-0-extra
  4. 인스턴스에서 포트를 제거합니다.

    $ openstack server remove port overcloud-baremetal-0 4475bc5a-6f6e-466d-bcb6-6c2dce0fba16
  5. IP 주소가 목록에 더 이상 존재하지 않는지 확인합니다.

    $ openstack server list
  6. 노드에 VIF가 연결되어 있는지 확인합니다.

    $ openstack baremetal node vif list baremetal-0
    $ openstack port list
  7. 새로 생성된 포트를 추가합니다.

    $ openstack server add port overcloud-baremetal-0 baremetal-0-extra
  8. 새 IP 주소에 새 포트가 표시되는지 확인합니다.

    $ openstack server list
    +--------------------------------------+-------------------------+--------+------------------------+------------------------------+---------+
    | ID                                   | Name                    | Status | Networks               | Image                        | Flavor  |
    +--------------------------------------+-------------------------+--------+------------------------+------------------------------+---------+
    | 53095a64-1646-4dd1-bbf3-b51cbcc38789 | overcloud-controller-2  | ACTIVE | ctlplane=192.168.24.7  | overcloud-hardened-uefi-full | control |
    | 3a1bc89c-5d0d-44c7-a569-f2a3b4c73d65 | overcloud-controller-0  | ACTIVE | ctlplane=192.168.24.8  | overcloud-hardened-uefi-full | control |
    | 6b01531a-f55d-40e9-b3a2-6d02be0b915b | overcloud-controller-1  | ACTIVE | ctlplane=192.168.24.16 | overcloud-hardened-uefi-full | control |
    | c61cc52b-cc48-4903-a971-073c60f53091 | overcloud-novacompute-0overcloud-baremetal-0 | ACTIVE | ctlplane=192.168.24.24 | overcloud-hardened-uefi-full | compute |
    +--------------------------------------+-------------------------+--------+------------------------+------------------------------+---------+
  9. VIF ID가 새 포트의 UUID인지 확인합니다.

    $ openstack baremetal node vif list baremetal-0
    +--------------------------------------+
    | ID                                   |
    +--------------------------------------+
    | 6181c089-7e33-4f1c-b8fe-2523ff431ffc |
    +--------------------------------------+
  10. OpenStack Networking 포트 MAC 주소가 업데이트되고 Bare Metal Provisioning 서비스 포트 중 하나와 일치하는지 확인합니다.

    $ openstack port show 6181c089-7e33-4f1c-b8fe-2523ff431ffc -c mac_address -c fixed_ips
    +-------------+------------------------------------------------------------------------------+
    | Field       | Value                                                                        |
    +-------------+------------------------------------------------------------------------------+
    | fixed_ips   | ip_address='192.168.24.24', subnet_id='1d11c677-5946-4733-87c3-23a9e06077aa' |
    | mac_address | 00:2d:28:2f:8d:95                                                            |
    +-------------+------------------------------------------------------------------------------+
  11. 베어 메탈 노드를 재부팅하여 새 IP 주소를 인식합니다.

    $ openstack server reboot overcloud-baremetal-0

    인터페이스를 분리하거나 연결한 후 베어 메탈 OS는 변경된 네트워크 인터페이스를 제거, 추가 또는 수정합니다. 포트를 교체할 때 DHCP 요청이 새 IP 주소를 얻지만 이전 DHCP 리스가 여전히 유효하기 때문에 시간이 걸릴 수 있습니다. 이러한 변경 사항을 즉시 시작하려면 베어 메탈 호스트를 재부팅합니다.

5.5. 베어 메탈 프로비저닝 서비스에 대한 알림 구성

서비스 내에서 발생하는 다양한 이벤트에 대한 알림을 표시하도록 Bare Metal Provisioning 서비스(ironic)를 구성할 수 있습니다. 외부 서비스는 청구 목적, 데이터 저장소 모니터링 및 기타 목적으로 이러한 알림을 사용할 수 있습니다. Bare Metal Provisioning 서비스에 대한 알림을 활성화하려면 ironic.conf 구성 파일에 다음 옵션을 설정해야 합니다.

사전 요구 사항

절차

  • [DEFAULT] 섹션의 notification_level 옵션은 알림을 전송하는 최소 우선 순위 수준을 결정합니다. 이 옵션의 값을 디버그,info,warning,error 또는 critical 로 설정할 수 있습니다. 옵션이 warning 로 설정된 경우 우선 순위 수준 경고,오류 또는 중요 항목이 있는 모든 알림이 전송되지만 우선 순위 수준 디버그 또는 정보가 있는 알림은 전송되지 않습니다. 이 옵션을 설정하지 않으면 알림이 전송되지 않습니다. 사용 가능한 각 알림의 우선 순위 수준은 다음과 같습니다.
  • [oslo_messaging_notifications] 섹션의 transport_url 옵션에 따라 알림을 보낼 때 사용되는 메시지 버스가 결정됩니다. 이 값을 설정하지 않으면 RPC에 사용되는 기본 전송이 사용됩니다.

모든 알림은 메시지 버스의 ironic_versioned_notifications 항목에 발송됩니다. 일반적으로 메시지 버스를 통과하는 각 유형의 메시지는 메시지의 내용을 설명하는 주제와 연관됩니다.

5.6. 자동 전원 장애 복구 구성

Bare Metal Provisioning 서비스(ironic)에는 노드의 전원, 정리 및 복구 오류를 기록하는 문자열 필드가 있습니다.

표 5.1. Ironic 노드 오류

fault설명

전원 장애

최대 재시도 횟수를 초과하는 전원 동기화 오류로 인해 노드가 유지보수 모드에 있습니다.

클린트 실패

정리 작업이 실패하여 노드가 유지보수 모드에 있습니다.

rescue 중단 실패

복구 중단 중에 정리 작업이 실패하여 노드가 유지보수 모드에 있습니다.

none

아무런 잘못이 없습니다.

컨덕터는 이 필드의 값을 주기적으로 검사합니다. conductor에서 전원 장애 상태를 감지하고 노드로 전원 을 성공적으로 복원할 수 있는 경우 노드가 유지보수 모드에서 제거되고 작동으로 복원됩니다.

참고

Operator가 노드를 유지보수 모드에 수동으로 배치하면 conductor에서 노드를 유지보수 모드에서 자동으로 제거하지 않습니다.

기본 간격은 300초이지만 hieradata를 사용하여 director로 이 간격을 설정할 수 있습니다.

사전 요구 사항

절차

  • 사용자 지정 복구 간격을 구성하려면 다음 hieradata를 포함합니다.

    ironic::conductor::power_failure_recovery_interval

    자동 전원 오류 복구를 비활성화하려면 값을 0 으로 설정합니다.

5.7. 오버클라우드 노드 세부 검사

오버클라우드 노드의 세부 검사를 수행하여 노드의 사양을 director에 식별하고 저장합니다.

절차

  1. 언더클라우드 호스트에 stack 사용자로 로그인합니다.
  2. overcloudrc 인증 정보 파일을 소싱합니다.

    $ source ~/overcloudrc
  3. introspection 명령을 실행합니다.

    $ openstack baremetal introspection start [--wait] <NODENAME>

    <NODENAME>을 검사할 노드의 이름 또는 UUID로 바꿉니다.

  4. 인트로스펙션 상태를 확인합니다.

    $ openstack baremetal introspection status <NODENAME>

    <NODENAME>을 노드의 이름 또는 UUID로 바꿉니다.

다음 단계

  • 인트로스펙션 데이터를 추출합니다.

    $ openstack baremetal introspection data save <NODE-UUID>

    <NODENAME>을 노드의 이름 또는 UUID로 바꿉니다.

6장. cinder 볼륨에서 부팅

Block Storage 서비스(cinder)에서 볼륨을 생성하고 베어 메탈 프로비저닝 서비스(ironic)로 생성한 베어 메탈 인스턴스에 이러한 볼륨을 연결할 수 있습니다.

6.1. 베어 메탈 노드의 Cinder 볼륨 부팅

OpenStack 블록 스토리지(cinder)에 저장된 블록 스토리지 장치에서 베어 메탈 노드를 부팅할 수 있습니다. OpenStack Bare Metal(ironic)은 iSCSI 인터페이스를 통해 베어 메탈 노드를 볼륨에 연결합니다.

Ironic은 오버클라우드 배포 중에 이 기능을 활성화합니다. 그러나 오버클라우드를 배포하기 전에 다음 조건을 고려하십시오.

  • 오버클라우드를 사용하려면 cinder iSCSI 백엔드를 활성화해야 합니다. 오버클라우드 배포 중에 CinderEnableIscsiBackend heat 매개변수를 true 로 설정합니다.
  • Red Hat Ceph Storage 백엔드에서는 cinder 볼륨 부팅 기능을 사용할 수 없습니다.
  • 부팅 디스크에 rd.iscsi.firmware=1 커널 매개 변수를 설정해야 합니다.

6.2. cinder 볼륨 부팅을 위한 노드 구성

cinder 볼륨에서 성공적으로 부팅되도록 각 베어 메탈 노드에 특정 옵션을 구성해야 합니다.

절차

  1. 오버클라우드 인증 정보 파일을 소싱합니다.

    $ source ~/<credentials_file>
    • & lt;credentials_file& gt;을 사용자 인증 정보 파일 (예: overcloudrc )으로 바꿉니다.
  2. iscsi_boot 기능을 true 로 설정하고 선택한 노드의 storage-interfacecinder 로 설정합니다.

    $ openstack baremetal node set --property capabilities=iscsi_boot:true --storage-interface cinder <NODEID>

    <NODEID> 를 선택한 노드의 ID로 바꿉니다.

  3. 노드의 iSCSI 커넥터를 만듭니다.

    $ openstack baremetal volume connector create --node <NODEID> --type iqn --connector-id iqn.2010-10.org.openstack.node<NUM>

    각 노드의 커넥터 ID는 고유해야 합니다. 이 예에서 커넥터는 4.7.1n .2010-10.org.openstack.node<NUM> 입니다. 여기서 <NUM> 은 각 노드의 증가 번호입니다.

6.3. 부팅 디스크에서 iSCSI 커널 매개 변수 구성

이미지의 커널에서 iSCSI 부팅을 활성화해야 합니다. 이 작업을 수행하려면 QCOW2 이미지를 마운트하고 이미지에 iSCSI 구성 요소를 활성화합니다.

사전 요구 사항

  1. Red Hat Enterprise Linux QCOW2 이미지를 다운로드하여 언더클라우드의 /home/stack/ 디렉터리에 복사합니다. 다음 페이지에서 QCOW2 형식으로 Red Hat Enterprise Linux KVM 이미지를 다운로드할 수 있습니다.

절차

  1. stack 사용자로 언더클라우드에 로그인합니다.
  2. QCOW2 이미지를 마운트하고 root 사용자로 액세스합니다.

    1. nbd 커널 모듈을 로드합니다.

      $ sudo modprobe nbd
    2. QCOW 이미지를 /dev/nbd0 으로 연결합니다.

      $ sudo qemu-nbd --connect=/dev/nbd0 <IMAGE>
    3. NBD의 파티션을 확인합니다.

      $ sudo fdisk /dev/nbd0 -l

      새로운 Red Hat Enterprise Linux QCOW2 이미지에는 일반적으로 NBD에서 이름이 /dev/nbd0p1 인 파티션 한 개만 포함되어 있습니다.

    4. 이미지의 마운트 지점을 생성합니다.

      mkdir /tmp/mountpoint
    5. 이미지를 마운트합니다.

      sudo mount /dev/nbd0p1 /tmp/mountpoint/
    6. 호스트의 장치 정보에 이미지에 액세스할 수 있도록 dev 디렉토리를 마운트합니다.

      sudo mount -o bind /dev /tmp/mountpoint/dev
    7. 루트 디렉터리를 마운트 지점으로 변경합니다.

      sudo chroot /tmp/mountpoint /bin/bash
  3. 이미지에서 iSCSI를 구성합니다.

    참고

    이 단계의 일부 명령에서는 다음 오류가 보고될 수 있습니다.

    lscpu: cannot open /proc/cpuinfo: No such file or directory

    이 오류는 중요하지 않으며 오류를 무시할 수 있습니다.

    1. resolv.conf 파일을 임시 위치로 이동합니다.

      # mv /etc/resolv.conf /etc/resolv.conf.bak
    2. 임시 resolv.conf 파일을 생성하여 Red Hat Content Delivery Network에 대한 DNS 요청을 확인합니다. 이 예에서는 이름 서버로 8.8.8.8 을 사용합니다.

      # echo "nameserver 8.8.8.8" > /etc/resolv.conf
    3. 마운트된 이미지를 Red Hat Content Delivery Network에 등록합니다.

      # subscription-manager register

      명령이 표시될 때 사용자 이름과 암호를 입력합니다.

    4. Red Hat Enterprise Linux가 포함된 서브스크립션을 연결합니다.

      # subscription-manager list --all --available
      # subscription-manager attach --pool <POOLID>

      <POOLID> 를 서브스크립션의 풀 ID로 바꿉니다.

    5. 기본 리포지토리를 비활성화합니다.

      # subscription-manager repos --disable "*"
    6. Red Hat Enterprise Linux 리포지토리를 활성화합니다.

      • Red Hat Enterprise Linux 7:

        # subscription-manager repos --enable "rhel-7-server-rpms"
      • Red Hat Enterprise Linux 8:

        # subscription-manager repos --enable "rhel-8-for-x86_64-baseos-eus-rpms"
    7. iscsi-initiator-utils 패키지를 설치합니다.

      # yum install -y iscsi-initiator-utils
    8. 마운트된 이미지 등록을 해제합니다.

      # subscription-manager unregister
    9. 원본 resolv.conf 파일을 복원하십시오.

      # mv /etc/resolv.conf.bak /etc/resolv.conf
    10. 마운트된 이미지에서 커널 버전을 확인합니다.

      # rpm -qa kernel

      예를 들어 출력이 kernel-3.10.0-1062.el7.x86_64 인 경우 커널 버전은 3.10.0-1062.el7.x86_64 입니다. 다음 단계를 위해 이 커널 버전을 기록해 둡니다.

      참고

      새로운 Red Hat Enterprise Linux QCOW2 이미지에는 하나의 커널 버전만 설치되어 있습니다. 커널 버전이 두 개 이상 설치된 경우 최신 버전을 사용합니다.

    11. initramfs 이미지에 networkiscsi dracut 모듈을 추가합니다.

      # dracut --force --add "network iscsi" /boot/initramfs-<KERNELVERSION>.img <KERNELVERSION>

      <KERNELVERSION>rpm -qa 커널 에서 가져온 버전 번호로 바꿉니다. 다음 예에서는 3.10.0-1062.el7.x86_64 를 커널 버전으로 사용합니다.

      # dracut --force --add "network iscsi" /boot/initramfs-3.10.0-1062.el7.x86_64.img 3.10.0-1062.el7.x86_64
    12. 마운트된 이미지를 호스트 운영 체제로 다시 종료합니다.

      # exit
  4. 이미지를 마운트 해제합니다.

    1. 임시 마운트 지점에서 dev 디렉터리를 마운트 해제합니다.

      $ sudo umount /tmp/mountpoint/dev
    2. 마운트 지점에서 이미지를 마운트 해제합니다.

      $ sudo umount /tmp/mountpoint
    3. /dev/nbd0/ 에서 QCOW2 이미지 연결을 끊습니다.

      $ sudo qemu-nbd --disconnect /dev/nbd0
  5. 이미지에서 grub 메뉴 구성을 다시 빌드합니다.

    1. libguestfs-tools 패키지를 설치합니다.

      $ sudo yum -y install libguestfs-tools
      중요

      언더클라우드에서 libguestfs-tools 패키지를 설치하는 경우 iscsid.socket 을 비활성화하여 언더클라우드에서 tripleo_iscsid 서비스와의 포트 충돌을 방지합니다.

      $ sudo systemctl disable --now iscsid.socket
    2. QEMU를 직접 사용하도록 libguestfs 백엔드를 설정합니다.

      $ export LIBGUESTFS_BACKEND=direct
    3. 이미지에서 grub 구성을 업데이트합니다.

      $ guestfish -a /tmp/images/{{ dib_image }} -m /dev/sda3 sh "mount /dev/sda2 /boot/efi && rm /boot/grub2/grubenv && /sbin/grub2-mkconfig -o /boot/grub2/grub.cfg && cp /boot/grub2/grub.cfg /boot/efi/EFI/redhat/grub.cfg && grubby --update-kernel=ALL --args=\"rd.iscsi.firmware=1\" && cp /boot/grub2/grubenv /boot/efi/EFI/redhat/grubenv && echo Success"

6.4. cinder에서 부팅 볼륨 생성 및 사용

iSCSI 지원 이미지를 OpenStack Image Storage(glance)에 업로드하고 OpenStack Block Storage(cinder)에서 부팅 볼륨을 생성해야 합니다.

절차

  1. stack 사용자로 언더클라우드에 로그인합니다.
  2. iSCSI 지원 이미지를 Glance에 업로드합니다.

    $ openstack image create --disk-format qcow2 --container-format bare --file rhel-server-7.7-x86_64-kvm.qcow2 rhel-server-7.7-iscsi
  3. 이미지에서 볼륨을 생성합니다.

    $ openstack volume create --size 10 --image rhel-server-7.7-iscsi --bootable rhel-test-volume
  4. cinder에서 부팅 볼륨을 사용하는 베어 메탈 인스턴스를 생성합니다.

    $ openstack server create --flavor baremetal --volume rhel-test-volume --key default rhel-test

7장. 베어 메탈 프로비저닝 서비스 문제 해결

Bare Metal Provisioning 서비스(ironic)가 포함된 환경에서 문제를 진단합니다.

7.1. PXE 부팅 오류

다음 문제 해결 절차를 사용하여 PXE 부팅에 발생할 수 있는 문제를 평가하고 해결하십시오.

권한 거부 오류

베어 메탈 노드의 콘솔에서 Permission Denied 오류를 반환하는 경우 적절한 SELinux 컨텍스트를 /httpboot/tftpboot 디렉터리에 적용해야 합니다.

# semanage fcontext -a -t httpd_sys_content_t "/httpboot(/.*)?"
# restorecon -r -v /httpboot
# semanage fcontext -a -t tftpdir_t "/tftpboot(/.*)?"
# restorecon -r -v /tftpboot

/pxelinux.cfg/XX-XX-XX-XX-XX-XX-XX에서 부팅 프로세스가 중지됩니다.

노드 콘솔에서 IP 주소가 수신되는 것처럼 보이지만 프로세스가 중지되면 ironic.conf 파일에서 잘못된 PXE 부팅 템플릿을 사용할 수 있습니다.

PXE Process Freezes During Boot

$ grep ^pxe_config_template ironic.conf
pxe_config_template=$pybasedir/drivers/modules/ipxe_config.template

기본 템플릿은 pxe_config.template 이므로 실수로 i 를 생략하고 실수로 ipxe_config.template 을 대신 입력할 수 있습니다.

7.2. 베어 메탈 노드가 부팅된 후 로그인 오류

구성 중에 설정한 루트 암호를 사용할 때 노드에 로그인하지 않으면 배포된 이미지로 부팅되지 않음을 나타냅니다. deploy-kernel/deploy-ramdisk 이미지에 로그인할 수 있으며 시스템이 올바른 이미지를 로드하지 않았습니다.

이 문제를 해결하려면 Compute 또는 Bare Metal Provisioning 서비스 노드의 /httpboot/pxelinux.cfg/MAC_ADDRESS 에 있는 PXE 부팅 구성 파일이 있는지 확인하고 이 파일에 나열된 모든 IP 주소가 베어 메탈 네트워크의 IP 주소에 해당하는지 확인합니다.

참고

Bare Metal Provisioning 서비스 노드가 사용하는 유일한 네트워크는 Bare Metal 네트워크입니다. 끝점 중 하나가 네트워크에 없는 경우 끝점은 부팅 프로세스의 일부로 베어 메탈 프로비저닝 서비스 노드에 도달할 수 없습니다.

예를 들어 파일의 kernel 행은 다음과 같습니다.

kernel http://192.168.200.2:8088/5a6cdbe3-2c90-4a90-b3c6-85b449b30512/deploy_kernel selinux=0 disk=cciss/c0d0,sda,hda,vda iscsi_target_iqn=iqn.2008-10.org.openstack:5a6cdbe3-2c90-4a90-b3c6-85b449b30512 deployment_id=5a6cdbe3-2c90-4a90-b3c6-85b449b30512 deployment_key=VWDYDVVEFCQJNOSTO9R67HKUXUGP77CK ironic_api_url=http://192.168.200.2:6385 troubleshoot=0 text nofb nomodeset vga=normal boot_option=netboot ip=${ip}:${next-server}:${gateway}:${netmask} BOOTIF=${mac}  ipa-api-url=http://192.168.200.2:6385 ipa-driver-name=ipmi boot_mode=bios initrd=deploy_ramdisk coreos.configdrive=0 || goto deploy
위 예제 커널 줄의 값해당 정보

http://192.168.200.2:8088

매개변수 http_url in /etc/ironic/ironic.conf. 이 IP 주소는 Bare Metal 네트워크에 있어야 합니다.

5a6cdbe3-2c90-4a90-b3c6-85b449b30512

ironic node-list 에 있는 baremetal 노드의 UUID입니다.

deploy_kernel

이는 /httpboot/<NODE_UUID>/deploy_kernel 으로 복사되는 이미지 서비스의 배포 커널 이미지입니다.

http://192.168.200.2:6385

매개 변수 api_url /etc/ironic/ironic.conf 파일. 이 IP 주소는 Bare Metal 네트워크에 있어야 합니다.

IPMI

이 노드에 대해 베어 메탈 프로비저닝 서비스에서 사용하는 IPMI 드라이버입니다.

deploy_ramdisk

이는 /httpboot/<NODE_UUID>/deploy_ramdisk 로 복사되는 이미지 서비스의 배포 램디스크 이미지입니다.

값이 /httpboot/pxelinux.cfg/MAC_ADDRESSironic.conf 파일 간에 일치하지 않는 경우:

  1. ironic.conf 파일에서 값을 업데이트합니다.
  2. Bare Metal Provisioning 서비스 다시 시작
  3. 베어 메탈 인스턴스 재배포

7.3. 배포된 노드에서 부팅-to-disk 오류

특정 하드웨어를 사용하면 배포의 일부로 연속 부팅 작업 중에 노드를 디스크에서 부팅할 수 없는 노드에 문제가 발생할 수 있습니다. 일반적으로 BMC는 director가 노드에서 요청하는 영구 부팅 설정을 준수하지 않기 때문에 발생합니다. 대신 노드가 PXE 대상에서 부팅됩니다.

이 경우 노드 BIOS에서 부팅 순서를 업데이트해야 합니다. HDD를 첫 번째 부팅 장치로 설정한 다음 PXE를 최신 옵션으로 설정하여 노드가 기본적으로 디스크에서 부팅되지만 필요에 따라 인트로스펙션 또는 배포 중에 네트워크에서 부팅할 수 있습니다.

참고

이 오류는 대부분 legacyBIOS 펌웨어를 사용하는 노드에 적용됩니다.

7.4. Bare Metal Provisioning 서비스가 올바른 호스트 이름을 수신하지 않음

Bare Metal Provisioning 서비스에서 올바른 호스트 이름을 수신하지 못하면 cloud-init 가 실패합니다. 이 문제를 해결하려면 베어 메탈 서브넷을 OpenStack Networking 서비스의 라우터에 연결합니다. 이 구성은 요청을 메타 데이터 에이전트에 올바르게 라우팅합니다.

7.5. 베어 메탈 프로비저닝 서비스 명령을 실행할 때 잘못된 OpenStack ID 서비스 인증 정보

ID 서비스에 인증할 수 없는 경우 ironic.conf 파일의 identity_uri 매개변수를 확인하고 keystone AdminURL에서 /v2.0 을 제거해야 합니다. 예를 들어 identity_urihttp://IP:PORT 로 설정합니다.

7.6. 하드웨어 시행

잘못된 노드 등록 세부 정보로 인해 등록된 하드웨어 문제가 발생할 수 있습니다. 속성 이름과 값을 올바르게 입력해야 합니다. 속성 이름을 잘못 입력하면 시스템에서 해당 속성을 노드 세부 정보에 추가하지만 무시합니다.

openstack baremetal node set 명령을 사용하여 노드 세부 정보를 업데이트합니다. 예를 들어 노드가 2GB에 사용하도록 등록된 메모리 양을 업데이트합니다.

$ openstack baremetal node set --property memory_mb=2048 NODE_UUID

7.7. iDRAC 문제 해결

Redfish 관리 인터페이스가 부팅 장치를 설정하지 못했습니다.

특정 iDRAC 펌웨어 버전과 함께 idrac-redfish 관리 인터페이스를 사용하고 UEFI 부팅을 사용하여 베어 메탈 서버에서 부팅 장치를 설정하려고 하면 iDRAC에서 다음 오류를 반환합니다.

Unable to Process the request because the value entered for the
parameter Continuous is not supported by the implementation.

이 문제가 발생하면 노드의 driver-info 에서 force_persistent_boot_device 매개변수를 Never 로 설정합니다.

openstack baremetal node set --driver-info force_persistent_boot_device=Never ${node_uuid}
전원 끄기 시 시간 초과

일부 서버는 전원을 끄고 시간 초과할 때 너무 느릴 수 있습니다. 기본 재시도 수는 6 초로, 30초의 시간 초과가 됩니다. 시간 초과 기간을 90초로 늘리려면 undercloud hieradata 재정의 파일에서 ironic::agent::rpc_response_timeout 값을 18 로 설정하고 openstack undercloud install 명령을 다시 실행합니다.

ironic::agent::rpc_response_timeout: 18
벤더 통과 타임아웃

vendor passthrough 명령을 실행하는 데 iDRAC를 사용할 수 없는 경우 이러한 명령은 너무 길고 시간이 오래 걸립니다.

openstack baremetal node passthru call --http-method GET \
aed58dca-1b25-409a-a32f-3a817d59e1e0 list_unfinished_jobs
Timed out waiting for a reply to message ID 547ce7995342418c99ef1ea4a0054572 (HTTP 500)

메시징의 시간 초과 기간을 늘리려면 undercloud hieradata 재정의 파일에서 ironic::default::rpc_response_timeout 매개변수 값을 늘리고 openstack undercloud install 명령을 다시 실행합니다.

ironic::default::rpc_response_timeout: 600

7.8. 서버 콘솔 구성

오버클라우드 노드의 콘솔 출력이 항상 서버 콘솔에 전송되지는 않습니다. 서버 콘솔에서 이 출력을 보려면 하드웨어에 올바른 콘솔을 사용하도록 오버클라우드를 구성해야 합니다. 다음 방법 중 하나를 사용하여 이 구성을 수행합니다.

  • 각 오버클라우드 역할에 대한 KernelArgs heat 매개변수를 수정합니다.
  • director에서 오버클라우드 노드를 프로비저닝하는 데 사용하는 overcloud-hardened-uefi-full.qcow2 이미지를 사용자 지정합니다.

사전 요구 사항

  • 성공적인 언더클라우드 설치 자세한 내용은 Director Installation and Usage Guide를 참조하십시오.
  • 배포할 준비가 된 오버클라우드 노드

배포 중 heat로 KernelArgs 수정

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

    $ source stackrc
  3. 다음 콘텐츠를 사용하여 환경 파일 overcloud-console.yaml 을 생성합니다.

    parameter_defaults:
      <role>Parameters:
        KernelArgs: "console=<console-name>"

    <role> 을 구성할 오버클라우드 역할의 이름으로 바꾸고 <console-name> 을 사용하려는 콘솔의 ID로 교체합니다. 예를 들어 다음 스니펫을 사용하여 기본 역할의 모든 오버클라우드 노드를 tty0 을 사용하도록 구성합니다.

    parameter_defaults:
      ControllerParameters:
        KernelArgs: "console=tty0"
      ComputeParameters:
        KernelArgs: "console=tty0"
      BlockStorageParameters:
        KernelArgs: "console=tty0"
      ObjectStorageParameters:
        KernelArgs: "console=tty0"
      CephStorageParameters:
        KernelArgs: "console=tty0"
  4. -e 옵션을 사용하여 배포 명령에 overcloud-console-tty0.yaml 파일을 포함합니다.

overcloud-hardened-uefi-full.qcow2 이미지 수정

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

    $ source stackrc
  3. overcloud-hardened-uefi-full.qcow2 이미지에서 커널 인수를 수정하여 하드웨어에 올바른 콘솔을 설정합니다. 예를 들어 콘솔을 tty1 로 설정합니다.

    $ virt-customize --selinux-relabel -a overcloud-hardened-uefi-full.qcow2 --run-command 'grubby --update-kernel=ALL --args="console=tty1"'
  4. 이미지를 director로 가져옵니다.

    $ openstack overcloud image upload --image-path overcloud-hardened-uefi-full.qcow2
  5. 오버클라우드를 배포합니다.

검증

  1. 언더클라우드에서 오버클라우드 노드에 로그인합니다.

    $ ssh tripleo-admin@<IP-address>

    <IP-address> 를 오버클라우드 노드의 IP 주소로 바꿉니다.

  2. /proc/cmdline 파일의 내용을 검사하고 console= 매개변수가 사용할 콘솔 값으로 설정되어 있는지 확인합니다.

    [tripleo-admin@controller-0 ~]$ cat /proc/cmdline
    BOOT_IMAGE=(hd0,msdos2)/boot/vmlinuz-4.18.0-193.29.1.el8_2.x86_64 root=UUID=0ec3dea5-f293-4729-b676-5d38a611ce81 ro console=tty0 console=ttyS0,115200n81 no_timer_check crashkernel=auto rhgb quiet

8장. 베어 메탈 드라이버

베어 메탈 프로비저닝 서비스에서 활성화된 드라이버 중 하나를 사용하도록 베어 메탈 노드를 구성할 수 있습니다. 각 드라이버에는 프로비저닝 방법과 전원 관리 유형이 포함되어 있습니다. 일부 드라이버에는 추가 구성이 필요합니다. 이 섹션에 설명된 각 드라이버는 프로비저닝에 PXE를 사용합니다. 드라이버는 전원 관리 유형으로 나열됩니다.

ironic.yaml 파일에서 IronicEnabledHardwareTypes 매개변수를 구성하여 드라이버를 추가할 수 있습니다. 기본적으로 ipmiredfish 는 활성화되어 있습니다.

지원되는 플러그인 및 드라이버의 전체 목록은 Red Hat OpenStack Platform의 Component, Plug-In 및 Driver 지원을 참조하십시오.

8.1. IPMI(Intelligent Platform Management Interface)

IPMI는 전원 관리 및 서버 모니터링을 포함하여 대역 외 원격 관리 기능을 제공하는 인터페이스입니다. 이 전원 관리 유형을 사용하려면 모든 베어 메탈 프로비저닝 서비스 노드에 공유 베어 메탈 네트워크에 연결된 IPMI가 필요합니다. ipmi 드라이버를 활성화하고 노드의 driver_info 에 다음 정보를 설정합니다.

  • ipmi_address - IPMI NIC의 IP 주소입니다.
  • ipmi_username - IPMI 사용자 이름입니다.
  • ipmi_password - IPMI 암호입니다.

8.2. Redfish

DMTF(Distributed Management Task Force)에서 개발한 IT 인프라를 위한 표준 RESTful API

  • redfish_username - Redfish 사용자 이름.
  • redfish_password - Redfish 암호입니다.
  • redfish_address - Redfish 컨트롤러의 IP 주소입니다.
  • redfish_system_id - 시스템 리소스에 대한 표준 경로입니다. 이 경로는 root 서비스, 버전 및 시스템의 경로/고유 ID를 포함해야 합니다. 예: /redfish/v1/Systems/CX34R87
  • redfish_verify_ca - 부울 값, CA_BUNDLE 파일의 경로 또는 신뢰할 수 있는 CA 인증서가 있는 디렉터리입니다. 이 값을 True 로 설정하면 드라이버에서 호스트 인증서를 확인합니다. 이 값을 False 로 설정하면 드라이버는 SSL 인증서 확인을 무시합니다. 이 값을 경로로 설정하면 드라이버는 지정된 인증서 또는 디렉터리에 있는 인증서 중 하나를 사용합니다. 기본값은 True 입니다.

8.3. DRAC(Dell Remote Access Controller)

DRAC는 전원 관리 및 서버 모니터링을 포함하여 대역 외 원격 관리 기능을 제공하는 인터페이스입니다. 이 전원 관리 유형을 사용하려면 모든 베어 메탈 프로비저닝 서비스 노드에 공유 베어 메탈 네트워크에 연결된 DRAC가 필요합니다. idrac 드라이버를 활성화하고 노드의 driver_info 에 다음 정보를 설정합니다.

  • drac_address - DRAC NIC의 IP 주소입니다.
  • drac_username - DRAC 사용자 이름입니다.
  • drac_password - DRAC 암호입니다.

8.4. 통합된 원격 관리 컨트롤러 (iRMC)

Fujitsu의 iRMC는 전원 관리 및 서버 모니터링을 포함하여 대역 외 원격 관리 기능을 제공하는 인터페이스입니다. 베어 메탈 프로비저닝 서비스 노드에서 이 전원 관리 유형을 사용하려면 노드에 공유 베어 메탈 네트워크에 연결된 iRMC 인터페이스가 필요합니다. irmc 드라이버를 활성화하고 노드의 driver_info 에 다음 정보를 설정합니다.

  • irmc_address - iRMC 인터페이스 NIC의 IP 주소입니다.
  • irmc_username - iRMC 사용자 이름입니다.
  • irmc_password - iRMC 암호입니다.

IPMI를 사용하여 센서 데이터를 가져오도록 부팅 모드 또는 SCCI를 설정하려면 다음 추가 단계를 완료해야 합니다.

  1. ironic.conf 파일에서 센서 방법을 활성화합니다.

    $ openstack-config --set /etc/ironic/ironic.conf \
       irmc sensor_method METHOD

    METHODscci 또는 ipmitool 으로 바꿉니다.

  2. SCCI를 활성화한 경우 python-scciclient 패키지를 설치합니다.

    # dnf install python-scciclient
  3. Bare Metal conductor 서비스를 다시 시작합니다.

    # systemctl restart openstack-ironic-conductor.service
참고

iRMC 드라이버를 사용하려면 iRMC S4 이상이 필요합니다.

8.5. iLO(Integrated Lights-Out)

Hewlett-Packard의 iLO는 전원 관리 및 서버 모니터링을 포함하여 대역 외 원격 관리 기능을 제공하는 인터페이스입니다. 이 전원 관리 유형을 사용하려면 모든 Bare Metal 노드에 공유 Bare Metal 네트워크에 연결된 iLO 인터페이스가 필요합니다. ilo 드라이버를 활성화하고 노드의 driver_info 에 다음 정보를 설정합니다.

  • ilo_address - iLO 인터페이스 NIC의 IP 주소입니다.
  • ilo_username - iLO 사용자 이름입니다.
  • ilo_password - iLO 암호입니다.

python-proliantutils 패키지도 설치하고 Bare Metal conductor 서비스를 다시 시작해야 합니다.

# dnf install python-proliantutils
# systemctl restart openstack-ironic-conductor.service

8.6. 차세대 전원 관리 드라이버로 변환

Red Hat OpenStack Platform은 이전 드라이버를 대체하는 하드웨어 유형 이라고도 하는 차세대 드라이버를 사용합니다.

다음 표에서는 이전 드라이버와 동일한 차세대 하드웨어 유형 간의 유사한 비교를 보여줍니다.

이전 드라이버새로운 하드웨어 유형

pxe_ipmitool

ipmi

pxe_drac

idrac

pxe_ilo

ilo

pxe_irmc

irmc

fake_pxe

fake-hardware

RHOSP(Red Hat OpenStack Platform) 15에서는 이러한 이전 드라이버가 제거되어 더 이상 액세스할 수 없습니다. RHOSP 15로 업그레이드하기 전에 새 하드웨어 유형으로 변경해야 합니다.

절차

  1. 활성화된 하드웨어 유형의 현재 목록을 확인합니다.

    $ source ~/overcloud
    $ openstack baremetal driver list --type dynamic
  2. 활성화되지 않은 하드웨어 유형 드라이버를 사용하는 경우 환경 파일에서 IronicEnabledHardwareTypes 매개변수를 사용하여 드라이버를 활성화합니다.

    parameter_defaults:
      IronicEnabledHardwareTypes: ipmi,redfish,idrac
  3. 파일을 저장하고 오버클라우드 배포 명령을 실행합니다.

    $ openstack overcloud deploy -e [ENVIRONMENT_FILE] -r [ROLES_DATA] -n [NETWORK_DATA]

    오버클라우드와 관련된 모든 환경 및 데이터 파일을 포함해야 합니다.

  4. 다음 명령을 실행합니다. 전원 관리 유형에 대해 OLDDRIVERNEWDRIVER 변수를 대체합니다.

    $ source ~/overcloud
    $ OLDDRIVER="pxe_ipmitool"
    $ NEWDRIVER="ipmi"
    $ for NODE in $(openstack baremetal node list --driver $OLDDRIVER -c UUID -f value) ; do openstack baremetal node set $NODE --driver $NEWDRIVER; done