15장. RHCOS 이미지 계층 지정

RHCOS(Red Hat Enterprise Linux CoreOS) 이미지 계층 지정을 사용하면 추가 이미지를 기본 이미지에 계층화하여 기본 RHCOS 이미지의 기능을 쉽게 확장할 수 있습니다. 이 계층화는 기본 RHCOS 이미지를 수정하지 않습니다. 대신 모든 RHCOS 기능을 포함하는 사용자 정의 계층 이미지를 생성하고 클러스터의 특정 노드에 기능을 추가합니다.

MachineConfig 오브젝트를 사용하여 Containerfile을 사용하여 사용자 정의 계층 이미지를 생성하고 노드에 적용합니다. Machine Config Operator는 관련 머신 구성의 osImageURL 값에 따라 기본 RHCOS 이미지를 재정의하고 새 이미지를 부팅합니다. 머신 구성을 삭제하여 사용자 정의 계층 이미지를 제거할 수 있으며 MCO는 노드를 다시 기본 RHCOS 이미지로 재부팅할 수 있습니다.

RHCOS 이미지 계층 지정을 사용하면 RPM을 기본 이미지에 설치할 수 있으며 사용자 정의 콘텐츠는 RHCOS와 함께 부팅됩니다. MCO(Machine Config Operator)는 이러한 사용자 정의 계층 이미지를 롤아웃하고 이러한 사용자 정의 컨테이너를 기본 RHCOS 이미지와 동일한 방식으로 모니터링할 수 있습니다. RHCOS 이미지 계층화는 RHCOS 노드 관리 방법에 더 큰 유연성을 제공합니다.

중요

사용자 지정 계층적 콘텐츠로 실시간 커널 및 확장 RPM을 설치하는 것은 권장되지 않습니다. 시스템 구성을 사용하여 설치된 RPM과 이러한 RPM이 충돌할 수 있기 때문입니다. 충돌이 발생하면 머신 구성 RPM을 설치하려고 할 때 MCO가 degraded 상태가 됩니다. 계속하기 전에 머신 구성에서 충돌하는 확장을 제거해야 합니다.

사용자 정의 계층 이미지를 클러스터에 적용하는 즉시 사용자 정의 계층 이미지와 해당 노드의 소유권을 효과적으로 확보할 수 있습니다. Red Hat은 표준 노드에서 기본 RHCOS 이미지를 유지 관리하고 업데이트하는 반면 사용자 정의 계층 이미지를 사용하는 노드에서 이미지를 유지 관리하고 업데이트해야 합니다. 사용자 정의 계층 이미지로 적용한 패키지와 패키지에 발생할 수 있는 문제가 있다고 가정합니다.

중요

이미지 계층 지정은 기술 프리뷰 기능 전용입니다. 기술 프리뷰 기능은 Red Hat 프로덕션 서비스 수준 계약(SLA)에서 지원되지 않으며 기능적으로 완전하지 않을 수 있습니다. 따라서 프로덕션 환경에서 사용하는 것은 권장하지 않습니다. 이러한 기능을 사용하면 향후 제품 기능을 조기에 이용할 수 있어 개발 과정에서 고객이 기능을 테스트하고 피드백을 제공할 수 있습니다.

Red Hat 기술 프리뷰 기능의 지원 범위에 대한 자세한 내용은 기술 프리뷰 기능 지원 범위를 참조하십시오.

현재 RHCOS 이미지 계층화에서는 RHCOS 이미지 상단에서 Hotfix 패키지를 가져와 적용하기 위해 CEE(Customer Experience and Engagement)를 사용할 수 있습니다. 경우에 따라 버그 수정 또는 개선 사항이 공식적인 OpenShift Container Platform 릴리스에 포함되기 전에 필요할 수 있습니다. RHCOS 이미지 계층 지정을 사용하면 공식적으로 릴리스되기 전에 Hotfix를 쉽게 추가하고 기본 RHCOS 이미지가 수정 사항을 통합할 때 핫픽스를 제거할 수 있습니다.

중요

일부 핫픽스에는 Red Hat 지원이 필요하며 일반적인 OpenShift Container Platform 지원 적용 범위 또는 라이프 사이클 정책 범위를 벗어납니다.

Hotfix를 원하는 경우 Red Hat Hotfix 정책을 기반으로 제공됩니다. 기본 이미지 상단에 적용하고 프로덕션이 아닌 환경에서 새 사용자 정의 계층화된 이미지를 테스트합니다. 사용자 정의 계층 이미지가 프로덕션에서 안전하게 사용할 수 있다는 것을 만족하면 특정 노드 풀에 자체 일정에 따라 롤아웃할 수 있습니다. 어떠한 이유로든 사용자 정의 계층 이미지를 쉽게 롤백하고 기본 RHCOS를 사용하여 로 돌아갈 수 있습니다.

참고

RHCOS 이미지 계층 지정을 사용하여 libreswan 또는 numactl과 같은 타사 소프트웨어 패키지를 통합할 수 있는 향후 릴리스에 계획되어 있습니다.

사용자 정의 계층 이미지를 적용하려면 OpenShift Container Platform 이미지와 적용하려는 핫픽스를 참조하는 Containerfile을 생성합니다. 예를 들면 다음과 같습니다.

Hotfix를 적용하려면 Containerfile의 예

# Using a 4.12.0 image
FROM quay.io/openshift-release-dev/ocp-release@sha256...
#Install hotfix rpm
RUN rpm-ostree override replace https://example.com/myrepo/haproxy-1.0.16-5.el8.src.rpm && \
    rpm-ostree cleanup -m && \
    ostree container commit

참고

클러스터의 나머지 부분에 설치된 동일한 기본 RHCOS 이미지를 사용합니다. oc adm release info --image-for rhel-coreos-8 명령을 사용하여 클러스터에 사용된 기본 이미지를 가져옵니다.

생성된 사용자 정의 계층 이미지를 이미지 레지스트리로 푸시합니다. 프로덕션 환경 외 OpenShift Container Platform 클러스터에서 새 이미지를 가리키는 대상 노드 풀에 대한 MachineConfig 오브젝트를 생성합니다.

MCO(Machine Config Operator)는 머신 구성에 제공된 콘텐츠로 운영 체제를 업데이트합니다. 이렇게 하면 해당 노드의 기본 RHCOS 이미지를 재정의하는 사용자 정의 계층 이미지가 생성됩니다.

머신 구성을 생성한 후 MCO는 다음과 같습니다.

  1. 지정된 풀 또는 풀에 대한 새 머신 구성을 렌더링합니다.
  2. 풀 또는 풀의 노드에서 차단 및 드레인 작업을 수행합니다.
  3. 나머지 머신 구성 매개변수를 노드에 씁니다.
  4. 사용자 정의 계층화된 이미지를 노드에 적용합니다.
  5. 새 이미지를 사용하여 노드를 재부팅합니다.
중요

클러스터에 롤아웃하기 전에 프로덕션 환경 외부에서 이미지를 테스트하는 것이 좋습니다.

15.1. RHCOS 사용자 정의 계층 이미지 적용

특정 머신 구성 풀의 노드에서 RHCOS(Red Hat Enterprise Linux CoreOS) 이미지 계층 지정을 쉽게 구성할 수 있습니다. MCO(Machine Config Operator)는 새로운 사용자 정의 계층 이미지로 해당 노드를 재부팅하여 기본 RHCOS(Red Hat Enterprise Linux CoreOS) 이미지를 덮어씁니다.

사용자 정의 계층 이미지를 클러스터에 적용하려면 클러스터가 액세스할 수 있는 리포지토리에 사용자 정의 계층화된 이미지가 있어야 합니다. 그런 다음 사용자 정의 계층 이미지를 가리키는 MachineConfig 오브젝트를 만듭니다. 구성할 각 머신 구성 풀에 대해 별도의 MachineConfig 오브젝트가 필요합니다.

중요

사용자 정의 계층 이미지를 구성하면 OpenShift Container Platform에서 사용자 정의 계층 이미지를 사용하는 노드를 자동으로 업데이트하지 않습니다. 노드를 적절하게 수동으로 업데이트해야 합니다. 사용자 정의 계층을 롤백하면 OpenShift Container Platform에서 노드를 다시 자동으로 업데이트합니다. 사용자 정의 계층 이미지를 사용하는 노드 업데이트에 대한 중요한 정보는 다음 추가 리소스 섹션을 참조하십시오.

사전 요구 사항

  • 태그가 아닌 OpenShift Container Platform 이미지 다이제스트를 기반으로 사용자 정의 계층 이미지를 생성해야 합니다.

    참고

    클러스터의 나머지 부분에 설치된 동일한 기본 RHCOS 이미지를 사용해야 합니다. oc adm release info --image-for rhel-coreos-8 명령을 사용하여 클러스터에 사용되는 기본 이미지를 가져옵니다.

    예를 들어 다음 Containerfile은 OpenShift Container Platform 4.12 이미지에서 사용자 정의 계층 이미지를 생성하고 CentOS 8 Stream의 커널 패키지를 덮어씁니다.

    사용자 정의 계층 이미지의 컨테이너 파일의 예

    # Using a 4.12.0 image
    FROM quay.io/openshift-release/ocp-release@sha256... 1
    #Install hotfix rpm
    RUN rpm-ostree cliwrap install-to-root / \ 2
        rpm-ostree override replace http://mirror.centos.org/centos/8-stream/BaseOS/x86_64/os/Packages/kernel-{,core-,modules-,modules-extra-}4.18.0-483.el8.x86_64.rpm && \ 3
        rpm-ostree cleanup -m && \
        ostree container commit

    1
    클러스터의 RHCOS 기본 이미지를 지정합니다.
    2
    cliwrap 을 활성화합니다. 현재 이는 커널 스크립트에서 수행된 일부 명령 호출을 가로채는 데 필요합니다.
    3
    커널 패키지를 대체합니다.
    참고

    컨테이너 파일을 생성하는 방법에 대한 지침은 이 문서의 범위를 벗어납니다.

  • 사용자 정의 계층 이미지를 빌드하는 프로세스는 클러스터 외부에서 수행되므로 Podman 또는 Buildah와 함께 --authfile /path/to/pull-secret 옵션을 사용해야 합니다. 또는 이러한 툴에서 가져오기 보안을 자동으로 읽으려면 ~/.docker/config.json ,$XDG_RUNTIME_DIR/containers.json , ~/.docker/config.json,~/.docker/config.json .dockercfg . dockercfg 중 하나에 추가할 수 있습니다. 자세한 내용은 containers-auth.json 매뉴얼 페이지를 참조하십시오.
  • 사용자 정의 계층 이미지를 클러스터가 액세스할 수 있는 리포지토리로 내보내야 합니다.

절차

  1. 머신 구성 파일을 생성합니다.

    1. 다음과 유사한 YAML 파일을 생성합니다.

      apiVersion: machineconfiguration.openshift.io/v1
      kind: MachineConfig
      metadata:
        labels:
          machineconfiguration.openshift.io/role: worker 1
        name: os-layer-hotfix
      spec:
        osImageURL: quay.io/my-registry/custom-image@sha256... 2
      1
      사용자 정의 계층 이미지를 적용할 머신 구성 풀을 지정합니다.
      2
      리포지토리의 사용자 정의 계층 이미지 경로를 지정합니다.
    2. MachineConfig 오브젝트를 생성합니다.

      $ oc create -f <file_name>.yaml
      중요

      클러스터에 롤아웃하기 전에 프로덕션 환경 외부에서 이미지를 테스트하는 것이 좋습니다.

검증

다음 점검 중 하나를 수행하여 사용자 정의 계층 이미지가 적용되었는지 확인할 수 있습니다.

  1. 새 머신 구성을 사용하여 작업자 머신 구성 풀이 롤아웃되었는지 확인합니다.

    1. 새 머신 구성이 생성되었는지 확인합니다.

      $ oc get mc

      샘플 출력

      NAME                                               GENERATEDBYCONTROLLER                      IGNITIONVERSION   AGE
      00-master                                          5bdb57489b720096ef912f738b46330a8f577803   3.2.0             95m
      00-worker                                          5bdb57489b720096ef912f738b46330a8f577803   3.2.0             95m
      01-master-container-runtime                        5bdb57489b720096ef912f738b46330a8f577803   3.2.0             95m
      01-master-kubelet                                  5bdb57489b720096ef912f738b46330a8f577803   3.2.0             95m
      01-worker-container-runtime                        5bdb57489b720096ef912f738b46330a8f577803   3.2.0             95m
      01-worker-kubelet                                  5bdb57489b720096ef912f738b46330a8f577803   3.2.0             95m
      99-master-generated-registries                     5bdb57489b720096ef912f738b46330a8f577803   3.2.0             95m
      99-master-ssh                                                                                 3.2.0             98m
      99-worker-generated-registries                     5bdb57489b720096ef912f738b46330a8f577803   3.2.0             95m
      99-worker-ssh                                                                                 3.2.0             98m
      os-layer-hotfix                                                                                                 10s 1
      rendered-master-15961f1da260f7be141006404d17d39b   5bdb57489b720096ef912f738b46330a8f577803   3.2.0             95m
      rendered-worker-5aff604cb1381a4fe07feaf1595a797e   5bdb57489b720096ef912f738b46330a8f577803   3.2.0             95m
      rendered-worker-5de4837625b1cbc237de6b22bc0bc873   5bdb57489b720096ef912f738b46330a8f577803   3.2.0             4s  2

      1
      새 머신 구성
      2
      새로 렌더링된 머신 구성
    2. 새 머신 구성의 osImageURL 값이 예상 이미지를 가리키는지 확인합니다.

      $ oc describe mc rendered-master-4e8be63aef68b843b546827b6ebe0913

      출력 예

      Name:         rendered-master-4e8be63aef68b843b546827b6ebe0913
      Namespace:
      Labels:       <none>
      Annotations:  machineconfiguration.openshift.io/generated-by-controller-version: 8276d9c1f574481043d3661a1ace1f36cd8c3b62
                    machineconfiguration.openshift.io/release-image-version: 4.12.0-ec.3
      API Version:  machineconfiguration.openshift.io/v1
      Kind:         MachineConfig
      ...
        Os Image URL: quay.io/my-registry/custom-image@sha256...

    3. 연결된 머신 구성 풀이 새 머신 구성으로 업데이트되고 있는지 확인합니다.

      $ oc get mcp

      샘플 출력

      NAME     CONFIG                                             UPDATED   UPDATING   DEGRADED   MACHINECOUNT   READYMACHINECOUNT   UPDATEDMACHINECOUNT   DEGRADEDMACHINECOUNT   AGE
      master   rendered-master-6faecdfa1b25c114a58cf178fbaa45e2   True      False      False      3              3                   3                     0                      39m
      worker   rendered-worker-6b000dbc31aaee63c6a2d56d04cd4c1b   False     True       False      3              0                   0                     0                      39m 1

      1
      UPDATING 필드가 True 이면 머신 구성 풀이 새 머신 구성으로 업데이트됩니다. 필드가 False 가 되면 작업자 머신 구성 풀이 새 머신 구성에 롤아웃됩니다.
    4. 노드에서 노드에서 예약이 비활성화되었는지 확인합니다. 변경 사항이 적용 중임을 나타냅니다.

      $ oc get nodes

      출력 예

      NAME                                         STATUS                     ROLES                  AGE   VERSION
      ip-10-0-148-79.us-west-1.compute.internal    Ready                      worker                 32m   v1.25.0+3ef6ef3
      ip-10-0-155-125.us-west-1.compute.internal   Ready,SchedulingDisabled   worker                 35m   v1.25.0+3ef6ef3
      ip-10-0-170-47.us-west-1.compute.internal    Ready                      control-plane,master   42m   v1.25.0+3ef6ef3
      ip-10-0-174-77.us-west-1.compute.internal    Ready                      control-plane,master   42m   v1.25.0+3ef6ef3
      ip-10-0-211-49.us-west-1.compute.internal    Ready                      control-plane,master   42m   v1.25.0+3ef6ef3
      ip-10-0-218-151.us-west-1.compute.internal   Ready                      worker                 31m   v1.25.0+3ef6ef3

  2. 노드가 Ready 상태가 되면 노드에서 사용자 정의 계층 이미지를 사용하고 있는지 확인합니다.

    1. 노드에 대한 oc debug 세션을 엽니다. 예를 들면 다음과 같습니다.

      $ oc debug node/ip-10-0-155-125.us-west-1.compute.internal
    2. 디버그 쉘 내에서 /host를 root 디렉터리로 설정합니다.

      sh-4.4# chroot /host
    3. rpm-ostree status 명령을 실행하여 사용자 정의 계층 이미지가 사용 중인지 확인합니다.

      sh-4.4# sudo rpm-ostree status

      출력 예

      State: idle
      Deployments:
      * ostree-unverified-registry:quay.io/my-registry/...
                         Digest: sha256:...