6.6. BMC 인증 정보 없이 실패한 베어 메탈 컨트롤 플레인 노드 교체


베어 메탈 클러스터의 컨트롤 플레인 노드가 실패하고 복구할 수 없지만 베이스 보드 관리 컨트롤러(BMC) 인증 정보를 제공하지 않고 클러스터를 설치할 수 없는 경우 실패한 노드를 새 노드로 교체하기 위해 추가 단계를 수행해야 합니다.

6.6.1. 사전 요구 사항

  • 비정상 베어 메탈 etcd 멤버를 확인했습니다.
  • 시스템이 실행되고 있지 않거나 노드가 준비되지 않았음을 확인했습니다.
  • cluster-admin 역할의 사용자로 클러스터에 액세스할 수 있어야 합니다.
  • 문제가 발생할 경우 etcd 백업을 수행했습니다.
  • coreos-installer CLI 를 다운로드하여 설치했습니다.
  • 클러스터에 컨트롤 플레인 머신 세트가 없습니다. 다음 명령을 실행하여 머신 세트를 확인할 수 있습니다.

    $ oc get machinesets,controlplanemachinesets -n openshift-machine-api
    Copy to Clipboard Toggle word wrap
    중요

    작업자에 대해 하나 이상의 머신 세트 만 있어야 합니다. 컨트롤 플레인에 controlplanemachinesets 가 있는 경우 이 절차를 사용하지 마십시오.

6.6.2. 비정상적인 etcd 멤버 제거

비정상 etcd 멤버를 먼저 제거하여 실패한 컨트롤 플레인 노드 제거를 시작합니다.

프로세스

  1. 다음 명령을 실행하여 etcd pod를 나열하고 영향을 받는 노드에 없는 pod를 기록하십시오.

    $ oc -n openshift-etcd get pods -l k8s-app=etcd -o wide
    Copy to Clipboard Toggle word wrap

    출력 예

    etcd-openshift-control-plane-0   5/5   Running   11   3h56m   192.168.10.9    openshift-control-plane-0  <none>           <none>
    etcd-openshift-control-plane-1   5/5   Running   0    3h54m   192.168.10.10   openshift-control-plane-1   <none>           <none>
    etcd-openshift-control-plane-2   5/5   Running   0    3h58m   192.168.10.11   openshift-control-plane-2   <none>           <none>
    Copy to Clipboard Toggle word wrap

  2. 다음 명령을 실행하여 실행중인 etcd 컨테이너에 연결합니다.

    $ oc rsh -n openshift-etcd <etcd_pod>
    Copy to Clipboard Toggle word wrap

    & lt;etcd_pod >를 정상 노드 중 하나와 연결된 etcd pod의 이름으로 바꿉니다.

    명령 예

    $ oc rsh -n openshift-etcd etcd-openshift-control-plane-0
    Copy to Clipboard Toggle word wrap

  3. 다음 명령을 실행하여 etcd 멤버 목록을 확인합니다. 이러한 값은 나중에 필요하므로 비정상 etcd 멤버의 ID와 이름을 기록해 두십시오.

    sh-4.2# etcdctl member list -w table
    Copy to Clipboard Toggle word wrap

    출력 예

    +------------------+---------+------------------------------+---------------------------+---------------------------+
    |        ID        | STATUS  |             NAME             |        PEER ADDRS         |       CLIENT ADDRS        |
    +------------------+---------+------------------------------+---------------------------+---------------------------+
    | 6fc1e7c9db35841d | started | openshift-control-plane-2    | https://10.0.131.183:2380 | https://10.0.131.183:2379 |
    | 757b6793e2408b6c | started | openshift-control-plane-1    | https://10.0.164.97:2380  | https://10.0.164.97:2379  |
    | ca8c2990a0aa29d1 | started | openshift-control-plane-0    | https://10.0.154.204:2380 | https://10.0.154.204:2379 |
    +------------------+---------+------------------------------+---------------------------+---------------------------+
    Copy to Clipboard Toggle word wrap

    중요

    etcdctl endpoint health 명령은 교체가 완료되고 새 멤버가 추가될 때까지 제거된 멤버를 나열합니다.

  4. 다음 명령을 실행하여 비정상적인 etcd 멤버를 제거하십시오.

    sh-4.2# etcdctl member remove <unhealthy_member_id>
    Copy to Clipboard Toggle word wrap

    & lt;unhealthy_member_id >를 비정상 노드의 etcd 멤버 ID로 바꿉니다.

    명령 예

    sh-4.2# etcdctl member remove 6fc1e7c9db35841d
    Copy to Clipboard Toggle word wrap

    출력 예

    Member 6fc1e7c9db35841d removed from cluster b23536c33f2cdd1b
    Copy to Clipboard Toggle word wrap

  5. 다음 명령을 실행하여 멤버 목록을 다시 확인하고 멤버가 제거되었는지 확인합니다.

    sh-4.2# etcdctl member list -w table
    Copy to Clipboard Toggle word wrap

    출력 예

    +------------------+---------+------------------------------+---------------------------+---------------------------+
    |        ID        | STATUS  |             NAME             |        PEER ADDRS         |       CLIENT ADDRS        |
    +------------------+---------+------------------------------+---------------------------+---------------------------+
    | 757b6793e2408b6c | started | openshift-control-plane-1    | https://10.0.164.97:2380  | https://10.0.164.97:2379  |
    | ca8c2990a0aa29d1 | started | openshift-control-plane-0    | https://10.0.154.204:2380 | https://10.0.154.204:2379 |
    +------------------+---------+------------------------------+---------------------------+---------------------------+
    Copy to Clipboard Toggle word wrap

    중요

    멤버를 제거한 후 나머지 etcd 인스턴스가 재부팅되는 동안 클러스터에 짧은 시간 동안 클러스터에 연결할 수 없을 수 있습니다.

  6. 다음 명령을 실행하여 rsh 세션을 etcd pod로 종료합니다.

    sh-4.2# exit
    Copy to Clipboard Toggle word wrap
  7. 다음 명령을 실행하여 etcd 쿼럼 가드를 끕니다.

    $ oc patch etcd/cluster --type=merge -p '{"spec": {"unsupportedConfigOverrides": {"useUnsupportedUnsafeNonHANonProductionUnstableEtcd": true}}}'
    Copy to Clipboard Toggle word wrap

    이 명령을 사용하면 시크릿을 성공적으로 다시 생성하고 정적 Pod를 롤아웃할 수 있습니다.

  8. 다음 명령을 실행하여 제거된 비정상적인 etcd 멤버의 시크릿을 나열합니다.

    $ oc get secrets -n openshift-etcd | grep <node_name>
    Copy to Clipboard Toggle word wrap

    & lt;node_name >을 제거한 etcd 멤버가 실패한 노드의 이름으로 바꿉니다.

    명령 예

    $ oc get secrets -n openshift-etcd | grep openshift-control-plane-2
    Copy to Clipboard Toggle word wrap

    출력 예

    etcd-peer-openshift-control-plane-2             kubernetes.io/tls   2   134m
    etcd-serving-metrics-openshift-control-plane-2  kubernetes.io/tls   2   134m
    etcd-serving-openshift-control-plane-2          kubernetes.io/tls   2   134m
    Copy to Clipboard Toggle word wrap

  9. 제거된 영향을 받는 노드와 연결된 보안을 삭제합니다.

    1. 다음 명령을 실행하여 피어 시크릿을 삭제합니다.

      $ oc delete secret -n openshift-etcd etcd-peer-<node_name>
      Copy to Clipboard Toggle word wrap

      & lt;node_name& gt;을 영향을 받는 노드의 이름으로 바꿉니다.

    2. 다음 명령을 실행하여 제공 시크릿을 삭제합니다.

      $ oc delete secret -n openshift-etcd etcd-serving-<node_name>
      Copy to Clipboard Toggle word wrap

      & lt;node_name& gt;을 영향을 받는 노드의 이름으로 바꿉니다.

    3. 다음 명령을 실행하여 메트릭 시크릿을 삭제합니다.

      $ oc delete secret -n openshift-etcd etcd-serving-metrics-<node_name> 
      1
      Copy to Clipboard Toggle word wrap

      & lt;node_name& gt;을 영향을 받는 노드의 이름으로 바꿉니다.

6.6.3. 비정상적인 etcd 멤버의 머신 삭제

비정상 etcd 멤버의 시스템을 삭제하여 실패한 컨트롤 플레인 노드 제거를 완료합니다.

프로세스

  1. 다음 명령을 실행하여 Bare Metal Operator를 사용할 수 있는지 확인합니다.

    $ oc get clusteroperator baremetal
    Copy to Clipboard Toggle word wrap

    출력 예

    NAME        VERSION   AVAILABLE   PROGRESSING   DEGRADED   SINCE   MESSAGE
    baremetal   4.20.0    True        False         False      3d15h
    Copy to Clipboard Toggle word wrap

  2. 다음 명령을 실행하여 영향을 받는 노드의 BareMetalHost 오브젝트를 나중에 사용할 수 있도록 파일에 저장합니다.

    $ oc get -n openshift-machine-api bmh <node_name> -o yaml > bmh_affected.yaml
    Copy to Clipboard Toggle word wrap

    & lt;node_name >을 영향을 받는 노드의 이름으로 교체합니다. 이 이름은 일반적으로 관련 BareMetalHost 이름과 일치합니다.

  3. 다음 명령을 실행하여 저장된 BareMetalHost 오브젝트의 YAML 파일을 보고 내용이 올바른지 확인합니다.

    $ cat bmh_affected.yaml
    Copy to Clipboard Toggle word wrap
  4. 다음 명령을 실행하여 영향을 받는 BareMetalHost 오브젝트를 제거합니다.

    $ oc delete -n openshift-machine-api bmh <node_name>
    Copy to Clipboard Toggle word wrap

    & lt;node_name& gt;을 영향을 받는 노드의 이름으로 바꿉니다.

  5. 다음 명령을 실행하여 모든 머신을 나열하고 영향을 받는 노드와 연결된 머신을 식별합니다.

    $ oc get machines -n openshift-machine-api -o wide
    Copy to Clipboard Toggle word wrap

    출력 예

    NAME                            PHASE    TYPE  REGION  ZONE  AGE    NODE                       PROVIDERID                                                                                             STATE
    examplecluster-control-plane-0  Running                      3h11m  openshift-control-plane-0  baremetalhost:///openshift-machine-api/openshift-control-plane-0/da1ebe11-3ff2-41c5-b099-0aa41222964e  externally provisioned
    examplecluster-control-plane-1  Running                      3h11m  openshift-control-plane-1  baremetalhost:///openshift-machine-api/openshift-control-plane-1/d9f9acbc-329c-475e-8d81-03b20280a3e1  externally provisioned
    examplecluster-control-plane-2  Running                      3h11m  openshift-control-plane-2  baremetalhost:///openshift-machine-api/openshift-control-plane-2/3354bdac-61d8-410f-be5b-6a395b056135  externally provisioned
    examplecluster-compute-0        Running                      165m   openshift-compute-0        baremetalhost:///openshift-machine-api/openshift-compute-0/3d685b81-7410-4bb3-80ec-13a31858241f        provisioned
    examplecluster-compute-1        Running                      165m   openshift-compute-1        baremetalhost:///openshift-machine-api/openshift-compute-1/0fdae6eb-2066-4241-91dc-e7ea72ab13b9        provisioned
    Copy to Clipboard Toggle word wrap

  6. 다음 명령을 실행하여 비정상 멤버의 시스템을 삭제합니다.

    $ oc delete machine -n openshift-machine-api <machine_name>
    Copy to Clipboard Toggle word wrap

    & lt;machine_name& gt;을 영향을 받는 노드와 연결된 머신 이름으로 바꿉니다.

    명령 예

    $ oc delete machine -n openshift-machine-api examplecluster-control-plane-2
    Copy to Clipboard Toggle word wrap

    참고

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

  7. 어떠한 이유로든 머신 삭제가 지연되거나 명령이 차단되고 지연되는 경우 머신 오브젝트 종료자 필드를 제거하여 강제로 삭제합니다.

    주의

    Ctrl+c 를 눌러 시스템 삭제를 중단하지 마십시오. 명령이 완료될 수 있도록 허용해야 합니다. 새 터미널 창을 열어 종료자 필드를 편집하고 삭제합니다.

    1. 새 터미널 창에서 다음 명령을 실행하여 머신 구성을 편집합니다.

      $ oc edit machine -n openshift-machine-api examplecluster-control-plane-2
      Copy to Clipboard Toggle word wrap
    2. Machine 사용자 정의 리소스에서 다음 필드를 삭제한 다음 업데이트된 파일을 저장합니다.

      finalizers:
      - machine.machine.openshift.io
      Copy to Clipboard Toggle word wrap

      출력 예

      machine.machine.openshift.io/examplecluster-control-plane-2 edited
      Copy to Clipboard Toggle word wrap

6.6.4. 오류가 발생한 노드가 삭제되었는지 확인

교체 컨트롤 플레인 노드를 생성하기 전에 오류가 발생한 노드가 성공적으로 삭제되었는지 확인합니다.

프로세스

  1. 다음 명령을 실행하여 머신이 삭제되었는지 확인합니다.

    $ oc get machines -n openshift-machine-api -o wide
    Copy to Clipboard Toggle word wrap

    출력 예

    NAME                              PHASE     TYPE   REGION   ZONE   AGE     NODE                                 PROVIDERID                                                                                       STATE
    examplecluster-control-plane-0    Running                          3h11m   openshift-control-plane-0   baremetalhost:///openshift-machine-api/openshift-control-plane-0/da1ebe11-3ff2-41c5-b099-0aa41222964e   externally provisioned
    examplecluster-control-plane-1    Running                          3h11m   openshift-control-plane-1   baremetalhost:///openshift-machine-api/openshift-control-plane-1/d9f9acbc-329c-475e-8d81-03b20280a3e1   externally provisioned
    examplecluster-compute-0          Running                          165m    openshift-compute-0         baremetalhost:///openshift-machine-api/openshift-compute-0/3d685b81-7410-4bb3-80ec-13a31858241f         provisioned
    examplecluster-compute-1          Running                          165m    openshift-compute-1         baremetalhost:///openshift-machine-api/openshift-compute-1/0fdae6eb-2066-4241-91dc-e7ea72ab13b9         provisioned
    Copy to Clipboard Toggle word wrap

  2. 다음 명령을 실행하여 노드가 삭제되었는지 확인합니다.

    $ oc get nodes
    Copy to Clipboard Toggle word wrap

    출력 예

    NAME                     STATUS ROLES   AGE   VERSION
    openshift-control-plane-0 Ready master 3h24m v1.33.4
    openshift-control-plane-1 Ready master 3h24m v1.33.4
    openshift-compute-0       Ready worker 176m v1.33.4
    openshift-compute-1       Ready worker 176m v1.33.4
    Copy to Clipboard Toggle word wrap

  3. 모든 클러스터 Operator가 롤아웃 변경 사항을 완료할 때까지 기다립니다. 다음 명령을 실행하여 진행 상황을 모니터링합니다.

    $ watch oc get co
    Copy to Clipboard Toggle word wrap

6.6.5. 새 컨트롤 플레인 노드 생성

BareMetalHost 오브젝트 및 노드를 생성하여 새 컨트롤 플레인 노드 생성을 시작합니다.

프로세스

  1. 이전에 저장한 bmh_affected.yaml 파일을 편집합니다.

    1. 파일에서 다음 메타데이터 항목을 제거합니다.

      • creationTimestamp
      • 생성
      • resourceVersion
      • uid
    2. 파일의 status 섹션을 제거합니다.

    결과 파일은 다음 예와 유사해야 합니다.

    bmh_affected.yaml 파일의 예

    apiVersion: metal3.io/v1alpha1
    kind: BareMetalHost
    metadata:
      labels:
        installer.openshift.io/role: control-plane
      name: openshift-control-plane-2
      namespace: openshift-machine-api
    spec:
      automatedCleaningMode: disabled
      bmc:
        address:
        credentialsName:
        disableCertificateVerification: true
      bootMACAddress: ab:cd:ef:ab:cd:ef
      bootMode: UEFI
      externallyProvisioned: true
      online: true
      rootDeviceHints:
        deviceName: /dev/disk/by-path/pci-0000:04:00.0-nvme-1
      userData:
        name: master-user-data-managed
        namespace: openshift-machine-api
    Copy to Clipboard Toggle word wrap

  2. 다음 명령을 실행하여 bmh_affected.yaml 파일을 사용하여 BareMetalHost 오브젝트를 생성합니다.

    $ oc create -f bmh_affected.yaml
    Copy to Clipboard Toggle word wrap

    BareMetalHost 오브젝트를 생성하면 다음 경고가 예상됩니다.

    Warning: metadata.finalizers: "baremetalhost.metal3.io": prefer a domain-qualified finalizer name to avoid accidental conflicts with other finalizer writers
    Copy to Clipboard Toggle word wrap
  3. 다음 명령을 실행하여 컨트롤 플레인 ignition 시크릿을 추출합니다.

    $ oc extract secret/master-user-data-managed \
        -n openshift-machine-api \
        --keys=userData \
        --to=- \
        | sed '/^userData/d' > new_controlplane.ign
    Copy to Clipboard Toggle word wrap

    이 명령은 Ignition 시크릿의 시작 userData 행도 제거합니다.

  4. 다음 예제를 참조하여 새 노드의 네트워크 구성에 대해 new_controlplane_nmstate.yaml 이라는 제목의 Nmstate YAML 파일을 생성합니다.

    Nmstate YAML 파일의 예

    interfaces:
      - name: eno1
        type: ethernet
        state: up
        mac-address: "ab:cd:ef:01:02:03"
        ipv4:
          enabled: true
          address:
            - ip: 192.168.20.11
              prefix-length: 24
          dhcp: false
        ipv6:
          enabled: false
    dns-resolver:
      config:
        search:
          - iso.sterling.home
        server:
          - 192.168.20.8
    routes:
      config:
      - destination: 0.0.0.0/0
        metric: 100
        next-hop-address: 192.168.20.1
        next-hop-interface: eno1
        table-id: 254
    Copy to Clipboard Toggle word wrap

    참고

    에이전트 기반 설치 관리자를 사용하여 클러스터를 설치한 경우 원래 클러스터 배포의 agent-config.yaml 파일에 있는 실패한 노드의 networkConfig 섹션을 새 컨트롤 플레인 노드의 Nmstate 파일의 시작점으로 사용할 수 있습니다. 예를 들어 다음 명령은 첫 번째 컨트롤 플레인 노드의 networkConfig 섹션을 추출합니다.

    $ cat agent-config-iso.yaml | yq .hosts[0].networkConfig > new_controlplane_nmstate.yaml
    Copy to Clipboard Toggle word wrap
  5. 다음 명령을 실행하여 사용자 지정 RHCOS(Red Hat Enterprise Linux CoreOS) 라이브 ISO를 생성합니다.

    $ coreos-installer iso customize rhcos-live.86_64.iso \
        --dest-ignition new_controlplane.ign \
        --network-nmstate new_controlplane_nmstate.yaml \
        --dest-device /dev/disk/by-path/<device_path> \
        -f
    Copy to Clipboard Toggle word wrap

    & lt;device_path >를 ISO가 생성될 대상 장치의 경로로 바꿉니다.

  6. 사용자 지정 RHCOS 라이브 ISO를 사용하여 새 컨트롤 플레인 노드를 부팅합니다.
  7. 새 노드에 클러스터에 가입하도록 CSR(인증서 서명 요청)을 승인합니다.

6.6.6. 노드, 베어 메탈 호스트 및 머신을 함께 연결

머신을 생성한 다음 새 BareMetalHost 오브젝트 및 노드와 연결하여 새 컨트롤 플레인 노드를 계속 생성합니다.

프로세스

  1. 다음 명령을 실행하여 컨트롤 플레인 노드의 providerID 를 가져옵니다.

    $ oc get -n openshift-machine-api baremetalhost -l installer.openshift.io/role=control-plane -ojson | jq -r '.items[] | "baremetalhost:///openshift-machine-api/" + .metadata.name + "/" + .metadata.uid'
    Copy to Clipboard Toggle word wrap

    출력 예

    baremetalhost:///openshift-machine-api/master-00/6214c5cf-c798-4168-8c78-1ff1a3cd2cb4
    baremetalhost:///openshift-machine-api/master-01/58fb60bd-b2a6-4ff3-a88d-208c33abf954
    baremetalhost:///openshift-machine-api/master-02/dc5a94f3-625b-43f6-ab5a-7cc4fc79f105
    Copy to Clipboard Toggle word wrap

  2. 다음 명령을 실행하여 라벨에 대한 클러스터 정보를 가져옵니다.

    $ oc get machine -n openshift-machine-api \
        -l machine.openshift.io/cluster-api-machine-role=master \
        -L machine.openshift.io/cluster-api-cluster
    Copy to Clipboard Toggle word wrap

    출력 예

    NAME                           PHASE   TYPE  REGION  ZONE  AGE  CLUSTER-API-CLUSTER
    ci-op-jcp3s7wx-ng5sd-master-0  Running                     10h  ci-op-jcp3s7wx-ng5sd
    ci-op-jcp3s7wx-ng5sd-master-1  Running                     10h  ci-op-jcp3s7wx-ng5sd
    ci-op-jcp3s7wx-ng5sd-master-2  Running                     10h  ci-op-jcp3s7wx-ng5sd
    Copy to Clipboard Toggle word wrap

  3. 다음과 유사한 yaml 파일을 생성하여 새 컨트롤 플레인 노드에 대한 Machine 오브젝트를 생성합니다.

    apiVersion: machine.openshift.io/v1beta1
    kind: Machine
    metadata:
      annotations:
        metal3.io/BareMetalHost: openshift-machine-api/<new_control_plane_machine> 
    1
    
      finalizers:
        - machine.machine.openshift.io
      labels:
        machine.openshift.io/cluster-api-cluster: <cluster_api_cluster> 
    2
    
        machine.openshift.io/cluster-api-machine-role: master
        machine.openshift.io/cluster-api-machine-type: master
      name: <new_control_plane_machine> 
    3
    
      namespace: openshift-machine-api
    spec:
      metadata: {}
      providerID: <provider_id> 
    4
    
      providerSpec:
        value:
          apiVersion: baremetal.cluster.k8s.io/v1alpha1
          hostSelector: {}
          image:
            checksum: ""
            url: ""
          kind: BareMetalMachineProviderSpec
          userData:
            name: master-user-data-managed
    Copy to Clipboard Toggle word wrap

    다음과 같습니다.

    <new_control_plane_machine>
    이전에 삭제한 머신 이름과 같을 수 있는 새 머신의 이름을 지정합니다.
    <cluster_api_cluster>
    이전 단계의 출력에 표시된 다른 컨트롤 플레인 시스템의 CLUSTER-API-CLUSTER 값을 지정합니다.
    <provider_id>
    이전 단계의 출력에 표시된 새 베어 메탈 호스트의 providerID 값을 지정합니다.

    다음 경고가 예상됩니다.

    Warning: metadata.finalizers: "machine.machine.openshift.io": prefer a domain-qualified finalizer name to avoid accidental conflicts with other finalizer writers
    Copy to Clipboard Toggle word wrap
  4. 단일 bash 쉘 세션에서 다음 단계를 수행하여 새 컨트롤 플레인 노드 및 Machine 오브젝트를 BareMetalHost 오브젝트에 연결합니다.

    1. 다음 명령을 실행하여 NEW_NODE_NAME 변수를 정의합니다.

      $ NEW_NODE_NAME=<new_node_name>
      Copy to Clipboard Toggle word wrap

      & lt;new_node_name& gt;을 새 컨트롤 플레인 노드의 이름으로 바꿉니다.

    2. 다음 명령을 실행하여 NEW_MACHINE_NAME 변수를 정의합니다.

      $ NEW_MACHINE_NAME=<new_machine_name>
      Copy to Clipboard Toggle word wrap

      & lt;new_machine_name& gt;을 새 머신의 이름으로 바꿉니다.

    3. 새 노드의 BareMetalHost 오브젝트에서 추출하도록 다음 명령을 실행하여 BMH_UID 를 정의합니다.

      $ BMH_UID=$(oc get -n openshift-machine-api bmh $NEW_NODE_NAME -ojson | jq -r .metadata.uid)
      Copy to Clipboard Toggle word wrap
      $ echo $BMH_UID
      Copy to Clipboard Toggle word wrap
    4. 다음 명령을 실행하여 consumerRef 오브젝트를 베어 메탈 호스트에 패치합니다.

      $ oc patch -n openshift-machine-api bmh $NEW_NODE_NAME --type merge --patch '{"spec":{"consumerRef":{"apiVersion":"machine.openshift.io/v1beta1","kind":"Machine","name":"'$NEW_MACHINE_NAME'","namespace":"openshift-machine-api"}}}'
      Copy to Clipboard Toggle word wrap
    5. 다음 명령을 실행하여 providerID 값을 새 노드에 패치합니다.

      $ oc patch node $NEW_NODE_NAME --type merge --patch '{"spec":{"providerID":"baremetalhost:///openshift-machine-api/'$NEW_NODE_NAME'/'$BMH_UID'"}}'
      Copy to Clipboard Toggle word wrap
    6. 다음 명령을 실행하여 providerID 값을 검토합니다.

      $ oc get node -l node-role.kubernetes.io/control-plane -ojson | jq -r '.items[] | .metadata.name + "  " + .spec.providerID'
      Copy to Clipboard Toggle word wrap
  5. 다음 명령을 실행하여 BareMetalHost 오브젝트의 powerOn 상태를 true 로 설정합니다.

    $ oc patch -n openshift-machine-api bmh $NEW_NODE_NAME --subresource status --type json -p '[{"op":"replace","path":"/status/poweredOn","value":true}]'
    Copy to Clipboard Toggle word wrap
  6. 다음 명령을 실행하여 BareMetalHost 오브젝트의 powerOn 상태를 검토합니다.

    $ oc get bmh -n openshift-machine-api -ojson | jq -r '.items[] | .metadata.name + "   PoweredOn:" +  (.status.poweredOn | tostring)'
    Copy to Clipboard Toggle word wrap
  7. 다음 명령을 실행하여 BareMetalHost 오브젝트의 프로비저닝 상태를 검토합니다.

    $ oc get bmh -n openshift-machine-api -ojson | jq -r '.items[] | .metadata.name + "   ProvisioningState:" +  .status.provisioning.state'
    Copy to Clipboard Toggle word wrap
    중요

    프로비저닝 상태가 관리되지 않는 경우 다음 명령을 실행하여 프로비저닝 상태를 변경합니다.

    $ oc patch -n openshift-machine-api bmh $NEW_NODE_NAME --subresource status --type json -p '[{"op":"replace","path":"/status/provisioning/state","value":"unmanaged"}]'
    Copy to Clipboard Toggle word wrap
  8. 다음 명령을 실행하여 머신의 상태를 Provisioned 로 설정합니다.

    $ oc patch -n openshift-machine-api machines $NEW_MACHINE_NAME -n openshift-machine-api --subresource status --type json -p '[{"op":"replace","path":"/status/phase","value":"Provisioned"}]'
    Copy to Clipboard Toggle word wrap

6.6.7. 새 etcd 멤버 추가

클러스터에 새 etcd 멤버를 추가하여 새 컨트롤 플레인 노드 추가를 완료합니다.

프로세스

  1. 단일 bash 쉘 세션에서 다음 단계를 수행하여 새 etcd 멤버를 클러스터에 추가합니다.

    1. 다음 명령을 실행하여 새 컨트롤 플레인 노드의 IP를 찾습니다.

      $ oc get nodes -owide -l node-role.kubernetes.io/control-plane
      Copy to Clipboard Toggle word wrap

      나중에 사용할 수 있도록 노드의 IP 주소를 기록합니다.

    2. 다음 명령을 실행하여 etcd pod를 나열합니다.

      $ oc get -n openshift-etcd pods -l k8s-app=etcd -o wide
      Copy to Clipboard Toggle word wrap
    3. 다음 명령을 실행하여 실행 중인 etcd pod 중 하나에 연결합니다. 새 노드의 etcd pod는 CrashLoopBackOff 상태에 있어야 합니다.

      $ oc rsh -n openshift-etcd <running_pod>
      Copy to Clipboard Toggle word wrap

      & lt;running_pod >를 이전 단계에 표시된 실행 중인 Pod의 이름으로 바꿉니다.

    4. 다음 명령을 실행하여 etcd 멤버 목록을 확인합니다.

      sh-4.2# etcdctl member list -w table
      Copy to Clipboard Toggle word wrap
    5. 다음 명령을 실행하여 새 컨트롤 플레인 etcd 멤버를 추가합니다.

      sh-4.2# etcdctl member add <new_node> --peer-urls="https://<ip_address>:2380"
      Copy to Clipboard Toggle word wrap

      다음과 같습니다.

      <new_node>
      새 컨트롤 플레인 노드의 이름을 지정합니다.
      <ip_address>
      새 노드의 IP 주소를 지정합니다.
    6. 다음 명령을 실행하여 rsh 쉘을 종료합니다.

      sh-4.2# exit
      Copy to Clipboard Toggle word wrap
  2. 다음 명령을 실행하여 etcd를 강제로 재배포합니다.

    $ oc patch etcd cluster -p='{"spec": {"forceRedeploymentReason": "single-master-recovery-'"$( date --rfc-3339=ns )"'"}}' --type=merge
    Copy to Clipboard Toggle word wrap
  3. 다음 명령을 실행하여 etcd 쿼럼 가드를 다시 켭니다.

    $ oc patch etcd/cluster --type=merge -p '{"spec": {"unsupportedConfigOverrides": null}}'
    Copy to Clipboard Toggle word wrap
  4. 다음 명령을 실행하여 클러스터 Operator 롤아웃을 모니터링합니다.

    $ watch oc get co
    Copy to Clipboard Toggle word wrap
맨 위로 이동
Red Hat logoGithubredditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

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

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

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

Red Hat 소개

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

Theme

© 2025 Red Hat