3장. 설치 후 시스템 구성 작업

OpenShift Container Platform 노드에서 실행되는 운영 체제를 변경해야하는 경우가 있습니다. 여기에는 네트워크 시간 서비스 설정 변경, 커널 인수 추가 또는 특정 방식으로 저널 설정이 포함됩니다.

몇 가지 특수 기능 외에도 OpenShift Container Platform 노드에서 운영 체제 대부분의 변경 사항은 Machine Config Operator가 관리하는 MachineConfig 객체를 생성하여 수행할 수 있습니다.

이 섹션의 작업은 Machine Config Operator의 기능을 사용하여 OpenShift Container Platform 노드에서 운영 체제 기능을 구성하는 방법을 설명합니다.

3.1. Machine Config Operator 이해

3.1.1. Machine Config Operator

목적

Machine Config Operator는 커널과 kubelet 사이의 모든 것을 포함하여 기본 운영 체제 및 컨테이너 런타임의 구성 및 업데이트를 관리하고 적용합니다.

다음의 네 가지 구성 요소가 있습니다.

  • machine-config-server: 클러스터에 가입하는 새 머신에 Ignition 구성을 제공합니다.
  • machine-config-controller: MachineConfig 오브젝트에서 정의한 구성으로 머신 업그레이드를 조정합니다. 머신 세트의 업그레이드를 개별적으로 제어하는 옵션이 제공됩니다.
  • machine-config-daemon: 업데이트 중에 새 머신 설정을 적용합니다. 머신 상태를 요청한 머신 구성에 대해 검증하고 확인합니다.
  • machine-config: 먼저 머신을 설치, 시작 및 업데이트하는 완벽한 시스템 구성 소스를 제공합니다.
프로젝트

openshift-machine-config-operator

3.1.2. Machine Config 개요

MCO (Machine Config Operator)는 systemd, CRI-O 및 Kubelet, 커널, 네트워크 관리자 및 기타 시스템 기능에 대한 업데이트를 관리합니다. 또한 호스트에 구성 파일을 쓸 수 있는 MachineConfig CRD를 제공합니다( machine-config-operator참조). OpenShift Container Platform 클러스터에 대한 고급 시스템 수준을 변경하려면 MCO의 기능과 다른 구성 요소와 상호 작용 방식을 이해하는 것이 중요합니다. MCO, 머신 구성 및 사용 방법에 대해 알아야 할 몇 가지 사항은 다음과 같습니다.

  • 머신 구성은 OpenShift Container Platform 노드 풀을 나타내는 각 시스템의 운영 체제에서 파일 또는 서비스를 특정하게 변경할 수 있습니다.
  • MCO는 시스템 풀의 운영 체제에 변경 사항을 적용합니다. 모든 OpenShift Container Platform 클러스터는 작업자 및 컨트롤 플레인 노드(마스터 노드라고도 함) 풀로 시작합니다. 역할 레이블을 추가하여 사용자 지정 노드 풀을 구성할 수 있습니다. 예를 들어 애플리케이션에 필요한 특정 하드웨어 기능을 포함하는 작업자 노드의 사용자 정의 풀을 설정할 수 있습니다. 그러나 이 섹션의 예에서는 기본 풀 유형의 변경에 중점을 둡니다.

    중요

    노드는 master 또는 worker와 같이 유형을 나타내기 위해 여러 레이블을 적용할 수 있지만 단일 머신 구성 풀의 멤버일 수 있습니다.

  • OpenShift Container Platform을 디스크에 설치하기 전에 일부 머신 구성을 완료해야 합니다. 대부분의 경우 이는 설치 후 머신 구성으로 실행되지 않고 OpenShift Container Platform 설치 프로그램 프로세스에 직접 삽입되는 머신 구성을 생성하여 이를 수행할 수 있습니다. 또는 OpenShift Container Platform 설치 프로그램 시작 시 커널 인수를 전달하는 베어 메탈 설치를 수행해야 노드별 개별 IP 주소 설정 또는 고급 디스크 파티셔닝과 같은 작업을 수행해야 할 수 있습니다.
  • MCO는 머신 구성에 설정된 항목을 관리합니다. MCO가 충돌하는 파일을 관리하도록 명시적으로 지시하지 않는 한 MCO는 시스템에 대한 수동 변경 사항을 덮어 쓰지 않습니다. 즉, MCO는 사용자가 요청한 특정 업데이트 만 수행하고 전체 노드에 대한 제어를 요구하지 않습니다.
  • 노드를 수동으로 변경하지 않는 것이 좋습니다. 노드를 종료하고 새 노드를 시작해야하는 경우 이러한 직접적인 변경 사항이 손실됩니다.
  • MCO는 /etc/var 디렉토리에있는 파일에 쓰는 경우에만 지원됩니다. 하지만 이러한 영역 중 하나에 심볼릭 링크를 사용하여 쓰기 가능해진 일부 디렉토리에 대한 심볼릭 링크도 있습니다. /opt/usr/local 디렉토리는 예제입니다.
  • Ignition은 MachineConfigs에서 사용되는 구성 형식입니다. 자세한 내용은 Ignition Configuration Specification v3.2.0을 참조하십시오.
  • Ignition 구성 설정은 OpenShift Container Platform 설치시 직접 제공될 수 있고 MCO가 Ignition 구성을 제공하는 것과 동일한 방식으로 포맷할 수 있지만 MCO는 원래 Ignition 구성이 무엇인지 확인할 방법이 없습니다. 따라서 Ignition 구성 설정을 배포하기 전에 이를 머신 구성에 래핑해야 합니다.
  • MCO에서 관리하는 파일이 MCO 외부에서 변경되면 MCD (Machine Config Daemon)가 노드를 degraded로 설정합니다. 이는 문제가 되는 파일을 덮어 쓰지 않으며 성능이 degraded 상태에서 계속 작동합니다.
  • 머신 구성을 사용하는 주요 이유는 OpenShift Container Platform 클러스터의 풀에 새 노드를 추가할 때 적용되기 때문입니다. machine-api-operator는 새 머신을 프로비저닝하고 MCO가 이를 구성합니다.

MCO는 Ignition을 구성 형식으로 사용합니다. OpenShift Container Platform 4.6은 Ignition 구성 사양 버전 2에서 버전 3으로 이동했습니다.

3.1.2.1. 머신 구성에서 변경 가능한 구성

MCO가 변경할 수 있는 구성 요소의 종류는 다음과 같습니다.

  • config: Ignition 구성 오브젝트(ignition 구성 사양참조)를 생성하여 다음을 포함하여 OpenShift Container Platform 시스템에서 파일, systemd 서비스 및 기타 기능을 수정합니다.

    • 설정 파일: /var 또는 / etc 디렉토리에서 파일을 만들거나 덮어씁니다.
    • systemd 단위: systemd 서비스의 상태를 생성 및 설정하거나 추가 설정을 삭제하여 기존 systemd 서비스에 추가합니다.
    • 사용자 및 그룹: 설치 후 passwd 섹션에서 SSH 키를 변경합니다.
중요

core 사용자만 시스템 구성을 통한 SSH 키 변경을 지원합니다.

  • kernelArguments: OpenShift Container Platform 노드가 부팅될 때 커널 명령줄에 인수를 추가합니다.
  • kernelType: 선택적으로 표준 커널 대신 사용할 비표준 커널을 식별합니다. RT 커널 (RAN 용)을 사용하려면 realtime을 사용합니다. 이는 일부 플랫폼에서만 지원됩니다.
  • fips: FIPS 모드를 활성화합니다. FIPS는 설치 후 단계가 아닌 설치시 기본값으로 설정해야합니다.
중요

FIPS 검증 / 진행중인 모듈 암호화 라이브러리 사용은 x86_64 아키텍처의 OpenShift Container Platform 배포에서만 지원됩니다.

  • 확장: 사전 패키징된 소프트웨어를 추가하여 RHCOS 기능을 확장합니다. 이 기능의 경우 사용 가능한 확장에는 usbguard 및 커널 모듈이 포함됩니다.
  • 사용자 정의 리소스 (for ContainerRuntimeKubelet): 머신 구성 외부에서 MCO는 CRI-O 컨테이너 런타임 설정(ContainerRuntime CR) 및 Kubelet 서비스(Kubelet CR)를 수정하기 위한 두 가지 특수 사용자 지정 리소스를 관리합니다.

MCO는 OpenShift Container Platform 노드에서 운영 체제 구성 요소를 변경할 수 있는 유일한 Operator가 아닙니다. 다른 Operator도 운영 체제 수준의 기능을 변경할 수 있습니다. 한 가지 예로 Node Tuning Operator를 사용하여 Tuned 데몬 프로필을 통해 노드 수준 조정을 수행할 수있습니다.

설치 후 수행할 수있는 MCO 구성 작업은 다음에 설명되어 있습니다. OpenShift Container Platform 설치 중 또는 설치 전에 수행해야 하는 시스템 설정 작업은 RHCOS 베어 메탈 설치에 대한 설명을 참조하십시오.

3.1.2.2. 프로젝트

자세한 내용은 openshift-machine-config-operator GitHub 사이트를 참조하십시오.

3.1.3. Machine config pool 상태 확인

MCO(Machine Config Operator), 하위 구성 요소 및 관리하는 리소스의 상태를 보려면 다음 oc 명령을 사용합니다.

프로세스

  1. 각 MCP(머신 구성 풀)에 대해 클러스터에서 사용 가능한 MCO 관리 노드 수를 보려면 다음 명령을 실행합니다.

    $ oc get machineconfigpool

    출력 예

    NAME      CONFIG                    UPDATED  UPDATING   DEGRADED  MACHINECOUNT  READYMACHINECOUNT  UPDATEDMACHINECOUNT DEGRADEDMACHINECOUNT  AGE
    master    rendered-master-06c9c4…   True     False      False     3             3                  3                   0                     4h42m
    worker    rendered-worker-f4b64…    False    True       False     3             2                  2                   0                     4h42m

    다음과 같습니다.

    UPDATED
    True 상태는 MCO가 현재 머신 구성을 해당 MCP의 노드에 적용했음을 나타냅니다. 현재 머신 구성은 oc get mcp 출력의 STATUS 필드에 지정됩니다. False 상태는 MCP의 노드가 업데이트 중임을 나타냅니다.
    업데이트
    True 상태는 MachineConfigPool 사용자 정의 리소스에 지정된 대로 MCO가 해당 MCP의 노드 중 하나 이상에 지정된 대로 원하는 머신 구성을 적용함을 나타냅니다. 원하는 머신 구성은 새로 편집된 머신 구성입니다. 업데이트 중인 노드를 예약에 사용할 수 없을 수 있습니다. False 상태는 MCP의 모든 노드가 업데이트되었음을 나타냅니다.
    DEGRADED
    True 상태는 MCO가 현재 또는 원하는 머신 구성을 해당 MCP의 노드 중 하나 이상에 적용하지 못하거나 구성이 실패함을 나타냅니다. 성능이 저하된 노드는 스케줄링에 사용할 수 없을 수 있습니다. False 상태는 MCP의 모든 노드가 준비되었음을 나타냅니다.
    MACHINECOUNT
    해당 MCP의 총 머신 수를 나타냅니다.
    READYMACHINECOUNT
    예약할 준비가 된 MCP의 총 머신 수를 나타냅니다.
    UPDATEDMACHINECOUNT
    현재 머신 구성이 있는 MCP의 총 머신 수를 나타냅니다.
    DEGRADEDMACHINECOUNT
    degraded 또는 Unreconcilable으로 표시된 MCP의 총 머신 수를 나타냅니다.

    이전 출력에는 컨트롤 플레인 (마스터) 노드와 3 개의 작업자 노드가 있습니다. 컨트롤 플레인 MCP 및 관련 노드가 현재 머신 구성으로 업데이트됩니다. 작업자 MCP의 노드가 원하는 머신 구성으로 업데이트되고 있습니다. 작업자 MCP의 노드 중 두 개가 업데이트되어 UPDATEDMACHINECOUNT2 로 표시된 대로 계속 업데이트됩니다. DEGRADEDMACHINECOUNT0 이고 DEGRADEDFalse 인 경우 문제가 없습니다.

    MCP의 노드가 업데이트되는 동안 CONFIG 아래에 나열된 머신 구성은 현재 머신 구성으로, MCP가 업데이트되고 있습니다. 업데이트가 완료되면 나열된 머신 구성이 MCP를 업데이트한 원하는 머신 구성입니다.

    참고

    노드가 차단되는 경우 해당 노드는 READYMACHINECOUNT 에 포함되지 않지만 MACHINECOUNT 에 포함됩니다. 또한 MCP 상태는 UPDATING 으로 설정됩니다. 노드에 현재 머신 구성이 있으므로 UPDATEDMACHINECOUNT 합계에 계산됩니다.

    출력 예

    NAME      CONFIG                    UPDATED  UPDATING   DEGRADED  MACHINECOUNT  READYMACHINECOUNT  UPDATEDMACHINECOUNT DEGRADEDMACHINECOUNT  AGE
    master    rendered-master-06c9c4…   True     False      False     3             3                  3                   0                     4h42m
    worker    rendered-worker-c1b41a…   False    True       False     3             2                  3                   0                     4h42m

  2. MachineConfigPool 사용자 정의 리소스를 검사하여 MCP의 노드 상태를 확인하려면 다음 명령을 실행합니다.

    $ oc describe mcp worker

    출력 예

    ...
      Degraded Machine Count:     0
      Machine Count:              3
      Observed Generation:        2
      Ready Machine Count:        3
      Unavailable Machine Count:  0
      Updated Machine Count:      3
    Events:                       <none>

    참고

    노드가 차단 중이면 노드가 Ready 머신 수에 포함되지 않습니다. Unavailable Machine Count 에 포함되어 있습니다:

    출력 예

    ...
      Degraded Machine Count:     0
      Machine Count:              3
      Observed Generation:        2
      Ready Machine Count:        2
      Unavailable Machine Count:  1
      Updated Machine Count:      3

  3. 기존 MachineConfig 오브젝트를 보려면 다음 명령을 실행합니다.

    $ oc get machineconfigs

    출력 예

    NAME                             GENERATEDBYCONTROLLER          IGNITIONVERSION  AGE
    00-master                        2c9371fbb673b97a6fe8b1c52...   3.2.0            5h18m
    00-worker                        2c9371fbb673b97a6fe8b1c52...   3.2.0            5h18m
    01-master-container-runtime      2c9371fbb673b97a6fe8b1c52...   3.2.0            5h18m
    01-master-kubelet                2c9371fbb673b97a6fe8b1c52…     3.2.0            5h18m
    ...
    rendered-master-dde...           2c9371fbb673b97a6fe8b1c52...   3.2.0            5h18m
    rendered-worker-fde...           2c9371fbb673b97a6fe8b1c52...   3.2.0            5h18m

    rendered 로 나열된 MachineConfig 오브젝트는 변경하거나 삭제할 수 없습니다.

  4. 특정 머신 구성의 내용을 보려면 (이 경우 01-master-kubelet) 다음 명령을 실행합니다.

    $ oc describe machineconfigs 01-master-kubelet

    명령의 출력에는 이 MachineConfig 오브젝트에 구성 파일(cloud.confkubelet.conf)과 systemd 서비스(Kubernetes Kubelet)가 모두 포함되어 있음을 보여줍니다.

    출력 예

    Name:         01-master-kubelet
    ...
    Spec:
      Config:
        Ignition:
          Version:  3.2.0
        Storage:
          Files:
            Contents:
              Source:   data:,
            Mode:       420
            Overwrite:  true
            Path:       /etc/kubernetes/cloud.conf
            Contents:
              Source:   data:,kind%3A%20KubeletConfiguration%0AapiVersion%3A%20kubelet.config.k8s.io%2Fv1beta1%0Aauthentication%3A%0A%20%20x509%3A%0A%20%20%20%20clientCAFile%3A%20%2Fetc%2Fkubernetes%2Fkubelet-ca.crt%0A%20%20anonymous...
            Mode:       420
            Overwrite:  true
            Path:       /etc/kubernetes/kubelet.conf
        Systemd:
          Units:
            Contents:  [Unit]
    Description=Kubernetes Kubelet
    Wants=rpc-statd.service network-online.target crio.service
    After=network-online.target crio.service
    
    ExecStart=/usr/bin/hyperkube \
        kubelet \
          --config=/etc/kubernetes/kubelet.conf \ ...

적용한 머신 구성에서 문제가 발생하면 언제든지 해당 변경 사항을 취소할 수 있습니다. 예를 들어 oc create -f ./myconfig.yaml 을 실행하여 머신 구성을 적용한 경우 다음 명령을 실행하여 해당 머신 구성을 제거할 수 있습니다.

$ oc delete -f ./myconfig.yaml

이것이 유일한 문제인 경우 영향을 받는 풀 노드는 성능이 저하되지 않은 상태로 돌아갑니다. 이로 인해 실제로 렌더링된 구성이 이전에 렌더링된 상태로 롤백됩니다.

자체 머신 구성을 클러스터에 추가하는 경우 위의 예에 표시된 명령을 사용하여 해당 상태 및 적용되는 풀의 관련 상태를 확인할 수 있습니다.