8.5. 클러스터 확장

설치 관리자 프로비저닝 OpenShift Container Platform 클러스터를 배포한 후 다음 절차를 사용하여 작업자 노드 수를 확장할 수 있습니다. 가능한 각 작업자 노드가 사전 요구 사항을 충족하는지 확인합니다.

참고

RedFish Virtual Media를 사용하여 클러스터를 구성하려면 최소 펌웨어 요구 사항을 충족해야 합니다. RedFish Virtual Media를 사용하여 클러스터를 설정할 때 추가 세부 사항은 사전 요구 사항 섹션에서 가상 미디어를 사용하여 설치를 위한 펌웨어 요구 사항을 참조하십시오.

8.5.1. 베어 메탈 노드 준비

클러스터를 확장하려면 DHCP 서버가 필요합니다. 각 노드에는 DHCP 예약이 있어야 합니다.

고정 IP 주소가 되도록 IP 주소 예약

일부 관리자는 각 노드의 IP 주소가 DHCP 서버에서 일정하게 유지되도록 고정 IP 주소를 사용하는 것을 선호합니다. OpenShift Container Platform 클러스터에서 고정 IP 주소를 사용하려면 무한 리스로 DHCP 서버의 IP 주소를 예약합니다. 설치 프로그램이 노드를 성공적으로 프로비저닝하면 디스패치 스크립트에서 노드의 네트워크 구성을 확인합니다. 디스패치 스크립트에서 네트워크 구성에 DHCP 무한 리스가 포함되어 있음을 발견하면 DHCP 무한 리스에서 IP 주소를 사용하여 고정 IP 연결로 연결을 다시 생성합니다. DHCP 무한 리스가 없는 NIC는 수정되지 않은 상태로 유지됩니다.

무한 리스로 IP 주소를 설정하는 것은 Machine Config Operator를 사용하여 배포된 네트워크 구성과 호환되지 않습니다.

베어 메탈 노드를 준비하려면 프로비저너 노드에서 다음 절차를 실행해야 합니다.

프로세스

  1. 필요한 경우 oc 바이너리를 가져옵니다. 이는 이미 프로비저너 노드에 있어야 합니다.

    $ curl -s https://mirror.openshift.com/pub/openshift-v4/clients/ocp/$VERSION/openshift-client-linux-$VERSION.tar.gz | tar zxvf - oc
    $ sudo cp oc /usr/local/bin
  2. 베이스 보드 관리 컨트롤러를 사용하여 베어 메탈 노드의 전원을 끄고 해제되었는지 확인합니다.
  3. 베어 메탈 노드의 베이스 보드 관리 컨트롤러의 사용자 이름 및 암호를 검색합니다. 그런 다음 사용자 이름과 암호에서 base64 문자열을 생성합니다.

    $ echo -ne "root" | base64
    $ echo -ne "password" | base64
  4. 베어 메탈 노드에 대한 구성 파일을 생성합니다.

    $ vim bmh.yaml
    ---
    apiVersion: v1
    kind: Secret
    metadata:
      name: openshift-worker-<num>-bmc-secret
    type: Opaque
    data:
      username: <base64-of-uid>
      password: <base64-of-pwd>
    ---
    apiVersion: metal3.io/v1alpha1
    kind: BareMetalHost
    metadata:
      name: openshift-worker-<num>
    spec:
      online: true
      bootMACAddress: <NIC1-mac-address>
      bmc:
        address: <protocol>://<bmc-ip>
        credentialsName: openshift-worker-<num>-bmc-secret

    두 개의 <num> 필드와 credentialsName 필드에서 베어 메탈 노드의 작업자 번호 <num>을 바꿉니다 . <base64-of-uid>를 사용자 이름의 base64 문자열로 바꿉니다. <base64-of-pwd>를 암호의 base64 문자열로 바꿉니다. <NIC1-mac-address>를 베어 메탈 노드의 첫 번째 NIC의 MAC 주소로 바꿉니다.

    추가 BMC 구성 옵션은 BMC 주소 지정 섹션을 참조하십시오. <protocol>을 IPMI, RedFish 또는 기타와 같은 BMC 프로토콜로 바꿉니다. <bmc-ip>를 베어 메탈 노드의 베이스 보드 관리 컨트롤러의 IP 주소로 바꿉니다.

    참고

    기존 베어 메탈 노드의 MAC 주소가 프로비저닝하려는 베어 메탈 호스트의 MAC 주소와 일치하면 Ironic 설치가 실패합니다. 호스트 등록, 검사, 정리 또는 기타 Ironic 단계가 실패하면 Bare Metal Operator에서 설치를 지속적으로 다시 시도합니다. 자세한 내용은 호스트 중복 MAC 주소 진단을 참조하십시오.

  5. 베어 메탈 노드를 생성합니다.

    $ oc -n openshift-machine-api create -f bmh.yaml
    secret/openshift-worker-<num>-bmc-secret created
    baremetalhost.metal3.io/openshift-worker-<num> created

    여기서 <num>은 작업자 번호입니다.

  6. 베어 메탈 노드의 전원을 켜고 검사합니다.

    $ oc -n openshift-machine-api get bmh openshift-worker-<num>

    여기서 <num>은 작업자 노드 번호입니다.

    NAME                 STATUS   PROVISIONING STATUS   CONSUMER   BMC                 HARDWARE PROFILE   ONLINE   ERROR
    openshift-worker-<num>   OK       ready                            ipmi://<out-of-band-ip>   unknown            true

8.5.2. 베어 메탈 컨트롤 플레인 노드 교체

설치 관리자 프로비저닝 OpenShift Container Platform 컨트롤 플레인 노드를 교체하려면 다음 절차를 사용하십시오.

중요

기존 컨트롤 플레인 호스트에서 BareMetalHost 오브젝트 정의를 재사용하는 경우 external Provisioned 필드를 true 로 설정하지 마십시오.

기존 컨트롤 플레인 BareMetalHost 오브젝트에 OpenShift Container Platform 설치 프로그램에서 프로비저닝한 경우 external Provisioned 플래그가 true 로 설정될 수 있습니다.

사전 요구 사항

  • cluster-admin 역할의 사용자로 클러스터에 액세스할 수 있어야 합니다.
  • etcd 백업이 수행되었습니다.

    중요

    문제가 발생하면 클러스터를 복원할 수 있도록 이 절차를 수행하기 전에 etcd 백업을 수행하십시오. etcd 백업에 대한 자세한 내용은 추가 리소스 섹션을 참조하십시오.

프로세스

  1. Bare Metal Operator를 사용할 수 있는지 확인합니다.

    $ oc get clusteroperator baremetal

    출력 예

    NAME        VERSION   AVAILABLE   PROGRESSING   DEGRADED   SINCE   MESSAGE
    baremetal   4.8.0     True        False         False      3d15h

  2. 이전 BareMetalHostMachine 개체를 제거합니다.

    $ oc delete bmh -n openshift-machine-api <host_name>
    $ oc delete machine -n openshift-machine-api <machine_name>

    & lt;host_name >을 호스트 이름으로 바꾸고 < machine_name >을 시스템 이름으로 바꿉니다. 머신 이름이 CONSUMER 필드에 표시됩니다.

    BareMetalHostMachine 오브젝트를 제거한 후 머신 컨트롤러에서 Node 오브젝트를 자동으로 삭제합니다.

  3. BMC 인증 정보를 저장할 새 BareMetalHost 오브젝트와 시크릿을 생성합니다.

    $ cat <<EOF | oc apply -f -
    apiVersion: v1
    kind: Secret
    metadata:
      name: control-plane-<num>-bmc-secret 1
      namespace: openshift-machine-api
    data:
      username: <base64_of_uid> 2
      password: <base64_of_pwd> 3
    type: Opaque
    ---
    apiVersion: metal3.io/v1alpha1
    kind: BareMetalHost
    metadata:
      name: control-plane-<num> 4
      namespace: openshift-machine-api
    spec:
      automatedCleaningMode: disabled
      bmc:
        address: <protocol>://<bmc_ip> 5
        credentialsName: control-plane-<num>-bmc-secret 6
      bootMACAddress: <NIC1_mac_address> 7
      bootMode: UEFI
      externallyProvisioned: false
      hardwareProfile: unknown
      online: true
    EOF
    1 4 6
    name 필드와 credentialsName 필드에서 베어 메탈 노드의 컨트롤 플레인 번호 < num >을 바꿉니다.
    2
    & lt;base64_of_uid& gt;를 사용자 이름의 base64 문자열로 바꿉니다.
    3
    & lt;base64_of_pwd >를 암호의 base64 문자열로 바꿉니다.
    5
    & lt;protocol >을 redfish , redfish -virtualmedia,idrac-virtualmedia 등과 같은 BMC 프로토콜로 바꿉니다. & lt;bmc_ip >를 베어 메탈 노드의 베이스 보드 관리 컨트롤러의 IP 주소로 바꿉니다. 추가 BMC 구성 옵션은 추가 리소스 섹션의 "BMC 주소 지정"을 참조하십시오.
    7
    & lt;NIC1_mac_address >를 베어 메탈 노드의 첫 번째 NIC의 MAC 주소로 바꿉니다.

    검사가 완료되면 BareMetalHost 오브젝트가 생성되고 프로비저닝할 수 있습니다.

  4. 사용 가능한 BareMetalHost 오브젝트를 확인합니다.

    $ oc get bmh -n openshift-machine-api

    출력 예

    NAME                          STATE                    CONSUMER                   ONLINE   ERROR   AGE
    control-plane-1.example.com   available                control-plane-1            true             1h10m
    control-plane-2.example.com   externally provisioned   control-plane-2            true             4h53m
    control-plane-3.example.com   externally provisioned   control-plane-3            true             4h53m
    compute-1.example.com         provisioned              compute-1-ktmmx            true             4h53m
    compute-1.example.com         provisioned              compute-2-l2zmb            true             4h53m

    컨트롤 플레인 노드에 대한 MachineSet 오브젝트가 없으므로 대신 Machine 오브젝트를 생성해야 합니다. 다른 컨트롤 플레인 머신 오브젝트에서 providerSpec 을 복사할 수 있습니다.

  5. Machine 오브젝트를 생성합니다.

    $ cat <<EOF | oc apply -f -
    apiVersion: machine.openshift.io/v1beta1
    kind: Machine
    metadata:
      annotations:
        metal3.io/BareMetalHost: openshift-machine-api/control-plane-<num> 1
      labels:
        machine.openshift.io/cluster-api-cluster: control-plane-<num> 2
        machine.openshift.io/cluster-api-machine-role: master
        machine.openshift.io/cluster-api-machine-type: master
      name: control-plane-<num> 3
      namespace: openshift-machine-api
    spec:
      metadata: {}
      providerSpec:
        value:
          apiVersion: baremetal.cluster.k8s.io/v1alpha1
          customDeploy:
            method: install_coreos
          hostSelector: {}
          image:
            checksum: ""
            url: ""
          kind: BareMetalMachineProviderSpec
          metadata:
            creationTimestamp: null
          userData:
            name: master-user-data-managed
    EOF
    1 2 3
    이름 ,라벨주석 필드에서 베어 메탈 노드의 컨트롤 플레인 번호 <num >을 바꿉니다.
  6. BareMetalHost 오브젝트를 보려면 다음 명령을 실행합니다.

    $ oc get bmh -A

    출력 예

    NAME                          STATE                    CONSUMER                   ONLINE   ERROR   AGE
    control-plane-1.example.com   provisioned              control-plane-1            true             2h53m
    control-plane-2.example.com   externally provisioned   control-plane-2            true             5h53m
    control-plane-3.example.com   externally provisioned   control-plane-3            true             5h53m
    compute-1.example.com         provisioned              compute-1-ktmmx            true             5h53m
    compute-2.example.com         provisioned              compute-2-l2zmb            true             5h53m

  7. RHCOS 설치 후 BareMetalHost 가 클러스터에 추가되었는지 확인합니다.

    $ oc get nodes

    출력 예

    NAME                           STATUS      ROLES     AGE   VERSION
    control-plane-1.example.com    available   master    4m2s  v1.18.2
    control-plane-2.example.com    available   master    141m  v1.18.2
    control-plane-3.example.com    available   master    141m  v1.18.2
    compute-1.example.com          available   worker    87m   v1.18.2
    compute-2.example.com          available   worker    87m   v1.18.2

    참고

    새 컨트롤 플레인 노드를 교체한 후 새 노드에서 실행중인 etcd pod는 크래시 루프 상태에 있습니다. 자세한 내용은 추가 리소스 섹션의 "않던 etcd 멤버 교체"를 참조하십시오.

8.5.3. 클러스터에서 새 호스트를 프로비저닝할 때 중복된 MAC 주소 진단

클러스터에 있는 기존 베어 메탈 노드의 MAC 주소가 클러스터에 추가하려는 베어 메탈 호스트의 MAC 주소와 일치하는 경우 베어 메탈 Operator는 기존 노드와 호스트를 연결합니다. 호스트 등록, 검사, 정리 또는 기타 Ironic 단계가 실패하면 Bare Metal Operator에서 설치를 지속적으로 다시 시도합니다. 실패한 베어 메탈 호스트에 대한 등록 오류가 표시됩니다.

openshift-machine-api 네임스페이스에서 실행 중인 베어 메탈 호스트를 검사하여 중복된 MAC 주소를 진단할 수 있습니다.

사전 요구 사항

  • OpenShift Container Platform 클러스터를 베어 메탈에 설치합니다.
  • OpenShift Container Platform CLI oc를 설치합니다.
  • cluster-admin 권한이 있는 사용자로 로그인합니다.

절차

프로비저닝에 실패하는 베어 메탈 호스트에 기존 노드와 동일한 MAC 주소가 있는지 확인하려면 다음을 수행하십시오.

  1. openshift-machine-api 네임스페이스에서 베어 메탈 호스트를 실행합니다.

    $ oc get bmh -n openshift-machine-api

    출력 예

    NAME                 STATUS   PROVISIONING STATUS      CONSUMER
    openshift-master-0   OK       externally provisioned   openshift-zpwpq-master-0
    openshift-master-1   OK       externally provisioned   openshift-zpwpq-master-1
    openshift-master-2   OK       externally provisioned   openshift-zpwpq-master-2
    openshift-worker-0   OK       provisioned              openshift-zpwpq-worker-0-lv84n
    openshift-worker-1   OK       provisioned              openshift-zpwpq-worker-0-zd8lm
    openshift-worker-2   error    registering

  2. 장애가 발생한 호스트의 상태에 대한 자세한 정보를 보려면 다음 명령을 실행하여 <bare_metal_host_name>을 호스트 이름으로 교체합니다.

    $ oc get -n openshift-machine-api bmh <bare_metal_host_name> -o yaml

    출력 예

    ...
    status:
      errorCount: 12
      errorMessage: MAC address b4:96:91:1d:7c:20 conflicts with existing node openshift-worker-1
      errorType: registration error
    ...

8.5.4. 베어 메탈 노드 프로비저닝

베어 메탈 노드를 프로비저닝하려면 프로비저너 노드에서 다음 절차를 실행해야 합니다.

절차

  1. 베어 메탈 노드를 프로비저닝하기 전에 PROVISIONING STATUSready인지 확인합니다.

    $  oc -n openshift-machine-api get bmh openshift-worker-<num>

    여기서 <num>은 작업자 노드 번호입니다.

    NAME                 STATUS   PROVISIONING STATUS   CONSUMER   BMC                 HARDWARE PROFILE   ONLINE   ERROR
    openshift-worker-<num>   OK       ready                            ipmi://<out-of-band-ip>   unknown            true
  2. 작업자 노드 수를 계산합니다.

    $ oc get nodes
    NAME                                                STATUS   ROLES           AGE     VERSION
    provisioner.openshift.example.com            Ready    master          30h     v1.16.2
    openshift-master-1.openshift.example.com            Ready    master          30h     v1.16.2
    openshift-master-2.openshift.example.com            Ready    master          30h     v1.16.2
    openshift-master-3.openshift.example.com            Ready    master          30h     v1.16.2
    openshift-worker-0.openshift.example.com            Ready    master          30h     v1.16.2
    openshift-worker-1.openshift.example.com            Ready    master          30h     v1.16.2
  3. 머신 세트를 가져옵니다.

    $ oc get machinesets -n openshift-machine-api
    NAME                                DESIRED   CURRENT   READY   AVAILABLE   AGE
    ...
    openshift-worker-0.example.com      1         1         1       1           55m
    openshift-worker-1.example.com      1         1         1       1           55m
  4. 작업자 노드 수를 하나씩 늘립니다.

    $ oc scale --replicas=<num> machineset <machineset> -n openshift-machine-api

    <num>을 새 작업자 노드 수로 바꿉니다. <machineset>를 이전 단계의 머신 세트 이름으로 바꿉니다.

  5. 베어 메탈 노드 상태를 확인합니다.

    $ oc -n openshift-machine-api get bmh openshift-worker-<num>

    여기서 <num>은 작업자 노드 번호입니다. 상태가 ready 에서 provisioning으로 변경됩니다.

    NAME                 STATUS   PROVISIONING STATUS   CONSUMER                  BMC                 HARDWARE PROFILE   ONLINE   ERROR
    openshift-worker-<num>   OK       provisioning          openshift-worker-<num>-65tjz   ipmi://<out-of-band-ip>   unknown            true

    provisioning 상태는 OpenShift Container Platform 클러스터가 노드를 프로비저닝할 때까지 유지됩니다. 이 작업을 수행하는 데 30분 이상 걸릴 수 있습니다. 노드가 프로비저닝되면 상태가 provisioned로 변경됩니다.

    NAME                 STATUS   PROVISIONING STATUS   CONSUMER                  BMC                 HARDWARE PROFILE   ONLINE   ERROR
    openshift-worker-<num>   OK       provisioned           openshift-worker-<num>-65tjz   ipmi://<out-of-band-ip>   unknown            true
  6. 프로비저닝이 완료되면 베어 메탈 노드가 준비되었는지 확인합니다.

    $ oc get nodes
    NAME                                          STATUS   ROLES   AGE     VERSION
    provisioner.openshift.example.com             Ready    master  30h     v1.16.2
    openshift-master-1.openshift.example.com      Ready    master  30h     v1.16.2
    openshift-master-2.openshift.example.com      Ready    master  30h     v1.16.2
    openshift-master-3.openshift.example.com      Ready    master  30h     v1.16.2
    openshift-worker-0.openshift.example.com      Ready    master  30h     v1.16.2
    openshift-worker-1.openshift.example.com      Ready    master  30h     v1.16.2
    openshift-worker-<num>.openshift.example.com  Ready    worker  3m27s   v1.16.2

    kubelet도 확인할 수 있습니다.

    $ ssh openshift-worker-<num>
    [kni@openshift-worker-<num>]$ journalctl -fu kubelet