노드 재부팅 없이 OpenShift machine config pool 분할

Red Hat Blog를 보다가 관심 가는 글이 보여서 AI번역+약간 교정해 보았습니다.
출처: https://developers.redhat.com/articles/2025/10/10/splitting-openshift-machine-config-pool-without-node-reboots

이 문서 에서는 노드를 재부팅하지 않고도  기존  Red Hat OpenShift machine config pool (MCP)을 두 개의 별도 MCP로 분할하는 방법을 보여줍니다. 새 MCP가 기존 MCP와 정확히 동일한 머신 구성을 갖도록 하는 것이 목표입니다.

초기에는 많은 OpenShift 클러스터가 전체 클러스터에 대해 하나 또는 두 개의 MCP를 사용하여 구축되었습니다. 이는 작업자 노드가 10개 또는 20개뿐인 경우에는 유용합니다. 하지만 하나의 MCP에 작업자 노드가 100개 이상인 경우 업그레이드가 어려워질 수 있습니다.  Red Hat OpenShift Container Platform 업그레이드 설명서 에서 설명한 대로 , 업그레이드가 끝날 때 MCP를 일시 중지하고 다시 시작함으로써 어떤 노드가 얼마나 재부팅될지 더 쉽게 제어할 수 있습니다.

분할 절차

이 섹션에서는 분할 절차를 시작하기 전에 필요한 전제 조건을 간략하게 설명합니다. 그런 다음 노드를 재부팅하지 않고 OpenShift 머신 구성 풀을 분할하는 단계별 절차를 안내합니다.

필수 조건:

  • 클러스터 관리자 권한으로 OpenShift 클러스터에 액세스합니다.
  • OpenShift 클러스터에 구성되고 연결된 oc CLI 도구입니다.
  • 머신 구성 풀과 머신 구성에 대한 이해.

1단계: 현재 머신 구성 풀 식별

다음 명령을 사용하여 분할해야 할 현재 MCP를 식별합니다.

oc get mcp

출력 예:

NAME     CONFIG                                       UPDATED   UPDATING DEGRADED  MACHINECOUNT READYMACHINECOUNT  UPDATEDMACHINECOUNT  DEGRADEDMACHINECOUNT   AGE
master rendered-master-a5f35b903c8ad7c2c0175023f9909b05   True      False      False      3              3                   3                     0           13d
mcp-1  rendered-mcp-1-f19092f2278430cc4d2cff6d9400f990    True      False      False      5              5                   5                     0           13d
worker rendered-worker-f19092f2278430cc4d2f9909b05a5f3    True      False      False      0              0                   0                     0           13d

출력에서 두 가지 사항에 유의하세요. 첫째, 이 배포에는 OpenShift Container Platform 배포에서 표준이 아닌 MCP가 하나뿐이며, 바로 “mcp-1″입니다. 둘째, CONFIG 열에는 렌더링된 각 MCP 버전에 대한 특정 해시가 있습니다.

2단계: 머신 구성 식별

다음을 사용하여 현재 MCP와 연관된 머신 구성을 검색하여 머신 구성을 식별합니다.

oc get mcp mcp-1 -o json | jq .spec.configuration

출력 예:

{
  "name": "rendered-mcp-1-f19092f2278430cc4d2cff6d9400f990",
  "source": [
    {
      "apiVersion": "machineconfiguration.openshift.io/v1",
      "kind": "MachineConfig",
      "name": "00-worker"
    },
    {
      "apiVersion": "machineconfiguration.openshift.io/v1",
      "kind": "MachineConfig",
      "name": "01-worker-container-runtime"
    },
    {
      "apiVersion": "machineconfiguration.openshift.io/v1",
      "kind": "MachineConfig",
      "name": "01-worker-kubelet"
    },
    {
      "apiVersion": "machineconfiguration.openshift.io/v1",
      "kind": "MachineConfig",
      "name": "50-workers-chrony-configuration"
    },
    {
      "apiVersion": "machineconfiguration.openshift.io/v1",
      "kind": "MachineConfig",
      "name": "97-worker-generated-kubelet"
    },
    {
      "apiVersion": "machineconfiguration.openshift.io/v1",
      "kind": "MachineConfig",
      "name": "98-worker-generated-kubelet"
    },
    {
      "apiVersion": "machineconfiguration.openshift.io/v1",
      "kind": "MachineConfig",
      "name": "99-worker-generated-registries"
    },
    {
      "apiVersion": "machineconfiguration.openshift.io/v1",
      "kind": "MachineConfig",
      "name": "99-worker-ssh"
    }
  ]
}

이렇게 하면 이 특정 MCP에 적용된 각 MachineConfig가 표시됩니다.

각 MachineConfig에 대한 세부 사항이 확실하지 않은 경우 다음 명령을 사용할 수 있습니다.

oc get mc

출력 예:

NAME                                               GENERATEDBYCONTROLLER                      IGNITIONVERSION   AGE                                                                                                      00-master                                          64460169e27091d8f8373b0952604ba2700d6d67   3.4.0             13d                                                                                                      00-worker                                          64460169e27091d8f8373b0952604ba2700d6d67   3.4.0             13d                                                                                                      01-master-container-runtime                        64460169e27091d8f8373b0952604ba2700d6d67   3.4.0             13d
01-master-kubelet                                  64460169e27091d8f8373b0952604ba2700d6d67   3.4.0             13d
01-worker-container-runtime                        64460169e27091d8f8373b0952604ba2700d6d67   3.4.0             13d
01-worker-kubelet                                  64460169e27091d8f8373b0952604ba2700d6d67   3.4.0             13d
50-masters-chrony-configuration                                                               3.1.0             13d
50-workers-chrony-configuration                                                               3.1.0             13d
97-master-generated-kubelet                        64460169e27091d8f8373b0952604ba2700d6d67   3.4.0             13d
97-mcp-1-generated-kubelet                         64460169e27091d8f8373b0952604ba2700d6d67   3.4.0             13d
97-worker-generated-kubelet                        64460169e27091d8f8373b0952604ba2700d6d67   3.4.0             13d
98-master-generated-kubelet                        64460169e27091d8f8373b0952604ba2700d6d67   3.4.0             13d
98-mcp-1-generated-kubelet                         64460169e27091d8f8373b0952604ba2700d6d67   3.4.0             13d
98-worker-generated-kubelet                        64460169e27091d8f8373b0952604ba2700d6d67   3.4.0             13d
99-assisted-installer-master-ssh                                                              3.1.0             13d
99-master-generated-registries                     64460169e27091d8f8373b0952604ba2700d6d67   3.4.0             13d
99-master-ssh                                                                                 3.2.0             13d
99-mcp-1-generated-kubelet                         64460169e27091d8f8373b0952604ba2700d6d67   3.4.0             4d5h
99-worker-generated-registries                     64460169e27091d8f8373b0952604ba2700d6d67   3.4.0             13d
99-worker-ssh                                                                                 3.2.0             13d
rendered-master-a5f35b903c8ad7c2c0175023f9909b05   64460169e27091d8f8373b0952604ba2700d6d67   3.4.0             13d
rendered-mcp-1-8f6a90f60f8d9db7d8c0e243c9bf4963    64460169e27091d8f8373b0952604ba2700d6d67   3.4.0             13d
rendered-mcp-1-b9d21061d076437680290f5da831ada0    64460169e27091d8f8373b0952604ba2700d6d67   3.4.0             24h
rendered-mcp-1-f19092f2278430cc4d2cff6d9400f990    64460169e27091d8f8373b0952604ba2700d6d67   3.4.0             13d
rendered-mcp-1-f90b4a73043e3cec10a72075c4d9d9fb    64460169e27091d8f8373b0952604ba2700d6d67   3.4.0             4d5h
rendered-worker-dcb907f73ccf964e6db1cf7db6cd45ab   64460169e27091d8f8373b0952604ba2700d6d67   3.4.0             13d
rendered-worker-f19092f2278430cc4d2cff6d9400f990   64460169e27091d8f8373b0952604ba2700d6d67   3.4.0             13d

MachineConfig와 관련하여 추가 지원이 필요하면  OpenShift Container Platform 설명서 를 참조하세요 .

3단계: 새 머신 구성 풀 만들기

새 풀의 원하는 이름(예: mcp-new)을 사용하여 새 MCP 정의 YAML 파일 mcp-new.yaml을 만듭니다. 이 새 MCP의 machineConfigSelector는 다음 예시와 같이 원래 MCP와 정확히 동일해야 합니다.

apiVersion: machineconfiguration.openshift.io/v1
kind: MachineConfigPool
metadata:
  name: mcp-new
spec:
  machineConfigSelector:
    matchExpressions:
      - {
         key: machineconfiguration.openshift.io/role,
         operator: In,
         values: [worker,mcp-1]
        }
  nodeSelector:
    matchLabels:
      node-role.kubernetes.io/mcp-new: ""  # Label for nodes to move to this pool (nodes to be updated later)

새로운 MCP를 다음과 같이 적용합니다.

oc apply -f mcp-new.yaml

4단계: 두 MCP 모두 동일한 렌더링 해시를 가지고 있는지 확인합니다.

노드가 한 MCP에서 다른 MCP로 이동할 때 재부팅되지 않도록 하려면 두 MCP의 해시가 동일해야 합니다. 즉, 두 MCP의 MachineConfig가 정확히 동일해야 합니다. 따라서 이러한 MCP 내의 Red Hat Enterprise Linux CoreOS 구성은 이동 시 호스트의 OS나 파일을 변경할 필요가 없습니다.

확인하려면 다음 명령을 실행하세요.

NAME     CONFIG                                      UPDATED UPDATING  DEGRADED  MACHINECOUNT   READYMACHINECOUNT  UPDATEDMACHINECOUNT  DEGRADEDMACHINECOUNT   AGE
master  rendered-master-a5f35b903c8ad7c2c0175023f9909b05  True     False     False      3             3                   3                     0              14d
mcp-1   rendered-mcp-1-f19092f2278430cc4d2cff6d9400f990   True     False     False      5             5                   5                     0              14d
mcp-new rendered-mcp-new-f19092f2278430cc4d2cff6d9400f990 True     False     False      0             0                   0                     0              42h
worker  rendered-worker-f19092f2278430cc4d2cff6d9400f990  True     False     False      0             0                   0                     0              14d

5단계: 노드에 레이블 지정

이 단계에서는 새 머신 구성 풀의 노드에 레이블을 지정합니다. 새 MCP로 이동할 노드를 식별하고 새 MCP의 nodeSelector에 정의된 노드 선택기 레이블을 사용하여 레이블을 지정합니다.

# oc get node
NAME                                       STATUS   ROLES                  AGE   VERSION
ctrl-plane-0.nantahala.daytwops.bos2.lab   Ready    control-plane,master   14d   v1.29.10+67d3387
ctrl-plane-1.nantahala.daytwops.bos2.lab   Ready    control-plane,master   14d   v1.29.10+67d3387
ctrl-plane-2.nantahala.daytwops.bos2.lab   Ready    control-plane,master   14d   v1.29.10+67d3387
worker-0.nantahala.daytwops.bos2.lab       Ready    mcp-1,worker           14d   v1.29.10+67d3387
worker-1.nantahala.daytwops.bos2.lab       Ready    mcp-1,worker           14d   v1.29.10+67d3387
worker-2.nantahala.daytwops.bos2.lab       Ready    mcp-1,worker           14d   v1.29.10+67d3387
worker-3.nantahala.daytwops.bos2.lab       Ready    mcp-1,worker           14d   v1.29.10+67d3387
worker-5.nantahala.daytwops.bos2.lab       Ready    mcp-1,worker           14d   v1.29.10+67d3387

mcp-1에서 mcp-new로 노드를 이동하려면 다음 명령을 사용하여 원하는 노드에 패치를 적용하세요.

# oc patch node worker-5.nantahala.daytwops.bos2.lab --type=json -p '[{"op":"move","from": "/metadata/labels/node-role.kubernetes.io~1mcp-1", "path": "/metadata/labels/node-role.kubernetes.io~1mcp-new"}]'

참고: patch 명령에서 ~1은 “/” 문자를 이스케이프하는 방식입니다. 이 예에서는 “/” 문자가 포함된 레이블을 참조할 수 있습니다.

다음 명령을 실행하여 변경 사항을 확인하세요.

# watch "oc get no; echo; oc get mcp; echo; oc get mc| grep -vE 'worker|master'"

출력 예:

NAME                                       STATUS   ROLES                  AGE   VERSION
ctrl-plane-0.nantahala.daytwops.bos2.lab   Ready    control-plane,master   14d   v1.29.10+67d3387
ctrl-plane-1.nantahala.daytwops.bos2.lab   Ready    control-plane,master   14d   v1.29.10+67d3387
ctrl-plane-2.nantahala.daytwops.bos2.lab   Ready    control-plane,master   14d   v1.29.10+67d3387
worker-0.nantahala.daytwops.bos2.lab       Ready    mcp-1,worker           14d   v1.29.10+67d3387
worker-1.nantahala.daytwops.bos2.lab       Ready    mcp-1,worker           14d   v1.29.10+67d3387
worker-2.nantahala.daytwops.bos2.lab       Ready    mcp-1,worker           14d   v1.29.10+67d3387
worker-3.nantahala.daytwops.bos2.lab       Ready    mcp-1,worker           14d   v1.29.10+67d3387
worker-5.nantahala.daytwops.bos2.lab       Ready    mcp-new,worker         14d   v1.29.10+67d3387

NAME     CONFIG                                             UPDATED   UPDATING   DEGRADED   MACHINECOUNT   READYMACHINECOUNT   UPDATEDMACHINECOUNT   DEGRADEDMACHINECOUNT   AGE
master   rendered-master-a5f35b903c8ad7c2c0175023f9909b05   True      False      False      3              3                   3                     0                      14d
mcp-1    rendered-mcp-1-f19092f2278430cc4d2cff6d9400f990    True      False      False      4              4                   4                     0                      14d
mcp-new  rendered-mcp-new-f19092f2278430cc4d2cff6d9400f990  True      False      False      1              1                   1                     0                      42h
worker   rendered-worker-f19092f2278430cc4d2cff6d9400f990   True      False      False      0              0                   0                     0                      14d

NAME                                               GENERATEDBYCONTROLLER                      IGNITIONVERSION   AGE
97-mcp-1-generated-kubelet                         64460169e27091d8f8373b0952604ba2700d6d67   3.4.0             14d
97-mcp-new-generated-kubelet                       64460169e27091d8f8373b0952604ba2700d6d67   3.4.0             14d
98-mcp-1-generated-kubelet                         64460169e27091d8f8373b0952604ba2700d6d67   3.4.0             14d
98-mcp-new-generated-kubelet                       64460169e27091d8f8373b0952604ba2700d6d67   3.4.0             14d
99-mcp-1-generated-kubelet                         64460169e27091d8f8373b0952604ba2700d6d67   3.4.0             5d
rendered-mcp-1-8f6a90f60f8d9db7d8c0e243c9bf4963    64460169e27091d8f8373b0952604ba2700d6d67   3.4.0             14d
rendered-mcp-1-b9d21061d076437680290f5da831ada0    64460169e27091d8f8373b0952604ba2700d6d67   3.4.0             43h
rendered-mcp-1-f19092f2278430cc4d2cff6d9400f990    64460169e27091d8f8373b0952604ba2700d6d67   3.4.0             14d
rendered-mcp-1-f90b4a73043e3cec10a72075c4d9d9fb    64460169e27091d8f8373b0952604ba2700d6d67   3.4.0             5d
rendered-mcp-new-8f6a90f60f8d9db7d8c0e243c9bf4963  64460169e27091d8f8373b0952604ba2700d6d67   3.4.0             14d
rendered-mcp-new-f19092f2278430cc4d2cff6d9400f990  64460169e27091d8f8373b0952604ba2700d6d67   3.4.0             14d
...

mcp-new가  updated = false ,  updating = true 로 변경되는 것을 볼 수 있습니다. 그런 다음 노드가 mcp-new로 이동하면  즉시 updated = true ,  updating = false 로 다시 변경됩니다  . MACHINECOUNT 도 변경되는 것을 볼 수 있습니다.

노드가 SchedulingDisabled 상태로 전환되는 것을 볼 수 없습니다. 이는 두 MCP 간의 구성이 잘못되었음을 나타내며, 해당 노드가 재부팅됩니다.

주의할 점

의도치 않은 구성 변경 및 잠재적인 중단을 방지하기 위해 새 MCP의 machineConfigSelector가 원본과 정확히 일치하는지 확인하십시오. 노드 레이블 패치는 새 MCP로의 이동을 트리거하는 작업입니다.

프로세스 진행 중과 이후에 노드 상태와 MCP 상태를 면밀히 모니터링하십시오. 재부팅이 예상되지 않더라도 유지 관리 기간 동안 이 작업을 계획하고 조정하십시오.

요약

이 절차는 기존 풀과 새 풀의 머신 구성이 동일하게 유지되는 한, 노드 재부팅 없이 머신 구성 풀을 분할할 수 있다는 점에서 상당한 이점을 제공합니다. 이를 통해 원활한 전환이 보장되고 서비스 중단을 방지하여 업그레이드 및 클러스터 관리의 효율성을 높일 수 있습니다.

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

You May Also Like