엣지 컴퓨팅


OpenShift Container Platform 4.19

네트워크 에지에서 OpenShift Container Platform 클러스터 구성 및 배포

Red Hat OpenShift Documentation Team

초록

이 문서에서는 네트워크 에지에서 OpenShift Container Platform 클러스터를 구성하고 배포하는 방법을 설명합니다.

1장. 네트워크 원거리 경계의 과제

엣지 컴퓨팅은 지리적으로 떨어진 곳에 있는 많은 사이트를 관리할 때 복잡한 문제를 야기합니다. GitOps Zero Touch Provisioning(ZTP)을 사용하면 네트워크의 가장 먼 끝에 있는 사이트를 프로비저닝하고 관리할 수 있습니다.

1.1. 네트워크의 극단에서의 과제 극복

오늘날 서비스 제공자는 네트워크 가장자리에 인프라를 구축하려고 합니다. 이는 다음과 같은 심각한 과제를 제기합니다.

  • 여러 개의 엣지 사이트를 병렬로 배포하는 경우 어떻게 처리하시나요?
  • 연결이 끊긴 환경에 사이트를 배포해야 하는 경우 어떻게 해야 하나요?
  • 대규모 클러스터의 수명 주기를 어떻게 관리하시나요?

GitOps Zero Touch Provisioning(ZTP)과 GitOps는 베어 메탈 장비에 대한 선언적 사이트 정의와 구성을 통해 대규모로 원격 에지 사이트를 프로비저닝할 수 있도록 하여 이러한 과제를 해결합니다. 템플릿 또는 오버레이 구성은 CNF 워크로드에 필요한 OpenShift Container Platform 기능을 설치합니다. 설치 및 업그레이드의 전체 수명 주기는 GitOps ZTP 파이프라인을 통해 처리됩니다.

GitOps ZTP는 인프라 배포에 GitOps를 사용합니다. GitOps를 사용하면 Git 저장소에 저장된 선언적 YAML 파일과 기타 정의된 패턴을 사용할 수 있습니다. Red Hat Advanced Cluster Management(RHACM)는 Git 저장소를 사용하여 인프라 배포를 추진합니다.

GitOps는 각 사이트의 원하는 상태에 대한 추적성, 역할 기반 액세스 제어(RBAC) 및 단일 진실 소스를 제공합니다. 확장성 문제는 Git 방법론과 웹후크를 통한 이벤트 기반 작업을 통해 해결됩니다.

GitOps ZTP 워크플로는 GitOps ZTP 파이프라인이 에지 노드에 전달하는 선언적 사이트 정의 및 구성 사용자 정의 리소스(CR)를 만들어서 시작합니다.

다음 다이어그램은 GitOps ZTP가 Far Edge 프레임워크 내에서 작동하는 방식을 보여줍니다.

Red Hat Advanced Cluster Management(RHACM)는 허브 앤 스포크 아키텍처에서 클러스터를 관리합니다. 즉, 단일 허브 클러스터가 여러 스포크 클러스터를 관리합니다. RHACM을 실행하는 허브 클러스터는 GitOps Zero Touch Provisioning(ZTP)과 RHACM을 설치할 때 배포되는 지원 서비스를 사용하여 관리형 클러스터를 프로비저닝하고 배포합니다.

지원 서비스는 단일 노드 클러스터, 3-노드 클러스터 또는 베어 메탈에서 실행되는 표준 클러스터에서 OpenShift Container Platform의 프로비저닝을 처리합니다.

OpenShift Container Platform에서 베어 메탈 호스트를 프로비저닝하고 유지 관리하기 위해 GitOps ZTP를 사용하는 방법에 대한 간략한 개요는 다음과 같습니다.

  • RHACM을 실행하는 허브 클러스터는 OpenShift Container Platform 릴리스 이미지를 미러링하는 OpenShift 이미지 레지스트리를 관리합니다. RHACM은 OpenShift 이미지 레지스트리를 사용하여 관리되는 클러스터를 프로비저닝합니다.
  • 베어 메탈 호스트는 Git 저장소에 버전이 관리되는 YAML 형식 인벤토리 파일로 관리됩니다.
  • 호스트를 관리형 클러스터로 프로비저닝할 준비를 하고, RHACM과 지원 서비스를 사용하여 사이트에 베어 메탈 호스트를 설치합니다.

클러스터 설치 및 배포는 초기 설치 단계와 후속 구성 및 배포 단계가 포함된 2단계 프로세스입니다. 다음 다이어그램은 이 워크플로를 보여줍니다.

1.3. SiteConfig 리소스 및 RHACM을 사용하여 관리형 클러스터 설치

GitOps Zero Touch Provisioning(ZTP)은 Git 저장소의 SiteConfig 사용자 정의 리소스(CR)를 사용하여 OpenShift Container Platform 클러스터를 설치하는 프로세스를 관리합니다. SiteConfig CR에는 설치에 필요한 클러스터별 매개변수가 포함되어 있습니다. 설치 중에 사용자 정의 추가 매니페스트를 포함하여 선택한 구성 CR을 적용하는 옵션이 있습니다.

GitOps ZTP 플러그인은 SiteConfig CR을 처리하여 허브 클러스터에서 CR 컬렉션을 생성합니다. 이렇게 하면 Red Hat Advanced Cluster Management(RHACM)의 지원 서비스가 트리거되어 베어 메탈 호스트에 OpenShift Container Platform을 설치합니다. 허브 클러스터의 이러한 CR에서 설치 상태 및 오류 메시지를 찾을 수 있습니다.

GitOps ZTP를 사용하면 단일 클러스터를 수동으로 또는 일괄적으로 프로비저닝할 수 있습니다.

단일 클러스터 프로비저닝
클러스터의 단일 SiteConfig CR 및 관련 설치 및 구성 CR을 생성하고 Hub 클러스터에 적용하여 클러스터 프로비저닝을 시작합니다. 이는 대규모로 배포하기 전에 CR을 테스트하는 좋은 방법입니다.
여러 클러스터 프로비저닝
Git 저장소에서 SiteConfig 와 관련 CR을 정의하여 최대 400개까지의 관리형 클러스터를 설치합니다. ArgoCD는 SiteConfig CR을 사용하여 사이트를 배포합니다. RHACM 정책 생성기는 매니페스트를 생성하여 Hub 클러스터에 적용합니다. 이렇게 하면 클러스터 프로비저닝 프로세스가 시작됩니다.
중요

SiteConfig v1은 OpenShift Container Platform 버전 4.18부터 더 이상 사용되지 않습니다. 이제 ClusterInstance 사용자 정의 리소스를 사용하여 SiteConfig Operator를 통해 동등하고 향상된 기능을 사용할 수 있습니다. 자세한 내용은 SiteConfig CR에서 ClusterInstance API로 전환하는 절차를 참조하세요.

SiteConfig Operator에 대한 자세한 내용은 SiteConfig를 참조하십시오.

1.4. 정책 및 PolicyGenerator 리소스를 사용하여 관리형 클러스터 구성

GitOps Zero Touch Provisioning(ZTP)은 Red Hat Advanced Cluster Management(RHACM)를 사용하여 정책 기반 거버넌스 접근 방식으로 구성을 적용함으로써 클러스터를 구성합니다.

정책 생성기는 간결한 템플릿으로부터 RHACM 정책을 생성할 수 있는 GitOps Operator용 플러그인입니다. 이 도구를 사용하면 여러 CR을 단일 정책으로 결합할 수 있으며, 함대 내 다양한 클러스터 하위 집합에 적용되는 여러 정책을 생성할 수 있습니다.

참고

확장성을 높이고 클러스터 전체에서 구성을 관리하는 복잡성을 줄이려면 가능한 한 공통성이 높은 구성 CR을 사용하세요.

  • 가능한 경우, 함대 전체에 공통된 정책을 사용하여 구성 CR을 적용합니다.
  • 다음 기본 설정은 그룹 정책에 따라 가능한 한 많은 나머지 구성을 관리하기 위해 클러스터의 논리적 그룹을 만드는 것입니다.
  • 구성이 개별 사이트에만 고유한 경우 허브 클러스터에서 RHACM 템플릿을 사용하여 사이트별 데이터를 공통 정책이나 그룹 정책에 주입합니다. 또는 사이트에 개별 사이트 정책을 적용하세요.

다음 다이어그램은 클러스터 배포의 구성 단계에서 정책 생성기가 GitOps 및 RHACM과 상호 작용하는 방식을 보여줍니다.

대규모 클러스터의 경우 해당 클러스터 구성에 높은 수준의 일관성이 있는 것이 일반적입니다.

다음에 권장하는 정책 구조는 여러 목표를 충족하기 위해 구성 CR을 결합합니다.

  • 일반적인 구성을 한 번 설명하고 플릿에 적용됩니다.
  • 유지 관리 및 관리되는 정책의 수를 최소화합니다.
  • 클러스터 변형에 대한 공통 구성의 유연성을 지원합니다.
Expand
표 1.1. 권장 PolicyGenerator 정책 범주
정책 카테고리설명

흔한

공통 범주에 존재하는 정책은 함대의 모든 클러스터에 적용됩니다. 모든 클러스터 유형에 공통적인 설치 설정을 적용하려면 일반적인 PolicyGenerator CR을 사용합니다.

그룹

그룹 카테고리에 존재하는 정책은 함대 내의 클러스터 그룹에 적용됩니다. 그룹 PolicyGenerator CR을 사용하여 단일 노드, 3-노드 및 표준 클러스터 설치의 특정 측면을 관리합니다. 클러스터 그룹은 지리적 지역, 하드웨어 변형 등을 따를 수도 있습니다.

사이트

사이트 카테고리에 존재하는 정책은 특정 클러스터 사이트에 적용됩니다. 모든 클러스터는 고유한 정책을 유지 관리할 수 있습니다.

중요

PolicyGenTemplate CR을 사용하여 관리형 클러스터에 정책을 관리하고 배포하는 기능은 향후 OpenShift Container Platform 릴리스에서 더 이상 지원되지 않습니다. Red Hat Advanced Cluster Management(RHACM) 및 PolicyGenerator CR을 사용하면 동일하거나 향상된 기능을 사용할 수 있습니다.

PolicyGenerator 리소스에 대한 자세한 내용은 RHACM 통합 정책 생성기 문서를 참조하세요.

2장. GitOps ZTP를 위한 허브 클러스터 준비

연결이 끊긴 환경에서 RHACM을 사용하려면 OpenShift Container Platform 릴리스 이미지와 필수 Operator 이미지가 포함된 Operator Lifecycle Manager(OLM) 카탈로그를 미러링하는 미러 레지스트리를 만듭니다. OLM은 클러스터 내의 운영자와 종속성을 관리, 설치, 업그레이드합니다. 베어 메탈 호스트를 프로비저닝하는 데 사용되는 RHCOS ISO 및 RootFS 디스크 이미지를 제공하기 위해 연결이 끊긴 미러 호스트를 사용할 수도 있습니다.

2.1. Telco RAN DU 4.19 검증된 소프트웨어 구성 요소

Red Hat 통신사 RAN DU 4.19 솔루션은 OpenShift Container Platform 관리 클러스터에 대해 다음 Red Hat 소프트웨어 제품을 사용하여 검증되었습니다.

Expand
표 2.1. Telco RAN DU 관리 클러스터 검증 소프트웨어 구성 요소
Component소프트웨어 버전

관리형 클러스터 버전

4.19

Cluster Logging Operator

6.21

Local Storage Operator

4.19

데이터 보호를 위한 OpenShift API(OADP)

1.5

PTP Operator

4.19

SR-IOV Operator

4.19

SRIOV-FEC Operator

2.11

라이프사이클 에이전트

4.19

[1] 이 표는 정렬된 Cluster Logging Operator 버전 6.3이 출시되면 업데이트됩니다.

GitOps Zero Touch Provisioning(ZTP)을 사용하면 지리적으로 분산된 지역과 네트워크에 있는 수천 개의 클러스터를 관리할 수 있습니다. Red Hat Performance and Scale 랩은 랩 환경에서 단일 Red Hat Advanced Cluster Management(RHACM) 허브 클러스터에서 축소된 DU 프로필을 사용하여 3,500개의 가상 단일 노드 OpenShift 클러스터를 성공적으로 생성하고 관리했습니다.

실제 상황에서 관리할 수 있는 클러스터 수의 확장 제한은 허브 클러스터에 영향을 미치는 다양한 요소에 따라 달라집니다. 예를 들면 다음과 같습니다.

허브 클러스터 리소스
사용 가능한 허브 클러스터 호스트 리소스(CPU, 메모리, 스토리지)는 허브 클러스터가 관리할 수 있는 클러스터 수를 결정하는 중요한 요소입니다. 허브 클러스터에 할당된 리소스가 많을수록 수용할 수 있는 관리 클러스터 수가 늘어납니다.
허브 클러스터 스토리지
허브 클러스터 호스트 스토리지 IOPS 등급과 허브 클러스터 호스트가 NVMe 스토리지를 사용하는지 여부는 허브 클러스터 성능과 관리할 수 있는 클러스터 수에 영향을 미칠 수 있습니다.
네트워크 대역폭 및 지연 시간
허브 클러스터와 관리 클러스터 간의 네트워크 연결이 느리거나 대기 시간이 길면 허브 클러스터가 여러 클러스터를 관리하는 방식에 영향을 미칠 수 있습니다.
관리되는 클러스터 크기 및 복잡성
관리되는 클러스터의 크기와 복잡성도 허브 클러스터의 용량에 영향을 미칩니다. 더 많은 노드, 네임스페이스, 리소스가 있는 대규모 관리형 클러스터에는 추가적인 처리 및 관리 리소스가 필요합니다. 마찬가지로 RAN DU 프로필이나 다양한 작업 부하와 같이 복잡한 구성을 가진 클러스터는 허브 클러스터에서 더 많은 리소스를 요구할 수 있습니다.
관리되는 정책의 수
허브 클러스터에서 관리하는 정책의 수는 해당 정책에 바인딩된 관리 클러스터의 수에 비례하여 증가하는데, 이는 관리할 수 있는 클러스터의 수를 결정하는 중요한 요소입니다.
모니터링 및 관리 작업 부하
RHACM은 관리되는 클러스터를 지속적으로 모니터링하고 관리합니다. 허브 클러스터에서 실행되는 모니터링 및 관리 작업의 수와 복잡성은 용량에 영향을 미칠 수 있습니다. 집중적인 모니터링 또는 빈번한 조정 작업에는 추가 리소스가 필요할 수 있으므로 관리 가능한 클러스터 수를 제한할 수 있습니다.
RHACM 버전 및 구성
RHACM의 다양한 버전은 성능 특성과 리소스 요구 사항이 다를 수 있습니다. 또한, 동시 조정 수나 상태 검사 빈도와 같은 RHACM의 구성 설정은 허브 클러스터의 관리되는 클러스터 용량에 영향을 미칠 수 있습니다.

다음의 대표적인 구성과 네트워크 사양을 사용하여 고유한 허브 클러스터와 네트워크 사양을 개발하세요.

중요

다음 가이드라인은 내부 연구실 벤치마크 테스트에만 기반하며, 완전한 베어 메탈 호스트 사양을 나타내는 것은 아닙니다.

Expand
표 2.2. 대표적인 3노드 허브 클러스터 머신 사양
요구 사항설명

서버 하드웨어

3 x Dell PowerEdge R650 랙 서버

NVMe 하드 디스크

  • /var/lib/etcd 용 50GB 디스크
  • /var/lib/containers 용 2.9TB 디스크

SSD 하드 디스크

  • 1개의 SSD가 PV CR로 프로비저닝된 15개의 200GB 씬 프로비저닝 논리 볼륨으로 분할됨
  • 1개의 SSD가 초대형 PV 리소스로 사용됨

적용된 DU 프로필 정책 수

5

중요

다음 네트워크 사양은 일반적인 실제 RAN 네트워크를 대표하며, 테스트 중에 규모 실험실 환경에 적용되었습니다.

Expand
표 2.3. 시뮬레이션된 실험실 환경 네트워크 사양
사양설명

왕복 시간(RTT) 지연 시간

50밀리초

패킷 손실

0.02% 패킷 손실

네트워크 대역폭 제한

20Mbps

2.3. 연결이 끊긴 환경에 GitOps ZTP 설치

연결이 끊긴 환경의 허브 클러스터에서 Red Hat Advanced Cluster Management(RHACM), Red Hat OpenShift GitOps 및 Topology Aware Lifecycle Manager(TALM)를 사용하여 여러 관리형 클러스터의 배포를 관리합니다.

사전 요구 사항

  • OpenShift Container Platform CLI(oc)를 설치했습니다.
  • 클러스터 관리자 권한이 있는 사용자로 로그인했습니다.
  • 클러스터에서 사용할 연결이 끊긴 미러 레지스트리를 구성했습니다.

    참고

    생성하는 연결 해제된 미러 레지스트리에는 허브 클러스터에서 실행되는 TALM 버전과 일치하는 TALM 백업 및 사전 캐시 이미지 버전이 포함되어야 합니다. 스포크 클러스터는 연결이 끊긴 미러 레지스트리에서 이러한 이미지를 확인할 수 있어야 합니다.

프로세스

2.4. 연결이 끊긴 미러 호스트에 RHCOS ISO 및 RootFS 이미지 추가

Red Hat Advanced Cluster Management(RHACM)를 사용하여 연결이 끊긴 환경에 클러스터를 설치하기 전에 먼저 사용할 Red Hat Enterprise Linux CoreOS(RHCOS) 이미지를 호스팅해야 합니다. 연결이 끊긴 미러를 사용하여 RHCOS 이미지를 호스팅합니다.

사전 요구 사항

  • 네트워크에서 RHCOS 이미지 리소스를 호스팅하기 위해 HTTP 서버를 배포하고 구성합니다. 자신의 컴퓨터와 자신이 만든 머신에서 HTTP 서버에 접근할 수 있어야 합니다.
중요

RHCOS 이미지는 OpenShift Container Platform 릴리스에 따라 변경되지 않을 수 있습니다. 설치한 버전보다 낮거나 같은 가장 높은 버전의 이미지를 다운로드해야 합니다. 사용 가능한 경우 OpenShift Container Platform 버전과 일치하는 이미지 버전을 사용합니다. 호스트에 RHCOS를 설치하려면 ISO 및 RootFS 이미지가 필요합니다. 이 설치 유형에서는 RHCOS QCOW2 이미지가 지원되지 않습니다.

프로세스

  1. 미러 호스트에 로그인합니다.
  2. 예를 들어 mirror.openshift.com 에서 RHCOS ISO 및 RootFS 이미지를 가져옵니다.

    1. 필요한 이미지 이름과 OpenShift Container Platform 버전을 환경 변수로 내보냅니다.

      $ export ISO_IMAGE_NAME=<iso_image_name> 
      1
      Copy to Clipboard Toggle word wrap
      $ export ROOTFS_IMAGE_NAME=<rootfs_image_name> 
      1
      Copy to Clipboard Toggle word wrap
      $ export OCP_VERSION=<ocp_version> 
      1
      Copy to Clipboard Toggle word wrap
      1
      ISO 이미지 이름(예: rhcos-4.19.1-x86_64-live.x86_64.iso)
      1
      RootFS 이미지 이름(예: rhcos-4.19.1-x86_64-live-rootfs.x86_64.img)
      1
      OpenShift 컨테이너 플랫폼 버전(예: 4.19.1)
    2. 필요한 이미지를 다운로드하세요:

      $ sudo wget https://mirror.openshift.com/pub/openshift-v4/dependencies/rhcos/4.19/${OCP_VERSION}/${ISO_IMAGE_NAME} -O /var/www/html/${ISO_IMAGE_NAME}
      Copy to Clipboard Toggle word wrap
      $ sudo wget https://mirror.openshift.com/pub/openshift-v4/dependencies/rhcos/4.19/${OCP_VERSION}/${ROOTFS_IMAGE_NAME} -O /var/www/html/${ROOTFS_IMAGE_NAME}
      Copy to Clipboard Toggle word wrap

검증 단계

  • 이미지가 성공적으로 다운로드되었고 연결이 끊긴 미러 호스트에서 제공되고 있는지 확인하세요. 예:

    $ wget http://$(hostname)/${ISO_IMAGE_NAME}
    Copy to Clipboard Toggle word wrap

    출력 예

    Saving to: rhcos-4.19.1-x86_64-live.x86_64.iso
    rhcos-4.19.1-x86_64-live.x86_64.iso-  11%[====>    ]  10.01M  4.71MB/s
    Copy to Clipboard Toggle word wrap

2.5. 지원 서비스 활성화

Red Hat Advanced Cluster Management(RHACM)는 지원 서비스를 사용하여 OpenShift Container Platform 클러스터를 배포합니다. Red Hat Advanced Cluster Management(RHACM)에서 MultiClusterHub Operator를 활성화하면 지원 서비스가 자동으로 배포됩니다. 그런 다음 모든 네임스페이스를 감시하고 미러 레지스트리 HTTP 서버에 호스팅된 ISO 및 RootFS 이미지에 대한 참조로 AgentServiceConfig 사용자 지정 리소스(CR)를 업데이트하도록 Provisioning 리소스를 구성해야 합니다.

사전 요구 사항

  • OpenShift CLI(oc)가 설치되어 있습니다.
  • cluster-admin 권한이 있는 사용자로 허브 클러스터에 로그인했습니다.
  • MultiClusterHub 가 활성화된 RHACM이 있습니다.

프로세스

  1. 프로비저닝 리소스를 활성화하여 모든 네임스페이스를 감시하고 연결이 끊긴 환경에 대한 미러를 구성합니다. 자세한 내용은 중앙 인프라 관리 서비스 활성화를 참조하세요.
  2. 다음 명령을 실행하여 AgentServiceConfig CR을 열고 spec.osImages 필드를 업데이트합니다.

    $ oc edit AgentServiceConfig
    Copy to Clipboard Toggle word wrap
  3. AgentServiceConfig CR에서 spec.osImages 필드를 업데이트합니다.

    apiVersion: agent-install.openshift.io/v1beta1
    kind: AgentServiceConfig
    metadata:
     name: agent
    spec:
    # ...
      osImages:
        - cpuArchitecture: x86_64
          openshiftVersion: "4.19"
          rootFSUrl: https://<host>/<path>/rhcos-live-rootfs.x86_64.img
          url: https://<host>/<path>/rhcos-live.x86_64.iso
    Copy to Clipboard Toggle word wrap

    다음과 같습니다.

    <host>
    대상 미러 레지스트리 HTTP 서버에 대한 정규화된 도메인 이름(FQDN)을 지정합니다.
    <path>
    대상 미러 레지스트리의 이미지 경로를 지정합니다.
  4. 변경 사항을 적용하려면 편집기를 저장하고 종료하세요.

2.6. 연결이 끊긴 미러 레지스트리를 사용하도록 허브 클러스터 구성

연결이 끊긴 환경에서 연결이 끊긴 미러 레지스트리를 사용하도록 허브 클러스터를 구성할 수 있습니다.

사전 요구 사항

  • Red Hat Advanced Cluster Management(RHACM) 2.13이 설치된 연결이 끊긴 허브 클러스터 설치가 있습니다.
  • HTTP 서버에서 rootfsiso 이미지를 호스팅했습니다. OpenShift Container Platform 이미지 저장소 미러링 에 대한 지침은 추가 리소스 섹션을 참조하세요.
주의

HTTP 서버에 TLS를 활성화하는 경우 클라이언트가 신뢰하는 기관에서 루트 인증서에 서명했는지 확인하고 OpenShift Container Platform 허브와 관리형 클러스터, HTTP 서버 간의 신뢰할 수 있는 인증서 체인을 검증해야 합니다. 신뢰할 수 없는 인증서로 구성된 서버를 사용하면 이미지가 이미지 생성 서비스에 다운로드되지 않습니다. 신뢰할 수 없는 HTTPS 서버 사용은 지원되지 않습니다.

프로세스

  1. 미러 레지스트리 구성이 포함된 ConfigMap 을 생성합니다.

    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: assisted-installer-mirror-config
      namespace: multicluster-engine 
    1
    
      labels:
        app: assisted-service
    data:
      ca-bundle.crt: | 
    2
    
        -----BEGIN CERTIFICATE-----
        <certificate_contents>
        -----END CERTIFICATE-----
    
      registries.conf: | 
    3
    
        unqualified-search-registries = ["registry.access.redhat.com", "docker.io"]
    
        [[registry]]
           prefix = ""
           location = "quay.io/example-repository" 
    4
    
           mirror-by-digest-only = true
    
           [[registry.mirror]]
           location = "mirror1.registry.corp.com:5000/example-repository" 
    5
    Copy to Clipboard Toggle word wrap
    1
    ConfigMap 네임스페이스는 multicluster-engine 으로 설정되어야 합니다.
    2
    미러 레지스트리를 생성할 때 사용되는 미러 레지스트리의 인증서입니다.
    3
    미러 레지스트리의 구성 파일입니다. 미러 레지스트리 구성은 검색 이미지의 /etc/containers/registries.conf 파일에 미러 정보를 추가합니다. 해당 정보가 설치 프로그램으로 전달되면 미러 정보는 install-config.yaml 파일의 imageContentSources 섹션에 저장됩니다. 허브 클러스터에서 실행되는 지원 서비스 포드는 구성된 미러 레지스트리에서 컨테이너 이미지를 가져옵니다.
    4
    미러 레지스트리의 URL입니다. 미러 레지스트리를 구성할 때 oc adm release mirror 명령을 실행하여 imageContentSources 섹션의 URL을 사용해야 합니다. 자세한 내용은 OpenShift 컨테이너 플랫폼 이미지 저장소 미러링 섹션을 참조하세요.
    5
    registries.conf 파일에 정의된 레지스트리는 레지스트리가 아닌 저장소로 범위가 지정되어야 합니다. 이 예에서 quay.io/example-repositorymirror1.registry.corp.com:5000/example-repository 저장소는 모두 example-repository 저장소에 의해 범위가 지정됩니다.

    이렇게 하면 아래와 같이 AgentServiceConfig 사용자 지정 리소스의 mirrorRegistryRef 가 업데이트됩니다.

    출력 예

    apiVersion: agent-install.openshift.io/v1beta1
    kind: AgentServiceConfig
    metadata:
      name: agent
      namespace: multicluster-engine 
    1
    
    spec:
      databaseStorage:
        volumeName: <db_pv_name>
        accessModes:
        - ReadWriteOnce
        resources:
          requests:
            storage: <db_storage_size>
      filesystemStorage:
        volumeName: <fs_pv_name>
        accessModes:
        - ReadWriteOnce
        resources:
          requests:
            storage: <fs_storage_size>
      mirrorRegistryRef:
        name: assisted-installer-mirror-config 
    2
    
      osImages:
        - openshiftVersion: <ocp_version> 
    3
    
          url: <iso_url> 
    4
    Copy to Clipboard Toggle word wrap

    1
    ConfigMap 네임스페이스와 일치하도록 AgentServiceConfig 네임스페이스를 multicluster-engine 으로 설정합니다.
    2
    관련 ConfigMap CR에 지정된 정의와 일치하도록 mirrorRegistryRef.name을 설정합니다.
    3
    OpenShift Container Platform 버전을 xy 또는 xyz 형식으로 설정합니다.
    4
    httpd 서버에 호스팅된 ISO의 URL을 설정합니다.
중요

클러스터 설치 중에 유효한 NTP 서버가 필요합니다. 적합한 NTP 서버가 사용 가능한지 확인하고, 연결이 끊긴 네트워크를 통해 설치된 클러스터에서 해당 서버에 접속할 수 있는지 확인하세요.

2.7. 인증되지 않은 레지스트리를 사용하도록 허브 클러스터 구성

인증되지 않은 레지스트리를 사용하도록 허브 클러스터를 구성할 수 있습니다. 인증되지 않은 레지스트리는 이미지에 접근하고 다운로드하는 데 인증이 필요하지 않습니다.

사전 요구 사항

  • 허브 클러스터를 설치하고 구성했으며, 허브 클러스터에 Red Hat Advanced Cluster Management(RHACM)를 설치했습니다.
  • OpenShift Container Platform CLI(oc)를 설치했습니다.
  • 클러스터 관리자 권한이 있는 사용자로 로그인했습니다.
  • 허브 클러스터와 함께 사용할 인증되지 않은 레지스트리를 구성했습니다.

프로세스

  1. 다음 명령을 실행하여 AgentServiceConfig 사용자 정의 리소스(CR)를 업데이트합니다.

    $ oc edit AgentServiceConfig agent
    Copy to Clipboard Toggle word wrap
  2. CR에 unauthenticatedRegistries 필드를 추가합니다.

    apiVersion: agent-install.openshift.io/v1beta1
    kind: AgentServiceConfig
    metadata:
      name: agent
    spec:
      unauthenticatedRegistries:
      - example.registry.com
      - example.registry2.com
      ...
    Copy to Clipboard Toggle word wrap

    인증되지 않은 레지스트리는 AgentServiceConfig 리소스의 spec.unauthenticatedRegistries 에 나열됩니다. 이 목록에 있는 모든 레지스트리에는 스포크 클러스터 설치에 사용되는 풀 비밀 항목이 필요하지 않습니다. assisted-service는 설치에 사용된 모든 이미지 레지스트리에 대한 인증 정보가 포함되어 있는지 확인하여 풀 시크릿의 유효성을 검사합니다.

참고

미러 레지스트리는 자동으로 무시 목록에 추가되므로 spec.unauthenticatedRegistries 에 추가할 필요가 없습니다. ConfigMap 에서 PUBLIC_CONTAINER_REGISTRIES 환경 변수를 지정하면 기본값이 지정된 값으로 재정의됩니다. PUBLIC_CONTAINER_REGISTRIES 의 기본값은 quay.ioregistry.svc.ci.openshift.org 입니다.

검증

다음 명령을 실행하여 허브 클러스터에서 새로 추가된 레지스트리에 액세스할 수 있는지 확인하세요.

  1. 허브 클러스터에 대한 디버그 셸 프롬프트를 엽니다.

    $ oc debug node/<node_name>
    Copy to Clipboard Toggle word wrap
  2. 다음 명령을 실행하여 인증되지 않은 레지스트리에 대한 액세스를 테스트합니다.

    sh-4.4# podman login -u kubeadmin -p $(oc whoami -t) <unauthenticated_registry>
    Copy to Clipboard Toggle word wrap

    다음과 같습니다.

    <unauthenticated_registry>
    예를 들어, 새로운 레지스트리는 unauthenticated-image-registry.openshift-image-registry.svc:5000 입니다.

    출력 예

    Login Succeeded!
    Copy to Clipboard Toggle word wrap

2.8. ArgoCD를 사용하여 허브 클러스터 구성

GitOps Zero Touch Provisioning(ZTP)을 사용하여 각 사이트에 필요한 설치 및 정책 사용자 정의 리소스(CR)를 생성하는 ArgoCD 애플리케이션 세트로 허브 클러스터를 구성할 수 있습니다.

참고

Red Hat Advanced Cluster Management(RHACM)는 SiteConfig CR을 사용하여 ArgoCD에 대한 Day 1 관리형 클러스터 설치 CR을 생성합니다. 각 ArgoCD 애플리케이션은 최대 300개의 SiteConfig CR을 관리할 수 있습니다.

사전 요구 사항

  • Red Hat Advanced Cluster Management(RHACM)와 Red Hat OpenShift GitOps가 설치된 OpenShift Container Platform 허브 클러스터가 있습니다.
  • "GitOps ZTP 사이트 구성 저장소 준비" 섹션에 설명된 대로 GitOps ZTP 플러그인 컨테이너에서 참조 배포를 추출했습니다. 참조 배포를 추출하면 다음 절차에서 참조되는 out/argocd/deployment 디렉터리가 생성됩니다.

프로세스

  1. ArgoCD 파이프라인 구성을 준비하세요.

    1. 예제 디렉토리와 비슷한 디렉토리 구조로 Git 저장소를 만듭니다. 자세한 내용은 "GitOps ZTP 사이트 구성 저장소 준비"를 참조하세요.
    2. ArgoCD UI를 사용하여 저장소에 대한 액세스를 구성합니다. 설정 에서 다음을 구성하세요.

      • 저장소 - 연결 정보를 추가합니다. URL은 .git 로 끝나야 합니다(예: https://repo.example.com/repo.git 및 자격 증명).
      • 인증서 - 필요한 경우 저장소에 대한 공개 인증서를 추가합니다.
    3. Git 저장소에 따라 두 개의 ArgoCD 애플리케이션( out/argocd/deployment/clusters-app.yamlout/argocd/deployment/policies-app.yaml)을 수정합니다.

      • URL을 업데이트하여 Git 저장소를 가리키도록 합니다. URL은 .git 로 끝납니다(예: https://repo.example.com/repo.git ).
      • targetRevision은 모니터링할 Git 저장소 브랜치를 나타냅니다.
      • path는 각각 SiteConfigPolicyGenerator 또는 PolicyGentemplate CR에 대한 경로를 지정합니다.
  1. GitOps ZTP 플러그인을 설치하려면 허브 클러스터의 ArgoCD 인스턴스에 관련 멀티클러스터 엔진(MCE) 구독 이미지를 패치합니다. 이전에 out/argocd/deployment/ 디렉토리에 압축 해제한 패치 파일을 사용자 환경에 맞게 사용자 정의합니다.

    1. RHACM 버전과 일치하는 multicluster-operators-subscription 이미지를 선택하세요.

      • RHACM 2.8 및 2.9의 경우 registry.redhat.io/rhacm2/multicluster-operators-subscription-rhel8:v<rhacm_version> 이미지를 사용하세요.
      • RHACM 2.10 이상의 경우 registry.redhat.io/rhacm2/multicluster-operators-subscription-rhel9:v<rhacm_version> 이미지를 사용하세요.
      중요

      multicluster-operators-subscription 이미지의 버전은 RHACM 버전과 일치해야 합니다. MCE 2.10 릴리스부터 RHEL 9가 multicluster-operators-subscription 이미지의 기본 이미지가 되었습니다.

      OpenShift Operator 라이프 사이클의 "Platform Aligned Operators" 표에서 [Expand for Operator list] 를 클릭하여 OpenShift Container Platform에 대해 지원되는 전체 Operator 매트릭스를 확인합니다.

    2. RHACM 버전과 일치하는 multicluster-operators-subscription 이미지로 out/argocd/deployment/argocd-openshift-gitops-patch.json 파일을 수정합니다.

      {
        "args": [
          "-c",
          "mkdir -p /.config/kustomize/plugin/policy.open-cluster-management.io/v1/policygenerator && cp /policy-generator/PolicyGenerator-not-fips-compliant /.config/kustomize/plugin/policy.open-cluster-management.io/v1/policygenerator/PolicyGenerator" 
      1
      
        ],
        "command": [
          "/bin/bash"
        ],
        "image": "registry.redhat.io/rhacm2/multicluster-operators-subscription-rhel9:v2.10", 
      2
       
      3
      
        "name": "policy-generator-install",
        "imagePullPolicy": "Always",
        "volumeMounts": [
          {
            "mountPath": "/.config",
            "name": "kustomize"
          }
        ]
      }
      Copy to Clipboard Toggle word wrap
      1
      선택 사항: RHEL 9 이미지의 경우 ArgoCD 버전에 필요한 범용 실행 파일 을 /policy-generator/PolicyGenerator-not-fips-compliant 폴더에 복사합니다.
      2
      multicluster-operators-subscription 이미지를 RHACM 버전과 일치시킵니다.
      3
      연결이 끊긴 환경에서 multicluster-operators-subscription 이미지의 URL을 해당 환경의 연결이 끊긴 레지스트리와 동일하게 바꾸세요.
    3. ArgoCD 인스턴스에 패치를 적용합니다. 다음 명령을 실행합니다.

      $ oc patch argocd openshift-gitops \
      -n openshift-gitops --type=merge \
      --patch-file out/argocd/deployment/argocd-openshift-gitops-patch.json
      Copy to Clipboard Toggle word wrap
  2. RHACM 2.7 이상에서는 멀티클러스터 엔진이 기본적으로 클러스터-프록시-애드온 기능을 활성화합니다. 다음 패치를 적용하여 클러스터-프록시-애드온 기능을 비활성화하고 이 애드온을 담당하는 관련 허브 클러스터와 관리형 포드를 제거합니다. 다음 명령을 실행합니다.

    $ oc patch multiclusterengines.multicluster.openshift.io multiclusterengine --type=merge --patch-file out/argocd/deployment/disable-cluster-proxy-addon.json
    Copy to Clipboard Toggle word wrap
  3. 다음 명령을 실행하여 허브 클러스터에 파이프라인 구성을 적용합니다.

    $ oc apply -k out/argocd/deployment
    Copy to Clipboard Toggle word wrap
  4. 선택 사항: 기존 ArgoCD 애플리케이션이 있는 경우 다음 명령을 실행하여 PrunePropagationPolicy=background 정책이 애플리케이션 리소스에 설정되어 있는지 확인합니다.

    $ oc -n openshift-gitops get applications.argoproj.io  \
    clusters -o jsonpath='{.spec.syncPolicy.syncOptions}' |jq
    Copy to Clipboard Toggle word wrap

    기존 정책에 대한 예시 출력

    [
      "CreateNamespace=true",
      "PrunePropagationPolicy=background",
      "RespectIgnoreDifferences=true"
    ]
    Copy to Clipboard Toggle word wrap

    1. spec.syncPolicy.syncOption 필드에 PrunePropagationPolicy 매개변수가 포함되어 있지 않거나 PrunePropagationPolicy가 포그라운드 값으로 설정된 경우 애플리케이션 리소스에서 정책을 백그라운드 로 설정합니다. 다음 예제를 참조하십시오.

      kind: Application
      spec:
        syncPolicy:
          syncOptions:
          - PrunePropagationPolicy=background
      Copy to Clipboard Toggle word wrap

    백그라운드 삭제 정책을 설정하면 ManagedCluster CR과 연관된 모든 리소스가 삭제됩니다.

2.9. GitOps ZTP 사이트 구성 리포지토리 준비

GitOps Zero Touch Provisioning(ZTP) 파이프라인을 사용하려면 먼저 사이트 구성 데이터를 호스팅할 Git 저장소를 준비해야 합니다.

사전 요구 사항

  • 필요한 설치 및 정책 사용자 정의 리소스(CR)를 생성하기 위해 허브 클러스터 GitOps 애플리케이션을 구성했습니다.
  • GitOps ZTP를 사용하여 관리형 클러스터를 배포했습니다.

프로세스

  1. SiteConfigPolicyGenerator 또는 PolicyGentemplate CR에 대해 별도의 경로가 있는 디렉토리 구조를 만듭니다.

    참고

    SiteConfigPolicyGenerator 또는 PolicyGentemplate CR을 별도의 디렉토리에 보관하세요. SiteConfigPolicyGenerator 또는 PolicyGentemplate 디렉토리에는 모두 해당 디렉토리의 파일을 명시적으로 포함하는 kustomization.yaml 파일이 있어야 합니다.

  2. 다음 명령을 사용하여 ztp-site-generate 컨테이너 이미지에서 argocd 디렉토리를 내보냅니다.

    $ podman pull registry.redhat.io/openshift4/ztp-site-generate-rhel8:v4.19
    Copy to Clipboard Toggle word wrap
    $ mkdir -p ./out
    Copy to Clipboard Toggle word wrap
    $ podman run --log-driver=none --rm registry.redhat.io/openshift4/ztp-site-generate-rhel8:v4.19 extract /home/ztp --tar | tar x -C ./out
    Copy to Clipboard Toggle word wrap
  3. out 디렉토리에 다음 하위 디렉토리가 포함되어 있는지 확인하세요.

    • out/extra-manifest 에는 SiteConfig가 추가 매니페스트 configMap을 생성하는 데 사용하는 소스 CR 파일이 포함되어 있습니다.
    • out/source-crs 에는 PolicyGenerator가 Red Hat Advanced Cluster Management(RHACM) 정책을 생성하는 데 사용하는 소스 CR 파일이 포함되어 있습니다.
    • out/argocd/deployment에는 이 절차의 다음 단계에서 사용하기 위해 허브 클러스터에 적용할 패치와 YAML 파일이 들어 있습니다.
    • out/argocd/example 에는 권장 구성을 나타내는 SiteConfigPolicyGenerator 또는 PolicyGentemplate 파일에 대한 예가 포함되어 있습니다.
  4. out/source-crs 폴더와 그 내용을 PolicyGenerator 또는 PolicyGentemplate 디렉터리에 복사합니다.
  5. out/extra-manifests 디렉토리에는 RAN DU 클러스터에 대한 참조 매니페스트가 포함되어 있습니다. out/extra-manifests 디렉토리를 SiteConfig 폴더로 복사합니다. 이 디렉토리에는 ztp-site-generate 컨테이너의 CR만 포함되어야 합니다. 사용자가 제공한 CR을 여기에 추가하지 마세요. 사용자 제공 CR을 사용하려면 해당 콘텐츠에 대한 다른 디렉터리를 생성해야 합니다. 예를 들면 다음과 같습니다.

    example/
      ├── acmpolicygenerator
      │   ├── kustomization.yaml
      │   └── source-crs/
      ├── policygentemplates 
    1
    
      │   ├── kustomization.yaml
      │   └── source-crs/
      └── siteconfig
            ├── extra-manifests
            └── kustomization.yaml
    Copy to Clipboard Toggle word wrap
    1
    PolicyGenTemplate CR을 사용하여 클러스터를 관리하는 정책을 관리하고 배포하는 기능은 향후 OpenShift Container Platform 릴리스에서 더 이상 사용되지 않습니다. Red Hat Advanced Cluster Management(RHACM) 및 PolicyGenerator CR을 사용하면 동일하거나 향상된 기능을 사용할 수 있습니다.
  6. 디렉토리 구조와 kustomization.yaml 파일을 커밋하고 Git 저장소에 푸시합니다. Git에 대한 초기 푸시에는 kustomization.yaml 파일이 포함되어야 합니다.

out/argocd/example 아래의 디렉토리 구조를 Git 저장소의 구조와 내용에 대한 참고자료로 사용할 수 있습니다. 이러한 구조에는 단일 노드, 3-노드 및 표준 클러스터에 대한 SiteConfigPolicyGenerator 또는 PolicyGentemplate 참조 CR이 포함됩니다. 사용하지 않는 클러스터 유형에 대한 참조를 제거합니다.

모든 클러스터 유형에 대해 다음을 수행해야 합니다.

  • acmpolicygenerator 또는 policygentemplates 디렉토리에 source-crs 하위 디렉토리를 추가합니다.
  • siteconfig 디렉토리에 extra-manifests 디렉토리를 추가합니다.

다음 예에서는 단일 노드 클러스터 네트워크에 대한 CR 세트를 설명합니다.

example/
  ├── acmpolicygenerator
  │   ├── acm-common-ranGen.yaml
  │   ├── acm-example-sno-site.yaml
  │   ├── acm-group-du-sno-ranGen.yaml
  │   ├── group-du-sno-validator-ranGen.yaml
  │   ├── kustomization.yaml
  │   ├── source-crs/
  │   └── ns.yaml
  └── siteconfig
        ├── example-sno.yaml
        ├── extra-manifests/ 
1

        ├── custom-manifests/ 
2

        ├── KlusterletAddonConfigOverride.yaml
        └── kustomization.yaml
Copy to Clipboard Toggle word wrap
1
ztp-container 의 참조 매니페스트를 포함합니다.
2
사용자 정의 매니페스트가 포함되어 있습니다.
중요

PolicyGenTemplate CR을 사용하여 관리형 클러스터에 정책을 관리하고 배포하는 기능은 향후 OpenShift Container Platform 릴리스에서 더 이상 지원되지 않습니다. Red Hat Advanced Cluster Management(RHACM) 및 PolicyGenerator CR을 사용하면 동일하거나 향상된 기능을 사용할 수 있습니다.

PolicyGenerator 리소스에 대한 자세한 내용은 RHACM 통합 정책 생성기 문서를 참조하세요.

2.10. 버전 독립성을 위한 GitOps ZTP 사이트 구성 리포지토리 준비

GitOps ZTP를 사용하면 다양한 버전의 OpenShift Container Platform을 실행하는 관리형 클러스터에 대한 소스 사용자 정의 리소스(CR)를 관리할 수 있습니다. 즉, 허브 클러스터에서 실행되는 OpenShift Container Platform 버전은 관리되는 클러스터에서 실행되는 버전과 독립적일 수 있습니다.

참고

다음 절차에서는 클러스터 정책 관리를 위해 PolicyGentemplate 리소스 대신 PolicyGenerator 리소스를 사용한다고 가정합니다.

사전 요구 사항

  • OpenShift CLI(oc)가 설치되어 있습니다.
  • 클러스터 관리자 권한이 있는 사용자로 로그인했습니다.

프로세스

  1. SiteConfigPolicyGenerator CR에 대해 별도의 경로가 있는 디렉토리 구조를 만듭니다.
  2. PolicyGenerator 디렉터리 내에서 사용할 각 OpenShift Container Platform 버전에 대한 디렉터리를 생성합니다. 각 버전에 대해 다음 리소스를 만듭니다.

    • 해당 디렉터리에 파일을 명시적으로 포함하는 kustomization.yaml 파일
    • ztp-site-generate 컨테이너의 참조 CR 구성 파일을 포함하는 source-crs 디렉토리

      사용자가 제공한 CR을 사용하려면 별도의 디렉터리를 만들어야 합니다.

  3. /siteconfig 디렉토리에서 사용 가능하게 하려는 각 OpenShift Container Platform 버전에 대한 하위 디렉토리를 만듭니다. 각 버전별로 컨테이너에서 참조 CR을 복사할 디렉토리를 하나 이상 만듭니다. 디렉토리의 이름이나 참조 디렉토리의 수에는 제한이 없습니다. 사용자 정의 매니페스트로 작업하려면 해당 매니페스트에 대한 별도의 디렉토리를 만들어야 합니다.

    다음 예제에서는 다른 OpenShift Container Platform 버전에 대해 사용자 제공 매니페스트 및 CR을 사용하는 구조를 설명합니다.

    ├── acmpolicygenerator
    │   ├── kustomization.yaml 
    1
    
    │   ├── version_4.13 
    2
    
    │   │   ├── common-ranGen.yaml
    │   │   ├── group-du-sno-ranGen.yaml
    │   │   ├── group-du-sno-validator-ranGen.yaml
    │   │   ├── helix56-v413.yaml
    │   │   ├── kustomization.yaml 
    3
    
    │   │   ├── ns.yaml
    │   │   └── source-crs/ 
    4
    
    │   │      └── reference-crs/ 
    5
    
    │   │      └── custom-crs/ 
    6
    
    │   └── version_4.14 
    7
    
    │       ├── common-ranGen.yaml
    │       ├── group-du-sno-ranGen.yaml
    │       ├── group-du-sno-validator-ranGen.yaml
    │       ├── helix56-v414.yaml
    │       ├── kustomization.yaml 
    8
    
    │       ├── ns.yaml
    │       └── source-crs/ 
    9
    
    │         └── reference-crs/ 
    10
    
    │         └── custom-crs/ 
    11
    
    └── siteconfig
        ├── kustomization.yaml
        ├── version_4.13
        │   ├── helix56-v413.yaml
        │   ├── kustomization.yaml
        │   ├── extra-manifest/ 
    12
    
        │   └── custom-manifest/ 
    13
    
        └── version_4.14
            ├── helix57-v414.yaml
            ├── kustomization.yaml
            ├── extra-manifest/ 
    14
    
            └── custom-manifest/ 
    15
    Copy to Clipboard Toggle word wrap
    1
    최상위 수준의 kustomization YAML 파일을 만듭니다.
    2 7
    사용자 정의 /acmpolicygenerator 디렉토리 내에 버전별 디렉토리를 만듭니다.
    3 8
    각 버전에 대해 kustomization.yaml 파일을 만듭니다.
    4 9
    ztp-site-generate 컨테이너의 참조 CR을 포함하기 위해 각 버전에 대한 source-crs 디렉토리를 만듭니다.
    5 10
    ZTP 컨테이너에서 추출된 정책 CR에 대한 reference-crs 디렉토리를 만듭니다.
    6 11
    선택 사항: 사용자가 제공한 CR에 대한 custom-crs 디렉토리를 만듭니다.
    12 14
    ztp-site-generate 컨테이너의 추가 매니페스트를 포함하기 위해 사용자 정의 /siteconfig 디렉토리 내에 디렉토리를 만듭니다.
    13 15
    사용자가 제공한 매니페스트를 보관할 폴더를 만듭니다.
    참고

    이전 예에서 사용자 정의 /siteconfig 디렉토리의 각 버전 하위 디렉토리에는 두 개의 하위 디렉토리가 포함되어 있습니다. 하나는 컨테이너에서 복사한 참조 매니페스트를 포함하고, 다른 하나는 사용자가 제공하는 사용자 정의 매니페스트를 포함합니다. 해당 디렉토리에 지정된 이름은 예시일 뿐입니다. 사용자가 제공한 CR을 사용하는 경우 SiteConfig CR의 extraManifests.searchPaths 에 나열된 마지막 디렉토리가 사용자가 제공한 CR이 포함된 디렉토리여야 합니다.

  4. SiteConfig CR을 편집하여 생성한 모든 디렉토리의 검색 경로를 포함합니다. extraManifests.searchPaths 에 나열된 첫 번째 디렉토리는 참조 매니페스트를 포함하는 디렉토리여야 합니다. 디렉토리가 나열된 순서를 생각해 보세요. 디렉토리에 같은 이름의 파일이 있는 경우, 최종 디렉토리에 있는 파일이 우선합니다.

    SiteConfig CR 예시

    extraManifests:
        searchPaths:
        - extra-manifest/ 
    1
    
        - custom-manifest/ 
    2
    Copy to Clipboard Toggle word wrap

    1
    참조 매니페스트가 포함된 디렉토리는 먼저 extraManifests.searchPaths 아래에 나열되어야 합니다.
    2
    사용자가 제공한 CR을 사용하는 경우 SiteConfig CR의 extraManifests.searchPaths 에 나열된 마지막 디렉토리가 해당 사용자가 제공한 CR이 포함된 디렉토리여야 합니다.
  5. 최상위 kustomization.yaml 파일을 편집하여 활성화된 OpenShift Container Platform 버전을 제어합니다. 다음은 최상위 레벨의 kustomization.yaml 파일의 예입니다.

    resources:
    - version_4.13 
    1
    
    #- version_4.14 
    2
    Copy to Clipboard Toggle word wrap
    1
    버전 4.13을 활성화합니다.
    2
    댓글을 사용하여 버전을 비활성화합니다.

2.11. 백업 및 복원을 위한 허브 클러스터 구성

GitOps ZTP를 사용하면 BareMetalHost 리소스를 백업하기 위한 정책 세트를 구성할 수 있습니다. 이를 통해 실패한 허브 클러스터에서 데이터를 복구하고 Red Hat Advanced Cluster Management(RHACM)를 사용하여 대체 클러스터를 배포할 수 있습니다.

사전 요구 사항

  • OpenShift CLI(oc)가 설치되어 있습니다.
  • 클러스터 관리자 권한이 있는 사용자로 로그인했습니다.

프로세스

  1. infraenvs.agent-install.openshift.io 레이블이 있는 모든 BareMetalHost 리소스에 cluster.open-cluster-management.io/backup=cluster-activation 레이블을 추가하는 정책을 만듭니다. 정책을 BareMetalHostBackupPolicy.yaml 로 저장합니다.

    다음 예제에서는 infraenvs.agent-install.openshift.io 레이블이 있는 모든 BareMetalHost 리소스에 cluster.open-cluster-management.io/backup 레이블을 추가합니다.

    정책 예시

    apiVersion: policy.open-cluster-management.io/v1
    kind: Policy
    metadata:
      name: bmh-cluster-activation-label
      annotations:
        policy.open-cluster-management.io/description: Policy used to add the cluster.open-cluster-management.io/backup=cluster-activation label to all BareMetalHost resources
    spec:
      disabled: false
      policy-templates:
        - objectDefinition:
            apiVersion: policy.open-cluster-management.io/v1
            kind: ConfigurationPolicy
            metadata:
              name: set-bmh-backup-label
            spec:
              object-templates-raw: |
                {{- /* Set cluster-activation label on all BMH resources */ -}}
                {{- $infra_label := "infraenvs.agent-install.openshift.io" }}
                {{- range $bmh := (lookup "metal3.io/v1alpha1" "BareMetalHost" "" "" $infra_label).items }}
                    - complianceType: musthave
                      objectDefinition:
                        kind: BareMetalHost
                        apiVersion: metal3.io/v1alpha1
                        metadata:
                          name: {{ $bmh.metadata.name }}
                          namespace: {{ $bmh.metadata.namespace }}
                          labels:
                            cluster.open-cluster-management.io/backup: cluster-activation 
    1
    
                {{- end }}
              remediationAction: enforce
              severity: high
    ---
    apiVersion: cluster.open-cluster-management.io/v1beta1
    kind: Placement
    metadata:
      name: bmh-cluster-activation-label-pr
    spec:
      predicates:
        - requiredClusterSelector:
            labelSelector:
              matchExpressions:
                - key: name
                  operator: In
                  values:
                    - local-cluster
    ---
    apiVersion: policy.open-cluster-management.io/v1
    kind: PlacementBinding
    metadata:
      name: bmh-cluster-activation-label-binding
    placementRef:
      name: bmh-cluster-activation-label-pr
      apiGroup: cluster.open-cluster-management.io
      kind: Placement
    subjects:
      - name: bmh-cluster-activation-label
        apiGroup: policy.open-cluster-management.io
        kind: Policy
    ---
    apiVersion: cluster.open-cluster-management.io/v1beta2
    kind: ManagedClusterSetBinding
    metadata:
      name: default
      namespace: default
    spec:
      clusterSet: default
    Copy to Clipboard Toggle word wrap

    1
    cluster.open-cluster-management.io/backup: cluster-activation 레이블을 BareMetalHost 리소스에 적용하면 RHACM 클러스터가 해당 리소스를 백업합니다. 허브 활성화 리소스를 복원할 때 활성 클러스터를 사용할 수 없게 되면 BareMetalHost 리소스를 복원할 수 있습니다.
  2. 다음 명령을 실행하여 정책을 적용합니다.

    $ oc apply -f BareMetalHostBackupPolicy.yaml
    Copy to Clipboard Toggle word wrap

검증

  1. 다음 명령을 실행하여 infraenvs.agent-install.openshift.io 레이블을 사용하여 모든 BareMetalHost 리소스를 찾습니다.

    $ oc get BareMetalHost -A -l infraenvs.agent-install.openshift.io
    Copy to Clipboard Toggle word wrap

    출력 예

    NAMESPACE      NAME             STATE   CONSUMER   ONLINE   ERROR   AGE
    baremetal-ns   baremetal-name                      false            50s
    Copy to Clipboard Toggle word wrap

  2. 다음 명령을 실행하여 정책이 모든 리소스에 레이블 cluster.open-cluster-management.io/backup=cluster-activation 을 적용했는지 확인하세요.

    $ oc get BareMetalHost -A -l infraenvs.agent-install.openshift.io,cluster.open-cluster-management.io/backup=cluster-activation
    Copy to Clipboard Toggle word wrap

    출력 예

    NAMESPACE      NAME             STATE   CONSUMER   ONLINE   ERROR   AGE
    baremetal-ns   baremetal-name                      false            50s
    Copy to Clipboard Toggle word wrap

    출력에는 이전 단계와 동일한 목록이 표시되어야 합니다. 이전 단계에서는 infraenvs.agent-install.openshift.io 레이블이 있는 모든 BareMetalHost 리소스가 나열되었습니다. 이는 infraenvs.agent-install.openshift.io 레이블이 있는 모든 BareMetalHost 리소스 에 cluster.open-cluster-management.io/backup: cluster-activation 레이블도 있다는 것을 확인합니다.

    다음 예에서는 infraenvs.agent-install.openshift.io 레이블이 있는 BareMetalHost 리소스를 보여줍니다. 리소스에는 1단계에서 만든 정책에 의해 추가된 cluster.open-cluster-management.io/backup: cluster-activation 레이블도 있어야 합니다.

    apiVersion: metal3.io/v1alpha1
    kind: BareMetalHost
    metadata:
      labels:
        cluster.open-cluster-management.io/backup: cluster-activation
        infraenvs.agent-install.openshift.io: value
      name: baremetal-name
      namespace: baremetal-ns
    Copy to Clipboard Toggle word wrap

이제 Red Hat Advanced Cluster Management를 사용하여 관리형 클러스터를 복원할 수 있습니다.

중요

클러스터 활성화 데이터를 복원하는 과정에서 BareMetalHosts 리소스를 복원하는 경우 BareMetalHosts 상태를 복원해야 합니다. 다음 RHACM 복원 리소스 예제는 BareMetalHosts를 포함한 활성화 리소스를 복원하고 BareMetalHosts 리소스의 상태도 복원합니다.

apiVersion: cluster.open-cluster-management.io/v1beta1
kind: Restore
metadata:
  name: restore-acm-bmh
  namespace: open-cluster-management-backup
spec:
  cleanupBeforeRestore: CleanupRestored
  veleroManagedClustersBackupName: latest 
1

  veleroCredentialsBackupName: latest
  veleroResourcesBackupName: latest
  restoreStatus:
    includedResources:
      - BareMetalHosts
2
Copy to Clipboard Toggle word wrap
1
veleroManagedClustersBackupName: latest를 설정하여 활성화 리소스를 복원합니다.
2
BareMetalHosts 리소스의 상태를 복원합니다.

3장. GitOps ZTP 업데이트

허브 클러스터, Red Hat Advanced Cluster Management(RHACM), 관리형 OpenShift Container Platform 클러스터와 독립적으로 GitOps Zero Touch Provisioning(ZTP) 인프라를 업데이트할 수 있습니다.

참고

새로운 버전이 나오면 Red Hat OpenShift GitOps Operator를 업데이트할 수 있습니다. GitOps ZTP 플러그인을 업데이트할 때 참조 구성에서 업데이트된 파일을 검토하고 변경 사항이 요구 사항을 충족하는지 확인하세요.

중요

PolicyGenTemplate CR을 사용하여 관리형 클러스터에 정책을 관리하고 배포하는 기능은 향후 OpenShift Container Platform 릴리스에서 더 이상 지원되지 않습니다. Red Hat Advanced Cluster Management(RHACM) 및 PolicyGenerator CR을 사용하면 동일하거나 향상된 기능을 사용할 수 있습니다.

PolicyGenerator 리소스에 대한 자세한 내용은 RHACM 통합 정책 생성기 문서를 참조하세요.

3.1. GitOps ZTP 업데이트 프로세스 개요

이전 버전의 GitOps ZTP 인프라를 실행하는 완벽하게 작동하는 허브 클러스터의 경우 GitOps Zero Touch Provisioning(ZTP)을 업데이트할 수 있습니다. 업데이트 프로세스는 관리되는 클러스터에 영향을 미치지 않습니다.

참고

권장 콘텐츠 추가를 포함한 정책 설정을 변경하면 업데이트된 정책이 생성되어 관리되는 클러스터에 롤아웃하고 조정해야 합니다.

높은 수준에서 GitOps ZTP 인프라를 업데이트하기 위한 전략은 다음과 같습니다.

  1. 기존 클러스터에 ztp-done 라벨을 지정합니다.
  2. ArgoCD 애플리케이션을 중지합니다.
  3. 새로운 GitOps ZTP 도구를 설치합니다.
  4. Git 저장소에서 필수 콘텐츠와 선택적 변경 사항을 업데이트합니다.
  5. 원하는 OpenShift Container Platform 버전의 ISO 이미지를 가져올 수 있습니다.
  6. 애플리케이션 구성을 업데이트하고 다시 시작합니다.

3.2. 업그레이드 준비

다음 절차에 따라 GitOps Zero Touch Provisioning(ZTP) 업그레이드를 위해 사이트를 준비하세요.

프로세스

  1. GitOps ZTP와 함께 사용하도록 Red Hat OpenShift GitOps를 구성하는 데 사용되는 사용자 정의 리소스(CR)가 포함된 GitOps ZTP 컨테이너의 최신 버전을 받으세요.
  2. 다음 명령을 사용하여 argocd/deployment 디렉토리를 추출합니다.

    $ mkdir -p ./update
    Copy to Clipboard Toggle word wrap
    $ podman run --log-driver=none --rm registry.redhat.io/openshift4/ztp-site-generate-rhel8:v4.19 extract /home/ztp --tar | tar x -C ./update
    Copy to Clipboard Toggle word wrap

    /update 디렉토리에는 다음과 같은 하위 디렉토리가 포함되어 있습니다.

    • update/extra-manifest : SiteConfig CR이 추가 매니페스트 configMap을 생성하는 데 사용하는 소스 CR 파일이 포함되어 있습니다.
    • update/source-crs : PolicyGenerator 또는 PolicyGentemplate CR이 Red Hat Advanced Cluster Management(RHACM) 정책을 생성하는 데 사용하는 소스 CR 파일이 포함되어 있습니다.
    • update/argocd/deployment : 이 절차의 다음 단계에서 사용하기 위해 허브 클러스터에 적용할 패치와 YAML 파일이 들어 있습니다.
    • update/argocd/example : 권장 구성을 나타내는 SiteConfigPolicyGenerator 또는 PolicyGentemplate 파일의 예를 포함합니다.
  3. 애플리케이션 이름과 Git 리포지토리의 URL, 분기 및 경로를 반영하도록 cluster-app.yamlpolicies-app.yaml 파일을 업데이트합니다.

    업그레이드에 오래된 정책을 가져오는 변경 사항이 포함된 경우 업그레이드를 수행하기 전에 오래된 정책을 제거해야 합니다.

  4. /update 폴더와 플릿 사이트 CR을 관리하는 Git 저장소에서 구성 및 배포 소스 CR 간의 변경 사항을 비교합니다. 필요한 변경 사항을 사이트 저장소에 적용하고 푸시합니다.

    중요

    GitOps ZTP를 최신 버전으로 업데이트하면 update/argocd/deployment 디렉터리의 변경 사항을 사이트 저장소에 적용해야 합니다. argocd/deployment/ 파일의 이전 버전을 사용하지 마세요.

3.3. 기존 클러스터에 레이블 지정

기존 클러스터가 도구 업데이트의 영향을 받지 않도록 모든 기존 관리 클러스터에 ztp-done 레이블을 지정합니다.

참고

이 절차는 TALM(Topology Aware Lifecycle Manager)으로 프로비저닝되지 않은 클러스터를 업데이트할 때만 적용됩니다. TALM으로 프로비저닝하는 클러스터에는 자동으로 ztp-done 이라는 레이블이 지정됩니다.

프로세스

  1. local-cluster!=true 와 같이 GitOps Zero Touch Provisioning(ZTP)을 사용하여 배포된 관리 클러스터를 나열하는 레이블 선택기를 찾으세요.

    $ oc get managedcluster -l 'local-cluster!=true'
    Copy to Clipboard Toggle word wrap
  2. 결과 목록에 GitOps ZTP를 사용하여 배포된 모든 관리 클러스터가 포함되어 있는지 확인한 다음 해당 선택기를 사용하여 ztp-done 레이블을 추가합니다.

    $ oc label managedcluster -l 'local-cluster!=true' ztp-done=
    Copy to Clipboard Toggle word wrap

3.4. 기존 GitOps ZTP 애플리케이션 중지

기존 애플리케이션을 제거하면 도구의 새 버전이 나올 때까지 Git 저장소의 기존 콘텐츠에 대한 변경 사항이 적용되지 않습니다.

배포 디렉토리의 애플리케이션 파일을 사용합니다. 애플리케이션에 사용자 지정 이름을 사용한 경우 먼저 이러한 파일의 이름을 업데이트하세요.

프로세스

  1. 생성된 모든 리소스를 그대로 두려면 클러스터 애플리케이션에서 계단식 삭제를 수행하세요.

    $ oc delete -f update/argocd/deployment/clusters-app.yaml
    Copy to Clipboard Toggle word wrap
  2. 이전 정책을 모두 제거하려면 정책 애플리케이션에서 계단식 삭제를 수행합니다.

    $ oc patch -f policies-app.yaml -p '{"metadata": {"finalizers": ["resources-finalizer.argocd.argoproj.io"]}}' --type merge
    Copy to Clipboard Toggle word wrap
    $ oc delete -f update/argocd/deployment/policies-app.yaml
    Copy to Clipboard Toggle word wrap

3.5. Git 저장소에 필요한 변경 사항

이전 릴리스의 GitOps Zero Touch Provisioning(ZTP)에서 ztp-site-generate 컨테이너를 4.10 이상으로 업그레이드할 경우 Git 저장소의 콘텐츠에 대한 추가 요구 사항이 있습니다. 이러한 변경 사항을 반영하려면 저장소의 기존 콘텐츠를 업데이트해야 합니다.

참고

다음 절차에서는 클러스터 정책 관리를 위해 PolicyGentemplate 리소스 대신 PolicyGenerator 리소스를 사용한다고 가정합니다.

  • PolicyGenerator 파일에 필요한 변경 사항을 적용합니다.

    모든 PolicyGenerator 파일은 ztp 로 시작하는 네임스페이스 에 생성되어야 합니다. 이를 통해 GitOps ZTP 애플리케이션은 Red Hat Advanced Cluster Management(RHACM)가 내부적으로 정책을 관리하는 방식과 충돌하지 않고 GitOps ZTP에서 생성된 정책 CR을 관리할 수 있습니다.

  • kustomization.yaml 파일을 저장소에 추가합니다.

    모든 SiteConfigPolicyGenerator CR은 해당 디렉토리 트리 아래의 kustomization.yaml 파일에 포함되어야 합니다. 예를 들면 다음과 같습니다.

    ├── acmpolicygenerator
    │   ├── site1-ns.yaml
    │   ├── site1.yaml
    │   ├── site2-ns.yaml
    │   ├── site2.yaml
    │   ├── common-ns.yaml
    │   ├── common-ranGen.yaml
    │   ├── group-du-sno-ranGen-ns.yaml
    │   ├── group-du-sno-ranGen.yaml
    │   └── kustomization.yaml
    └── siteconfig
        ├── site1.yaml
        ├── site2.yaml
        └── kustomization.yaml
    Copy to Clipboard Toggle word wrap
    참고

    생성기 섹션에 나열된 파일에는 SiteConfig 또는 {policy-gen-cr} CR만 포함되어야 합니다. 기존 YAML 파일에 다른 CR(예: 네임스페이스) 이 포함된 경우 이러한 다른 CR을 별도의 파일로 추출하여 리소스 섹션에 나열해야 합니다.

    PolicyGenerator kustomization 파일에는 생성기 섹션의 모든 PolicyGenerator YAML 파일과 리소스 섹션의 네임스페이스 CR이 포함되어야 합니다. 예를 들면 다음과 같습니다.

    apiVersion: kustomize.config.k8s.io/v1beta1
    kind: Kustomization
    
    generators:
    - acm-common-ranGen.yaml
    - acm-group-du-sno-ranGen.yaml
    - site1.yaml
    - site2.yaml
    
    resources:
    - common-ns.yaml
    - acm-group-du-sno-ranGen-ns.yaml
    - site1-ns.yaml
    - site2-ns.yaml
    Copy to Clipboard Toggle word wrap

    SiteConfig kustomization 파일에는 생성기 섹션의 모든 SiteConfig YAML 파일과 리소스의 다른 CR이 포함되어야 합니다.

    apiVersion: kustomize.config.k8s.io/v1beta1
    kind: Kustomization
    
    generators:
    - site1.yaml
    - site2.yaml
    Copy to Clipboard Toggle word wrap
  • pre-sync.yamlpost-sync.yaml 파일을 제거합니다.

    OpenShift Container Platform 4.10 이상에서는 pre-sync.yamlpost-sync.yaml 파일이 더 이상 필요하지 않습니다. update/deployment/kustomization.yaml CR은 허브 클러스터에서 정책 배포를 관리합니다.

    참고

    SiteConfig{policy-gen-cr} 트리 아래에는 pre-sync.yamlpost-sync.yaml 파일 세트가 있습니다.

  • 권장되는 변경 사항을 검토하고 통합합니다.

    각 릴리스에는 배포된 클러스터에 적용되는 구성에 대한 추가 권장 변경 사항이 포함될 수 있습니다. 일반적으로 이러한 변경 사항으로 인해 OpenShift 플랫폼의 CPU 사용량이 감소하고, 기능이 추가되거나 플랫폼 튜닝이 개선됩니다.

    네트워크의 클러스터 유형에 적용 가능한 참조 SiteConfigPolicyGenerator CR을 검토하세요. 이러한 예제는 GitOps ZTP 컨테이너에서 추출한 argocd/example 디렉토리에서 찾을 수 있습니다.

3.6. 새로운 GitOps ZTP 애플리케이션 설치

추출된 argocd/deployment 디렉토리를 사용하고 애플리케이션이 사이트 Git 저장소를 가리키는지 확인한 후 배포 디렉토리의 전체 내용을 적용합니다. 디렉토리의 전체 내용을 적용하면 애플리케이션에 필요한 모든 리소스가 올바르게 구성되었는지 확인할 수 있습니다.

프로세스

  1. GitOps ZTP 플러그인을 설치하려면 허브 클러스터의 ArgoCD 인스턴스에 관련 멀티클러스터 엔진(MCE) 구독 이미지를 패치합니다. 이전에 out/argocd/deployment/ 디렉토리에 압축 해제한 패치 파일을 사용자 환경에 맞게 사용자 정의합니다.

    1. RHACM 버전과 일치하는 multicluster-operators-subscription 이미지를 선택하세요.

      • RHACM 2.8 및 2.9의 경우 registry.redhat.io/rhacm2/multicluster-operators-subscription-rhel8:v<rhacm_version> 이미지를 사용하세요.
      • RHACM 2.10 이상의 경우 registry.redhat.io/rhacm2/multicluster-operators-subscription-rhel9:v<rhacm_version> 이미지를 사용하세요.
      중요

      multicluster-operators-subscription 이미지의 버전은 RHACM 버전과 일치해야 합니다. MCE 2.10 릴리스부터 RHEL 9가 multicluster-operators-subscription 이미지의 기본 이미지가 되었습니다.

      OpenShift Operator 라이프 사이클의 "Platform Aligned Operators" 표에서 [Expand for Operator list] 를 클릭하여 OpenShift Container Platform에 대해 지원되는 전체 Operator 매트릭스를 확인합니다.

    2. RHACM 버전과 일치하는 multicluster-operators-subscription 이미지로 out/argocd/deployment/argocd-openshift-gitops-patch.json 파일을 수정합니다.

      {
        "args": [
          "-c",
          "mkdir -p /.config/kustomize/plugin/policy.open-cluster-management.io/v1/policygenerator && cp /policy-generator/PolicyGenerator-not-fips-compliant /.config/kustomize/plugin/policy.open-cluster-management.io/v1/policygenerator/PolicyGenerator" 
      1
      
        ],
        "command": [
          "/bin/bash"
        ],
        "image": "registry.redhat.io/rhacm2/multicluster-operators-subscription-rhel9:v2.10", 
      2
       
      3
      
        "name": "policy-generator-install",
        "imagePullPolicy": "Always",
        "volumeMounts": [
          {
            "mountPath": "/.config",
            "name": "kustomize"
          }
        ]
      }
      Copy to Clipboard Toggle word wrap
      1
      선택 사항: RHEL 9 이미지의 경우 ArgoCD 버전에 필요한 범용 실행 파일 을 /policy-generator/PolicyGenerator-not-fips-compliant 폴더에 복사합니다.
      2
      multicluster-operators-subscription 이미지를 RHACM 버전과 일치시킵니다.
      3
      연결이 끊긴 환경에서 multicluster-operators-subscription 이미지의 URL을 해당 환경의 연결이 끊긴 레지스트리와 동일하게 바꾸세요.
    3. ArgoCD 인스턴스에 패치를 적용합니다. 다음 명령을 실행합니다.

      $ oc patch argocd openshift-gitops \
      -n openshift-gitops --type=merge \
      --patch-file out/argocd/deployment/argocd-openshift-gitops-patch.json
      Copy to Clipboard Toggle word wrap
  2. RHACM 2.7 이상에서는 멀티클러스터 엔진이 기본적으로 클러스터-프록시-애드온 기능을 활성화합니다. 다음 패치를 적용하여 클러스터-프록시-애드온 기능을 비활성화하고 이 애드온을 담당하는 관련 허브 클러스터와 관리형 포드를 제거합니다. 다음 명령을 실행합니다.

    $ oc patch multiclusterengines.multicluster.openshift.io multiclusterengine --type=merge --patch-file out/argocd/deployment/disable-cluster-proxy-addon.json
    Copy to Clipboard Toggle word wrap
  3. 다음 명령을 실행하여 허브 클러스터에 파이프라인 구성을 적용합니다.

    $ oc apply -k out/argocd/deployment
    Copy to Clipboard Toggle word wrap

3.7. 원하는 OpenShift 컨테이너 플랫폼 버전에 대한 ISO 이미지 가져오기

원하는 OpenShift Container Platform 버전에 대한 ISO 이미지를 가져오려면 미러 레지스트리 HTTP 서버에 호스팅된 원하는 ISO 및 RootFS 이미지에 대한 참조로 AgentServiceConfig 사용자 정의 리소스(CR)를 업데이트합니다.

사전 요구 사항

  • OpenShift CLI(oc)가 설치되어 있습니다.
  • cluster-admin 권한이 있는 사용자로 허브 클러스터에 로그인했습니다.
  • MultiClusterHub 가 활성화된 RHACM이 있습니다.
  • 지원 서비스를 활성화했습니다.

프로세스

  1. 다음 명령을 실행하여 AgentServiceConfig CR을 열고 spec.osImages 필드를 업데이트합니다.

    $ oc edit AgentServiceConfig
    Copy to Clipboard Toggle word wrap
  2. AgentServiceConfig CR에서 spec.osImages 필드를 업데이트합니다.

    apiVersion: agent-install.openshift.io/v1beta1
    kind: AgentServiceConfig
    metadata:
     name: agent
    spec:
    # ...
      osImages:
        - cpuArchitecture: x86_64
          openshiftVersion: "4.19"
          rootFSUrl: https://<host>/<path>/rhcos-live-rootfs.x86_64.img
          url: https://<host>/<path>/rhcos-live.x86_64.iso
    Copy to Clipboard Toggle word wrap

    다음과 같습니다.

    <host>
    대상 미러 레지스트리 HTTP 서버에 대한 정규화된 도메인 이름(FQDN)을 지정합니다.
    <path>
    대상 미러 레지스트리의 이미지 경로를 지정합니다.
  3. 변경 사항을 적용하려면 편집기를 저장하고 종료하세요.

3.8. GitOps ZTP 구성 변경 사항 롤아웃

권장되는 변경 사항을 구현하여 업그레이드에 구성 변경 사항이 포함된 경우 업그레이드 프로세스는 허브 클러스터에 비준수 상태의 정책 CR 세트를 생성합니다. GitOps Zero Touch Provisioning(ZTP) 버전 4.10 이상인 ztp-site-generate 컨테이너를 사용하면 이러한 정책이 알림 모드로 설정되고 사용자가 추가 단계를 수행하지 않고는 관리되는 클러스터에 푸시되지 않습니다. 이를 통해 클러스터에 잠재적으로 방해가 될 수 있는 변경 사항을 변경이 이루어지는 시점(예: 유지 관리 기간 중)과 동시에 업데이트되는 클러스터 수 등을 통해 관리할 수 있습니다.

변경 사항을 적용하려면 TALM 설명서에 자세히 설명된 대로 하나 이상의 ClusterGroupUpgrade CR을 만듭니다. CR에는 관리되는 클러스터에 푸시하려는 비준수 정책 목록과 업데이트에 포함되어야 하는 클러스터 목록 또는 선택기가 포함되어야 합니다.

4장. RHACM 및 SiteConfig 리소스를 사용하여 관리형 클러스터 설치

Red Hat Advanced Cluster Management(RHACM)를 사용하면 지원 서비스와 코어 감소 기술이 활성화된 GitOps 플러그인 정책 생성기를 사용하여 대규모 OpenShift Container Platform 클러스터를 프로비저닝할 수 있습니다. GitOps Zero Touch Provisioning(ZTP) 파이프라인은 클러스터 설치를 수행합니다. GitOps ZTP는 연결이 끊긴 환경에서도 사용할 수 있습니다.

중요

PolicyGenTemplate CR을 사용하여 관리형 클러스터에 정책을 관리하고 배포하는 기능은 향후 OpenShift Container Platform 릴리스에서 더 이상 지원되지 않습니다. Red Hat Advanced Cluster Management(RHACM) 및 PolicyGenerator CR을 사용하면 동일하거나 향상된 기능을 사용할 수 있습니다.

PolicyGenerator 리소스에 대한 자세한 내용은 RHACM 통합 정책 생성기 문서를 참조하세요.

4.1. GitOps ZTP 및 토폴로지 인식 라이프사이클 관리자

GitOps Zero Touch Provisioning(ZTP)은 Git에 저장된 매니페스트에서 설치 및 구성 CR을 생성합니다. 이러한 아티팩트는 Red Hat Advanced Cluster Management(RHACM), 지원 서비스 및 Topology Aware Lifecycle Manager(TALM)가 CR을 사용하여 관리되는 클러스터를 설치하고 구성하는 중앙 허브 클러스터에 적용됩니다. GitOps ZTP 파이프라인의 구성 단계에서는 TALM을 사용하여 구성 CR을 클러스터에 적용하도록 조율합니다. GitOps ZTP와 TALM 사이에는 몇 가지 주요 통합 지점이 있습니다.

정책 알리기
기본적으로 GitOps ZTP는 모든 정책을 inform 이라는 수정 작업으로 생성합니다. 이러한 정책으로 인해 RHACM은 정책과 관련된 클러스터의 규정 준수 상태를 보고하지만 원하는 구성은 적용하지 않습니다. OpenShift 설치 후 GitOps ZTP 프로세스 중에 TALM은 생성된 정보 정책을 단계별로 실행하고 대상 관리 클러스터에 이를 적용합니다. 이렇게 하면 구성이 관리되는 클러스터에 적용됩니다. 클러스터 수명 주기의 GitOps ZTP 단계 외부에서 이를 통해 영향을 받는 관리 클러스터에 해당 변경 사항을 즉시 롤아웃할 위험 없이 정책을 변경할 수 있습니다. TALM을 사용하면 타이밍과 수정된 클러스터 세트를 제어할 수 있습니다.
ClusterGroupUpgrade CR 자동 생성

새로 배포된 클러스터의 초기 구성을 자동화하기 위해 TALM은 허브 클러스터의 모든 ManagedCluster CR 상태를 모니터링합니다. ztp-done 레이블이 적용되지 않은 모든 ManagedCluster CR(새로 생성된 ManagedCluster CR 포함)의 경우 TALM은 다음 특성을 가진 ClusterGroupUpgrade CR을 자동으로 생성합니다.

  • ClusterGroupUpgrade CR은 ztp-install 네임스페이스에서 생성되어 활성화됩니다.
  • ClusterGroupUpgrade CR의 이름은 ManagedCluster CR과 같습니다.
  • 클러스터 선택기에는 해당 ManagedCluster CR과 연관된 클러스터만 포함됩니다.
  • 관리되는 정책 세트에는 ClusterGroupUpgrade가 생성될 때 RHACM이 클러스터에 바인딩한 모든 정책이 포함됩니다.
  • 사전 캐싱이 비활성화되었습니다.
  • 제한 시간이 4시간(240분)으로 설정되었습니다.

활성화된 ClusterGroupUpgrade 를 자동으로 생성하면 클러스터의 초기 제로터치 배포가 사용자 개입 없이 진행될 수 있습니다. 또한 ztp-done 레이블이 없는 모든 ManagedCluster 에 대해 ClusterGroupUpgrade CR이 자동으로 생성되므로 실패한 GitOps ZTP 설치가 클러스터의 ClusterGroupUpgrade CR을 삭제하기만 하면 다시 시작할 수 있습니다.

파도

PolicyGenerator 또는 PolicyGentemplate CR에서 생성된 각 정책에는 ztp-deploy-wave 주석이 포함됩니다. 이 주석은 해당 정책에 포함된 각 CR의 동일한 주석을 기반으로 합니다. 웨이브 주석은 자동 생성된 ClusterGroupUpgrade CR에서 정책을 정렬하는 데 사용됩니다. 웨이브 주석은 자동 생성된 ClusterGroupUpgrade CR 외에는 사용되지 않습니다.

참고

동일한 정책에 있는 모든 CR은 ztp-deploy-wave 주석에 대해 동일한 설정을 가져야 합니다. 각 CR에 대한 이 주석의 기본값은 PolicyGenerator 또는 PolicyGentemplate 에서 재정의될 수 있습니다. 소스 CR의 웨이브 주석은 정책 웨이브 주석을 결정하고 설정하는 데 사용됩니다. 이 주석은 런타임에 생성된 정책에 포함된 각 빌드된 CR에서 제거됩니다.

TALM은 웨이브 주석에 지정된 순서대로 구성 정책을 적용합니다. TALM은 각 정책이 준수될 때까지 기다린 후 다음 정책으로 넘어갑니다. 각 CR에 대한 웨이브 주석이 클러스터에 적용되기 위한 모든 전제 조건을 고려하는지 확인하는 것이 중요합니다. 예를 들어, Operator는 Operator 구성과 동시에 또는 그 전에 설치되어야 합니다. 마찬가지로, Operator의 CatalogSource는 Operator 구독과 동시에 또는 그 전에 웨이브 형태로 설치되어야 합니다. 각 CR의 기본 웨이브 값은 이러한 전제 조건을 고려합니다.

여러 CR과 정책은 동일한 웨이브 번호를 공유할 수 있습니다. 정책이 적을수록 배포 속도가 빨라지고 CPU 사용량이 낮아질 수 있습니다. 많은 CR을 비교적 적은 수의 웨이브로 그룹화하는 것이 가장 좋습니다.

각 소스 CR의 기본 웨이브 값을 확인하려면 ztp-site-generate 컨테이너 이미지에서 추출한 out/source-crs 디렉터리에 대해 다음 명령을 실행합니다.

$ grep -r "ztp-deploy-wave" out/source-crs
Copy to Clipboard Toggle word wrap
위상 라벨

ClusterGroupUpgrade CR은 자동으로 생성되며 GitOps ZTP 프로세스의 시작과 끝에 레이블을 지정하여 ManagedCluster CR에 주석을 달기 위한 지침이 포함되어 있습니다.

GitOps ZTP 구성 후 설치가 시작되면 ManagedClusterztp-running 레이블이 적용됩니다. 모든 정책이 클러스터에 대해 수정되고 완전히 준수되면 이러한 지침에 따라 TALM은 ztp-running 레이블을 제거하고 ztp-done 레이블을 적용합니다.

informDuValidator 정책을 사용하는 배포의 경우, 클러스터가 애플리케이션을 배포할 준비가 완전히 되면 ztp-done 레이블이 적용됩니다. 여기에는 GitOps ZTP가 적용된 구성 CR의 모든 조정 및 결과 효과가 포함됩니다. ztp-done 레이블은 TALM이 ClusterGroupUpgrade CR을 자동으로 생성하는 데 영향을 미칩니다. 클러스터의 초기 GitOps ZTP 설치 후에는 이 라벨을 조작하지 마십시오.

연결된 CR
자동으로 생성된 ClusterGroupUpgrade CR에는 파생된 ManagedCluster 로 소유자 참조가 설정됩니다. 이 참조는 ManagedCluster CR을 삭제하면 ClusterGroupUpgrade 인스턴스와 함께 지원 리소스도 삭제되도록 보장합니다.

4.2. GitOps ZTP를 사용한 관리형 클러스터 배포 개요

RHACM(Red Hat Advanced Cluster Management)은 GitOps ZTP(ZTP)를 사용하여 단일 노드 OpenShift Container Platform 클러스터, 3노드 클러스터 및 표준 클러스터를 배포합니다. Git 저장소에서 OpenShift Container Platform 사용자 정의 리소스(CR)로 사이트 구성 데이터를 관리합니다. GitOps ZTP는 관리형 클러스터를 배포하기 위해 한 번 개발하고 어디서나 배포할 수 있는 모델에 대한 선언적 GitOps 접근 방식을 사용합니다.

클러스터 배포에는 다음이 포함됩니다.

  • 빈 서버에 호스트 운영 체제(RHCOS) 설치
  • OpenShift 컨테이너 플랫폼 배포
  • 클러스터 정책 및 사이트 구독 만들기
  • 서버 운영 체제에 필요한 네트워크 구성하기
  • 프로파일 운영자 배포 및 성능 프로파일, PTP, SR-IOV와 같은 필요한 소프트웨어 관련 구성 수행
관리 사이트 설치 프로세스 개요

허브 클러스터에 관리되는 사이트 사용자 지정 리소스(CR)를 적용하면 다음 작업이 자동으로 수행됩니다.

  1. Discovery 이미지 ISO 파일이 생성되어 대상 호스트에서 부팅됩니다.
  2. ISO 파일이 대상 호스트에서 성공적으로 부팅되면 호스트 하드웨어 정보가 RHACM에 보고됩니다.
  3. 모든 호스트가 검색된 후 OpenShift Container Platform이 설치됩니다.
  4. OpenShift Container Platform 설치가 완료되면 허브는 대상 클러스터에 klusterlet 서비스를 설치합니다.
  5. 요청된 추가 서비스가 대상 클러스터에 설치되었습니다.

관리되는 클러스터에 대한 에이전트 CR이 허브 클러스터에서 생성되면 Discovery 이미지 ISO 프로세스가 완료됩니다.

중요

대상 베어 메탈 호스트는 vDU 애플리케이션 워크로드에 권장되는 단일 노드 OpenShift 클러스터 구성 에 나열된 네트워킹, 펌웨어 및 하드웨어 요구 사항을 충족해야 합니다.

4.3. 관리되는 베어 메탈 호스트 비밀 생성

관리되는 베어 메탈 호스트에 필요한 비밀 사용자 정의 리소스(CR)를 허브 클러스터에 추가합니다. GitOps Zero Touch Provisioning(ZTP) 파이프라인이 Baseboard Management Controller(BMC)에 액세스하려면 비밀이 필요하고, 지원 설치 서비스에서 레지스트리에서 클러스터 설치 이미지를 가져오려면 비밀이 필요합니다.

참고

비밀은 SiteConfig CR에서 이름으로 참조됩니다. 네임스페이스는 SiteConfig 네임스페이스와 일치해야 합니다.

프로세스

  1. 호스트 Baseboard Management Controller(BMC)에 대한 자격 증명과 OpenShift 및 모든 애드온 클러스터 운영자를 설치하는 데 필요한 풀 비밀을 포함하는 YAML 비밀 파일을 만듭니다.

    1. 다음 YAML을 example-sno-secret.yaml 파일로 저장합니다.

      apiVersion: v1
      kind: Secret
      metadata:
        name: example-sno-bmc-secret
        namespace: example-sno 
      1
      
      data: 
      2
      
        password: <base64_password>
        username: <base64_username>
      type: Opaque
      ---
      apiVersion: v1
      kind: Secret
      metadata:
        name: pull-secret
        namespace: example-sno  
      3
      
      data:
        .dockerconfigjson: <pull_secret> 
      4
      
      type: kubernetes.io/dockerconfigjson
      Copy to Clipboard Toggle word wrap
      1
      관련 SiteConfig CR에 구성된 네임스페이스와 일치해야 합니다.
      2
      비밀번호사용자 이름에 대한 Base64 인코딩 값
      3
      관련 SiteConfig CR에 구성된 네임스페이스와 일치해야 합니다.
      4
      Base64로 인코딩된 풀 시크릿
  2. 클러스터를 설치하는 데 사용하는 kustomization.yaml 파일에 example-sno-secret.yaml 의 상대 경로를 추가합니다.

4.4. GitOps ZTP를 사용하여 설치를 위한 Discovery ISO 커널 인수 구성

GitOps Zero Touch Provisioning(ZTP) 워크플로는 관리형 베어 메탈 호스트에서 OpenShift Container Platform 설치 프로세스의 일부로 Discovery ISO를 사용합니다. InfraEnv 리소스를 편집하여 Discovery ISO에 대한 커널 인수를 지정할 수 있습니다. 이 기능은 특정 환경 요구 사항이 있는 클러스터 설치에 유용합니다. 예를 들어, Discovery ISO에 대한 rd.net.timeout.carrier 커널 인수를 구성하여 클러스터의 정적 네트워킹을 용이하게 하거나 설치 중에 루트 파일 시스템을 다운로드하기 전에 DHCP 주소를 수신합니다.

참고

OpenShift Container Platform 4.19에서는 커널 인수만 추가할 수 있습니다. 커널 인수를 교체하거나 삭제할 수 없습니다.

사전 요구 사항

  • OpenShift CLI(oc)가 설치되어 있습니다.
  • 클러스터 관리자 권한이 있는 사용자로 허브 클러스터에 로그인했습니다.

프로세스

  1. InfraEnv CR을 만들고 spec.kernelArguments 사양을 편집하여 커널 인수를 구성합니다.

    1. 다음 YAML을 InfraEnv-example.yaml 파일에 저장합니다.

      참고

      이 예에서 InfraEnv CR은 SiteConfig CR의 값을 기반으로 채워지는 {{ .Cluster.ClusterName }} 과 같은 템플릿 구문을 사용합니다. SiteConfig CR은 배포 중에 이러한 템플릿에 대한 값을 자동으로 채웁니다. 템플릿을 수동으로 편집하지 마세요.

      apiVersion: agent-install.openshift.io/v1beta1
      kind: InfraEnv
      metadata:
        annotations:
          argocd.argoproj.io/sync-wave: "1"
        name: "{{ .Cluster.ClusterName }}"
        namespace: "{{ .Cluster.ClusterName }}"
      spec:
        clusterRef:
          name: "{{ .Cluster.ClusterName }}"
          namespace: "{{ .Cluster.ClusterName }}"
        kernelArguments:
          - operation: append 
      1
      
            value: audit=0 
      2
      
          - operation: append
            value: trace=1
        sshAuthorizedKey: "{{ .Site.SshPublicKey }}"
        proxy: "{{ .Cluster.ProxySettings }}"
        pullSecretRef:
          name: "{{ .Site.PullSecretRef.Name }}"
        ignitionConfigOverride: "{{ .Cluster.IgnitionConfigOverride }}"
        nmStateConfigLabelSelector:
          matchLabels:
            nmstate-label: "{{ .Cluster.ClusterName }}"
        additionalNTPSources: "{{ .Cluster.AdditionalNTPSources }}"
      Copy to Clipboard Toggle word wrap
      1
      커널 인수를 추가하려면 추가 작업을 지정합니다.
      2
      구성하려는 커널 인수를 지정합니다. 이 예제에서는 감사 커널 인수와 추적 커널 인수를 구성합니다.
  2. SiteConfig CR이 있는 Git 저장소의 동일한 위치에 InfraEnv-example.yaml CR을 커밋하고 변경 사항을 푸시합니다. 다음 예제에서는 샘플 Git 리포지토리 구조를 보여줍니다.

    ~/example-ztp/install
              └── site-install
                   ├── siteconfig-example.yaml
                   ├── InfraEnv-example.yaml
                   ...
    Copy to Clipboard Toggle word wrap
  3. SiteConfig CR에서 spec.clusters.crTemplates 사양을 편집하여 Git 저장소의 InfraEnv-example.yaml CR을 참조합니다.

    clusters:
      crTemplates:
        InfraEnv: "InfraEnv-example.yaml"
    Copy to Clipboard Toggle word wrap

    SiteConfig CR을 커밋하고 푸시하여 클러스터를 배포할 준비가 되면 빌드 파이프라인은 Git 저장소에 있는 사용자 지정 InfraEnv-example CR을 사용하여 사용자 지정 커널 인수를 포함한 인프라 환경을 구성합니다.

검증

Discovery 이미지가 OpenShift Container Platform이 설치될 준비가 되었는지 확인한 후, 커널 인수가 적용되었는지 확인하려면 설치 프로세스가 시작되기 전에 대상 호스트에 SSH를 실행할 수 있습니다. 그 시점에서 /proc/cmdline 파일에서 Discovery ISO에 대한 커널 인수를 볼 수 있습니다.

  1. 대상 호스트에서 SSH 세션을 시작합니다.

    $ ssh -i /path/to/privatekey core@<host_name>
    Copy to Clipboard Toggle word wrap
  2. 다음 명령을 사용하여 시스템의 커널 인수를 확인하세요.

    $ cat /proc/cmdline
    Copy to Clipboard Toggle word wrap

4.5. SiteConfig 및 GitOps ZTP를 사용하여 관리형 클러스터 배포

다음 절차에 따라 SiteConfig 사용자 정의 리소스(CR) 및 관련 파일을 만들고 GitOps Zero Touch Provisioning(ZTP) 클러스터 배포를 시작하세요.

중요

SiteConfig v1은 OpenShift Container Platform 버전 4.18부터 더 이상 사용되지 않습니다. 이제 ClusterInstance 사용자 정의 리소스를 사용하여 SiteConfig Operator를 통해 동등하고 향상된 기능을 사용할 수 있습니다. 자세한 내용은 SiteConfig CR에서 ClusterInstance API로 전환하는 절차를 참조하세요.

SiteConfig Operator에 대한 자세한 내용은 SiteConfig를 참조하십시오.

사전 요구 사항

  • OpenShift CLI(oc)가 설치되어 있습니다.
  • cluster-admin 권한이 있는 사용자로 허브 클러스터에 로그인했습니다.
  • 필요한 설치 및 정책 CR을 생성하기 위해 허브 클러스터를 구성했습니다.
  • 사용자 정의 사이트 구성 데이터를 관리하는 Git 저장소를 만들었습니다. 저장소는 허브 클러스터에서 접근할 수 있어야 하며 ArgoCD 애플리케이션의 소스 저장소로 구성해야 합니다. 자세한 내용은 "GitOps ZTP 사이트 구성 저장소 준비"를 참조하세요.

    참고

    소스 저장소를 생성할 때 ztp-site-generate 컨테이너에서 추출한 argocd/deployment/argocd-openshift-gitops-patch.json 패치 파일로 ArgoCD 애플리케이션에 패치를 적용해야 합니다. "ArgoCD를 사용하여 허브 클러스터 구성"을 참조하세요.

  • 관리형 클러스터를 프로비저닝하려면 각 베어 메탈 호스트에 대해 다음이 필요합니다.

    네트워크 연결
    네트워크에 DNS가 필요합니다. 관리되는 클러스터 호스트는 허브 클러스터에서 접근할 수 있어야 합니다. 허브 클러스터와 관리되는 클러스터 호스트 사이에 3계층 연결이 있는지 확인하세요.
    베이스보드 관리 컨트롤러(BMC) 세부 정보
    GitOps ZTP는 클러스터 설치 중에 BMC 사용자 이름과 비밀번호 세부 정보를 사용하여 BMC에 연결합니다. GitOps ZTP 플러그인은 사이트 Git 리포지토리의 SiteConfig CR을 기반으로 허브 클러스터의 ManagedCluster CR을 관리합니다. 각 호스트에 대해 개별 BMCSecret CR을 수동으로 생성합니다.

    프로세스

    1. 허브 클러스터에서 필요한 관리형 클러스터 비밀을 만듭니다. 이러한 리소스는 클러스터 이름과 일치하는 이름을 가진 네임스페이스에 있어야 합니다. 예를 들어, out/argocd/example/siteconfig/example-sno.yaml 에서 클러스터 이름과 네임스페이스는 example-sno 입니다.

      1. 다음 명령을 실행하여 클러스터 네임스페이스를 내보냅니다.

        $ export CLUSTERNS=example-sno
        Copy to Clipboard Toggle word wrap
      2. 네임스페이스를 생성합니다.

        $ oc create namespace $CLUSTERNS
        Copy to Clipboard Toggle word wrap
    2. 관리되는 클러스터에 대한 풀 시크릿과 BMC 시크릿 CR을 생성합니다. 풀 시크릿에는 OpenShift Container Platform과 모든 필수 운영자를 설치하는 데 필요한 모든 자격 증명이 포함되어야 합니다. 자세한 내용은 "관리형 베어 메탈 호스트 비밀 만들기"를 참조하세요.

      참고

      비밀은 SiteConfig 사용자 정의 리소스(CR)에서 이름으로 참조됩니다. 네임스페이스는 SiteConfig 네임스페이스와 일치해야 합니다.

    3. Git 저장소의 로컬 복제본에서 클러스터에 대한 SiteConfig CR을 만듭니다.

      1. out/argocd/example/siteconfig/ 폴더에서 CR에 적합한 예를 선택하세요. 폴더에는 단일 노드, 3-노드 및 표준 클러스터에 대한 예제 파일이 포함되어 있습니다.

        • example-sno.yaml
        • example-3node.yaml
        • example-standard.yaml
      2. 예제 파일에서 클러스터 및 호스트 세부 정보를 변경하여 원하는 클러스터 유형에 맞게 만듭니다. 예를 들면 다음과 같습니다.

        단일 노드 OpenShift SiteConfig CR 예제

        # example-node1-bmh-secret & assisted-deployment-pull-secret need to be created under same namespace example-sno
        ---
        apiVersion: ran.openshift.io/v1
        kind: SiteConfig
        metadata:
          name: "example-sno"
          namespace: "example-sno"
        spec:
          baseDomain: "example.com"
          pullSecretRef:
            name: "assisted-deployment-pull-secret"
          clusterImageSetNameRef: "openshift-4.18"
          sshPublicKey: "ssh-rsa AAAA..."
          clusters:
            - clusterName: "example-sno"
              networkType: "OVNKubernetes"
              # installConfigOverrides is a generic way of passing install-config
              # parameters through the siteConfig.  The 'capabilities' field configures
              # the composable openshift feature.  In this 'capabilities' setting, we
              # remove all the optional set of components.
              # Notes:
              # - OperatorLifecycleManager is needed for 4.15 and later
              # - NodeTuning is needed for 4.13 and later, not for 4.12 and earlier
              # - Ingress is needed for 4.16 and later
              installConfigOverrides: |
                {
                  "capabilities": {
                    "baselineCapabilitySet": "None",
                    "additionalEnabledCapabilities": [
                      "NodeTuning",
                      "OperatorLifecycleManager",
                      "Ingress"
                    ]
                  }
                }
              # It is strongly recommended to include crun manifests as part of the additional install-time manifests for 4.13+.
              # The crun manifests can be obtained from source-crs/optional-extra-manifest/ and added to the git repo ie.sno-extra-manifest.
              # extraManifestPath: sno-extra-manifest
              clusterLabels:
                # These example cluster labels correspond to the bindingRules in the PolicyGenTemplate examples
                du-profile: "latest"
                # These example cluster labels correspond to the bindingRules in the PolicyGenTemplate examples in ../policygentemplates:
                # ../acmpolicygenerator/common-ranGen.yaml will apply to all clusters with 'common: true'
                common: true
                # ../policygentemplates/group-du-sno-ranGen.yaml will apply to all clusters with 'group-du-sno: ""'
                group-du-sno: ""
                # ../policygentemplates/example-sno-site.yaml will apply to all clusters with 'sites: "example-sno"'
                # Normally this should match or contain the cluster name so it only applies to a single cluster
                sites: "example-sno"
              clusterNetwork:
                - cidr: 1001:1::/48
                  hostPrefix: 64
              machineNetwork:
                - cidr: 1111:2222:3333:4444::/64
              serviceNetwork:
                - 1001:2::/112
              additionalNTPSources:
                - 1111:2222:3333:4444::2
              # Initiates the cluster for workload partitioning. Setting specific reserved/isolated CPUSets is done via PolicyTemplate
              # please see Workload Partitioning Feature for a complete guide.
              cpuPartitioningMode: AllNodes
              # Optionally; This can be used to override the KlusterletAddonConfig that is created for this cluster:
              #crTemplates:
              #  KlusterletAddonConfig: "KlusterletAddonConfigOverride.yaml"
              nodes:
                - hostName: "example-node1.example.com"
                  role: "master"
                  # Optionally; This can be used to configure desired BIOS setting on a host:
                  #biosConfigRef:
                  #  filePath: "example-hw.profile"
                  bmcAddress: "idrac-virtualmedia+https://[1111:2222:3333:4444::bbbb:1]/redfish/v1/Systems/System.Embedded.1"
                  bmcCredentialsName:
                    name: "example-node1-bmh-secret"
                  bootMACAddress: "AA:BB:CC:DD:EE:11"
                  # Use UEFISecureBoot to enable secure boot.
                  bootMode: "UEFISecureBoot"
                  rootDeviceHints:
                    deviceName: "/dev/disk/by-path/pci-0000:01:00.0-scsi-0:2:0:0"
                  #crTemplates:
                  #  BareMetalHost: "bmhOverride.yaml"
                  # disk partition at `/var/lib/containers` with ignitionConfigOverride. Some values must be updated. See DiskPartitionContainer.md for more details
                  ignitionConfigOverride: |
                    {
                      "ignition": {
                        "version": "3.2.0"
                      },
                      "storage": {
                        "disks": [
                          {
                            "device": "/dev/disk/by-id/wwn-0x6b07b250ebb9d0002a33509f24af1f62",
                            "partitions": [
                              {
                                "label": "var-lib-containers",
                                "sizeMiB": 0,
                                "startMiB": 250000
                              }
                            ],
                            "wipeTable": false
                          }
                        ],
                        "filesystems": [
                          {
                            "device": "/dev/disk/by-partlabel/var-lib-containers",
                            "format": "xfs",
                            "mountOptions": [
                              "defaults",
                              "prjquota"
                            ],
                            "path": "/var/lib/containers",
                            "wipeFilesystem": true
                          }
                        ]
                      },
                      "systemd": {
                        "units": [
                          {
                            "contents": "# Generated by Butane\n[Unit]\nRequires=systemd-fsck@dev-disk-by\\x2dpartlabel-var\\x2dlib\\x2dcontainers.service\nAfter=systemd-fsck@dev-disk-by\\x2dpartlabel-var\\x2dlib\\x2dcontainers.service\n\n[Mount]\nWhere=/var/lib/containers\nWhat=/dev/disk/by-partlabel/var-lib-containers\nType=xfs\nOptions=defaults,prjquota\n\n[Install]\nRequiredBy=local-fs.target",
                            "enabled": true,
                            "name": "var-lib-containers.mount"
                          }
                        ]
                      }
                    }
                  nodeNetwork:
                    interfaces:
                      - name: eno1
                        macAddress: "AA:BB:CC:DD:EE:11"
                    config:
                      interfaces:
                        - name: eno1
                          type: ethernet
                          state: up
                          ipv4:
                            enabled: false
                          ipv6:
                            enabled: true
                            address:
                              # For SNO sites with static IP addresses, the node-specific,
                              # API and Ingress IPs should all be the same and configured on
                              # the interface
                              - ip: 1111:2222:3333:4444::aaaa:1
                                prefix-length: 64
                      dns-resolver:
                        config:
                          search:
                            - example.com
                          server:
                            - 1111:2222:3333:4444::2
                      routes:
                        config:
                          - destination: ::/0
                            next-hop-interface: eno1
                            next-hop-address: 1111:2222:3333:4444::1
                            table-id: 254
        Copy to Clipboard Toggle word wrap

        참고

        BMC 주소 지정에 대한 자세한 내용은 "추가 자료" 섹션을 참조하세요. 이 예제에서는 가독성을 높이기 위해 installConfigOverridesignitionConfigOverride 필드가 확장되었습니다.

        참고

        노드의 기본 BareMetalHost CR을 재정의하려면 SiteConfig CR의 노드 수준 crTemplates 필드에서 재정의 CR을 참조할 수 있습니다. 오버라이드 BareMetalHost CR에서 argocd.argoproj.io/sync-wave: "3" 주석을 설정했는지 확인하세요.

      3. out/argocd/extra-manifest 에서 기본 extra-manifest MachineConfig CR 세트를 검사할 수 있습니다. 설치 시 자동으로 클러스터에 적용됩니다.
      4. 선택 사항: 프로비저닝된 클러스터에 추가 설치 시간 매니페스트를 프로비저닝하려면 Git 저장소에 디렉토리(예: sno-extra-manifest/ )를 만들고 이 디렉토리에 사용자 지정 매니페스트 CR을 추가합니다. SiteConfig.yamlextraManifestPath 필드에서 이 디렉토리를 참조하는 경우, 이 참조 디렉토리의 모든 CR은 기본 추가 매니페스트 세트에 추가됩니다.

        crun OCI 컨테이너 런타임 활성화

        최적의 클러스터 성능을 위해서는 단일 노드 OpenShift에서 마스터 및 작업자 노드에 대해 crun, 추가 작업자 노드가 있는 단일 노드 OpenShift, 3-노드 OpenShift 및 표준 클러스터를 활성화합니다.

        클러스터를 재부팅하지 않아도 되도록 ContainerRuntimeConfig CR에서 crun을 추가 Day 0 설치 시 매니페스트로 활성화합니다.

        enable-crun-master.yamlenable-crun-worker.yaml CR 파일은 ztp-site-generate 컨테이너에서 추출할 수 있는 out/source-crs/optional-extra-manifest/ 폴더에 있습니다. 자세한 내용은 "GitOps ZTP 파이프라인에서 추가 설치 매니페스트 사용자 지정"을 참조하세요.

    4. out/argocd/example/siteconfig/kustomization.yaml에 표시된 예와 유사하게 generators 섹션의 kustomization.yaml 파일에 SiteConfig CR을 추가합니다.
    5. SiteConfig CR과 관련 kustomization.yaml 변경 사항을 Git 저장소에 커밋하고 변경 사항을 푸시합니다.

      ArgoCD 파이프라인은 변경 사항을 감지하고 관리형 클러스터 배포를 시작합니다.

검증

  • 노드가 배포된 후 사용자 지정 역할과 레이블이 적용되었는지 확인하세요.

    $ oc describe node example-node.example.com
    Copy to Clipboard Toggle word wrap

출력 예

Name:   example-node.example.com
Roles:  control-plane,example-label,master,worker
Labels: beta.kubernetes.io/arch=amd64
        beta.kubernetes.io/os=linux
        custom-label/parameter1=true
        kubernetes.io/arch=amd64
        kubernetes.io/hostname=cnfdf03.telco5gran.eng.rdu2.redhat.com
        kubernetes.io/os=linux
        node-role.kubernetes.io/control-plane=
        node-role.kubernetes.io/example-label= 
1

        node-role.kubernetes.io/master=
        node-role.kubernetes.io/worker=
        node.openshift.io/os_id=rhcos
Copy to Clipboard Toggle word wrap

1
사용자 지정 라벨이 노드에 적용됩니다.

4.5.1. GitOps ZTP의 가속화된 프로비저닝

중요

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

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

단일 노드 OpenShift에 대한 GitOps ZTP의 가속 프로비저닝을 사용하면 클러스터 설치에 걸리는 시간을 줄일 수 있습니다. 가속화된 ZTP는 더 빠른 단계의 정책에서 파생된 2일차 매니페스트를 적용하여 설치 속도를 높입니다.

중요

GitOps ZTP의 가속 프로비저닝은 Assisted Installer를 사용하여 단일 노드 OpenShift를 설치하는 경우에만 지원됩니다. 그렇지 않으면 이 설치 방법은 실패합니다.

4.5.1.1. 가속 ZTP 활성화

다음 예와 같이 spec.clusters.clusterLabels.accelerated-ztp 레이블을 사용하여 가속화된 ZTP를 활성화할 수 있습니다.

가속 ZTP SiteConfig CR의 예입니다.

apiVersion: ran.openshift.io/v2
kind: SiteConfig
metadata:
  name: "example-sno"
  namespace: "example-sno"
spec:
  baseDomain: "example.com"
  pullSecretRef:
    name: "assisted-deployment-pull-secret"
  clusterImageSetNameRef: "openshift-4.19"
  sshPublicKey: "ssh-rsa AAAA..."
  clusters:
  # ...
    clusterLabels:
        common: true
        group-du-sno: ""
        sites : "example-sno"
        accelerated-ztp: full
Copy to Clipboard Toggle word wrap

accelerated-ztp:full을 사용하면 가속 프로세스를 완전히 자동화할 수 있습니다. GitOps ZTP는 가속화된 GitOps ZTP ConfigMap에 대한 참조로 AgentClusterInstall 리소스를 업데이트하고 TALM의 정책에서 추출한 리소스와 가속화된 ZTP 작업 매니페스트를 포함합니다.

accelerated-ztp: partial 을 사용하는 경우 GitOps ZTP는 가속화된 작업 매니페스트를 포함하지 않지만 다음 유형 의 클러스터 설치 중에 생성된 정책 파생 개체를 포함합니다.

  • PerformanceProfile.performance.openshift.io
  • Tuned.tuned.openshift.io
  • 네임스페이스
  • CatalogSource.operators.coreos.com
  • ContainerRuntimeConfig.machineconfiguration.openshift.io

이 부분적 가속은 Performance Profile , TunedContainerRuntimeConfig 종류의 리소스를 적용할 때 노드에서 수행하는 재부팅 횟수를 줄일 수 있습니다. TALM은 RHACM이 클러스터 가져오기를 완료한 후 표준 GitOps ZTP와 동일한 흐름에 따라 정책에서 파생된 Operator 구독을 설치합니다.

가속화된 ZTP의 이점은 배포 규모에 따라 증가합니다. accelerated-ztp: full을 사용하면 다수의 클러스터에서 더 많은 이점을 얻을 수 있습니다. 클러스터 수가 적으면 설치 시간 단축 효과가 크지 않습니다. 완전히 가속화된 ZTP는 스포크에 네임스페이스와 완료된 작업을 남겨두므로 이를 수동으로 제거해야 합니다.

가속화된 ztp:부분을 사용하는 한 가지 이점은 기본 구현에 문제가 발생하거나 사용자 지정 기능이 필요한 경우 온스포크 작업의 기능을 재정의할 수 있다는 것입니다.

4.5.1.2. 가속화된 ZTP 프로세스

가속화된 ZTP는 추가 ConfigMap을 사용하여 스포크 클러스터의 정책에서 파생된 리소스를 생성합니다. 표준 ConfigMap 에는 GitOps ZTP 워크플로가 클러스터 설치를 사용자 지정하는 데 사용하는 매니페스트가 포함되어 있습니다.

TALM은 accelerated-ztp 레이블이 설정되었음을 감지한 다음 두 번째 ConfigMap을 생성합니다. 가속화된 ZTP의 일부로 SiteConfig 생성기는 <spoke-cluster-name>-aztp 명명 규칙을 사용하여 두 번째 ConfigMap 에 대한 참조를 추가합니다.

TALM이 두 번째 ConfigMap을 생성한 후 관리되는 클러스터에 바인딩된 모든 정책을 찾아 GitOps ZTP 프로필 정보를 추출합니다. TALM은 GitOps ZTP 프로필 정보를 <spoke-cluster-name>-aztp ConfigMap 사용자 정의 리소스(CR)에 추가하고 해당 CR을 허브 클러스터 API에 적용합니다.

GitOps ZTP 및 Red Hat Advanced Cluster Management(RHACM)를 사용하여 설치한 관리형 단일 노드 OpenShift 클러스터에서 IPsec 암호화를 활성화할 수 있습니다. 관리되는 클러스터와 관리되는 클러스터 외부의 IPsec 엔드포인트 간의 트래픽을 암호화할 수 있습니다. OVN-Kubernetes 클러스터 네트워크의 노드 간 모든 네트워크 트래픽은 전송 모드에서 IPsec으로 암호화됩니다.

중요

다음 절차에 따라 추가 작업자 노드가 있는 단일 노드 OpenShift 클러스터에 대한 IPsec 암호화를 구성할 수도 있습니다. 단일 노드 OpenShift 클러스터와 추가 작업자 노드가 있는 단일 노드 OpenShift 클러스터의 경우 리소스 가용성이 낮으므로 IPsec 암호화를 구성하려면 MachineConfig 사용자 정의 리소스(CR)를 사용하는 것이 좋습니다.

사전 요구 사항

  • OpenShift CLI(oc)가 설치되어 있습니다.
  • cluster-admin 권한이 있는 사용자로 허브 클러스터에 로그인했습니다.
  • 관리되는 클러스터에 필요한 설치 및 정책 사용자 정의 리소스(CR)를 생성하기 위해 RHACM과 허브 클러스터를 구성했습니다.
  • 사용자 정의 사이트 구성 데이터를 관리하는 Git 저장소를 만들었습니다. 저장소는 허브 클러스터에서 접근할 수 있어야 하며 Argo CD 애플리케이션의 소스 저장소로 정의되어야 합니다.
  • 부탄 유틸리티 버전 0.20.0 이상을 설치했습니다.
  • IPsec 엔드포인트에 대한 PKCS#12 인증서와 PEM 형식의 CA 인증서가 있습니다.

프로세스

  1. ztp-site-generate 컨테이너 소스의 최신 버전을 추출하여 사용자 정의 사이트 구성 데이터를 관리하는 저장소와 병합합니다.
  2. 클러스터에서 IPsec을 구성하는 데 필요한 값으로 optional-extra-manifest/ipsec/ipsec-endpoint-config.yaml을 구성합니다. 예를 들면 다음과 같습니다.

    interfaces:
    - name: hosta_conn
      type: ipsec
      libreswan:
        left: '%defaultroute'
        leftid: '%fromcert'
        leftmodecfgclient: false
        leftcert: left_server 
    1
    
        leftrsasigkey: '%cert'
        right: <external_host> 
    2
    
        rightid: '%fromcert'
        rightrsasigkey: '%cert'
        rightsubnet: <external_address> 
    3
    
        ikev2: insist 
    4
    
        type: tunnel
    Copy to Clipboard Toggle word wrap
    1
    이 필드의 값은 원격 시스템에서 사용되는 인증서의 이름과 일치해야 합니다.
    2
    <external_host>를 외부 호스트 IP 주소 또는 DNS 호스트 이름으로 바꾸세요.
    3
    <external_address>를 IPsec 터널의 반대쪽에 있는 외부 호스트의 IP 서브넷으로 바꿉니다.
    4
    IKEv2 VPN 암호화 프로토콜만 사용하십시오. 더 이상 사용되지 않는 IKEv1을 사용하지 마세요.
  3. 다음 인증서를 optional-extra-manifest/ipsec 폴더에 추가합니다.

    • left_server.p12 : IPsec 엔드포인트에 대한 인증서 번들
    • ca.pem : 인증서에 서명한 인증 기관

      각 호스트의 네트워크 보안 서비스(NSS) 데이터베이스에는 인증서 파일이 필요합니다. 이러한 파일은 이후 단계에서 부탄 구성의 일부로 가져옵니다.

  4. 사용자 정의 사이트 구성 데이터를 유지 관리하는 Git 저장소의 optional-extra-manifest/ipsec 폴더에서 셸 프롬프트를 엽니다.
  5. optional-extra-manifest/ipsec/build.sh 스크립트를 실행하여 필요한 Butane 및 MachineConfig CR 파일을 생성합니다.

    PKCS#12 인증서가 비밀번호로 보호되는 경우 -W 인수를 설정합니다.

    출력 예

    out
     └── argocd
          └── example
               └── optional-extra-manifest
                    └── ipsec
                         ├── 99-ipsec-master-endpoint-config.bu 
    1
    
                         ├── 99-ipsec-master-endpoint-config.yaml 
    2
    
                         ├── 99-ipsec-worker-endpoint-config.bu 
    3
    
                         ├── 99-ipsec-worker-endpoint-config.yaml 
    4
    
                         ├── build.sh
                         ├── ca.pem 
    5
    
                         ├── left_server.p12 
    6
    
                         ├── enable-ipsec.yaml
                         ├── ipsec-endpoint-config.yml
                         └── README.md
    Copy to Clipboard Toggle word wrap

    1 2 3 4
    ipsec/build.sh 스크립트는 Butane 및 엔드포인트 구성 CR을 생성합니다.
    5 6
    네트워크와 관련된 ca.pemleft_server.p12 인증서 파일을 제공합니다.
  6. 사용자 정의 사이트 구성 데이터를 관리하는 저장소에 custom-manifest/ 폴더를 만듭니다. enable-ipsec.yaml99-ipsec-* YAML 파일을 디렉토리에 추가합니다. 예를 들면 다음과 같습니다.

    siteconfig
      ├── site1-sno-du.yaml
      ├── extra-manifest/
      └── custom-manifest
            ├── enable-ipsec.yaml
            ├── 99-ipsec-worker-endpoint-config.yaml
            └── 99-ipsec-master-endpoint-config.yaml
    Copy to Clipboard Toggle word wrap
  7. SiteConfig CR에서 custom-manifest/ 디렉토리를 extraManifests.searchPaths 필드에 추가합니다. 예를 들면 다음과 같습니다.

    clusters:
    - clusterName: "site1-sno-du"
      networkType: "OVNKubernetes"
      extraManifests:
        searchPaths:
          - extra-manifest/
          - custom-manifest/
    Copy to Clipboard Toggle word wrap
  8. SiteConfig CR 변경 사항과 업데이트된 파일을 Git 저장소에 커밋하고 변경 사항을 푸시하여 관리되는 클러스터를 프로비저닝하고 IPsec 암호화를 구성합니다.

    Argo CD 파이프라인은 변경 사항을 감지하고 관리형 클러스터 배포를 시작합니다.

    클러스터 프로비저닝 중에 GitOps ZTP 파이프라인은 custom-manifest/ 디렉토리에 있는 CR을 extra-manifest/ 디렉토리에 저장된 기본 추가 매니페스트 세트에 추가합니다.

검증

IPsec 암호화를 확인하는 방법에 대한 자세한 내용은 "IPsec 암호화 확인"을 참조하세요.

GitOps ZTP 및 Red Hat Advanced Cluster Management(RHACM)를 사용하여 설치한 관리형 다중 노드 클러스터에서 IPsec 암호화를 활성화할 수 있습니다. 관리되는 클러스터와 관리되는 클러스터 외부의 IPsec 엔드포인트 간의 트래픽을 암호화할 수 있습니다. OVN-Kubernetes 클러스터 네트워크의 노드 간 모든 네트워크 트래픽은 전송 모드에서 IPsec으로 암호화됩니다.

사전 요구 사항

  • OpenShift CLI(oc)가 설치되어 있습니다.
  • cluster-admin 권한이 있는 사용자로 허브 클러스터에 로그인했습니다.
  • 관리되는 클러스터에 필요한 설치 및 정책 사용자 정의 리소스(CR)를 생성하기 위해 RHACM과 허브 클러스터를 구성했습니다.
  • 사용자 정의 사이트 구성 데이터를 관리하는 Git 저장소를 만들었습니다. 저장소는 허브 클러스터에서 접근할 수 있어야 하며 Argo CD 애플리케이션의 소스 저장소로 정의되어야 합니다.
  • 부탄 유틸리티 버전 0.20.0 이상을 설치했습니다.
  • IPsec 엔드포인트에 대한 PKCS#12 인증서와 PEM 형식의 CA 인증서가 있습니다.
  • NMState Operator를 설치했습니다.

프로세스

  1. ztp-site-generate 컨테이너 소스의 최신 버전을 추출하여 사용자 정의 사이트 구성 데이터를 관리하는 저장소와 병합합니다.
  2. 클러스터에서 IPsec을 구성하는 데 필요한 값으로 optional-extra-manifest/ipsec/ipsec-config-policy.yaml 파일을 구성합니다.

    IPsec 구성을 생성하기 위한 ConfigurationPolicy 개체

    apiVersion: policy.open-cluster-management.io/v1
    kind: ConfigurationPolicy
    metadata:
      name: policy-config
    spec:
      namespaceSelector:
        include: ["default"]
        exclude: []
        matchExpressions: []
        matchLabels: {}
      remediationAction: inform
      severity: low
      evaluationInterval:
        compliant:
        noncompliant:
      object-templates-raw: |
        {{- range (lookup "v1" "Node" "" "").items }}
        - complianceType: musthave
          objectDefinition:
            kind: NodeNetworkConfigurationPolicy
            apiVersion: nmstate.io/v1
            metadata:
              name: {{ .metadata.name }}-ipsec-policy
            spec:
              nodeSelector:
                kubernetes.io/hostname: {{ .metadata.name }}
              desiredState:
                interfaces:
                - name: hosta_conn
                  type: ipsec
                  libreswan:
                    left: '%defaultroute'
                    leftid: '%fromcert'
                    leftmodecfgclient: false
                    leftcert: left_server 
    1
    
                    leftrsasigkey: '%cert'
                    right: <external_host> 
    2
    
                    rightid: '%fromcert'
                    rightrsasigkey: '%cert'
                    rightsubnet: <external_address> 
    3
    
                    ikev2: insist 
    4
    
                    type: tunnel
    Copy to Clipboard Toggle word wrap

    1
    이 필드의 값은 원격 시스템에서 사용되는 인증서의 이름과 일치해야 합니다.
    2
    <external_host>를 외부 호스트 IP 주소 또는 DNS 호스트 이름으로 바꾸세요.
    3
    <external_address>를 IPsec 터널의 반대쪽에 있는 외부 호스트의 IP 서브넷으로 바꿉니다.
    4
    IKEv2 VPN 암호화 프로토콜만 사용하십시오. 더 이상 사용되지 않는 IKEv1을 사용하지 마세요.
  3. 다음 인증서를 optional-extra-manifest/ipsec 폴더에 추가합니다.

    • left_server.p12 : IPsec 엔드포인트에 대한 인증서 번들
    • ca.pem : 인증서에 서명한 인증 기관

      각 호스트의 네트워크 보안 서비스(NSS) 데이터베이스에는 인증서 파일이 필요합니다. 이러한 파일은 이후 단계에서 부탄 구성의 일부로 가져옵니다.

  4. 사용자 정의 사이트 구성 데이터를 유지 관리하는 Git 저장소의 optional-extra-manifest/ipsec 폴더에서 셸 프롬프트를 엽니다.
  5. 외부 인증서를 가져오기 위해 필요한 Butane 및 MachineConfig CR을 생성하려면 optional-extra-manifest/ipsec/import-certs.sh 스크립트를 실행하세요.

    PKCS#12 인증서가 비밀번호로 보호되는 경우 -W 인수를 설정합니다.

    출력 예

    out
     └── argocd
          └── example
               └── optional-extra-manifest
                    └── ipsec
                         ├── 99-ipsec-master-import-certs.bu 
    1
    
                         ├── 99-ipsec-master-import-certs.yaml 
    2
    
                         ├── 99-ipsec-worker-import-certs.bu 
    3
    
                         ├── 99-ipsec-worker-import-certs.yaml 
    4
    
                         ├── import-certs.sh
                         ├── ca.pem 
    5
    
                         ├── left_server.p12 
    6
    
                         ├── enable-ipsec.yaml
                         ├── ipsec-config-policy.yaml
                         └── README.md
    Copy to Clipboard Toggle word wrap

    1 2 3 4
    ipsec/import-certs.sh 스크립트는 Butane 및 엔드포인트 구성 CR을 생성합니다.
    5 6
    네트워크와 관련된 ca.pemleft_server.p12 인증서 파일을 추가합니다.
  6. 사용자 정의 사이트 구성 데이터를 관리하는 저장소에 custom-manifest/ 폴더를 만들고 enable-ipsec.yaml99-ipsec-* YAML 파일을 해당 디렉토리에 추가합니다.

    예시 siteconfig 디렉토리

    siteconfig
      ├── site1-mno-du.yaml
      ├── extra-manifest/
      └── custom-manifest
            ├── enable-ipsec.yaml
            ├── 99-ipsec-master-import-certs.yaml
            └── 99-ipsec-worker-import-certs.yaml
    Copy to Clipboard Toggle word wrap

  7. SiteConfig CR에서 다음 예와 같이 custom-manifest/ 디렉터리를 extraManifests.searchPaths 필드에 추가합니다.

    clusters:
    - clusterName: "site1-mno-du"
      networkType: "OVNKubernetes"
      extraManifests:
        searchPaths:
          - extra-manifest/
          - custom-manifest/
    Copy to Clipboard Toggle word wrap
  8. GitOps의 source-crs 디렉토리에 ipsec-config-policy.yaml 구성 정책 파일을 포함하고 PolicyGenerator CR 중 하나에서 해당 파일을 참조합니다.
  9. SiteConfig CR 변경 사항과 업데이트된 파일을 Git 저장소에 커밋하고 변경 사항을 푸시하여 관리되는 클러스터를 프로비저닝하고 IPsec 암호화를 구성합니다.

    Argo CD 파이프라인은 변경 사항을 감지하고 관리형 클러스터 배포를 시작합니다.

    클러스터 프로비저닝 중에 GitOps ZTP 파이프라인은 custom-manifest/ 디렉토리에 있는 CR을 extra-manifest/ 디렉토리에 저장된 기본 추가 매니페스트 세트에 추가합니다.

검증

IPsec 암호화를 확인하는 방법에 대한 자세한 내용은 "IPsec 암호화 확인"을 참조하세요.

4.5.4. IPsec 암호화 확인

관리되는 OpenShift Container Platform 클러스터에 IPsec 암호화가 성공적으로 적용되었는지 확인할 수 있습니다.

사전 요구 사항

  • OpenShift CLI(oc)가 설치되어 있습니다.
  • cluster-admin 권한이 있는 사용자로 허브 클러스터에 로그인했습니다.
  • IPsec 암호화를 구성했습니다.

프로세스

  1. 다음 명령을 실행하여 관리되는 클러스터에 대한 디버그 포드를 시작합니다.

    $ oc debug node/<node_name>
    Copy to Clipboard Toggle word wrap
  2. 다음 명령을 실행하여 클러스터 노드에 IPsec 정책이 적용되었는지 확인하세요.

    sh-5.1# ip xfrm policy
    Copy to Clipboard Toggle word wrap

    출력 예

    src 172.16.123.0/24 dst 10.1.232.10/32
      dir out priority 1757377 ptype main
      tmpl src 10.1.28.190 dst 10.1.232.10
        proto esp reqid 16393 mode tunnel
    src 10.1.232.10/32 dst 172.16.123.0/24
      dir fwd priority 1757377 ptype main
      tmpl src 10.1.232.10 dst 10.1.28.190
        proto esp reqid 16393 mode tunnel
    src 10.1.232.10/32 dst 172.16.123.0/24
      dir in priority 1757377 ptype main
      tmpl src 10.1.232.10 dst 10.1.28.190
        proto esp reqid 16393 mode tunnel
    Copy to Clipboard Toggle word wrap

  3. 다음 명령을 실행하여 IPsec 터널이 작동 중이고 연결되었는지 확인하세요.

    sh-5.1# ip xfrm state
    Copy to Clipboard Toggle word wrap

    출력 예

    src 10.1.232.10 dst 10.1.28.190
      proto esp spi 0xa62a05aa reqid 16393 mode tunnel
      replay-window 0 flag af-unspec esn
      auth-trunc hmac(sha1) 0x8c59f680c8ea1e667b665d8424e2ab749cec12dc 96
      enc cbc(aes) 0x2818a489fe84929c8ab72907e9ce2f0eac6f16f2258bd22240f4087e0326badb
      anti-replay esn context:
       seq-hi 0x0, seq 0x0, oseq-hi 0x0, oseq 0x0
       replay_window 128, bitmap-length 4
       00000000 00000000 00000000 00000000
    src 10.1.28.190 dst 10.1.232.10
      proto esp spi 0x8e96e9f9 reqid 16393 mode tunnel
      replay-window 0 flag af-unspec esn
      auth-trunc hmac(sha1) 0xd960ddc0a6baaccb343396a51295e08cfd8aaddd 96
      enc cbc(aes) 0x0273c02e05b4216d5e652de3fc9b3528fea94648bc2b88fa01139fdf0beb27ab
      anti-replay esn context:
       seq-hi 0x0, seq 0x0, oseq-hi 0x0, oseq 0x0
       replay_window 128, bitmap-length 4
       00000000 00000000 00000000 00000000
    Copy to Clipboard Toggle word wrap

  4. 다음 명령을 실행하여 외부 호스트 서브넷의 알려진 IP에 ping을 보냅니다. 예를 들어, ipsec/ipsec-endpoint-config.yaml 파일에 설정한 rightsubnet 범위의 IP 주소에 ping을 보냅니다.

    sh-5.1# ping 172.16.110.8
    Copy to Clipboard Toggle word wrap

    출력 예

    PING 172.16.110.8 (172.16.110.8) 56(84) bytes of data.
    64 bytes from 172.16.110.8: icmp_seq=1 ttl=64 time=153 ms
    64 bytes from 172.16.110.8: icmp_seq=2 ttl=64 time=155 ms
    Copy to Clipboard Toggle word wrap

4.5.5. 단일 노드 OpenShift SiteConfig CR 설치 참조

Expand
표 4.1. 단일 노드 OpenShift 클러스터에 대한 SiteConfig CR 설치 옵션
SiteConfig CR 필드설명

spec.cpuPartitioningMode

cpuPartitioningMode 값을 AllNodes 로 설정하여 작업 분할을 구성합니다. 구성을 완료하려면 PerformanceProfile CR에서 격리 되고 예약된 CPU를 지정합니다.

metadata.name

nameassisted-deployment-pull-secret 으로 설정하고 SiteConfig CR과 동일한 네임스페이스에 assisted-deployment-pull-secret CR을 생성합니다.

spec.clusterImageSetNameRef

사이트의 모든 클러스터에 대해 허브 클러스터에서 사용 가능한 이미지 세트를 구성합니다. 허브 클러스터에서 지원되는 버전 목록을 보려면 oc get clusterimagesets 를 실행하세요.

installConfigOverrides

클러스터를 설치하기 전에 installConfigOverrides 필드를 설정하여 선택적 구성 요소를 활성화하거나 비활성화합니다.

중요

SiteConfig CR 예제에 지정된 대로 참조 구성을 사용합니다. 시스템에 추가 구성 요소를 다시 추가하려면 예약된 CPU 용량이 추가로 필요할 수 있습니다.

spec.clusters.clusterImageSetNameRef

개별 클러스터를 배포하는 데 사용되는 클러스터 이미지 세트를 지정합니다. 정의된 경우 사이트 수준에서 spec.clusterImageSetNameRef를 재정의합니다.

spec.clusters.clusterLabels

PolicyGenerator 또는 PolicyGentemplate CR에서 정의한 바인딩 규칙에 맞게 클러스터 레이블을 구성합니다. PolicyGenerator CR은 policyDefaults.placement.labelSelector 필드를 사용합니다. PolicyGentemplate CR은 spec.bindingRules 필드를 사용합니다.

예를 들어, acmpolicygenerator/acm-common-ranGen.yaml은 common: true가 설정된 모든 클러스터에 적용되고, acmpolicygenerator/acm-group-du-sno-ranGen.yaml은 group-du-sno: ""가 설정된 모든 클러스터에 적용됩니다.

spec.clusters.crTemplates.KlusterletAddonConfig

선택 사항: 클러스터에 대해 생성된 기본 `KlusterletAddonConfig`를 재정의하려면 KlusterletAddonConfig를 KlusterletAddonConfigOverride.yaml로 설정합니다.

spec.clusters.diskEncryption

이 필드를 구성하여 TPM(신뢰할 수 있는 플랫폼 모듈) 및 PCR(플랫폼 구성 레지스터) 보호를 통해 디스크 암호화를 활성화합니다. 자세한 내용은 "TPM 및 PCR 보호를 통한 디스크 암호화에 관하여"를 참조하세요.

참고

SiteConfig CR의 diskEncryption 필드를 사용하여 디스크 암호화를 구성하는 것은 OpenShift Container Platform 4.19의 기술 미리 보기 기능입니다.

spec.clusters.diskEncryption.type

디스크 암호화 유형을 tpm2 로 설정합니다.

spec.clusters.diskEncryption.tpm2

디스크 암호화를 위한 플랫폼 구성 레지스터(PCR) 보호를 구성합니다.

spec.clusters.diskEncryption.tpm2.pcrList

디스크 암호화에 사용할 플랫폼 구성 레지스터(PCR) 목록을 구성합니다. PCR 레지스터 1과 7을 사용해야 합니다.

spec.clusters.nodes.hostName

단일 노드 배포의 경우 단일 호스트를 정의합니다. 3-노드 배포의 경우 세 개의 호스트를 정의합니다. 표준 배포의 경우, role: master인 호스트 3개와 role: worker인 호스트 2개 이상을 정의합니다.

spec.clusters.nodes.nodeLabels

관리되는 클러스터의 노드에 대한 사용자 정의 역할을 지정합니다. 이러한 추가 역할은 OpenShift Container Platform 구성 요소에서는 사용되지 않고 사용자만 사용합니다. 사용자 정의 역할을 추가하면 해당 역할에 대한 특정 구성을 참조하는 사용자 정의 머신 구성 풀과 연결될 수 있습니다. 설치 중에 사용자 정의 레이블이나 역할을 추가하면 배포 프로세스가 더 효율적으로 진행되고 설치가 완료된 후 추가로 재부팅할 필요가 없습니다.

spec.clusters.nodes.automatedCleaningMode

선택 사항: 디스크를 완전히 지우지 않고 디스크 파티션 테이블만 제거하려면 주석 처리를 해제하고 값을 메타데이터 로 설정합니다. 기본값은 disabled 입니다.

spec.clusters.nodes.bmcAddress

호스트에 액세스하는 데 사용하는 BMC 주소입니다. 모든 클러스터 유형에 적용됩니다. GitOps ZTP는 Redfish 또는 IPMI 프로토콜을 사용하여 iPXE 및 가상 미디어 부팅을 지원합니다. iPXE 부팅을 사용하려면 RHACM 2.8 이상을 사용해야 합니다. BMC 주소 지정에 대한 자세한 내용은 "추가 자료" 섹션을 참조하세요.

spec.clusters.nodes.bmcAddress

호스트에 액세스하는 데 사용하는 BMC 주소입니다. 모든 클러스터 유형에 적용됩니다. GitOps ZTP는 Redfish 또는 IPMI 프로토콜을 사용하여 iPXE 및 가상 미디어 부팅을 지원합니다. iPXE 부팅을 사용하려면 RHACM 2.8 이상을 사용해야 합니다. BMC 주소 지정에 대한 자세한 내용은 "추가 자료" 섹션을 참조하세요.

참고

Far Edge Telco 사용 사례에서는 GitOps ZTP와 함께 사용할 수 있는 가상 미디어만 지원됩니다.

spec.clusters.nodes.bmcCredentialsName

호스트 BMC 자격 증명을 사용하여 별도로 생성한 bmh-secret CR을 구성합니다. bmh-secret CR을 생성할 때 호스트를 프로비저닝하는 SiteConfig CR과 동일한 네임스페이스를 사용하세요.

spec.clusters.nodes.bootMode

호스트의 부팅 모드를 UEFI 로 설정합니다. 기본값은 UEFI 입니다. UEFISecureBoot를 사용하여 호스트에서 보안 부팅을 활성화합니다.

spec.clusters.nodes.rootDeviceHints

배포할 장치를 지정합니다. 재부팅 후에도 안정적인 식별자를 사용하는 것이 좋습니다. 예를 들어, wwn: <disk_wwn> 또는 deviceName: /dev/disk/by-path/<device_path> . <by-path> 값이 선호됩니다. 안정적인 식별자에 대한 자세한 목록은 "루트 장치 힌트에 대하여" 섹션을 참조하세요.

spec.clusters.nodes.ignitionConfigOverride

선택 사항: 이 필드를 사용하여 영구 저장소에 대한 파티션을 할당합니다. 디스크 ID와 크기를 특정 하드웨어에 맞게 조정합니다.

spec.clusters.nodes.nodeNetwork

노드에 대한 네트워크 설정을 구성합니다.

spec.clusters.nodes.nodeNetwork.config.interfaces.ipv6

호스트의 IPv6 주소를 구성합니다. 고정 IP 주소를 사용하는 단일 노드 OpenShift 클러스터의 경우 노드별 API와 Ingress IP는 동일해야 합니다.

4.6. GitOps ZTP를 사용하여 호스트 펌웨어 설정 관리

호스트에는 높은 성능과 최적의 효율성을 보장하기 위한 올바른 펌웨어 구성이 필요합니다. GitOps ZTP를 사용하면 관리형 클러스터에 대한 사용자 정의 호스트 펌웨어 구성을 배포할 수 있습니다.

실험실의 특정 하드웨어 프로필에 맞게 호스트를 조정하고 요구 사항에 맞게 최적화되었는지 확인하세요. 원하는 대로 호스트 튜닝을 완료하면 호스트 프로필을 추출하여 GitOps ZTP 저장소에 저장합니다. 그런 다음 호스트 프로필을 사용하여 GitOps ZTP로 배포하는 관리형 클러스터 호스트에서 펌웨어 설정을 구성합니다.

관리되는 클러스터를 배포하는 데 사용하는 SiteConfig 사용자 정의 리소스(CR)에서 필요한 하드웨어 프로필을 지정합니다. GitOps ZTP 파이프라인은 허브 클러스터에 적용되는 필수 HostFirmwareSettings ( HFS ) 및 BareMetalHost ( BMH ) CR을 생성합니다.

호스트 펌웨어 프로필을 관리하려면 다음 모범 사례를 활용하세요.

하드웨어 공급업체와 함께 중요한 펌웨어 설정 식별
최적의 성능과 배포된 호스트 플랫폼과의 호환성에 필요한 중요한 호스트 펌웨어 설정을 식별하고 문서화하기 위해 하드웨어 공급업체와 협력합니다.
유사한 하드웨어 플랫폼에서 공통 펌웨어 구성을 사용합니다.
가능하다면 유사한 하드웨어 플랫폼에서 표준화된 호스트 펌웨어 구성을 사용하여 배포 중에 발생할 수 있는 복잡성과 잠재적 오류를 줄이세요.
실험실 환경에서 펌웨어 구성 테스트
프로덕션에 배포하기 전에 통제된 실험실 환경에서 호스트 펌웨어 구성을 테스트하여 설정이 하드웨어, 펌웨어 및 소프트웨어와 호환되는지 확인합니다.
소스 제어에서 펌웨어 프로필 관리
Git 저장소에서 호스트 펌웨어 프로필을 관리하여 변경 사항을 추적하고, 일관성을 유지하고, 공급업체와의 협업을 용이하게 합니다.

4.6.1. 관리되는 클러스터에 대한 호스트 펌웨어 스키마 검색

관리형 클러스터의 호스트 펌웨어 스키마를 알아볼 수 있습니다. 베어 메탈 호스트의 호스트 펌웨어 스키마는 Ironic API가 반환하는 정보로 채워집니다. API는 펌웨어 설정 유형, 허용 값, 범위, 플래그를 포함한 호스트 펌웨어 인터페이스에 대한 정보를 반환합니다.

사전 요구 사항

  • OpenShift CLI(oc)가 설치되어 있습니다.
  • Red Hat Advanced Cluster Management(RHACM)를 설치하고 cluster-admin 권한이 있는 사용자로 허브 클러스터에 로그인했습니다.
  • RHACM에서 관리하는 클러스터를 프로비저닝했습니다.

프로세스

  • 관리 클러스터의 호스트 펌웨어 스키마를 검색합니다. 다음 명령을 실행합니다.

    $ oc get firmwareschema -n <managed_cluster_namespace> -o yaml
    Copy to Clipboard Toggle word wrap

    출력 예

    apiVersion: v1
    items:
    - apiVersion: metal3.io/v1alpha1
      kind: FirmwareSchema
      metadata:
        creationTimestamp: "2024-09-11T10:29:43Z"
        generation: 1
        name: schema-40562318
        namespace: compute-1
        ownerReferences:
        - apiVersion: metal3.io/v1alpha1
          kind: HostFirmwareSettings
          name: compute-1.example.com
          uid: 65d0e89b-1cd8-4317-966d-2fbbbe033fe9
        resourceVersion: "280057624"
        uid: 511ad25d-f1c9-457b-9a96-776605c7b887
      spec:
        schema:
          AccessControlService:
            allowable_values:
            - Enabled
            - Disabled
            attribute_type: Enumeration
            read_only: false
          # ...
    Copy to Clipboard Toggle word wrap

4.6.2. 관리 클러스터의 호스트 펌웨어 설정 검색

관리 클러스터의 호스트 펌웨어 설정을 검색할 수 있습니다. 이 기능은 호스트 펌웨어에 변경 사항을 배포하고 변경 사항을 모니터링하고 성공적으로 적용되도록 하려는 경우에 유용합니다.

사전 요구 사항

  • OpenShift CLI(oc)가 설치되어 있습니다.
  • RHACM(Red Hat Advanced Cluster Management)을 설치하고 cluster-admin 권한이 있는 사용자로 hub 클러스터에 로그인했습니다.
  • RHACM에서 관리하는 클러스터를 프로비저닝했습니다.

프로세스

  1. 관리 클러스터의 호스트 펌웨어 설정을 검색합니다. 다음 명령을 실행합니다.

    $ oc get hostfirmwaresettings -n <cluster_namespace> <node_name> -o yaml
    Copy to Clipboard Toggle word wrap

    출력 예

    apiVersion: v1
    items:
    - apiVersion: metal3.io/v1alpha1
      kind: HostFirmwareSettings
      metadata:
        creationTimestamp: "2024-09-11T10:29:43Z"
        generation: 1
        name: compute-1.example.com
        namespace: kni-qe-24
        ownerReferences:
        - apiVersion: metal3.io/v1alpha1
          blockOwnerDeletion: true
          controller: true
          kind: BareMetalHost
          name: compute-1.example.com
          uid: 0baddbb7-bb34-4224-8427-3d01d91c9287
        resourceVersion: "280057626"
        uid: 65d0e89b-1cd8-4317-966d-2fbbbe033fe9
      spec:
        settings: {}
      status:
        conditions:
        - lastTransitionTime: "2024-09-11T10:29:43Z"
          message: ""
          observedGeneration: 1
          reason: Success
          status: "True" 
    1
    
          type: ChangeDetected
        - lastTransitionTime: "2024-09-11T10:29:43Z"
          message: Invalid BIOS setting
          observedGeneration: 1
          reason: ConfigurationError
          status: "False" 
    2
    
          type: Valid
        lastUpdated: "2024-09-11T10:29:43Z"
        schema:
          name: schema-40562318
          namespace: compute-1
        settings: 
    3
    
          AccessControlService: Enabled
          AcpiHpet: Enabled
          AcpiRootBridgePxm: Enabled
          # ...
    Copy to Clipboard Toggle word wrap

    1
    호스트 펌웨어 설정의 변경 사항이 감지되었음을 나타냅니다.
    2
    호스트에 잘못된 펌웨어 설정이 있음을 나타냅니다.
    3
    구성된 호스트 펌웨어 설정의 전체 목록은 status.settings 필드에서 반환됩니다.
  2. 선택 사항: 클러스터에서 Hfs( HostFirmwareSettings )사용자정의 리소스의 상태를 확인합니다.

    $ oc get hfs -n <managed_cluster_namespace> <managed_cluster_name> -o jsonpath='{.status.conditions[?(@.type=="ChangeDetected")].status}'
    Copy to Clipboard Toggle word wrap

    출력 예

    True
    Copy to Clipboard Toggle word wrap

  3. 선택 사항: 클러스터 호스트에서 잘못된 펌웨어 설정을 확인합니다. 다음 명령을 실행합니다.

    $ oc get hfs -n <managed_cluster_namespace> <managed_cluster_name> -o jsonpath='{.status.conditions[?(@.type=="Valid")].status}'
    Copy to Clipboard Toggle word wrap

    출력 예

    False
    Copy to Clipboard Toggle word wrap

클러스터 호스트 프로비저닝 중에 적용할 하드웨어 프로필을 포함하도록 SiteConfig CR(사용자 정의 리소스)을 구성하여 사용자 정의 펌웨어 설정을 클러스터 호스트에 배포할 수 있습니다. 다음 시나리오에서 호스트에 적용하도록 하드웨어 프로필을 구성할 수 있습니다.

  • 모든 호스트 사이트 전체
  • 특정 기준을 충족하는 클러스터 호스트만
  • 개별 클러스터 호스트
중요

계층 구조에 적용할 호스트 하드웨어 프로필을 구성할 수 있습니다. 클러스터 수준 설정은 사이트 전체 설정을 덮어씁니다. 노드 수준 프로필은 클러스터 및 사이트 수준 설정을 재정의합니다.

사전 요구 사항

  • OpenShift CLI(oc)가 설치되어 있습니다.
  • RHACM(Red Hat Advanced Cluster Management)을 설치하고 cluster-admin 권한이 있는 사용자로 hub 클러스터에 로그인했습니다.
  • RHACM에서 관리하는 클러스터를 프로비저닝했습니다.
  • 사용자 지정 사이트 구성 데이터를 관리하는 Git 리포지토리를 생성하셨습니다. 리포지토리는 hub 클러스터에서 액세스할 수 있어야 하며 Argo CD 애플리케이션의 소스 리포지토리로 정의해야 합니다.

프로세스

  1. 적용하려는 펌웨어 설정이 포함된 호스트 펌웨어 프로필을 생성합니다. 예를 들어 다음 YAML 파일을 생성합니다.

    host-firmware.profile

    BootMode: Uefi
    LogicalProc: Enabled
    ProcVirtualization: Enabled
    Copy to Clipboard Toggle word wrap

  2. 클러스터를 프로비저닝하는 방법을 정의하는 데 사용하는 kustomization.yaml 파일을 기준으로 하드웨어 프로필 YAML 파일을 저장합니다. 예를 들면 다음과 같습니다.

    example-ztp/install
        └── site-install
              ├── siteconfig-example.yaml
              ├── kustomization.yaml
              └── host-firmware.profile
    Copy to Clipboard Toggle word wrap
  3. 클러스터에 적용할 펌웨어 프로필을 포함하도록 SiteConfig CR을 편집합니다. 예를 들면 다음과 같습니다.

    apiVersion: ran.openshift.io/v1
    kind: SiteConfig
    metadata:
      name: "site-plan-cluster"
      namespace: "example-cluster-namespace"
    spec:
      baseDomain: "example.com"
      # ...
      biosConfigRef:
        filePath: "./host-firmware.profile" 
    1
    Copy to Clipboard Toggle word wrap
    1
    하드웨어 프로필을 사이트 전체에서 모든 클러스터 호스트에 적용
    참고

    가능한 경우 클러스터당 단일 SiteConfig CR을 사용합니다.

  4. 선택 사항입니다. 특정 클러스터의 호스트에 하드웨어 프로필을 적용하려면 적용하려는 하드웨어 프로필을 사용하여 cluster .biosConfigRef.filePath 를 업데이트합니다. 예를 들면 다음과 같습니다.

    clusters:
      - clusterName: "cluster-1"
        # ...
        biosConfigRef:
          filePath: "./host-firmware.profile" 
    1
    Copy to Clipboard Toggle word wrap
    1
    cluster-1 클러스터의 모든 호스트에 적용
  5. 선택 사항입니다. 클러스터의 특정 호스트에 하드웨어 프로필을 적용하려면 적용하려는 하드웨어 프로필을 사용하여 cluster .nodes.biosConfigRef.filePath 를 업데이트합니다. 예를 들면 다음과 같습니다.

    clusters:
      - clusterName: "cluster-1"
        # ...
        nodes:
          - hostName: "compute-1.example.com"
            # ...
            bootMode: "UEFI"
            biosConfigRef:
              filePath: "./host-firmware.profile" 
    1
    Copy to Clipboard Toggle word wrap
    1
    펌웨어 프로필을 클러스터의 compute-1.example.com 호스트에 적용
  6. Git 리포지토리에서 SiteConfig CR 및 관련 kustomization.yaml 변경 사항을 커밋하고 변경 사항을 내보냅니다.

    ArgoCD 파이프라인은 변경 사항을 감지하고 관리 클러스터 배포를 시작합니다.

    참고

    클러스터 배포는 잘못된 펌웨어 설정이 감지된 경우에도 진행됩니다. GitOps ZTP를 사용하여 수정 사항을 적용하려면 수정된 하드웨어 프로필로 클러스터를 재배포합니다.

검증

  • 펌웨어 설정이 관리 클러스터 호스트에 적용되었는지 확인합니다. 예를 들어 다음 명령을 실행합니다.

    $ oc get hfs -n <managed_cluster_namespace> <managed_cluster_name> -o jsonpath='{.status.conditions[?(@.type=="Valid")].status}'
    Copy to Clipboard Toggle word wrap

    출력 예

    True
    Copy to Clipboard Toggle word wrap

4.7. 관리되는 클러스터 설치 진행 상황 모니터링

ArgoCD 파이프라인은 SiteConfig CR을 사용하여 클러스터 구성 CR을 생성하고 이를 허브 클러스터와 동기화합니다. ArgoCD 대시보드에서 동기화 진행 상황을 모니터링할 수 있습니다.

사전 요구 사항

  • OpenShift CLI(oc)가 설치되어 있습니다.
  • cluster-admin 권한이 있는 사용자로 허브 클러스터에 로그인했습니다.

프로세스

동기화가 완료되면 일반적으로 설치는 다음과 같이 진행됩니다.

  1. 지원 서비스 운영자는 클러스터에 OpenShift Container Platform을 설치합니다. 다음 명령을 실행하여 RHACM 대시보드나 명령줄에서 클러스터 설치 진행 상황을 모니터링할 수 있습니다.

    1. 클러스터 이름을 내보냅니다.

      $ export CLUSTER=<clusterName>
      Copy to Clipboard Toggle word wrap
    2. 관리되는 클러스터에 대한 AgentClusterInstall CR을 쿼리합니다.

      $ oc get agentclusterinstall -n $CLUSTER $CLUSTER -o jsonpath='{.status.conditions[?(@.type=="Completed")]}' | jq
      Copy to Clipboard Toggle word wrap
    3. 클러스터에 대한 설치 이벤트를 가져옵니다.

      $ curl -sk $(oc get agentclusterinstall -n $CLUSTER $CLUSTER -o jsonpath='{.status.debugInfo.eventsURL}')  | jq '.[-2,-1]'
      Copy to Clipboard Toggle word wrap

4.8. 설치 CR을 검증하여 GitOps ZTP 문제 해결

ArgoCD 파이프라인은 SiteConfigPolicyGenerator 또는 PolicyGentemplate 사용자 정의 리소스(CR)를 사용하여 클러스터 구성 CR과 Red Hat Advanced Cluster Management(RHACM) 정책을 생성합니다. 이 과정에서 발생할 수 있는 문제를 해결하려면 다음 단계를 따르세요.

사전 요구 사항

  • OpenShift CLI(oc)가 설치되어 있습니다.
  • cluster-admin 권한이 있는 사용자로 허브 클러스터에 로그인했습니다.

프로세스

  1. 다음 명령을 사용하여 설치 CR이 생성되었는지 확인하세요.

    $ oc get AgentClusterInstall -n <cluster_name>
    Copy to Clipboard Toggle word wrap

    객체가 반환되지 않으면 다음 단계에 따라 SiteConfig 파일에서 설치 CR로 가는 ArgoCD 파이프라인 흐름 문제를 해결하세요.

  2. 허브 클러스터에서 SiteConfig CR을 사용하여 ManagedCluster CR이 생성되었는지 확인하세요.

    $ oc get managedcluster
    Copy to Clipboard Toggle word wrap
  3. ManagedCluster 가 누락된 경우 클러스터 애플리케이션이 Git 저장소에서 허브 클러스터로 파일을 동기화하는 데 실패했는지 확인하세요.

    $ oc get applications.argoproj.io -n openshift-gitops clusters -o yaml
    Copy to Clipboard Toggle word wrap
    1. 관리되는 클러스터의 오류 로그를 식별하려면 status.operationState.syncResult.resources 필드를 검사하세요. 예를 들어, SiteConfig CR의 extraManifestPath 에 잘못된 값이 할당되면 다음과 유사한 오류가 생성됩니다.

      syncResult:
        resources:
        - group: ran.openshift.io
          kind: SiteConfig
          message: The Kubernetes API could not find ran.openshift.io/SiteConfig for
            requested resource spoke-sno/spoke-sno. Make sure the "SiteConfig" CRD is
            installed on the destination cluster
      Copy to Clipboard Toggle word wrap
    2. 더 자세한 SiteConfig 오류를 보려면 다음 단계를 완료하세요.

      1. Argo CD 대시보드에서 Argo CD가 동기화하려는 SiteConfig 리소스를 클릭합니다.
      2. DESIRED MANIFEST 탭에서 siteConfigError 필드를 찾으세요.

        siteConfigError: >- Error: could not build the entire SiteConfig defined by /tmp/kust-plugin-config-1081291903: stat sno-extra-manifest: no such file or directory
        Copy to Clipboard Toggle word wrap
    3. Status.Sync 필드를 확인하세요. 로그 오류가 있는 경우 Status.Sync 필드는 알 수 없는 오류를 나타낼 수 있습니다.

      Status:
        Sync:
          Compared To:
            Destination:
              Namespace:  clusters-sub
              Server:     https://kubernetes.default.svc
            Source:
              Path:             sites-config
              Repo URL:         https://git.com/ran-sites/siteconfigs/.git
              Target Revision:  master
          Status:               Unknown
      Copy to Clipboard Toggle word wrap

4.9. SuperMicro 서버에서 GitOps ZTP 가상 미디어 부팅 문제 해결

SuperMicro X11 서버는 https 프로토콜을 사용하여 이미지가 제공되는 경우 가상 미디어 설치를 지원하지 않습니다. 결과적으로 이 환경에 대한 단일 노드 OpenShift 배포는 대상 노드에서 부팅에 실패합니다. 이 문제를 방지하려면 허브 클러스터에 로그인하고 프로비저닝 리소스에서 TLS(전송 계층 보안)를 비활성화하세요. 이렇게 하면 이미지 주소가 https 방식을 사용하더라도 이미지가 TLS를 통해 제공되지 않습니다.

사전 요구 사항

  • OpenShift CLI(oc)가 설치되어 있습니다.
  • cluster-admin 권한이 있는 사용자로 허브 클러스터에 로그인했습니다.

프로세스

  1. 다음 명령을 실행하여 프로비저닝 리소스에서 TLS를 비활성화합니다.

    $ oc patch provisioning provisioning-configuration --type merge -p '{"spec":{"disableVirtualMediaTLS": true}}'
    Copy to Clipboard Toggle word wrap
  2. 단일 노드 OpenShift 클러스터를 배포하려면 단계를 계속합니다.

4.10. GitOps ZTP 파이프라인에서 관리되는 클러스터 사이트 제거

GitOps Zero Touch Provisioning(ZTP) 파이프라인에서 관리되는 사이트와 관련 설치 및 구성 정책 CR을 제거할 수 있습니다.

사전 요구 사항

  • OpenShift CLI(oc)가 설치되어 있습니다.
  • cluster-admin 권한이 있는 사용자로 허브 클러스터에 로그인했습니다.

프로세스

  1. kustomization.yaml 파일에서 관련 SiteConfigPolicyGenerator 또는 PolicyGentemplate 파일을 제거하여 사이트와 관련 CR을 제거합니다.
  2. SiteConfig 애플리케이션에 다음 syncOptions 필드를 추가합니다.

    kind: Application
    spec:
      syncPolicy:
        syncOptions:
        - PrunePropagationPolicy=background
    Copy to Clipboard Toggle word wrap

    GitOps ZTP 파이프라인을 다시 실행하면 생성된 CR이 제거됩니다.

  3. 선택 사항: 사이트를 영구적으로 제거하려면 Git 저장소에서 SiteConfig 및 사이트별 PolicyGenerator 또는 PolicyGentemplate 파일도 제거해야 합니다.
  4. 선택 사항: 사이트를 일시적으로 제거하려는 경우(예: 사이트를 다시 배포하는 경우) SiteConfig 및 사이트별 PolicyGenerator 또는 PolicyGentemplate CR을 Git 저장소에 남겨둘 수 있습니다.

4.11. GitOps ZTP 파이프라인에서 오래된 콘텐츠 제거

PolicyGenerator 또는 PolicyGentemplate 구성의 변경으로 인해 더 이상 사용되지 않는 정책이 생기는 경우(예: 정책 이름을 변경하는 경우) 다음 절차에 따라 더 이상 사용되지 않는 정책을 제거합니다.

사전 요구 사항

  • OpenShift CLI(oc)가 설치되어 있습니다.
  • cluster-admin 권한이 있는 사용자로 허브 클러스터에 로그인했습니다.

프로세스

  1. 영향을 받은 PolicyGenerator 또는 PolicyGentemplate 파일을 Git 저장소에서 제거하고 원격 저장소에 커밋하고 푸시합니다.
  2. 변경 사항이 애플리케이션을 통해 동기화되고 영향을 받는 정책이 허브 클러스터에서 제거될 때까지 기다립니다.
  3. 업데이트된 PolicyGenerator 또는 PolicyGentemplate 파일을 다시 Git 저장소에 추가한 다음, 원격 저장소에 커밋하고 푸시합니다.

    참고

    Git 저장소에서 GitOps Zero Touch Provisioning(ZTP) 정책을 제거하고, 결과적으로 허브 클러스터에서도 해당 정책을 제거하더라도 관리되는 클러스터의 구성에는 영향을 미치지 않습니다. 정책과 해당 정책에 의해 관리되는 CR은 관리되는 클러스터에 그대로 유지됩니다.

  4. 선택 사항: 대안으로, PolicyGenerator 또는 PolicyGentemplate CR을 변경하여 더 이상 사용되지 않는 정책이 생성되면 허브 클러스터에서 이러한 정책을 수동으로 제거할 수 있습니다. RHACM 콘솔에서 거버넌스 탭을 사용하거나 다음 명령을 실행하여 정책을 삭제할 수 있습니다.

    $ oc delete policy -n <namespace> <policy_name>
    Copy to Clipboard Toggle word wrap

4.12. GitOps ZTP 파이프라인 해체

ArgoCD 파이프라인과 생성된 모든 GitOps Zero Touch Provisioning(ZTP) 아티팩트를 제거할 수 있습니다.

사전 요구 사항

  • OpenShift CLI(oc)가 설치되어 있습니다.
  • cluster-admin 권한이 있는 사용자로 허브 클러스터에 로그인했습니다.

프로세스

  1. 허브 클러스터의 Red Hat Advanced Cluster Management(RHACM)에서 모든 클러스터를 분리합니다.
  2. 다음 명령을 사용하여 배포 디렉토리에서 kustomization.yaml 파일을 삭제합니다.

    $ oc delete -k out/argocd/deployment
    Copy to Clipboard Toggle word wrap
  3. 변경 사항을 커밋하고 사이트 리포지토리로 내보냅니다.

5장. GitOps ZTP를 사용하여 단일 노드 OpenShift 클러스터 수동 설치

Red Hat Advanced Cluster Management(RHACM)와 지원 서비스를 사용하여 관리형 단일 노드 OpenShift 클러스터를 배포할 수 있습니다.

참고

여러 개의 관리형 클러스터를 생성하는 경우 ZTP를 사용하여 Far Edge 사이트 배포 에 설명된 SiteConfig 방법을 사용하세요.

중요

대상 베어 메탈 호스트는 vDU 애플리케이션 워크로드에 권장되는 클러스터 구성 에 나열된 네트워킹, 펌웨어 및 하드웨어 요구 사항을 충족해야 합니다.

5.1. 수동으로 GitOps ZTP 설치 및 구성 CR 생성

ztp-site-generate 컨테이너의 생성기 진입점을 사용하여 SiteConfigPolicyGenerator CR을 기반으로 클러스터에 대한 사이트 설치 및 구성 사용자 정의 리소스(CR)를 생성합니다.

중요

SiteConfig v1은 OpenShift Container Platform 버전 4.18부터 더 이상 사용되지 않습니다. 이제 ClusterInstance 사용자 정의 리소스를 사용하여 SiteConfig Operator를 통해 동등하고 향상된 기능을 사용할 수 있습니다. 자세한 내용은 SiteConfig CR에서 ClusterInstance API로 전환하는 절차를 참조하세요.

SiteConfig Operator에 대한 자세한 내용은 SiteConfig를 참조하십시오.

사전 요구 사항

  • OpenShift CLI(oc)가 설치되어 있습니다.
  • cluster-admin 권한이 있는 사용자로 허브 클러스터에 로그인했습니다.

프로세스

  1. 다음 명령을 실행하여 출력 폴더를 생성합니다.

    $ mkdir -p ./out
    Copy to Clipboard Toggle word wrap
  2. ztp-site-generate 컨테이너 이미지에서 argocd 디렉토리를 내보냅니다.

    $ podman run --log-driver=none --rm registry.redhat.io/openshift4/ztp-site-generate-rhel8:v4.19 extract /home/ztp --tar | tar x -C ./out
    Copy to Clipboard Toggle word wrap

    ./out 디렉토리에는 out/argocd/example/ 폴더에 PolicyGeneratorSiteConfig CR에 대한 참조가 있습니다.

    출력 예

    out
     └── argocd
          └── example
               ├── acmpolicygenerator
               │     ├── {policy-prefix}common-ranGen.yaml
               │     ├── {policy-prefix}example-sno-site.yaml
               │     ├── {policy-prefix}group-du-sno-ranGen.yaml
               │     ├── {policy-prefix}group-du-sno-validator-ranGen.yaml
               │     ├── ...
               │     ├── kustomization.yaml
               │     └── ns.yaml
               └── siteconfig
                      ├── example-sno.yaml
                      ├── KlusterletAddonConfigOverride.yaml
                      └── kustomization.yaml
    Copy to Clipboard Toggle word wrap

  3. 사이트 설치 CR에 대한 출력 폴더를 만듭니다.

    $ mkdir -p ./site-install
    Copy to Clipboard Toggle word wrap
  4. 설치하려는 클러스터 유형에 맞게 예제 SiteConfig CR을 수정합니다. example-sno.yaml을 site-1-sno.yaml 로 복사하고 설치하려는 사이트 및 베어 메탈 호스트의 세부 정보와 일치하도록 CR을 수정합니다. 예:

    # example-node1-bmh-secret & assisted-deployment-pull-secret need to be created under same namespace example-sno
    ---
    apiVersion: ran.openshift.io/v1
    kind: SiteConfig
    metadata:
      name: "example-sno"
      namespace: "example-sno"
    spec:
      baseDomain: "example.com"
      pullSecretRef:
        name: "assisted-deployment-pull-secret"
      clusterImageSetNameRef: "openshift-4.18"
      sshPublicKey: "ssh-rsa AAAA..."
      clusters:
        - clusterName: "example-sno"
          networkType: "OVNKubernetes"
          # installConfigOverrides is a generic way of passing install-config
          # parameters through the siteConfig.  The 'capabilities' field configures
          # the composable openshift feature.  In this 'capabilities' setting, we
          # remove all the optional set of components.
          # Notes:
          # - OperatorLifecycleManager is needed for 4.15 and later
          # - NodeTuning is needed for 4.13 and later, not for 4.12 and earlier
          # - Ingress is needed for 4.16 and later
          installConfigOverrides: |
            {
              "capabilities": {
                "baselineCapabilitySet": "None",
                "additionalEnabledCapabilities": [
                  "NodeTuning",
                  "OperatorLifecycleManager",
                  "Ingress"
                ]
              }
            }
          # It is strongly recommended to include crun manifests as part of the additional install-time manifests for 4.13+.
          # The crun manifests can be obtained from source-crs/optional-extra-manifest/ and added to the git repo ie.sno-extra-manifest.
          # extraManifestPath: sno-extra-manifest
          clusterLabels:
            # These example cluster labels correspond to the bindingRules in the PolicyGenTemplate examples
            du-profile: "latest"
            # These example cluster labels correspond to the bindingRules in the PolicyGenTemplate examples in ../policygentemplates:
            # ../acmpolicygenerator/common-ranGen.yaml will apply to all clusters with 'common: true'
            common: true
            # ../policygentemplates/group-du-sno-ranGen.yaml will apply to all clusters with 'group-du-sno: ""'
            group-du-sno: ""
            # ../policygentemplates/example-sno-site.yaml will apply to all clusters with 'sites: "example-sno"'
            # Normally this should match or contain the cluster name so it only applies to a single cluster
            sites: "example-sno"
          clusterNetwork:
            - cidr: 1001:1::/48
              hostPrefix: 64
          machineNetwork:
            - cidr: 1111:2222:3333:4444::/64
          serviceNetwork:
            - 1001:2::/112
          additionalNTPSources:
            - 1111:2222:3333:4444::2
          # Initiates the cluster for workload partitioning. Setting specific reserved/isolated CPUSets is done via PolicyTemplate
          # please see Workload Partitioning Feature for a complete guide.
          cpuPartitioningMode: AllNodes
          # Optionally; This can be used to override the KlusterletAddonConfig that is created for this cluster:
          #crTemplates:
          #  KlusterletAddonConfig: "KlusterletAddonConfigOverride.yaml"
          nodes:
            - hostName: "example-node1.example.com"
              role: "master"
              # Optionally; This can be used to configure desired BIOS setting on a host:
              #biosConfigRef:
              #  filePath: "example-hw.profile"
              bmcAddress: "idrac-virtualmedia+https://[1111:2222:3333:4444::bbbb:1]/redfish/v1/Systems/System.Embedded.1"
              bmcCredentialsName:
                name: "example-node1-bmh-secret"
              bootMACAddress: "AA:BB:CC:DD:EE:11"
              # Use UEFISecureBoot to enable secure boot.
              bootMode: "UEFISecureBoot"
              rootDeviceHints:
                deviceName: "/dev/disk/by-path/pci-0000:01:00.0-scsi-0:2:0:0"
              #crTemplates:
              #  BareMetalHost: "bmhOverride.yaml"
              # disk partition at `/var/lib/containers` with ignitionConfigOverride. Some values must be updated. See DiskPartitionContainer.md for more details
              ignitionConfigOverride: |
                {
                  "ignition": {
                    "version": "3.2.0"
                  },
                  "storage": {
                    "disks": [
                      {
                        "device": "/dev/disk/by-id/wwn-0x6b07b250ebb9d0002a33509f24af1f62",
                        "partitions": [
                          {
                            "label": "var-lib-containers",
                            "sizeMiB": 0,
                            "startMiB": 250000
                          }
                        ],
                        "wipeTable": false
                      }
                    ],
                    "filesystems": [
                      {
                        "device": "/dev/disk/by-partlabel/var-lib-containers",
                        "format": "xfs",
                        "mountOptions": [
                          "defaults",
                          "prjquota"
                        ],
                        "path": "/var/lib/containers",
                        "wipeFilesystem": true
                      }
                    ]
                  },
                  "systemd": {
                    "units": [
                      {
                        "contents": "# Generated by Butane\n[Unit]\nRequires=systemd-fsck@dev-disk-by\\x2dpartlabel-var\\x2dlib\\x2dcontainers.service\nAfter=systemd-fsck@dev-disk-by\\x2dpartlabel-var\\x2dlib\\x2dcontainers.service\n\n[Mount]\nWhere=/var/lib/containers\nWhat=/dev/disk/by-partlabel/var-lib-containers\nType=xfs\nOptions=defaults,prjquota\n\n[Install]\nRequiredBy=local-fs.target",
                        "enabled": true,
                        "name": "var-lib-containers.mount"
                      }
                    ]
                  }
                }
              nodeNetwork:
                interfaces:
                  - name: eno1
                    macAddress: "AA:BB:CC:DD:EE:11"
                config:
                  interfaces:
                    - name: eno1
                      type: ethernet
                      state: up
                      ipv4:
                        enabled: false
                      ipv6:
                        enabled: true
                        address:
                          # For SNO sites with static IP addresses, the node-specific,
                          # API and Ingress IPs should all be the same and configured on
                          # the interface
                          - ip: 1111:2222:3333:4444::aaaa:1
                            prefix-length: 64
                  dns-resolver:
                    config:
                      search:
                        - example.com
                      server:
                        - 1111:2222:3333:4444::2
                  routes:
                    config:
                      - destination: ::/0
                        next-hop-interface: eno1
                        next-hop-address: 1111:2222:3333:4444::1
                        table-id: 254
    Copy to Clipboard Toggle word wrap
    참고

    ztp-site-generate 컨테이너의 out/extra-manifest 디렉토리에서 참조 CR 구성 파일을 추출한 후에는 extraManifests.searchPaths를 사용하여 해당 파일이 포함된 git 디렉토리의 경로를 포함할 수 있습니다. 이를 통해 GitOps ZTP 파이프라인은 클러스터 설치 중에 해당 CR 파일을 적용할 수 있습니다. searchPaths 디렉토리를 구성하는 경우 GitOps ZTP 파이프라인은 사이트 설치 중에 ztp-site-generate 컨테이너에서 매니페스트를 가져오지 않습니다.

  5. 다음 명령을 실행하여 수정된 SiteConfig CR site-1-sno.yaml을 처리하여 Day 0 설치 CR을 생성합니다.

    $ podman run -it --rm -v `pwd`/out/argocd/example/siteconfig:/resources:Z -v `pwd`/site-install:/output:Z,U registry.redhat.io/openshift4/ztp-site-generate-rhel8:v4.19 generator install site-1-sno.yaml /output
    Copy to Clipboard Toggle word wrap

    출력 예

    site-install
    └── site-1-sno
        ├── site-1_agentclusterinstall_example-sno.yaml
        ├── site-1-sno_baremetalhost_example-node1.example.com.yaml
        ├── site-1-sno_clusterdeployment_example-sno.yaml
        ├── site-1-sno_configmap_example-sno.yaml
        ├── site-1-sno_infraenv_example-sno.yaml
        ├── site-1-sno_klusterletaddonconfig_example-sno.yaml
        ├── site-1-sno_machineconfig_02-master-workload-partitioning.yaml
        ├── site-1-sno_machineconfig_predefined-extra-manifests-master.yaml
        ├── site-1-sno_machineconfig_predefined-extra-manifests-worker.yaml
        ├── site-1-sno_managedcluster_example-sno.yaml
        ├── site-1-sno_namespace_example-sno.yaml
        └── site-1-sno_nmstateconfig_example-node1.example.com.yaml
    Copy to Clipboard Toggle word wrap

  6. 선택 사항: -E 옵션으로 참조 SiteConfig CR을 처리하여 특정 클러스터 유형에 대한 Day 0 MachineConfig 설치 CR만 생성합니다. 예를 들어, 다음 명령을 실행합니다.

    1. MachineConfig CR에 대한 출력 폴더를 만듭니다.

      $ mkdir -p ./site-machineconfig
      Copy to Clipboard Toggle word wrap
    2. MachineConfig 설치 CR을 생성합니다.

      $ podman run -it --rm -v `pwd`/out/argocd/example/siteconfig:/resources:Z -v `pwd`/site-machineconfig:/output:Z,U registry.redhat.io/openshift4/ztp-site-generate-rhel8:v4.19 generator install -E site-1-sno.yaml /output
      Copy to Clipboard Toggle word wrap

      출력 예

      site-machineconfig
      └── site-1-sno
          ├── site-1-sno_machineconfig_02-master-workload-partitioning.yaml
          ├── site-1-sno_machineconfig_predefined-extra-manifests-master.yaml
          └── site-1-sno_machineconfig_predefined-extra-manifests-worker.yaml
      Copy to Clipboard Toggle word wrap

  7. 이전 단계의 참조 PolicyGenerator CR을 사용하여 2일차 구성 CR을 생성하고 내보냅니다. 다음 명령을 실행하세요.

    1. Day 2 CR의 출력 폴더를 생성합니다.

      $ mkdir -p ./ref
      Copy to Clipboard Toggle word wrap
    2. 2일차 구성 CR을 생성하고 내보냅니다.

      $ podman run -it --rm -v `pwd`/out/argocd/example/acmpolicygenerator:/resources:Z -v `pwd`/ref:/output:Z,U registry.redhat.io/openshift4/ztp-site-generate-rhel8:v4.19 generator config -N . /output
      Copy to Clipboard Toggle word wrap

      이 명령은 단일 노드 OpenShift, 3-노드 클러스터, ./ref 폴더에 표준 클러스터를 위한 예제 그룹 및 사이트별 PolicyGenerator CR을 생성합니다.

      출력 예

      ref
       └── customResource
            ├── common
            ├── example-multinode-site
            ├── example-sno
            ├── group-du-3node
            ├── group-du-3node-validator
            │    └── Multiple-validatorCRs
            ├── group-du-sno
            ├── group-du-sno-validator
            ├── group-du-standard
            └── group-du-standard-validator
                 └── Multiple-validatorCRs
      Copy to Clipboard Toggle word wrap

  8. 생성된 CR을 클러스터를 설치하는 데 사용하는 CR의 기초로 사용합니다. "단일 관리형 클러스터 설치"에 설명된 대로 허브 클러스터에 설치 CR을 적용합니다. 구성 CR은 클러스터 설치가 완료된 후 클러스터에 적용할 수 있습니다.

검증

  • 노드가 배포된 후 사용자 지정 역할과 레이블이 적용되었는지 확인하세요.

    $ oc describe node example-node.example.com
    Copy to Clipboard Toggle word wrap

출력 예

Name:   example-node.example.com
Roles:  control-plane,example-label,master,worker
Labels: beta.kubernetes.io/arch=amd64
        beta.kubernetes.io/os=linux
        custom-label/parameter1=true
        kubernetes.io/arch=amd64
        kubernetes.io/hostname=cnfdf03.telco5gran.eng.rdu2.redhat.com
        kubernetes.io/os=linux
        node-role.kubernetes.io/control-plane=
        node-role.kubernetes.io/example-label= 
1

        node-role.kubernetes.io/master=
        node-role.kubernetes.io/worker=
        node.openshift.io/os_id=rhcos
Copy to Clipboard Toggle word wrap

1
사용자 지정 라벨이 노드에 적용됩니다.

5.2. 관리되는 베어 메탈 호스트 비밀 생성

관리되는 베어 메탈 호스트에 필요한 비밀 사용자 정의 리소스(CR)를 허브 클러스터에 추가합니다. GitOps Zero Touch Provisioning(ZTP) 파이프라인이 Baseboard Management Controller(BMC)에 액세스하려면 비밀이 필요하고, 지원 설치 서비스에서 레지스트리에서 클러스터 설치 이미지를 가져오려면 비밀이 필요합니다.

참고

비밀은 SiteConfig CR에서 이름으로 참조됩니다. 네임스페이스는 SiteConfig 네임스페이스와 일치해야 합니다.

프로세스

  1. 호스트 Baseboard Management Controller(BMC)에 대한 자격 증명과 OpenShift 및 모든 애드온 클러스터 운영자를 설치하는 데 필요한 풀 비밀을 포함하는 YAML 비밀 파일을 만듭니다.

    1. 다음 YAML을 example-sno-secret.yaml 파일로 저장합니다.

      apiVersion: v1
      kind: Secret
      metadata:
        name: example-sno-bmc-secret
        namespace: example-sno 
      1
      
      data: 
      2
      
        password: <base64_password>
        username: <base64_username>
      type: Opaque
      ---
      apiVersion: v1
      kind: Secret
      metadata:
        name: pull-secret
        namespace: example-sno  
      3
      
      data:
        .dockerconfigjson: <pull_secret> 
      4
      
      type: kubernetes.io/dockerconfigjson
      Copy to Clipboard Toggle word wrap
      1
      관련 SiteConfig CR에 구성된 네임스페이스와 일치해야 합니다.
      2
      비밀번호사용자 이름에 대한 Base64 인코딩 값
      3
      관련 SiteConfig CR에 구성된 네임스페이스와 일치해야 합니다.
      4
      Base64로 인코딩된 풀 시크릿
  2. 클러스터를 설치하는 데 사용하는 kustomization.yaml 파일에 example-sno-secret.yaml 의 상대 경로를 추가합니다.

5.3. GitOps ZTP를 사용하여 수동 설치를 위한 Discovery ISO 커널 인수 구성

GitOps Zero Touch Provisioning(ZTP) 워크플로는 관리형 베어 메탈 호스트에서 OpenShift Container Platform 설치 프로세스의 일부로 Discovery ISO를 사용합니다. InfraEnv 리소스를 편집하여 Discovery ISO에 대한 커널 인수를 지정할 수 있습니다. 이 기능은 특정 환경 요구 사항이 있는 클러스터 설치에 유용합니다. 예를 들어, Discovery ISO에 대한 rd.net.timeout.carrier 커널 인수를 구성하여 클러스터의 정적 네트워킹을 용이하게 하거나 설치 중에 루트 파일 시스템을 다운로드하기 전에 DHCP 주소를 수신합니다.

참고

OpenShift Container Platform 4.19에서는 커널 인수만 추가할 수 있습니다. 커널 인수를 교체하거나 삭제할 수 없습니다.

사전 요구 사항

  • OpenShift CLI(oc)가 설치되어 있습니다.
  • 클러스터 관리자 권한이 있는 사용자로 허브 클러스터에 로그인했습니다.
  • 설치 및 구성 사용자 정의 리소스(CR)를 수동으로 생성했습니다.

프로세스

  1. InfraEnv CR에서 spec.kernelArguments 사양을 편집하여 커널 인수를 구성합니다.
apiVersion: agent-install.openshift.io/v1beta1
kind: InfraEnv
metadata:
  name: <cluster_name>
  namespace: <cluster_name>
spec:
  kernelArguments:
    - operation: append 
1

      value: audit=0 
2

    - operation: append
      value: trace=1
  clusterRef:
    name: <cluster_name>
    namespace: <cluster_name>
  pullSecretRef:
    name: pull-secret
Copy to Clipboard Toggle word wrap
1
커널 인수를 추가하려면 추가 작업을 지정합니다.
2
구성하려는 커널 인수를 지정합니다. 이 예제에서는 감사 커널 인수와 추적 커널 인수를 구성합니다.
참고

SiteConfig CR은 Day-0 설치 CR의 일부로 InfraEnv 리소스를 생성합니다.

검증

Discovery 이미지가 OpenShift Container Platform이 설치될 준비가 되었는지 확인한 후, 커널 인수가 적용되었는지 확인하려면 설치 프로세스가 시작되기 전에 대상 호스트에 SSH를 실행할 수 있습니다. 그 시점에서 /proc/cmdline 파일에서 Discovery ISO에 대한 커널 인수를 볼 수 있습니다.

  1. 대상 호스트에서 SSH 세션을 시작합니다.

    $ ssh -i /path/to/privatekey core@<host_name>
    Copy to Clipboard Toggle word wrap
  2. 다음 명령을 사용하여 시스템의 커널 인수를 확인하세요.

    $ cat /proc/cmdline
    Copy to Clipboard Toggle word wrap

5.4. 단일 관리형 클러스터 설치

지원 서비스와 Red Hat Advanced Cluster Management(RHACM)를 사용하여 단일 관리형 클러스터를 수동으로 배포할 수 있습니다.

사전 요구 사항

  • OpenShift CLI(oc)가 설치되어 있습니다.
  • cluster-admin 권한이 있는 사용자로 허브 클러스터에 로그인했습니다.
  • 베이스보드 관리 컨트롤러(BMC) 비밀 과 이미지 풀 비밀 비밀 사용자 정의 리소스(CR)를 생성했습니다. 자세한 내용은 "관리형 베어 메탈 호스트 비밀 만들기"를 참조하세요.
  • 대상 베어 메탈 호스트는 관리형 클러스터에 대한 네트워킹 및 하드웨어 요구 사항을 충족합니다.

프로세스

  1. 배포할 각 특정 클러스터 버전에 대해 ClusterImageSet을 생성합니다(예: clusterImageSet-4.19.yaml ). ClusterImageSet 의 형식은 다음과 같습니다.

    apiVersion: hive.openshift.io/v1
    kind: ClusterImageSet
    metadata:
      name: openshift-4.19.0 
    1
    
    spec:
       releaseImage: quay.io/openshift-release-dev/ocp-release:4.19.0-x86_64 
    2
    Copy to Clipboard Toggle word wrap
    1
    배포하려는 설명적 버전입니다.
    2
    배포할 releaseImage를 지정하고 운영 체제 이미지 버전을 결정합니다. 검색 ISO는 releaseImage 에서 설정된 이미지 버전을 기준으로 하며, 정확한 버전을 사용할 수 없는 경우에는 최신 버전을 기준으로 합니다.
  2. clusterImageSet CR을 적용합니다.

    $ oc apply -f clusterImageSet-4.19.yaml
    Copy to Clipboard Toggle word wrap
  3. cluster-namespace.yaml 파일에 네임스페이스 CR을 만듭니다.

    apiVersion: v1
    kind: Namespace
    metadata:
         name: <cluster_name> 
    1
    
         labels:
            name: <cluster_name> 
    2
    Copy to Clipboard Toggle word wrap
    1 2
    프로비저닝할 관리 클러스터의 이름입니다.
  4. 다음 명령을 실행하여 네임스페이스 CR을 적용합니다.

    $ oc apply -f cluster-namespace.yaml
    Copy to Clipboard Toggle word wrap
  5. ztp-site-generate 컨테이너에서 추출하고 요구 사항에 맞게 사용자 정의한 생성된 day-0 CR을 적용합니다.

    $ oc apply -R ./site-install/site-sno-1
    Copy to Clipboard Toggle word wrap

5.5. 관리되는 클러스터 설치 상태 모니터링

클러스터 상태를 확인하여 클러스터 프로비저닝이 성공했는지 확인하세요.

사전 요구 사항

  • 모든 사용자 정의 리소스가 구성되고 프로비저닝되었으며, 관리되는 클러스터의 허브에 에이전트 사용자 정의 리소스가 생성되었습니다.

프로세스

  1. 관리되는 클러스터의 상태를 확인하세요.

    $ oc get managedcluster
    Copy to Clipboard Toggle word wrap

    True는 관리되는 클러스터가 준비되었음을 나타냅니다.

  2. 에이전트 상태를 확인하세요:

    $ oc get agent -n <cluster_name>
    Copy to Clipboard Toggle word wrap
  3. describe 명령을 사용하여 에이전트의 상태에 대한 자세한 설명을 제공합니다. 주의해야 할 상태로는 BackendError , InputError , ValidationsFailing , InstallationFailed , AgentIsConnected가 있습니다. 이러한 상태는 AgentAgentClusterInstall 사용자 정의 리소스와 관련이 있습니다.

    $ oc describe agent -n <cluster_name>
    Copy to Clipboard Toggle word wrap
  4. 클러스터 프로비저닝 상태를 확인하세요.

    $ oc get agentclusterinstall -n <cluster_name>
    Copy to Clipboard Toggle word wrap
  5. describe 명령을 사용하여 클러스터 프로비저닝 상태에 대한 자세한 설명을 제공합니다.

    $ oc describe agentclusterinstall -n <cluster_name>
    Copy to Clipboard Toggle word wrap
  6. 관리되는 클러스터의 추가 서비스 상태를 확인하세요.

    $ oc get managedclusteraddon -n <cluster_name>
    Copy to Clipboard Toggle word wrap
  7. 관리되는 클러스터에 대한 kubeconfig 파일의 인증 정보를 검색합니다.

    $ oc get secret -n <cluster_name> <cluster_name>-admin-kubeconfig -o jsonpath={.data.kubeconfig} | base64 -d > <directory>/<cluster_name>-kubeconfig
    Copy to Clipboard Toggle word wrap

5.6. 관리되는 클러스터 문제 해결

이 절차를 사용하여 관리되는 클러스터에서 발생할 수 있는 설치 문제를 진단합니다.

프로세스

  1. 관리되는 클러스터의 상태를 확인하세요.

    $ oc get managedcluster
    Copy to Clipboard Toggle word wrap

    출력 예

    NAME            HUB ACCEPTED   MANAGED CLUSTER URLS   JOINED   AVAILABLE   AGE
    SNO-cluster     true                                   True     True      2d19h
    Copy to Clipboard Toggle word wrap

    AVAILABLE 열의 상태가 True 인 경우 관리되는 클러스터는 허브에 의해 관리되고 있습니다.

    AVAILABLE 열의 상태가 Unknown 인 경우, 관리되는 클러스터가 허브에 의해 관리되지 않습니다. 더 많은 정보를 얻기 위해 계속 확인하려면 다음 단계를 따르세요.

  2. AgentClusterInstall 설치 상태를 확인하세요.

    $ oc get clusterdeployment -n <cluster_name>
    Copy to Clipboard Toggle word wrap

    출력 예

    NAME        PLATFORM            REGION   CLUSTERTYPE   INSTALLED    INFRAID    VERSION  POWERSTATE AGE
    Sno0026    agent-baremetal                               false                          Initialized
    2d14h
    Copy to Clipboard Toggle word wrap

    INSTALLED 열의 상태가 false 이면 설치가 실패한 것입니다.

  3. 설치에 실패한 경우 다음 명령을 입력하여 AgentClusterInstall 리소스의 상태를 검토합니다.

    $ oc describe agentclusterinstall -n <cluster_name> <cluster_name>
    Copy to Clipboard Toggle word wrap
  4. 오류를 해결하고 클러스터를 재설정합니다.

    1. 클러스터의 관리되는 클러스터 리소스를 제거합니다.

      $ oc delete managedcluster <cluster_name>
      Copy to Clipboard Toggle word wrap
    2. 클러스터의 네임스페이스를 제거합니다.

      $ oc delete namespace <cluster_name>
      Copy to Clipboard Toggle word wrap

      이렇게 하면 이 클러스터에 대해 생성된 모든 네임스페이스 범위의 사용자 정의 리소스가 삭제됩니다. 계속 진행하기 전에 ManagedCluster CR 삭제가 완료될 때까지 기다려야 합니다.

    3. 관리되는 클러스터에 대한 사용자 지정 리소스를 다시 만듭니다.

5.7. RHACM에서 생성된 클러스터 설치 CR 참조

Red Hat Advanced Cluster Management(RHACM)는 각 사이트에 대한 SiteConfig CR을 사용하여 생성한 특정 설치 사용자 정의 리소스(CR) 세트를 사용하여 단일 노드 클러스터, 3노드 클러스터 및 표준 클러스터에 OpenShift Container Platform을 배포하는 것을 지원합니다.

참고

모든 관리형 클러스터에는 자체 네임스페이스가 있으며, ManagedClusterClusterImageSet을 제외한 모든 설치 CR은 해당 네임스페이스 아래에 있습니다. ManagedClusterClusterImageSet은 네임스페이스 범위가 아닌 클러스터 범위입니다. 네임스페이스와 CR 이름이 클러스터 이름과 일치합니다.

다음 표에서는 사용자가 구성한 SiteConfig CR을 사용하여 클러스터를 설치할 때 RHACM 지원 서비스에서 자동으로 적용하는 설치 CR을 나열합니다.

Expand
표 5.1. RHACM에서 생성된 클러스터 설치 CR
CR설명사용법

BareMetalHost

대상 베어 메탈 호스트의 베이스보드 관리 컨트롤러(BMC)에 대한 연결 정보를 포함합니다.

Redfish 프로토콜을 사용하여 대상 서버에서 검색 이미지를 로드하고 시작하기 위해 BMC에 대한 액세스를 제공합니다.

InfraEnv

대상 베어 메탈 호스트에 OpenShift Container Platform을 설치하는 데 필요한 정보가 포함되어 있습니다.

ClusterDeployment 과 함께 사용하여 관리형 클러스터에 대한 검색 ISO를 생성합니다.

AgentClusterInstall

네트워킹 및 제어 평면 노드 수와 같은 관리되는 클러스터 구성의 세부 정보를 지정합니다. 설치가 완료되면 클러스터 kubeconfig 와 자격 증명이 표시됩니다.

관리되는 클러스터 구성 정보를 지정하고 클러스터 설치 중 상태를 제공합니다.

ClusterDeployment

사용할 AgentClusterInstall CR을 참조합니다.

InfraEnv 와 함께 사용되어 관리되는 클러스터에 대한 검색 ISO를 생성합니다.

NMStateConfig

MAC 주소와 IP 매핑, DNS 서버, 기본 경로 및 기타 네트워크 설정과 같은 네트워크 구성 정보를 제공합니다.

관리되는 클러스터의 Kube API 서버에 대한 고정 IP 주소를 설정합니다.

대리인

대상 베어 메탈 호스트에 대한 하드웨어 정보를 포함합니다.

대상 컴퓨터의 검색 이미지가 부팅되면 허브에 자동으로 생성됩니다.

ManagedCluster

클러스터가 허브에 의해 관리되는 경우, 클러스터를 가져와서 알려야 합니다. 이 Kubernetes 객체는 해당 인터페이스를 제공합니다.

허브는 이 리소스를 사용하여 관리되는 클러스터의 상태를 관리하고 표시합니다.

KlusterletAddonConfig

ManagedCluster 리소스에 배포될 허브가 제공하는 서비스 목록이 포함되어 있습니다.

허브에 ManagedCluster 리소스에 배포할 애드온 서비스를 알려줍니다.

네임스페이스

허브에 있는 ManagedCluster 리소스를 위한 논리적 공간입니다. 사이트마다 고유함.

ManagedCluster 에 리소스를 전파합니다.

Secret

BMC SecretImage Pull Secret 이라는 두 개의 CR이 생성됩니다.

  • BMC Secret은 사용자 이름과 비밀번호를 사용하여 대상 베어 메탈 호스트에 인증합니다.
  • 이미지 풀 시크릿 에는 대상 베어 메탈 호스트에 설치된 OpenShift 컨테이너 플랫폼 이미지에 대한 인증 정보가 포함되어 있습니다.

ClusterImageSet

저장소 및 이미지 이름과 같은 OpenShift Container Platform 이미지 정보가 포함되어 있습니다.

OpenShift Container Platform 이미지를 제공하기 위해 리소스로 전달되었습니다.

다음 참조 정보를 사용하여 클러스터에 vDU(가상 분산 장치) 애플리케이션을 배포하는 데 필요한 단일 노드 OpenShift 구성을 알아보세요. 구성에는 고성능 워크로드를 위한 클러스터 최적화, 워크로드 분할 활성화, 설치 후 필요한 재부팅 횟수 최소화가 포함됩니다.

6.1. OpenShift Container Platform에서 저지연 애플리케이션 실행

OpenShift Container Platform은 여러 기술과 특수 하드웨어 장치를 사용하여 상용 기성품(COTS) 하드웨어에서 실행되는 애플리케이션에 대한 저지연 처리 기능을 제공합니다.

RHCOS용 실시간 커널
높은 수준의 프로세스 결정론으로 작업 부하가 처리되도록 보장합니다.
CPU 격리
CPU 스케줄링 지연을 방지하고 CPU 용량을 지속적으로 사용할 수 있도록 보장합니다.
NUMA 인식 토폴로지 관리
보장된 컨테이너 메모리와 대규모 페이지를 NUMA(비균일 메모리 액세스) 노드에 고정하기 위해 메모리와 대규모 페이지를 CPU 및 PCI 장치에 맞춥니다. 모든 서비스 품질(QoS) 클래스에 대한 Pod 리소스는 동일한 NUMA 노드에 유지됩니다. 이렇게 하면 대기 시간이 줄어들고 노드의 성능이 향상됩니다.
거대한 페이지 메모리 관리
거대한 페이지 크기를 사용하면 페이지 테이블에 액세스하는 데 필요한 시스템 리소스 양이 줄어들어 시스템 성능이 향상됩니다.
PTP를 이용한 정밀 타이밍 동기화
네트워크 내 노드 간 동기화를 서브마이크로초 단위의 정확도로 허용합니다.

vDU 애플리케이션 워크로드를 실행하려면 OpenShift Container Platform 서비스와 프로덕션 워크로드를 실행할 수 있는 충분한 리소스를 갖춘 베어 메탈 호스트가 필요합니다.

Expand
표 6.1. 최소 리소스 요구사항
프로필vCPU메모리스토리지

최소

4~8개의 vCPU

32GB RAM

120GB

참고

1개의 vCPU는 1개의 물리적 코어와 같습니다. 그러나 동시 멀티스레딩(SMT) 또는 하이퍼스레딩을 활성화하는 경우 다음 공식을 사용하여 하나의 물리적 코어를 나타내는 vCPU 수를 계산합니다.

  • (threads per core × cores) × sockets = vCPUs
중요

가상 미디어를 사용하여 부팅할 때 서버에 BMC(Baseboard Management Controller)가 있어야 합니다.

6.3. 짧은 대기 시간과 고성능을 위해 호스트 펌웨어 구성

베어 메탈 호스트의 경우 호스트를 프로비저닝하기 전에 펌웨어를 구성해야 합니다. 펌웨어 구성은 특정 하드웨어와 설치의 특정 요구 사항에 따라 달라집니다.

프로세스

  1. UEFI/BIOS 부팅 모드를 UEFI 로 설정합니다.
  2. 호스트 부팅 순서에서 하드 드라이브를 먼저 설정합니다.
  3. 하드웨어에 맞는 특정 펌웨어 구성을 적용합니다. 다음 표에서는 Intel FlexRAN 4G 및 5G 베이스밴드 PHY 참조 설계를 기반으로 Intel Xeon Skylake 서버 및 이후 하드웨어 세대에 대한 대표적인 펌웨어 구성을 설명합니다.

    중요

    정확한 펌웨어 구성은 사용자의 특정 하드웨어 및 네트워크 요구 사항에 따라 달라집니다. 다음 샘플 구성은 설명 목적으로만 사용됩니다.

    Expand
    표 6.2. 샘플 펌웨어 구성
    펌웨어 설정설정

    CPU 전력 및 성능 정책

    성능

    언코어 주파수 스케일링

    비활성화됨

    성능 P-한계

    비활성화됨

    향상된 Intel SpeedStep ® 기술

    활성화됨

    인텔 구성 가능 TDP

    활성화됨

    구성 가능한 TDP 레벨

    수준 2

    Intel® Turbo Boost Technology

    활성화됨

    에너지 효율적인 터보

    비활성화됨

    하드웨어 P-상태

    비활성화됨

    패키지 C-State

    C0/C1 상태

    C1E

    비활성화됨

    프로세서 C6

    비활성화됨

참고

호스트의 펌웨어에서 글로벌 SR-IOV 및 VT-d 설정을 활성화합니다. 이러한 설정은 베어메탈 환경과 관련이 있습니다.

6.4. 관리형 클러스터 네트워크에 대한 연결 전제 조건

GitOps Zero Touch Provisioning(ZTP) 파이프라인을 사용하여 관리형 클러스터를 설치하고 프로비저닝하려면 관리형 클러스터 호스트가 다음 네트워킹 전제 조건을 충족해야 합니다.

  • 허브 클러스터의 GitOps ZTP 컨테이너와 대상 베어 메탈 호스트의 베이스보드 관리 컨트롤러(BMC) 사이에는 양방향 연결이 있어야 합니다.
  • 관리되는 클러스터는 허브 호스트 이름과 *.apps 호스트 이름의 API 호스트 이름을 확인하고 도달할 수 있어야 합니다. 다음은 허브의 API 호스트 이름과 *.apps 호스트 이름의 예입니다.

    • api.hub-cluster.internal.domain.com
    • console-openshift-console.apps.hub-cluster.internal.domain.com
  • 허브 클러스터는 관리되는 클러스터의 API 및 *.apps 호스트 이름을 확인하고 연결할 수 있어야 합니다. 다음은 관리되는 클러스터의 API 호스트 이름과 *.apps 호스트 이름의 예입니다.

    • api.sno-managed-cluster-1.internal.domain.com
    • console-openshift-console.apps.sno-managed-cluster-1.internal.domain.com

6.5. GitOps ZTP를 사용하여 단일 노드 OpenShift에서 워크로드 파티셔닝

워크로드 분할은 OpenShift Container Platform 서비스, 클러스터 관리 워크로드 및 인프라 포드를 예약된 수의 호스트 CPU에서 실행되도록 구성합니다.

GitOps Zero Touch Provisioning(ZTP)을 사용하여 워크로드 분할을 구성하려면 클러스터를 설치하는 데 사용하는 SiteConfig 사용자 정의 리소스(CR)에서 cpuPartitioningMode 필드를 구성하고 호스트에서 격리 되고 예약된 CPU를 구성하는 PerformanceProfile CR을 적용합니다.

SiteConfig CR을 구성하면 클러스터 설치 시 작업 부하 분할이 가능하고 PerformanceProfile CR을 적용하면 예약되고 격리된 세트에 대한 특정 CPU 할당이 구성됩니다. 이 두 단계는 모두 클러스터 프로비저닝 중 서로 다른 지점에서 발생합니다.

참고

SiteConfig CR의 cpuPartitioningMode 필드를 사용하여 워크로드 분할을 구성하는 것은 OpenShift Container Platform 4.13의 기술 미리 보기 기능입니다.

또는 SiteConfig 사용자 정의 리소스(CR)의 cpuset 필드와 그룹 PolicyGenerator 또는 PolicyGentemplate CR의 reserved 필드를 사용하여 클러스터 관리 CPU 리소스를 지정할 수 있습니다. {policy-gen-cr} CR이 권장되는 접근 방식입니다. GitOps ZTP 파이프라인은 이러한 값을 사용하여 단일 노드 OpenShift 클러스터를 구성하는 작업 분할 MachineConfig CR( cpuset ) 및 PerformanceProfile CR( 예약됨 )의 필수 필드를 채웁니다. 이 방법은 OpenShift Container Platform 4.14의 일반 공급 기능입니다.

작업 부하 분할 구성은 OpenShift Container Platform 인프라 포드를 예약된 CPU 세트에 고정합니다. systemd, CRI-O, kubelet과 같은 플랫폼 서비스는 예약된 CPU 세트에서 실행됩니다. 격리된 CPU 세트는 컨테이너 워크로드에만 독점적으로 할당됩니다. CPU를 분리하면 작업 부하가 동일한 노드에서 실행되는 다른 애플리케이션과의 경합 없이 지정된 CPU에 대한 액세스를 보장받을 수 있습니다. 분리되지 않은 모든 CPU를 예약해야 합니다.

중요

예약된 CPU 세트와 격리된 CPU 세트가 서로 겹치지 않도록 하세요.

6.6. TPM 및 PCR 보호를 통한 디스크 암호화 정보

SiteConfig 사용자 지정 리소스(CR)의 diskEncryption 필드를 사용하여 TPM(신뢰할 수 있는 플랫폼 모듈) 및 PCR(플랫폼 구성 레지스터) 보호로 디스크 암호화를 구성할 수 있습니다.

TPM은 암호화 키를 저장하고 시스템의 보안 상태를 평가하는 하드웨어 구성 요소입니다. TPM 내의 PCR은 시스템의 현재 하드웨어 및 소프트웨어 구성을 나타내는 해시 값을 저장합니다. 다음 PCR 레지스터를 사용하여 디스크 암호화를 위한 암호화 키를 보호할 수 있습니다.

PCR 1
UEFI(Unified Extensible Firmware Interface) 상태를 나타냅니다.
PCR 7
보안 부팅 상태를 나타냅니다.

TPM은 PCR 1과 PCR 7에 기록된 대로 암호화 키를 시스템의 현재 상태에 연결하여 암호화 키를 보호합니다. dmcrypt 유틸리티는 이러한 키를 사용하여 디스크를 암호화합니다. 암호화 키와 예상 PCR 레지스터 간의 바인딩은 필요한 경우 업그레이드 후 자동으로 업데이트됩니다.

시스템 부팅 과정에서 dmcrypt 유틸리티는 TPM PCR 값을 사용하여 디스크 잠금을 해제합니다. 현재 PCR 값이 이전에 연결된 값과 일치하면 잠금 해제가 성공합니다. PCR 값이 일치하지 않으면 암호화 키를 공개할 수 없으며 디스크는 암호화된 상태로 유지되어 액세스할 수 없습니다.

중요

SiteConfig CR의 diskEncryption 필드를 사용하여 디스크 암호화를 구성하는 것은 기술 미리 보기 기능에 불과합니다. 기술 프리뷰 기능은 Red Hat 프로덕션 서비스 수준 계약(SLA)에서 지원되지 않으며 기능적으로 완전하지 않을 수 있습니다. 따라서 프로덕션 환경에서 사용하는 것은 권장하지 않습니다. 이러한 기능을 사용하면 향후 제품 기능을 조기에 이용할 수 있어 개발 과정에서 고객이 기능을 테스트하고 피드백을 제공할 수 있습니다.

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

6.7. 권장되는 클러스터 설치 매니페스트

ZTP 파이프라인은 클러스터 설치 중에 다음과 같은 사용자 정의 리소스(CR)를 적용합니다. 이러한 구성 CR은 클러스터가 vDU 애플리케이션을 실행하는 데 필요한 기능 및 성능 요구 사항을 충족하는지 확인합니다.

참고

클러스터 배포에 GitOps ZTP 플러그인과 SiteConfig CR을 사용하는 경우 기본적으로 다음 MachineConfig CR이 포함됩니다.

SiteConfig extraManifests 필터를 사용하여 기본적으로 포함되는 CR을 변경합니다. 자세한 내용은 SiteConfig CR을 사용한 고급 관리 클러스터 구성 을 참조하십시오.

6.7.1. 워크로드 분할

DU 워크로드를 실행하는 단일 노드 OpenShift 클러스터에는 워크로드 분할이 필요합니다. 이렇게 하면 플랫폼 서비스를 실행할 수 있는 코어가 제한되고 애플리케이션 페이로드의 CPU 코어를 최대화할 수 있습니다.

참고

워크로드 파티셔닝은 클러스터 설치 중에만 활성화할 수 있습니다. 설치 후에는 워크로드 분할을 비활성화할 수 없습니다. 하지만 PerformanceProfile CR을 통해 격리된 세트와 예약된 세트에 할당된 CPU 세트를 변경할 수 있습니다. CPU 설정을 변경하면 노드가 재부팅됩니다.

OpenShift Container Platform 4.12에서 4.13+로 업그레이드

워크로드 분할을 활성화하기 위해 cpuPartitioningMode를 사용하도록 전환할 때 클러스터를 프로비저닝하는 데 사용하는 /extra-manifest 폴더에서 워크로드 분할 MachineConfig CR을 제거합니다.

작업 분할을 위한 권장 SiteConfig CR 구성

apiVersion: ran.openshift.io/v1
kind: SiteConfig
metadata:
  name: "<site_name>"
  namespace: "<site_name>"
spec:
  baseDomain: "example.com"
  cpuPartitioningMode: AllNodes 
1
Copy to Clipboard Toggle word wrap

1
클러스터의 모든 노드에 대한 작업 분할을 구성하려면 cpuPartitioningMode 필드를 AllNodes 로 설정합니다.

검증

애플리케이션과 클러스터 시스템 CPU 고정이 올바른지 확인하세요. 다음 명령을 실행하세요.

  1. 관리 클러스터에 대한 원격 쉘 프롬프트를 엽니다.

    $ oc debug node/example-sno-1
    Copy to Clipboard Toggle word wrap
  2. OpenShift 인프라 애플리케이션 CPU 고정이 올바른지 확인하세요.

    sh-4.4# pgrep ovn | while read i; do taskset -cp $i; done
    Copy to Clipboard Toggle word wrap

    출력 예

    pid 8481's current affinity list: 0-1,52-53
    pid 8726's current affinity list: 0-1,52-53
    pid 9088's current affinity list: 0-1,52-53
    pid 9945's current affinity list: 0-1,52-53
    pid 10387's current affinity list: 0-1,52-53
    pid 12123's current affinity list: 0-1,52-53
    pid 13313's current affinity list: 0-1,52-53
    Copy to Clipboard Toggle word wrap

  3. 시스템 애플리케이션 CPU 고정이 올바른지 확인하세요.

    sh-4.4# pgrep systemd | while read i; do taskset -cp $i; done
    Copy to Clipboard Toggle word wrap

    출력 예

    pid 1's current affinity list: 0-1,52-53
    pid 938's current affinity list: 0-1,52-53
    pid 962's current affinity list: 0-1,52-53
    pid 1197's current affinity list: 0-1,52-53
    Copy to Clipboard Toggle word wrap

6.7.2. 플랫폼 관리 공간 감소

플랫폼의 전반적인 관리 공간을 줄이려면 Kubernetes 관련 마운트 지점을 모두 호스트 운영 체제와 별도의 새 네임스페이스에 배치하는 MachineConfig 사용자 정의 리소스(CR)가 필요합니다. 다음의 base64로 인코딩된 MachineConfig CR 예제는 이 구성을 보여줍니다.

권장되는 컨테이너 마운트 네임스페이스 구성( 01-container-mount-ns-and-kubelet-conf-master.yaml )

# Automatically generated by extra-manifests-builder
# Do not make changes directly.
apiVersion: machineconfiguration.openshift.io/v1
kind: MachineConfig
metadata:
  labels:
    machineconfiguration.openshift.io/role: master
  name: container-mount-namespace-and-kubelet-conf-master
spec:
  config:
    ignition:
      version: 3.2.0
    storage:
      files:
        - contents:
            source: data:text/plain;charset=utf-8;base64,IyEvYmluL2Jhc2gKCmRlYnVnKCkgewogIGVjaG8gJEAgPiYyCn0KCnVzYWdlKCkgewogIGVjaG8gVXNhZ2U6ICQoYmFzZW5hbWUgJDApIFVOSVQgW2VudmZpbGUgW3Zhcm5hbWVdXQogIGVjaG8KICBlY2hvIEV4dHJhY3QgdGhlIGNvbnRlbnRzIG9mIHRoZSBmaXJzdCBFeGVjU3RhcnQgc3RhbnphIGZyb20gdGhlIGdpdmVuIHN5c3RlbWQgdW5pdCBhbmQgcmV0dXJuIGl0IHRvIHN0ZG91dAogIGVjaG8KICBlY2hvICJJZiAnZW52ZmlsZScgaXMgcHJvdmlkZWQsIHB1dCBpdCBpbiB0aGVyZSBpbnN0ZWFkLCBhcyBhbiBlbnZpcm9ubWVudCB2YXJpYWJsZSBuYW1lZCAndmFybmFtZSciCiAgZWNobyAiRGVmYXVsdCAndmFybmFtZScgaXMgRVhFQ1NUQVJUIGlmIG5vdCBzcGVjaWZpZWQiCiAgZXhpdCAxCn0KClVOSVQ9JDEKRU5WRklMRT0kMgpWQVJOQU1FPSQzCmlmIFtbIC16ICRVTklUIHx8ICRVTklUID09ICItLWhlbHAiIHx8ICRVTklUID09ICItaCIgXV07IHRoZW4KICB1c2FnZQpmaQpkZWJ1ZyAiRXh0cmFjdGluZyBFeGVjU3RhcnQgZnJvbSAkVU5JVCIKRklMRT0kKHN5c3RlbWN0bCBjYXQgJFVOSVQgfCBoZWFkIC1uIDEpCkZJTEU9JHtGSUxFI1wjIH0KaWYgW1sgISAtZiAkRklMRSBdXTsgdGhlbgogIGRlYnVnICJGYWlsZWQgdG8gZmluZCByb290IGZpbGUgZm9yIHVuaXQgJFVOSVQgKCRGSUxFKSIKICBleGl0CmZpCmRlYnVnICJTZXJ2aWNlIGRlZmluaXRpb24gaXMgaW4gJEZJTEUiCkVYRUNTVEFSVD0kKHNlZCAtbiAtZSAnL15FeGVjU3RhcnQ9LipcXCQvLC9bXlxcXSQvIHsgcy9eRXhlY1N0YXJ0PS8vOyBwIH0nIC1lICcvXkV4ZWNTdGFydD0uKlteXFxdJC8geyBzL15FeGVjU3RhcnQ9Ly87IHAgfScgJEZJTEUpCgppZiBbWyAkRU5WRklMRSBdXTsgdGhlbgogIFZBUk5BTUU9JHtWQVJOQU1FOi1FWEVDU1RBUlR9CiAgZWNobyAiJHtWQVJOQU1FfT0ke0VYRUNTVEFSVH0iID4gJEVOVkZJTEUKZWxzZQogIGVjaG8gJEVYRUNTVEFSVApmaQo=
          mode: 493
          path: /usr/local/bin/extractExecStart
        - contents:
            source: data:text/plain;charset=utf-8;base64,IyEvYmluL2Jhc2gKbnNlbnRlciAtLW1vdW50PS9ydW4vY29udGFpbmVyLW1vdW50LW5hbWVzcGFjZS9tbnQgIiRAIgo=
          mode: 493
          path: /usr/local/bin/nsenterCmns
    systemd:
      units:
        - contents: |
            [Unit]
            Description=Manages a mount namespace that both kubelet and crio can use to share their container-specific mounts

            [Service]
            Type=oneshot
            RemainAfterExit=yes
            RuntimeDirectory=container-mount-namespace
            Environment=RUNTIME_DIRECTORY=%t/container-mount-namespace
            Environment=BIND_POINT=%t/container-mount-namespace/mnt
            ExecStartPre=bash -c "findmnt ${RUNTIME_DIRECTORY} || mount --make-unbindable --bind ${RUNTIME_DIRECTORY} ${RUNTIME_DIRECTORY}"
            ExecStartPre=touch ${BIND_POINT}
            ExecStart=unshare --mount=${BIND_POINT} --propagation slave mount --make-rshared /
            ExecStop=umount -R ${RUNTIME_DIRECTORY}
          name: container-mount-namespace.service
        - dropins:
            - contents: |
                [Unit]
                Wants=container-mount-namespace.service
                After=container-mount-namespace.service

                [Service]
                ExecStartPre=/usr/local/bin/extractExecStart %n /%t/%N-execstart.env ORIG_EXECSTART
                EnvironmentFile=-/%t/%N-execstart.env
                ExecStart=
                ExecStart=bash -c "nsenter --mount=%t/container-mount-namespace/mnt \
                    ${ORIG_EXECSTART}"
              name: 90-container-mount-namespace.conf
          name: crio.service
        - dropins:
            - contents: |
                [Unit]
                Wants=container-mount-namespace.service
                After=container-mount-namespace.service

                [Service]
                ExecStartPre=/usr/local/bin/extractExecStart %n /%t/%N-execstart.env ORIG_EXECSTART
                EnvironmentFile=-/%t/%N-execstart.env
                ExecStart=
                ExecStart=bash -c "nsenter --mount=%t/container-mount-namespace/mnt \
                    ${ORIG_EXECSTART} --housekeeping-interval=30s"
              name: 90-container-mount-namespace.conf
            - contents: |
                [Service]
                Environment="OPENSHIFT_MAX_HOUSEKEEPING_INTERVAL_DURATION=60s"
                Environment="OPENSHIFT_EVICTION_MONITORING_PERIOD_DURATION=30s"
              name: 30-kubelet-interval-tuning.conf
          name: kubelet.service
Copy to Clipboard Toggle word wrap

6.7.3. SCTP

SCTP(Stream Control Transmission Protocol)는 RAN 애플리케이션에서 사용되는 핵심 프로토콜입니다. 이 MachineConfig 개체는 노드에 SCTP 커널 모듈을 추가하여 이 프로토콜을 활성화합니다.

권장되는 제어 평면 노드 SCTP 구성( 03-sctp-machine-config-master.yaml )

# Automatically generated by extra-manifests-builder
# Do not make changes directly.
apiVersion: machineconfiguration.openshift.io/v1
kind: MachineConfig
metadata:
  labels:
    machineconfiguration.openshift.io/role: master
  name: load-sctp-module-master
spec:
  config:
    ignition:
      version: 2.2.0
    storage:
      files:
        - contents:
            source: data:,
            verification: {}
          filesystem: root
          mode: 420
          path: /etc/modprobe.d/sctp-blacklist.conf
        - contents:
            source: data:text/plain;charset=utf-8,sctp
          filesystem: root
          mode: 420
          path: /etc/modules-load.d/sctp-load.conf
Copy to Clipboard Toggle word wrap

권장되는 작업자 노드 SCTP 구성( 03-sctp-machine-config-worker.yaml )

# Automatically generated by extra-manifests-builder
# Do not make changes directly.
apiVersion: machineconfiguration.openshift.io/v1
kind: MachineConfig
metadata:
  labels:
    machineconfiguration.openshift.io/role: worker
  name: load-sctp-module-worker
spec:
  config:
    ignition:
      version: 2.2.0
    storage:
      files:
        - contents:
            source: data:,
            verification: {}
          filesystem: root
          mode: 420
          path: /etc/modprobe.d/sctp-blacklist.conf
        - contents:
            source: data:text/plain;charset=utf-8,sctp
          filesystem: root
          mode: 420
          path: /etc/modules-load.d/sctp-load.conf
Copy to Clipboard Toggle word wrap

6.7.4. rcu_normal 설정

다음 MachineConfig CR은 시스템 시작이 완료된 후 rcu_normal을 1로 설정하도록 시스템을 구성합니다. 이렇게 하면 vDU 애플리케이션의 커널 대기 시간이 향상됩니다.

노드가 시작을 완료한 후 rcu_expedited를 비활성화하기 위한 권장 구성( 08-set-rcu-normal-master.yaml )

# Automatically generated by extra-manifests-builder
# Do not make changes directly.
apiVersion: machineconfiguration.openshift.io/v1
kind: MachineConfig
metadata:
  labels:
    machineconfiguration.openshift.io/role: master
  name: 08-set-rcu-normal-master
spec:
  config:
    ignition:
      version: 3.2.0
    storage:
      files:
        - contents:
            source: data:text/plain;charset=utf-8;base64,IyEvYmluL2Jhc2gKIwojIERpc2FibGUgcmN1X2V4cGVkaXRlZCBhZnRlciBub2RlIGhhcyBmaW5pc2hlZCBib290aW5nCiMKIyBUaGUgZGVmYXVsdHMgYmVsb3cgY2FuIGJlIG92ZXJyaWRkZW4gdmlhIGVudmlyb25tZW50IHZhcmlhYmxlcwojCgojIERlZmF1bHQgd2FpdCB0aW1lIGlzIDYwMHMgPSAxMG06Ck1BWElNVU1fV0FJVF9USU1FPSR7TUFYSU1VTV9XQUlUX1RJTUU6LTYwMH0KCiMgRGVmYXVsdCBzdGVhZHktc3RhdGUgdGhyZXNob2xkID0gMiUKIyBBbGxvd2VkIHZhbHVlczoKIyAgNCAgLSBhYnNvbHV0ZSBwb2QgY291bnQgKCsvLSkKIyAgNCUgLSBwZXJjZW50IGNoYW5nZSAoKy8tKQojICAtMSAtIGRpc2FibGUgdGhlIHN0ZWFkeS1zdGF0ZSBjaGVjawpTVEVBRFlfU1RBVEVfVEhSRVNIT0xEPSR7U1RFQURZX1NUQVRFX1RIUkVTSE9MRDotMiV9CgojIERlZmF1bHQgc3RlYWR5LXN0YXRlIHdpbmRvdyA9IDYwcwojIElmIHRoZSBydW5uaW5nIHBvZCBjb3VudCBzdGF5cyB3aXRoaW4gdGhlIGdpdmVuIHRocmVzaG9sZCBmb3IgdGhpcyB0aW1lCiMgcGVyaW9kLCByZXR1cm4gQ1BVIHV0aWxpemF0aW9uIHRvIG5vcm1hbCBiZWZvcmUgdGhlIG1heGltdW0gd2FpdCB0aW1lIGhhcwojIGV4cGlyZXMKU1RFQURZX1NUQVRFX1dJTkRPVz0ke1NURUFEWV9TVEFURV9XSU5ET1c6LTYwfQoKIyBEZWZhdWx0IHN0ZWFkeS1zdGF0ZSBhbGxvd3MgYW55IHBvZCBjb3VudCB0byBiZSAic3RlYWR5IHN0YXRlIgojIEluY3JlYXNpbmcgdGhpcyB3aWxsIHNraXAgYW55IHN0ZWFkeS1zdGF0ZSBjaGVja3MgdW50aWwgdGhlIGNvdW50IHJpc2VzIGFib3ZlCiMgdGhpcyBudW1iZXIgdG8gYXZvaWQgZmFsc2UgcG9zaXRpdmVzIGlmIHRoZXJlIGFyZSBzb21lIHBlcmlvZHMgd2hlcmUgdGhlCiMgY291bnQgZG9lc24ndCBpbmNyZWFzZSBidXQgd2Uga25vdyB3ZSBjYW4ndCBiZSBhdCBzdGVhZHktc3RhdGUgeWV0LgpTVEVBRFlfU1RBVEVfTUlOSU1VTT0ke1NURUFEWV9TVEFURV9NSU5JTVVNOi0wfQoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKd2l0aGluKCkgewogIGxvY2FsIGxhc3Q9JDEgY3VycmVudD0kMiB0aHJlc2hvbGQ9JDMKICBsb2NhbCBkZWx0YT0wIHBjaGFuZ2UKICBkZWx0YT0kKCggY3VycmVudCAtIGxhc3QgKSkKICBpZiBbWyAkY3VycmVudCAtZXEgJGxhc3QgXV07IHRoZW4KICAgIHBjaGFuZ2U9MAogIGVsaWYgW1sgJGxhc3QgLWVxIDAgXV07IHRoZW4KICAgIHBjaGFuZ2U9MTAwMDAwMAogIGVsc2UKICAgIHBjaGFuZ2U9JCgoICggIiRkZWx0YSIgKiAxMDApIC8gbGFzdCApKQogIGZpCiAgZWNobyAtbiAibGFzdDokbGFzdCBjdXJyZW50OiRjdXJyZW50IGRlbHRhOiRkZWx0YSBwY2hhbmdlOiR7cGNoYW5nZX0lOiAiCiAgbG9jYWwgYWJzb2x1dGUgbGltaXQKICBjYXNlICR0aHJlc2hvbGQgaW4KICAgIColKQogICAgICBhYnNvbHV0ZT0ke3BjaGFuZ2UjIy19ICMgYWJzb2x1dGUgdmFsdWUKICAgICAgbGltaXQ9JHt0aHJlc2hvbGQlJSV9CiAgICAgIDs7CiAgICAqKQogICAgICBhYnNvbHV0ZT0ke2RlbHRhIyMtfSAjIGFic29sdXRlIHZhbHVlCiAgICAgIGxpbWl0PSR0aHJlc2hvbGQKICAgICAgOzsKICBlc2FjCiAgaWYgW1sgJGFic29sdXRlIC1sZSAkbGltaXQgXV07IHRoZW4KICAgIGVjaG8gIndpdGhpbiAoKy8tKSR0aHJlc2hvbGQiCiAgICByZXR1cm4gMAogIGVsc2UKICAgIGVjaG8gIm91dHNpZGUgKCsvLSkkdGhyZXNob2xkIgogICAgcmV0dXJuIDEKICBmaQp9CgpzdGVhZHlzdGF0ZSgpIHsKICBsb2NhbCBsYXN0PSQxIGN1cnJlbnQ9JDIKICBpZiBbWyAkbGFzdCAtbHQgJFNURUFEWV9TVEFURV9NSU5JTVVNIF1dOyB0aGVuCiAgICBlY2hvICJsYXN0OiRsYXN0IGN1cnJlbnQ6JGN1cnJlbnQgV2FpdGluZyB0byByZWFjaCAkU1RFQURZX1NUQVRFX01JTklNVU0gYmVmb3JlIGNoZWNraW5nIGZvciBzdGVhZHktc3RhdGUiCiAgICByZXR1cm4gMQogIGZpCiAgd2l0aGluICIkbGFzdCIgIiRjdXJyZW50IiAiJFNURUFEWV9TVEFURV9USFJFU0hPTEQiCn0KCndhaXRGb3JSZWFkeSgpIHsKICBsb2dnZXIgIlJlY292ZXJ5OiBXYWl0aW5nICR7TUFYSU1VTV9XQUlUX1RJTUV9cyBmb3IgdGhlIGluaXRpYWxpemF0aW9uIHRvIGNvbXBsZXRlIgogIGxvY2FsIHQ9MCBzPTEwCiAgbG9jYWwgbGFzdENjb3VudD0wIGNjb3VudD0wIHN0ZWFkeVN0YXRlVGltZT0wCiAgd2hpbGUgW1sgJHQgLWx0ICRNQVhJTVVNX1dBSVRfVElNRSBdXTsgZG8KICAgIHNsZWVwICRzCiAgICAoKHQgKz0gcykpCiAgICAjIERldGVjdCBzdGVhZHktc3RhdGUgcG9kIGNvdW50CiAgICBjY291bnQ9JChjcmljdGwgcHMgMj4vZGV2L251bGwgfCB3YyAtbCkKICAgIGlmIFtbICRjY291bnQgLWd0IDAgXV0gJiYgc3RlYWR5c3RhdGUgIiRsYXN0Q2NvdW50IiAiJGNjb3VudCI7IHRoZW4KICAgICAgKChzdGVhZHlTdGF0ZVRpbWUgKz0gcykpCiAgICAgIGVjaG8gIlN0ZWFkeS1zdGF0ZSBmb3IgJHtzdGVhZHlTdGF0ZVRpbWV9cy8ke1NURUFEWV9TVEFURV9XSU5ET1d9cyIKICAgICAgaWYgW1sgJHN0ZWFkeVN0YXRlVGltZSAtZ2UgJFNURUFEWV9TVEFURV9XSU5ET1cgXV07IHRoZW4KICAgICAgICBsb2dnZXIgIlJlY292ZXJ5OiBTdGVhZHktc3RhdGUgKCsvLSAkU1RFQURZX1NUQVRFX1RIUkVTSE9MRCkgZm9yICR7U1RFQURZX1NUQVRFX1dJTkRPV31zOiBEb25lIgogICAgICAgIHJldHVybiAwCiAgICAgIGZpCiAgICBlbHNlCiAgICAgIGlmIFtbICRzdGVhZHlTdGF0ZVRpbWUgLWd0IDAgXV07IHRoZW4KICAgICAgICBlY2hvICJSZXNldHRpbmcgc3RlYWR5LXN0YXRlIHRpbWVyIgogICAgICAgIHN0ZWFkeVN0YXRlVGltZT0wCiAgICAgIGZpCiAgICBmaQogICAgbGFzdENjb3VudD0kY2NvdW50CiAgZG9uZQogIGxvZ2dlciAiUmVjb3Zlcnk6IFJlY292ZXJ5IENvbXBsZXRlIFRpbWVvdXQiCn0KCnNldFJjdU5vcm1hbCgpIHsKICBlY2hvICJTZXR0aW5nIHJjdV9ub3JtYWwgdG8gMSIKICBlY2hvIDEgPiAvc3lzL2tlcm5lbC9yY3Vfbm9ybWFsCn0KCm1haW4oKSB7CiAgd2FpdEZvclJlYWR5CiAgZWNobyAiV2FpdGluZyBmb3Igc3RlYWR5IHN0YXRlIHRvb2s6ICQoYXdrICd7cHJpbnQgaW50KCQxLzM2MDApImgiLCBpbnQoKCQxJTM2MDApLzYwKSJtIiwgaW50KCQxJTYwKSJzIn0nIC9wcm9jL3VwdGltZSkiCiAgc2V0UmN1Tm9ybWFsCn0KCmlmIFtbICIke0JBU0hfU09VUkNFWzBdfSIgPSAiJHswfSIgXV07IHRoZW4KICBtYWluICIke0B9IgogIGV4aXQgJD8KZmkK
          mode: 493
          path: /usr/local/bin/set-rcu-normal.sh
    systemd:
      units:
        - contents: |
            [Unit]
            Description=Disable rcu_expedited after node has finished booting by setting rcu_normal to 1

            [Service]
            Type=simple
            ExecStart=/usr/local/bin/set-rcu-normal.sh

            # Maximum wait time is 600s = 10m:
            Environment=MAXIMUM_WAIT_TIME=600

            # Steady-state threshold = 2%
            # Allowed values:
            #  4  - absolute pod count (+/-)
            #  4% - percent change (+/-)
            #  -1 - disable the steady-state check
            # Note: '%' must be escaped as '%%' in systemd unit files
            Environment=STEADY_STATE_THRESHOLD=2%%

            # Steady-state window = 120s
            # If the running pod count stays within the given threshold for this time
            # period, return CPU utilization to normal before the maximum wait time has
            # expires
            Environment=STEADY_STATE_WINDOW=120

            # Steady-state minimum = 40
            # Increasing this will skip any steady-state checks until the count rises above
            # this number to avoid false positives if there are some periods where the
            # count doesn't increase but we know we can't be at steady-state yet.
            Environment=STEADY_STATE_MINIMUM=40

            [Install]
            WantedBy=multi-user.target
          enabled: true
          name: set-rcu-normal.service
Copy to Clipboard Toggle word wrap

6.7.5. kdump를 이용한 자동 커널 크래시 덤프

kdump는 커널이 충돌할 때 커널 충돌 덤프를 생성하는 Linux 커널 기능입니다. kdump는 다음 MachineConfig CR을 통해 활성화됩니다.

권장되는 제어 평면 노드 kdump 구성( 06-kdump-master.yaml )

# Automatically generated by extra-manifests-builder
# Do not make changes directly.
apiVersion: machineconfiguration.openshift.io/v1
kind: MachineConfig
metadata:
  labels:
    machineconfiguration.openshift.io/role: master
  name: 06-kdump-enable-master
spec:
  config:
    ignition:
      version: 3.2.0
    systemd:
      units:
        - enabled: true
          name: kdump.service
  kernelArguments:
    - crashkernel=512M
Copy to Clipboard Toggle word wrap

권장되는 kdump 작업자 노드 구성( 06-kdump-worker.yaml )

# Automatically generated by extra-manifests-builder
# Do not make changes directly.
apiVersion: machineconfiguration.openshift.io/v1
kind: MachineConfig
metadata:
  labels:
    machineconfiguration.openshift.io/role: worker
  name: 06-kdump-enable-worker
spec:
  config:
    ignition:
      version: 3.2.0
    systemd:
      units:
        - enabled: true
          name: kdump.service
  kernelArguments:
    - crashkernel=512M
Copy to Clipboard Toggle word wrap

6.7.6. CRI-O 캐시 자동 삭제 비활성화

제어되지 않는 호스트 종료 또는 클러스터 재부팅 후, CRI-O는 자동으로 전체 CRI-O 캐시를 삭제하므로 노드가 재부팅될 때 레지스트리에서 모든 이미지를 가져옵니다. 이로 인해 복구 시간이 너무 느리거나 복구에 실패할 수 있습니다. GitOps ZTP를 사용하여 설치한 단일 노드 OpenShift 클러스터에서 이런 일이 발생하지 않도록 하려면 클러스터 설치 중에 CRI-O 캐시 삭제 기능을 비활성화하세요.

제어 평면 노드에서 CRI-O 캐시 삭제를 비활성화하기 위한 권장 MachineConfig CR( 99-crio-disable-wipe-master.yaml )

# Automatically generated by extra-manifests-builder
# Do not make changes directly.
apiVersion: machineconfiguration.openshift.io/v1
kind: MachineConfig
metadata:
  labels:
    machineconfiguration.openshift.io/role: master
  name: 99-crio-disable-wipe-master
spec:
  config:
    ignition:
      version: 3.2.0
    storage:
      files:
        - contents:
            source: data:text/plain;charset=utf-8;base64,W2NyaW9dCmNsZWFuX3NodXRkb3duX2ZpbGUgPSAiIgo=
          mode: 420
          path: /etc/crio/crio.conf.d/99-crio-disable-wipe.toml
Copy to Clipboard Toggle word wrap

작업자 노드에서 CRI-O 캐시 삭제를 비활성화하기 위한 권장 MachineConfig CR( 99-crio-disable-wipe-worker.yaml )

# Automatically generated by extra-manifests-builder
# Do not make changes directly.
apiVersion: machineconfiguration.openshift.io/v1
kind: MachineConfig
metadata:
  labels:
    machineconfiguration.openshift.io/role: worker
  name: 99-crio-disable-wipe-worker
spec:
  config:
    ignition:
      version: 3.2.0
    storage:
      files:
        - contents:
            source: data:text/plain;charset=utf-8;base64,W2NyaW9dCmNsZWFuX3NodXRkb3duX2ZpbGUgPSAiIgo=
          mode: 420
          path: /etc/crio/crio.conf.d/99-crio-disable-wipe.toml
Copy to Clipboard Toggle word wrap

6.7.7. crun을 기본 컨테이너 런타임으로 구성

다음 ContainerRuntimeConfig 사용자 정의 리소스(CR)는 crun을 제어 평면 및 작업자 노드에 대한 기본 OCI 컨테이너 런타임으로 구성합니다. Crun 컨테이너 런타임은 빠르고 가벼우며 메모리 사용량이 적습니다.

중요

최적의 성능을 위해 단일 노드 OpenShift, 3-노드 OpenShift 및 표준 클러스터에서 컨트롤 플레인 및 작업자 노드에 대해 crun을 활성화합니다. CR을 적용할 때 클러스터 재부팅을 방지하려면 변경 사항을 GitOps ZTP 추가 Day 0 설치 시 매니페스트로 적용하세요.

제어 평면 노드에 권장되는 ContainerRuntimeConfig CR( enable-crun-master.yaml )

apiVersion: machineconfiguration.openshift.io/v1
kind: ContainerRuntimeConfig
metadata:
  name: enable-crun-master
spec:
  machineConfigPoolSelector:
    matchLabels:
      pools.operator.machineconfiguration.openshift.io/master: ""
  containerRuntimeConfig:
    defaultRuntime: crun
Copy to Clipboard Toggle word wrap

워커 노드에 권장되는 ContainerRuntimeConfig CR( enable-crun-worker.yaml )

apiVersion: machineconfiguration.openshift.io/v1
kind: ContainerRuntimeConfig
metadata:
  name: enable-crun-worker
spec:
  machineConfigPoolSelector:
    matchLabels:
      pools.operator.machineconfiguration.openshift.io/worker: ""
  containerRuntimeConfig:
    defaultRuntime: crun
Copy to Clipboard Toggle word wrap

6.7.8. TPM 및 PCR 보호를 통한 디스크 암호화 활성화

SiteConfig 사용자 지정 리소스(CR)의 diskEncryption 필드를 사용하여 TPM(신뢰할 수 있는 플랫폼 모듈) 및 PCR(플랫폼 구성 레지스터) 보호로 디스크 암호화를 구성할 수 있습니다.

SiteConfig CR을 구성하면 클러스터 설치 시 디스크 암호화가 가능합니다.

사전 요구 사항

  • OpenShift CLI(oc)가 설치되어 있습니다.
  • cluster-admin 권한이 있는 사용자로 로그인했습니다.
  • " TPM 및 PCR 보호로 디스크 암호화 정보" 섹션을 읽습니다.

프로세스

  • SiteConfig CR에서 spec.clusters.diskEncryption 필드를 구성합니다.

    PCR 보호로 디스크 암호화를 활성화하기 위한 권장되는 site Config CR 구성

    apiVersion: ran.openshift.io/v1
    kind: SiteConfig
    metadata:
      name: "encryption-tpm2"
      namespace: "encryption-tpm2"
    spec:
      clusters:
      - clusterName: "encryption-tpm2"
        clusterImageSetNameRef: "openshift-v4.13.0"
        diskEncryption:
          type: "tpm2" 
    1
    
          tpm2:
            pcrList: "1,7" 
    2
    
        nodes:
          - hostName: "node1"
            role: master
    Copy to Clipboard Toggle word wrap

    1
    디스크 암호화 유형을 tpm2 로 설정합니다.
    2
    디스크 암호화에 사용할 PCR 목록을 구성합니다. PCR 레지스터 1과 7을 사용해야 합니다.

검증

  • 다음 명령을 실행하여 TPM 및 PCR 보호로 디스크 암호화가 활성화되어 있는지 확인합니다.

    $ clevis luks list -d <disk_path> 
    1
    Copy to Clipboard Toggle word wrap
    1
    & lt;disk_path >를 디스크 경로로 바꿉니다. 예를 들면 /dev/sdc 입니다.

    출력 예

    1: tpm2 '{"hash":"sha256","key":"ecc","pcr_bank":"sha256","pcr_ids":"1,7"}'
    Copy to Clipboard Toggle word wrap

6.8. 설치 후 클러스터 구성 권장

클러스터 설치가 완료되면 ZTP 파이프라인에서 DU 워크로드를 실행하는 데 필요한 다음 사용자 정의 리소스(CR)를 적용합니다.

참고

GitOps ZTP v4.10 및 이전 버전에서는 MachineConfig CR을 사용하여 UEFI 보안 부팅을 구성합니다. GitOps ZTP v4.11 이상에서는 더 이상 필요하지 않습니다. v4.11에서는 클러스터를 설치하는 데 사용하는 site Config CR에서 spec.clusters.nodes.bootMode 필드를 업데이트하여 단일 노드 OpenShift 클러스터에 대해 UEFI 보안 부팅을 구성합니다. 자세한 내용은 site Config 및 GitOps ZTP를 사용하여 관리되는 클러스터 배포를 참조하십시오.

6.8.1. Operator

DU 워크로드를 실행하는 단일 노드 OpenShift 클러스터에는 다음 Operator를 설치해야 합니다.

  • Local Storage Operator
  • Logging Operator
  • PTP Operator
  • SR-IOV 네트워크 Operator

또한 사용자 정의 CatalogSource CR을 구성하고 기본 OperatorHub 구성을 비활성화하고 설치하는 클러스터에서 액세스할 수 있는 ImageContentSourcePolicy 미러 레지스트리를 구성해야 합니다.

권장 스토리지 Operator 네임스페이스 및 Operator group 구성 (StorageNS.yaml,StorageOperGroup.yaml)

---
apiVersion: v1
kind: Namespace
metadata:
  name: openshift-local-storage
  annotations:
    workload.openshift.io/allowed: management
---
apiVersion: operators.coreos.com/v1
kind: OperatorGroup
metadata:
  name: openshift-local-storage
  namespace: openshift-local-storage
  annotations: {}
spec:
  targetNamespaces:
    - openshift-local-storage
Copy to Clipboard Toggle word wrap

권장되는 Cluster Logging Operator 네임스페이스 및 Operator group 구성 (ClusterLogNS.yaml,ClusterLogOperGroup.yaml)

---
apiVersion: v1
kind: Namespace
metadata:
  name: openshift-logging
  annotations:
    workload.openshift.io/allowed: management
---
apiVersion: operators.coreos.com/v1
kind: OperatorGroup
metadata:
  name: cluster-logging
  namespace: openshift-logging
  annotations: {}
spec:
  targetNamespaces:
    - openshift-logging
Copy to Clipboard Toggle word wrap

권장되는 PTP Operator 네임스페이스 및 Operator 그룹 구성(PtpSubscriptionNS.yaml,PtpSubscriptionOperGroup.yaml)

---
apiVersion: v1
kind: Namespace
metadata:
  name: openshift-ptp
  annotations:
    workload.openshift.io/allowed: management
  labels:
    openshift.io/cluster-monitoring: "true"
---
apiVersion: operators.coreos.com/v1
kind: OperatorGroup
metadata:
  name: ptp-operators
  namespace: openshift-ptp
  annotations: {}
spec:
  targetNamespaces:
    - openshift-ptp
Copy to Clipboard Toggle word wrap

권장되는 SR-IOV Operator 네임스페이스 및 Operator 그룹 구성(SriovSubscriptionNS.yaml,SriovSubscriptionOperGroup.yaml)

---
apiVersion: v1
kind: Namespace
metadata:
  name: openshift-sriov-network-operator
  annotations:
    workload.openshift.io/allowed: management
---
apiVersion: operators.coreos.com/v1
kind: OperatorGroup
metadata:
  name: sriov-network-operators
  namespace: openshift-sriov-network-operator
  annotations: {}
spec:
  targetNamespaces:
    - openshift-sriov-network-operator
Copy to Clipboard Toggle word wrap

권장되는 CatalogSource 구성 (DefaultCatsrc.yaml)

apiVersion: operators.coreos.com/v1alpha1
kind: CatalogSource
metadata:
  name: default-cat-source
  namespace: openshift-marketplace
  annotations:
    target.workload.openshift.io/management: '{"effect": "PreferredDuringScheduling"}'
spec:
  displayName: default-cat-source
  image: $imageUrl
  publisher: Red Hat
  sourceType: grpc
  updateStrategy:
    registryPoll:
      interval: 1h
status:
  connectionState:
    lastObservedState: READY
Copy to Clipboard Toggle word wrap

권장되는 ImageContentSourcePolicy 구성 (DisconnectedICSP.yaml)

apiVersion: operator.openshift.io/v1alpha1
kind: ImageContentSourcePolicy
metadata:
  name: disconnected-internal-icsp
  annotations: {}
spec:
#    repositoryDigestMirrors:
#    - $mirrors
Copy to Clipboard Toggle word wrap

권장되는 OperatorHub 구성 (OperatorHub.yaml)

apiVersion: config.openshift.io/v1
kind: OperatorHub
metadata:
  name: cluster
  annotations: {}
spec:
  disableAllDefaultSources: true
Copy to Clipboard Toggle word wrap

6.8.2. Operator 서브스크립션

DU 워크로드를 실행하는 단일 노드 OpenShift 클러스터에는 다음과 같은 Subscription CR이 필요합니다. 서브스크립션은 다음 Operator를 다운로드할 위치를 제공합니다.

  • Local Storage Operator
  • Logging Operator
  • PTP Operator
  • SR-IOV 네트워크 Operator
  • SRIOV-FEC Operator

각 Operator 구독에 대해 Operator를 가져올 채널을 지정합니다. 추천 채널은 안정적 입니다.

수동 또는 자동 업데이트를 지정할 수 있습니다. 자동 모드에서는 운영자가 레지스트리에 최신 버전이 추가되면 채널의 최신 버전으로 자동 업데이트합니다. 수동 모드에서는 새로운 Operator 버전이 명시적으로 승인된 경우에만 설치됩니다.

작은 정보

구독에는 수동 모드를 사용하세요. 이를 통해 예정된 유지 관리 기간에 맞춰 운영자 업데이트의 타이밍을 제어할 수 있습니다.

권장되는 로컬 스토리지 운영자 구독( StorageSubscription.yaml )

apiVersion: operators.coreos.com/v1alpha1
kind: Subscription
metadata:
  name: local-storage-operator
  namespace: openshift-local-storage
  annotations: {}
spec:
  channel: "stable"
  name: local-storage-operator
  source: redhat-operators-disconnected
  sourceNamespace: openshift-marketplace
  installPlanApproval: Manual
status:
  state: AtLatestKnown
Copy to Clipboard Toggle word wrap

권장되는 SR-IOV 운영자 구독( SriovSubscription.yaml )

apiVersion: operators.coreos.com/v1alpha1
kind: Subscription
metadata:
  name: sriov-network-operator-subscription
  namespace: openshift-sriov-network-operator
  annotations: {}
spec:
  channel: "stable"
  name: sriov-network-operator
  source: redhat-operators-disconnected
  sourceNamespace: openshift-marketplace
  installPlanApproval: Manual
status:
  state: AtLatestKnown
Copy to Clipboard Toggle word wrap

권장 PTP 운영자 구독( PtpSubscription.yaml )

---
apiVersion: operators.coreos.com/v1alpha1
kind: Subscription
metadata:
  name: ptp-operator-subscription
  namespace: openshift-ptp
  annotations: {}
spec:
  channel: "stable"
  name: ptp-operator
  source: redhat-operators-disconnected
  sourceNamespace: openshift-marketplace
  installPlanApproval: Manual
status:
  state: AtLatestKnown
Copy to Clipboard Toggle word wrap

권장되는 클러스터 로깅 운영자 구독( ClusterLogSubscription.yaml )

apiVersion: operators.coreos.com/v1alpha1
kind: Subscription
metadata:
  name: cluster-logging
  namespace: openshift-logging
  annotations: {}
spec:
  channel: "stable-6.0"
  name: cluster-logging
  source: redhat-operators-disconnected
  sourceNamespace: openshift-marketplace
  installPlanApproval: Manual
status:
  state: AtLatestKnown
Copy to Clipboard Toggle word wrap

6.8.3. 클러스터 로깅 및 로그 전달

DU 워크로드를 실행하는 단일 노드 OpenShift 클러스터에는 디버깅을 위한 로깅 및 로그 전달이 필요합니다. 다음과 같은 사용자 정의 리소스(CR)가 필요합니다.

Recommended ClusterLogForwarder.yaml

apiVersion: "observability.openshift.io/v1"
kind: ClusterLogForwarder
metadata:
  name: instance
  namespace: openshift-logging
  annotations: {}
spec:
  # outputs: $outputs
  # pipelines: $pipelines
  serviceAccount:
    name: logcollector
#apiVersion: "observability.openshift.io/v1"
#kind: ClusterLogForwarder
#metadata:
#  name: instance
#  namespace: openshift-logging
# spec:
#   outputs:
#   - type: "kafka"
#     name: kafka-open
#     # below url is an example
#     kafka:
#       url: tcp://10.46.55.190:9092/test
#   filters:
#   - name: test-labels
#     type: openshiftLabels
#     openshiftLabels:
#       label1: test1
#       label2: test2
#       label3: test3
#       label4: test4
#   pipelines:
#   - name: all-to-default
#     inputRefs:
#     - audit
#     - infrastructure
#     filterRefs:
#     - test-labels
#     outputRefs:
#     - kafka-open
#   serviceAccount:
#     name: logcollector
Copy to Clipboard Toggle word wrap

참고

spec.outputs.kafka.url 필드를 로그가 전달되는 Kafka 서버의 URL로 설정합니다.

Recommended ClusterLogNS.yaml

---
apiVersion: v1
kind: Namespace
metadata:
  name: openshift-logging
  annotations:
    workload.openshift.io/allowed: management
Copy to Clipboard Toggle word wrap

Recommended ClusterLogOperGroup.yaml

---
apiVersion: operators.coreos.com/v1
kind: OperatorGroup
metadata:
  name: cluster-logging
  namespace: openshift-logging
  annotations: {}
spec:
  targetNamespaces:
    - openshift-logging
Copy to Clipboard Toggle word wrap

Recommended ClusterLogServiceAccount.yaml

---
apiVersion: v1
kind: ServiceAccount
metadata:
  name: logcollector
  namespace: openshift-logging
  annotations: {}
Copy to Clipboard Toggle word wrap

Recommended ClusterLogServiceAccountAuditBinding.yaml

---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: logcollector-audit-logs-binding
  annotations: {}
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: collect-audit-logs
subjects:
  - kind: ServiceAccount
    name: logcollector
    namespace: openshift-logging
Copy to Clipboard Toggle word wrap

Recommended ClusterLogServiceAccountInfrastructureBinding.yaml

---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: logcollector-infrastructure-logs-binding
  annotations: {}
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: collect-infrastructure-logs
subjects:
  - kind: ServiceAccount
    name: logcollector
    namespace: openshift-logging
Copy to Clipboard Toggle word wrap

Recommended ClusterLogSubscription.yaml

apiVersion: operators.coreos.com/v1alpha1
kind: Subscription
metadata:
  name: cluster-logging
  namespace: openshift-logging
  annotations: {}
spec:
  channel: "stable-6.0"
  name: cluster-logging
  source: redhat-operators-disconnected
  sourceNamespace: openshift-marketplace
  installPlanApproval: Manual
status:
  state: AtLatestKnown
Copy to Clipboard Toggle word wrap

6.8.4. 성과 프로필

DU 워크로드를 실행하는 단일 노드 OpenShift 클러스터에는 실시간 호스트 기능과 서비스를 사용하기 위한 노드 튜닝 운영자 성능 프로필이 필요합니다.

참고

OpenShift Container Platform의 이전 버전에서는 Performance Addon Operator를 사용하여 OpenShift 애플리케이션의 저지연 성능을 달성하기 위한 자동 튜닝을 구현했습니다. OpenShift Container Platform 4.11 이상에서는 이 기능이 Node Tuning Operator의 일부입니다.

다음 PerformanceProfile CR 예제는 필요한 단일 노드 OpenShift 클러스터 구성을 보여줍니다.

권장되는 성능 프로필 구성( PerformanceProfile.yaml )

apiVersion: performance.openshift.io/v2
kind: PerformanceProfile
metadata:
  # if you change this name make sure the 'include' line in TunedPerformancePatch.yaml
  # matches this name: include=openshift-node-performance-${PerformanceProfile.metadata.name}
  # Also in file 'validatorCRs/informDuValidator.yaml':
  # name: 50-performance-${PerformanceProfile.metadata.name}
  name: openshift-node-performance-profile
  annotations:
    ran.openshift.io/reference-configuration: "ran-du.redhat.com"
spec:
  additionalKernelArgs:
    - "rcupdate.rcu_normal_after_boot=0"
    - "efi=runtime"
    - "vfio_pci.enable_sriov=1"
    - "vfio_pci.disable_idle_d3=1"
    - "module_blacklist=irdma"
  cpu:
    isolated: $isolated
    reserved: $reserved
  hugepages:
    defaultHugepagesSize: $defaultHugepagesSize
    pages:
      - size: $size
        count: $count
        node: $node
  machineConfigPoolSelector:
    pools.operator.machineconfiguration.openshift.io/$mcp: ""
  nodeSelector:
    node-role.kubernetes.io/$mcp: ''
  numa:
    topologyPolicy: "restricted"
  # To use the standard (non-realtime) kernel, set enabled to false
  realTimeKernel:
    enabled: true
  workloadHints:
    # WorkloadHints defines the set of upper level flags for different type of workloads.
    # See https://github.com/openshift/cluster-node-tuning-operator/blob/master/docs/performanceprofile/performance_profile.md#workloadhints
    # for detailed descriptions of each item.
    # The configuration below is set for a low latency, performance mode.
    realTime: true
    highPowerConsumption: false
    perPodPowerManagement: false
Copy to Clipboard Toggle word wrap

Expand
표 6.3. 단일 노드 OpenShift 클러스터에 대한 PerformanceProfile CR 옵션
PerformanceProfile CR 필드설명

metadata.name

이름 이 관련 GitOps ZTP 사용자 정의 리소스(CR)에 설정된 다음 필드와 일치하는지 확인하세요.

  • TunedPerformancePatch.yamlinclude=openshift-node-performance-${PerformanceProfile.metadata.name}을 포함합니다.
  • name: 50-performance-${PerformanceProfile.metadata.name} in validatorCRs/informDuValidator.yaml

spec.additionalKernelArgs

"efi=runtime" 클러스터 호스트에 대한 UEFI 보안 부팅을 구성합니다.

spec.cpu.isolated

격리된 CPU를 설정합니다. 모든 하이퍼스레딩 쌍이 일치하는지 확인하세요.

중요

예약된 CPU 풀과 격리된 CPU 풀은 겹치지 않아야 하며, 사용 가능한 모든 코어에 걸쳐 있어야 합니다. 계산되지 않은 CPU 코어로 인해 시스템에서 정의되지 않은 동작이 발생합니다.

spec.cpu.reserved

예약된 CPU를 설정합니다. 작업 부하 분할이 활성화되면 시스템 프로세스, 커널 스레드, 시스템 컨테이너 스레드가 해당 CPU로 제한됩니다. 분리되지 않은 모든 CPU를 예약해야 합니다.

spec.hugepages.pages

  • 대용량 페이지 수 설정( count )
  • 큰 페이지 크기( size )를 설정합니다.
  • 거대 페이지가 할당된 NUMA 노드로 노드를 설정합니다( 노드 )

spec.realTimeKernel

실시간 커널을 사용하려면 enabled를 true 로 설정합니다.

spec.workloadHints

workloadHints를 사용하여 다양한 유형의 워크로드에 대한 최상위 플래그 세트를 정의합니다. 예제 구성은 낮은 지연 시간과 높은 성능을 위해 클러스터를 구성합니다.

6.8.5. 클러스터 시간 동기화 구성

제어 평면 또는 작업자 노드에 대해 일회성 시스템 시간 동기화 작업을 실행합니다.

제어 평면 노드에 권장되는 일회성 시간 동기화( 99-sync-time-once-master.yaml )

# Automatically generated by extra-manifests-builder
# Do not make changes directly.
apiVersion: machineconfiguration.openshift.io/v1
kind: MachineConfig
metadata:
  labels:
    machineconfiguration.openshift.io/role: master
  name: 99-sync-time-once-master
spec:
  config:
    ignition:
      version: 3.2.0
    systemd:
      units:
        - contents: |
            [Unit]
            Description=Sync time once
            After=network-online.target
            Wants=network-online.target
            [Service]
            Type=oneshot
            TimeoutStartSec=300
            ExecCondition=/bin/bash -c 'systemctl is-enabled chronyd.service --quiet && exit 1 || exit 0'
            ExecStart=/usr/sbin/chronyd -n -f /etc/chrony.conf -q
            RemainAfterExit=yes
            [Install]
            WantedBy=multi-user.target
          enabled: true
          name: sync-time-once.service
Copy to Clipboard Toggle word wrap

워커 노드에 권장되는 일회성 시간 동기화( 99-sync-time-once-worker.yaml )

# Automatically generated by extra-manifests-builder
# Do not make changes directly.
apiVersion: machineconfiguration.openshift.io/v1
kind: MachineConfig
metadata:
  labels:
    machineconfiguration.openshift.io/role: worker
  name: 99-sync-time-once-worker
spec:
  config:
    ignition:
      version: 3.2.0
    systemd:
      units:
        - contents: |
            [Unit]
            Description=Sync time once
            After=network-online.target
            Wants=network-online.target
            [Service]
            Type=oneshot
            TimeoutStartSec=300
            ExecCondition=/bin/bash -c 'systemctl is-enabled chronyd.service --quiet && exit 1 || exit 0'
            ExecStart=/usr/sbin/chronyd -n -f /etc/chrony.conf -q
            RemainAfterExit=yes
            [Install]
            WantedBy=multi-user.target
          enabled: true
          name: sync-time-once.service
Copy to Clipboard Toggle word wrap

6.8.6. PTP

단일 노드 OpenShift 클러스터는 네트워크 시간 동기화를 위해 PTP(Precision Time Protocol)를 사용합니다. 다음 예제 PtpConfig CR은 일반 클록, 경계 클록 및 그랜드마스터 클록에 필요한 PTP 구성을 보여줍니다. 적용할 정확한 구성은 노드 하드웨어와 특정 사용 사례에 따라 달라집니다.

권장되는 PTP 일반 클럭 구성(PtpConfigSlave.yaml)

apiVersion: ptp.openshift.io/v1
kind: PtpConfig
metadata:
  name: ordinary
  namespace: openshift-ptp
  annotations: {}
spec:
  profile:
    - name: "ordinary"
      # The interface name is hardware-specific
      interface: $interface
      ptp4lOpts: "-2 -s"
      phc2sysOpts: "-a -r -n 24"
      ptpSchedulingPolicy: SCHED_FIFO
      ptpSchedulingPriority: 10
      ptpSettings:
        logReduce: "true"
      ptp4lConf: |
        [global]
        #
        # Default Data Set
        #
        twoStepFlag 1
        slaveOnly 1
        priority1 128
        priority2 128
        domainNumber 24
        #utc_offset 37
        clockClass 255
        clockAccuracy 0xFE
        offsetScaledLogVariance 0xFFFF
        free_running 0
        freq_est_interval 1
        dscp_event 0
        dscp_general 0
        dataset_comparison G.8275.x
        G.8275.defaultDS.localPriority 128
        #
        # Port Data Set
        #
        logAnnounceInterval -3
        logSyncInterval -4
        logMinDelayReqInterval -4
        logMinPdelayReqInterval -4
        announceReceiptTimeout 3
        syncReceiptTimeout 0
        delayAsymmetry 0
        fault_reset_interval -4
        neighborPropDelayThresh 20000000
        masterOnly 0
        G.8275.portDS.localPriority 128
        #
        # Run time options
        #
        assume_two_step 0
        logging_level 6
        path_trace_enabled 0
        follow_up_info 0
        hybrid_e2e 0
        inhibit_multicast_service 0
        net_sync_monitor 0
        tc_spanning_tree 0
        tx_timestamp_timeout 50
        unicast_listen 0
        unicast_master_table 0
        unicast_req_duration 3600
        use_syslog 1
        verbose 0
        summary_interval 0
        kernel_leap 1
        check_fup_sync 0
        clock_class_threshold 7
        #
        # Servo Options
        #
        pi_proportional_const 0.0
        pi_integral_const 0.0
        pi_proportional_scale 0.0
        pi_proportional_exponent -0.3
        pi_proportional_norm_max 0.7
        pi_integral_scale 0.0
        pi_integral_exponent 0.4
        pi_integral_norm_max 0.3
        step_threshold 2.0
        first_step_threshold 0.00002
        max_frequency 900000000
        clock_servo pi
        sanity_freq_limit 200000000
        ntpshm_segment 0
        #
        # Transport options
        #
        transportSpecific 0x0
        ptp_dst_mac 01:1B:19:00:00:00
        p2p_dst_mac 01:80:C2:00:00:0E
        udp_ttl 1
        udp6_scope 0x0E
        uds_address /var/run/ptp4l
        #
        # Default interface options
        #
        clock_type OC
        network_transport L2
        delay_mechanism E2E
        time_stamping hardware
        tsproc_mode filter
        delay_filter moving_median
        delay_filter_length 10
        egressLatency 0
        ingressLatency 0
        boundary_clock_jbod 0
        #
        # Clock description
        #
        productDescription ;;
        revisionData ;;
        manufacturerIdentity 00:00:00
        userDescription ;
        timeSource 0xA0
  recommend:
    - profile: "ordinary"
      priority: 4
      match:
        - nodeLabel: "node-role.kubernetes.io/$mcp"
Copy to Clipboard Toggle word wrap

권장되는 경계 클록 구성( PtpConfigBoundary.yaml )

apiVersion: ptp.openshift.io/v1
kind: PtpConfig
metadata:
  name: boundary
  namespace: openshift-ptp
  annotations: {}
spec:
  profile:
    - name: "boundary"
      ptp4lOpts: "-2"
      phc2sysOpts: "-a -r -n 24"
      ptpSchedulingPolicy: SCHED_FIFO
      ptpSchedulingPriority: 10
      ptpSettings:
        logReduce: "true"
      ptp4lConf: |
        # The interface name is hardware-specific
        [$iface_slave]
        masterOnly 0
        [$iface_master_1]
        masterOnly 1
        [$iface_master_2]
        masterOnly 1
        [$iface_master_3]
        masterOnly 1
        [global]
        #
        # Default Data Set
        #
        twoStepFlag 1
        slaveOnly 0
        priority1 128
        priority2 128
        domainNumber 24
        #utc_offset 37
        clockClass 248
        clockAccuracy 0xFE
        offsetScaledLogVariance 0xFFFF
        free_running 0
        freq_est_interval 1
        dscp_event 0
        dscp_general 0
        dataset_comparison G.8275.x
        G.8275.defaultDS.localPriority 128
        #
        # Port Data Set
        #
        logAnnounceInterval -3
        logSyncInterval -4
        logMinDelayReqInterval -4
        logMinPdelayReqInterval -4
        announceReceiptTimeout 3
        syncReceiptTimeout 0
        delayAsymmetry 0
        fault_reset_interval -4
        neighborPropDelayThresh 20000000
        masterOnly 0
        G.8275.portDS.localPriority 128
        #
        # Run time options
        #
        assume_two_step 0
        logging_level 6
        path_trace_enabled 0
        follow_up_info 0
        hybrid_e2e 0
        inhibit_multicast_service 0
        net_sync_monitor 0
        tc_spanning_tree 0
        tx_timestamp_timeout 50
        unicast_listen 0
        unicast_master_table 0
        unicast_req_duration 3600
        use_syslog 1
        verbose 0
        summary_interval 0
        kernel_leap 1
        check_fup_sync 0
        clock_class_threshold 135
        #
        # Servo Options
        #
        pi_proportional_const 0.0
        pi_integral_const 0.0
        pi_proportional_scale 0.0
        pi_proportional_exponent -0.3
        pi_proportional_norm_max 0.7
        pi_integral_scale 0.0
        pi_integral_exponent 0.4
        pi_integral_norm_max 0.3
        step_threshold 2.0
        first_step_threshold 0.00002
        max_frequency 900000000
        clock_servo pi
        sanity_freq_limit 200000000
        ntpshm_segment 0
        #
        # Transport options
        #
        transportSpecific 0x0
        ptp_dst_mac 01:1B:19:00:00:00
        p2p_dst_mac 01:80:C2:00:00:0E
        udp_ttl 1
        udp6_scope 0x0E
        uds_address /var/run/ptp4l
        #
        # Default interface options
        #
        clock_type BC
        network_transport L2
        delay_mechanism E2E
        time_stamping hardware
        tsproc_mode filter
        delay_filter moving_median
        delay_filter_length 10
        egressLatency 0
        ingressLatency 0
        boundary_clock_jbod 0
        #
        # Clock description
        #
        productDescription ;;
        revisionData ;;
        manufacturerIdentity 00:00:00
        userDescription ;
        timeSource 0xA0
  recommend:
    - profile: "boundary"
      priority: 4
      match:
        - nodeLabel: "node-role.kubernetes.io/$mcp"
Copy to Clipboard Toggle word wrap

Recommended PTP Westport Channel e810 grandmaster clock configuration (PtpConfigGmWpc.yaml)

# The grandmaster profile is provided for testing only
# It is not installed on production clusters
apiVersion: ptp.openshift.io/v1
kind: PtpConfig
metadata:
  name: grandmaster
  namespace: openshift-ptp
  annotations: {}
spec:
  profile:
    - name: "grandmaster"
      ptp4lOpts: "-2 --summary_interval -4"
      phc2sysOpts: -r -u 0 -m -w -N 8 -R 16 -s $iface_master -n 24
      ptpSchedulingPolicy: SCHED_FIFO
      ptpSchedulingPriority: 10
      ptpSettings:
        logReduce: "true"
      plugins:
        e810:
          enableDefaultConfig: false
          settings:
            LocalMaxHoldoverOffSet: 1500
            LocalHoldoverTimeout: 14400
            MaxInSpecOffset: 1500
          pins: $e810_pins
          #  "$iface_master":
          #    "U.FL2": "0 2"
          #    "U.FL1": "0 1"
          #    "SMA2": "0 2"
          #    "SMA1": "0 1"
          ublxCmds:
            - args: #ubxtool -P 29.20 -z CFG-HW-ANT_CFG_VOLTCTRL,1
                - "-P"
                - "29.20"
                - "-z"
                - "CFG-HW-ANT_CFG_VOLTCTRL,1"
              reportOutput: false
            - args: #ubxtool -P 29.20 -e GPS
                - "-P"
                - "29.20"
                - "-e"
                - "GPS"
              reportOutput: false
            - args: #ubxtool -P 29.20 -d Galileo
                - "-P"
                - "29.20"
                - "-d"
                - "Galileo"
              reportOutput: false
            - args: #ubxtool -P 29.20 -d GLONASS
                - "-P"
                - "29.20"
                - "-d"
                - "GLONASS"
              reportOutput: false
            - args: #ubxtool -P 29.20 -d BeiDou
                - "-P"
                - "29.20"
                - "-d"
                - "BeiDou"
              reportOutput: false
            - args: #ubxtool -P 29.20 -d SBAS
                - "-P"
                - "29.20"
                - "-d"
                - "SBAS"
              reportOutput: false
            - args: #ubxtool -P 29.20 -t -w 5 -v 1 -e SURVEYIN,600,50000
                - "-P"
                - "29.20"
                - "-t"
                - "-w"
                - "5"
                - "-v"
                - "1"
                - "-e"
                - "SURVEYIN,600,50000"
              reportOutput: true
            - args: #ubxtool -P 29.20 -p MON-HW
                - "-P"
                - "29.20"
                - "-p"
                - "MON-HW"
              reportOutput: true
            - args: #ubxtool -P 29.20 -p CFG-MSG,1,38,248
                - "-P"
                - "29.20"
                - "-p"
                - "CFG-MSG,1,38,248"
              reportOutput: true
      ts2phcOpts: " "
      ts2phcConf: |
        [nmea]
        ts2phc.master 1
        [global]
        use_syslog  0
        verbose 1
        logging_level 7
        ts2phc.pulsewidth 100000000
        #cat /dev/GNSS to find available serial port
        #example value of gnss_serialport is /dev/ttyGNSS_1700_0
        ts2phc.nmea_serialport $gnss_serialport
        leapfile  /usr/share/zoneinfo/leap-seconds.list
        [$iface_master]
        ts2phc.extts_polarity rising
        ts2phc.extts_correction 0
      ptp4lConf: |
        [$iface_master]
        masterOnly 1
        [$iface_master_1]
        masterOnly 1
        [$iface_master_2]
        masterOnly 1
        [$iface_master_3]
        masterOnly 1
        [global]
        #
        # Default Data Set
        #
        twoStepFlag 1
        priority1 128
        priority2 128
        domainNumber 24
        #utc_offset 37
        clockClass 6
        clockAccuracy 0x27
        offsetScaledLogVariance 0xFFFF
        free_running 0
        freq_est_interval 1
        dscp_event 0
        dscp_general 0
        dataset_comparison G.8275.x
        G.8275.defaultDS.localPriority 128
        #
        # Port Data Set
        #
        logAnnounceInterval -3
        logSyncInterval -4
        logMinDelayReqInterval -4
        logMinPdelayReqInterval 0
        announceReceiptTimeout 3
        syncReceiptTimeout 0
        delayAsymmetry 0
        fault_reset_interval -4
        neighborPropDelayThresh 20000000
        masterOnly 0
        G.8275.portDS.localPriority 128
        #
        # Run time options
        #
        assume_two_step 0
        logging_level 6
        path_trace_enabled 0
        follow_up_info 0
        hybrid_e2e 0
        inhibit_multicast_service 0
        net_sync_monitor 0
        tc_spanning_tree 0
        tx_timestamp_timeout 50
        unicast_listen 0
        unicast_master_table 0
        unicast_req_duration 3600
        use_syslog 1
        verbose 0
        summary_interval -4
        kernel_leap 1
        check_fup_sync 0
        clock_class_threshold 7
        #
        # Servo Options
        #
        pi_proportional_const 0.0
        pi_integral_const 0.0
        pi_proportional_scale 0.0
        pi_proportional_exponent -0.3
        pi_proportional_norm_max 0.7
        pi_integral_scale 0.0
        pi_integral_exponent 0.4
        pi_integral_norm_max 0.3
        step_threshold 2.0
        first_step_threshold 0.00002
        clock_servo pi
        sanity_freq_limit  200000000
        ntpshm_segment 0
        #
        # Transport options
        #
        transportSpecific 0x0
        ptp_dst_mac 01:1B:19:00:00:00
        p2p_dst_mac 01:80:C2:00:00:0E
        udp_ttl 1
        udp6_scope 0x0E
        uds_address /var/run/ptp4l
        #
        # Default interface options
        #
        clock_type BC
        network_transport L2
        delay_mechanism E2E
        time_stamping hardware
        tsproc_mode filter
        delay_filter moving_median
        delay_filter_length 10
        egressLatency 0
        ingressLatency 0
        boundary_clock_jbod 0
        #
        # Clock description
        #
        productDescription ;;
        revisionData ;;
        manufacturerIdentity 00:00:00
        userDescription ;
        timeSource 0x20
  recommend:
    - profile: "grandmaster"
      priority: 4
      match:
        - nodeLabel: "node-role.kubernetes.io/$mcp"
Copy to Clipboard Toggle word wrap

다음 선택적 PtpOperatorConfig CR은 노드에 대한 PTP 이벤트 보고를 구성합니다.

권장되는 PTP 이벤트 구성( PtpOperatorConfigForEvent.yaml )

apiVersion: ptp.openshift.io/v1
kind: PtpOperatorConfig
metadata:
  name: default
  namespace: openshift-ptp
  annotations: {}
spec:
  daemonNodeSelector:
    node-role.kubernetes.io/$mcp: ""
  ptpEventConfig:
    apiVersion: $event_api_version
    enableEventPublisher: true
    transportHost: "http://ptp-event-publisher-service-NODE_NAME.openshift-ptp.svc.cluster.local:9043"
Copy to Clipboard Toggle word wrap

6.8.7. 확장된 튜닝 프로필

DU 워크로드를 실행하는 단일 노드 OpenShift 클러스터에는 고성능 워크로드에 필요한 추가적인 성능 튜닝 구성이 필요합니다. 다음 예제 Tuned CR은 Tuned 프로필을 확장합니다.

권장되는 확장된 Tuned 프로필 구성( TunedPerformancePatch.yaml )

apiVersion: tuned.openshift.io/v1
kind: Tuned
metadata:
  name: performance-patch
  namespace: openshift-cluster-node-tuning-operator
  annotations: {}
spec:
  profile:
    - name: performance-patch
      # Please note:
      # - The 'include' line must match the associated PerformanceProfile name, following below pattern
      #   include=openshift-node-performance-${PerformanceProfile.metadata.name}
      # - When using the standard (non-realtime) kernel, remove the kernel.timer_migration override from
      #   the [sysctl] section and remove the entire section if it is empty.
      data: |
        [main]
        summary=Configuration changes profile inherited from performance created tuned
        include=openshift-node-performance-openshift-node-performance-profile
        [scheduler]
        group.ice-ptp=0:f:10:*:ice-ptp.*
        group.ice-gnss=0:f:10:*:ice-gnss.*
        group.ice-dplls=0:f:10:*:ice-dplls.*
        [service]
        service.stalld=start,enable
        service.chronyd=stop,disable
  recommend:
    - machineConfigLabels:
        machineconfiguration.openshift.io/role: "$mcp"
      priority: 19
      profile: performance-patch
Copy to Clipboard Toggle word wrap

Expand
표 6.4. 단일 노드 OpenShift 클러스터에 대한 조정된 CR 옵션
튜닝된 CR 필드설명

spec.profile.data

  • spec.profile.data 에 설정한 include 줄은 연관된 PerformanceProfile CR 이름과 일치해야 합니다. 예를 들어, include=openshift-node-performance-${PerformanceProfile.metadata.name} .

6.8.8. SR-IOV

단일 루트 I/O 가상화(SR-IOV)는 일반적으로 프런트홀 및 미드홀 네트워크를 활성화하는 데 사용됩니다. 다음 YAML 예제는 단일 노드 OpenShift 클러스터에 대한 SR-IOV를 구성합니다.

참고

SriovNetwork CR의 구성은 귀하의 특정 네트워크 및 인프라 요구 사항에 따라 달라집니다.

권장되는 SriovOperatorConfig CR 구성( SriovOperatorConfig.yaml )

apiVersion: sriovnetwork.openshift.io/v1
kind: SriovOperatorConfig
metadata:
  name: default
  namespace: openshift-sriov-network-operator
  annotations: {}
spec:
  configDaemonNodeSelector:
    "node-role.kubernetes.io/$mcp": ""
  # Injector and OperatorWebhook pods can be disabled (set to "false") below
  # to reduce the number of management pods. It is recommended to start with the
  # webhook and injector pods enabled, and only disable them after verifying the
  # correctness of user manifests.
  #   If the injector is disabled, containers using sr-iov resources must explicitly assign
  #   them in the  "requests"/"limits" section of the container spec, for example:
  #    containers:
  #    - name: my-sriov-workload-container
  #      resources:
  #        limits:
  #          openshift.io/<resource_name>:  "1"
  #        requests:
  #          openshift.io/<resource_name>:  "1"
  enableInjector: false
  enableOperatorWebhook: false
  logLevel: 0
Copy to Clipboard Toggle word wrap

Expand
표 6.5. 단일 노드 OpenShift 클러스터에 대한 SriovOperatorConfig CR 옵션
SriovOperatorConfig CR 필드설명

spec.enableInjector

Injector Pod를 비활성화하여 관리 Pod 수를 줄입니다. Injector Pod를 활성화한 상태에서 시작하고, 사용자 매니페스트를 확인한 후에만 Injector Pod를 비활성화합니다. 인젝터가 비활성화된 경우 SR-IOV 리소스를 사용하는 컨테이너는 컨테이너 사양의 요청제한 섹션에서 이를 명시적으로 할당해야 합니다.

예를 들면 다음과 같습니다.

containers:
- name: my-sriov-workload-container
  resources:
    limits:
      openshift.io/<resource_name>:  "1"
    requests:
      openshift.io/<resource_name>:  "1"
Copy to Clipboard Toggle word wrap

spec.enableOperatorWebhook

관리 포드의 수를 줄이려면 OperatorWebhook 포드를 비활성화합니다. OperatorWebhook 포드를 활성화한 상태에서 시작하고, 사용자 매니페스트를 확인한 후에만 이를 비활성화합니다.

권장되는 SriovNetwork 구성( SriovNetwork.yaml )

apiVersion: sriovnetwork.openshift.io/v1
kind: SriovNetwork
metadata:
  name: ""
  namespace: openshift-sriov-network-operator
  annotations: {}
spec:
  #  resourceName: ""
  networkNamespace: openshift-sriov-network-operator
#  vlan: ""
#  spoofChk: ""
#  ipam: ""
#  linkState: ""
#  maxTxRate: ""
#  minTxRate: ""
#  vlanQoS: ""
#  trust: ""
#  capabilities: ""
Copy to Clipboard Toggle word wrap

Expand
표 6.6. 단일 노드 OpenShift 클러스터를 위한 SriovNetwork CR 옵션
SriovNetwork CR 필드설명

spec.vlan

중간 네트워크의 VLAN으로 VLAN을 구성합니다.

권장되는 SriovNetworkNodePolicy CR 구성( SriovNetworkNodePolicy.yaml )

apiVersion: sriovnetwork.openshift.io/v1
kind: SriovNetworkNodePolicy
metadata:
  name: $name
  namespace: openshift-sriov-network-operator
  annotations: {}
spec:
  # The attributes for Mellanox/Intel based NICs as below.
  #     deviceType: netdevice/vfio-pci
  #     isRdma: true/false
  deviceType: $deviceType
  isRdma: $isRdma
  nicSelector:
    # The exact physical function name must match the hardware used
    pfNames: [$pfNames]
  nodeSelector:
    node-role.kubernetes.io/$mcp: ""
  numVfs: $numVfs
  priority: $priority
  resourceName: $resourceName
Copy to Clipboard Toggle word wrap

Expand
표 6.7. 단일 노드 OpenShift 클러스터에 대한 SriovNetworkPolicy CR 옵션
SriovNetworkNodePolicy CR field설명

spec.deviceType

deviceType을 vfio-pci 또는 netdevice 로 구성합니다. Mellanox NIC의 경우 deviceType: netdeviceisRdma: true로 설정합니다. Intel 기반 NIC의 경우 deviceType: vfio-pciisRdma: false를 설정합니다.

spec.nicSelector.pfNames

프런트홀 네트워크에 연결된 인터페이스를 지정합니다.

spec.numVfs

프런트홀 네트워크의 VF 수를 지정합니다.

spec.nicSelector.pfNames

물리적 기능의 정확한 이름은 하드웨어와 일치해야 합니다.

권장되는 SR-IOV 커널 구성( 07-sriov-related-kernel-args-master.yaml )

# Automatically generated by extra-manifests-builder
# Do not make changes directly.
apiVersion: machineconfiguration.openshift.io/v1
kind: MachineConfig
metadata:
  labels:
    machineconfiguration.openshift.io/role: master
  name: 07-sriov-related-kernel-args-master
spec:
  config:
    ignition:
      version: 3.2.0
  kernelArguments:
    - intel_iommu=on
    - iommu=pt
Copy to Clipboard Toggle word wrap

6.8.9. Console Operator

클러스터 기능 기능을 사용하여 Console Operator가 설치되는 것을 방지하세요. 노드가 중앙에서 관리되는 경우에는 필요하지 않습니다. Operator를 제거하면 애플리케이션 워크로드에 필요한 공간과 용량이 추가로 제공됩니다.

관리형 클러스터를 설치하는 동안 콘솔 운영자를 비활성화하려면 SiteConfig 사용자 정의 리소스(CR)의 spec.clusters.0.installConfigOverrides 필드에 다음을 설정합니다.

installConfigOverrides:  "{\"capabilities\":{\"baselineCapabilitySet\": \"None\" }}"
Copy to Clipboard Toggle word wrap

6.8.10. Alertmanager

DU 워크로드를 실행하는 단일 노드 OpenShift 클러스터는 OpenShift Container Platform 모니터링 구성 요소에서 소모하는 CPU 리소스를 줄여줍니다. 다음 ConfigMap 사용자 정의 리소스(CR)는 Alertmanager를 비활성화합니다.

권장되는 클러스터 모니터링 구성( ReduceMonitoringFootprint.yaml )

apiVersion: v1
kind: ConfigMap
metadata:
  name: cluster-monitoring-config
  namespace: openshift-monitoring
  annotations: {}
data:
  config.yaml: |
    alertmanagerMain:
      enabled: false
    telemeterClient:
      enabled: false
    prometheusK8s:
       retention: 24h
Copy to Clipboard Toggle word wrap

6.8.11. Operator Lifecycle Manager

분산된 단위 작업 부하를 실행하는 단일 노드 OpenShift 클러스터에는 CPU 리소스에 대한 일관된 액세스가 필요합니다. 운영자 수명 주기 관리자(OLM)는 정기적으로 운영자로부터 성능 데이터를 수집하여 CPU 사용률을 증가시킵니다. 다음 ConfigMap 사용자 정의 리소스(CR)는 OLM이 운영자 성과 데이터를 수집하는 것을 비활성화합니다.

권장되는 클러스터 OLM 구성( ReduceOLMFootprint.yaml )

apiVersion: v1
kind: ConfigMap
metadata:
  name: collect-profiles-config
  namespace: openshift-operator-lifecycle-manager
data:
  pprof-config.yaml: |
    disabled: True
Copy to Clipboard Toggle word wrap

6.8.12. LVM 스토리지

LVM(Logical Volume Manager) 스토리지를 사용하면 단일 노드 OpenShift 클러스터에서 로컬 스토리지를 동적으로 프로비저닝할 수 있습니다.

참고

단일 노드 OpenShift에 권장되는 스토리지 솔루션은 Local Storage Operator입니다. 혹은 LVM 스토리지를 사용할 수도 있지만, 이를 위해서는 추가 CPU 리소스를 할당해야 합니다.

다음 YAML 예제는 OpenShift Container Platform 애플리케이션에서 노드의 저장소를 사용할 수 있도록 구성합니다.

권장되는 LVMCluster 구성( StorageLVMCluster.yaml )

apiVersion: lvm.topolvm.io/v1alpha1
kind: LVMCluster
metadata:
  name: lvmcluster
  namespace: openshift-storage
  annotations: {}
spec: {}
#example: creating a vg1 volume group leveraging all available disks on the node
#         except the installation disk.
#  storage:
#    deviceClasses:
#    - name: vg1
#      thinPoolConfig:
#        name: thin-pool-1
#        sizePercent: 90
#        overprovisionRatio: 10
Copy to Clipboard Toggle word wrap

Expand
표 6.8. 단일 노드 OpenShift 클러스터에 대한 LVMCluster CR 옵션
LVMCluster CR 필드설명

deviceSelector.paths

LVM 스토리지에 사용되는 디스크를 구성합니다. 디스크를 지정하지 않으면 LVM 스토리지는 지정된 씬 풀에서 사용되지 않은 모든 디스크를 사용합니다.

6.8.13. 네트워크 진단

DU 워크로드를 실행하는 단일 노드 OpenShift 클러스터는 이러한 포드에서 생성되는 추가 부하를 줄이기 위해 포드 간 네트워크 연결 검사가 덜 필요합니다. 다음 사용자 정의 리소스(CR)는 이러한 검사를 비활성화합니다.

권장되는 네트워크 진단 구성( DisableSnoNetworkDiag.yaml )

apiVersion: operator.openshift.io/v1
kind: Network
metadata:
  name: cluster
  annotations: {}
spec:
  disableNetworkDiagnostics: true
Copy to Clipboard Toggle word wrap

vDU(가상 분산 장치) 애플리케이션을 배포하려면 먼저 클러스터 호스트 펌웨어와 다양한 기타 클러스터 구성 설정을 조정하고 구성해야 합니다. 다음 정보를 사용하여 vDU 워크로드를 지원하는 클러스터 구성을 검증하세요.

7.1. vDU 클러스터 호스트에 권장되는 펌웨어 구성

다음 표를 기준으로 OpenShift Container Platform 4.19에서 실행되는 vDU 애플리케이션에 대한 클러스터 호스트 펌웨어를 구성하세요.

참고

다음 표는 vDU 클러스터 호스트 펌웨어 구성에 대한 일반적인 권장 사항입니다. 정확한 펌웨어 설정은 요구 사항과 특정 하드웨어 플랫폼에 따라 달라집니다. 펌웨어의 자동 설정은 제로 터치 프로비저닝 파이프라인에서 처리되지 않습니다.

Expand
표 7.1. 권장되는 클러스터 호스트 펌웨어 설정
펌웨어 설정설정설명

하이퍼트랜스포트(HT)

활성화됨

HyperTransport (HT) 버스는 AMD가 개발한 버스 기술입니다. HT는 호스트 메모리의 구성 요소와 다른 시스템 주변 장치 간의 고속 링크를 제공합니다.

UEFI

활성화됨

vDU 호스트에 대해 UEFI에서 부팅을 활성화합니다.

CPU 전력 및 성능 정책

성능

에너지 효율성보다 성능을 위해 시스템을 최적화하려면 CPU 전원 및 성능 정책을 설정하세요.

언코어 주파수 스케일링

비활성화됨

CPU의 비핵심 부분의 전압과 주파수가 독립적으로 설정되는 것을 방지하려면 Uncore Frequency Scaling을 비활성화합니다.

언코어 주파수

최대

캐시 및 메모리 컨트롤러와 같은 CPU의 비핵심 부분을 최대 작동 주파수로 설정합니다.

성능 P-한계

비활성화됨

프로세서의 Uncore 주파수 조정을 방지하려면 성능 P-한도를 비활성화합니다.

Enhanced Intel® SpeedStep Tech

활성화됨

향상된 Intel SpeedStep을 활성화하면 시스템이 프로세서 전압과 코어 주파수를 동적으로 조정하여 호스트의 전력 소비와 발열을 줄일 수 있습니다.

Intel® Turbo Boost Technology

활성화됨

Intel 기반 CPU에 Turbo Boost 기술을 활성화하면 프로세서 코어가 전력, 전류 및 온도 사양 한도 미만에서 작동하는 경우 정격 작동 주파수보다 더 빠르게 실행될 수 있습니다.

인텔 구성 가능 TDP

활성화됨

CPU의 TDP(열 설계 전력)를 활성화합니다.

구성 가능한 TDP 레벨

수준 2

TDP 수준은 특정 성능 등급에 필요한 CPU 전력 소비를 설정합니다. TDP 레벨 2는 전력 소비를 희생하여 CPU를 가장 안정적인 성능 수준으로 설정합니다.

에너지 효율적인 터보

비활성화됨

에너지 효율 터보를 비활성화하면 프로세서가 에너지 효율 기반 정책을 사용하지 못하게 됩니다.

하드웨어 P-상태

활성화 또는 비활성화

OS 제어 P-States를 활성화하여 절전 구성을 허용합니다. 전력 소비보다 성능을 위해 운영 체제와 CPU를 최적화하려면 P-상태 (성능 상태)를 비활성화합니다.

패키지 C-State

C0/C1 상태

C0 또는 C1 상태를 사용하여 프로세서를 완전 활성 상태(C0)로 설정하거나 소프트웨어에서 실행되는 CPU 내부 클록을 중지합니다(C1).

C1E

비활성화됨

CPU Enhanced Halt(C1E)는 Intel 칩의 전력 절감 기능입니다. C1E를 비활성화하면 운영 체제가 비활성 상태일 때 CPU에 중지 명령을 보내는 것을 방지합니다.

프로세서 C6

비활성화됨

C6 절전 기능은 유휴 상태인 CPU 코어와 캐시를 자동으로 비활성화하는 CPU 기능입니다. C6를 비활성화하면 시스템 성능이 향상됩니다.

하위 NUMA 클러스터링

비활성화됨

하위 NUMA 클러스터링은 프로세서 코어, 캐시, 메모리를 여러 개의 NUMA 도메인으로 나눕니다. 이 옵션을 비활성화하면 대기 시간에 민감한 워크로드의 성능이 향상될 수 있습니다.

참고

호스트의 펌웨어에서 글로벌 SR-IOV 및 VT-d 설정을 활성화합니다. 이러한 설정은 베어메탈 환경과 관련이 있습니다.

참고

C-상태 와 OS 제어 P-상태를 모두 활성화하여 포드별 전원 관리를 허용합니다.

7.2. vDU 애플리케이션을 실행하기 위한 권장 클러스터 구성

가상화된 분산 장치(vDU) 애플리케이션을 실행하는 클러스터에는 높은 수준으로 조정되고 최적화된 구성이 필요합니다. 다음 정보는 OpenShift Container Platform 4.19 클러스터에서 vDU 워크로드를 지원하는 데 필요한 다양한 요소를 설명합니다.

7.2.4. 실시간 커널 버전 확인

OpenShift Container Platform 클러스터에서는 항상 최신 버전의 실시간 커널을 사용하세요. 클러스터에서 사용 중인 커널 버전이 확실하지 않은 경우 다음 절차에 따라 현재 실시간 커널 버전을 릴리스 버전과 비교할 수 있습니다.

사전 요구 사항

  • OpenShift CLI(oc)가 설치되어 있습니다.
  • 클러스터 관리자 권한이 있는 사용자로 로그인했습니다.
  • podman 을 설치했습니다.

프로세스

  1. 클러스터 버전을 얻으려면 다음 명령을 실행하세요.

    $ OCP_VERSION=$(oc get clusterversion version -o jsonpath='{.status.desired.version}{"\n"}')
    Copy to Clipboard Toggle word wrap
  2. 릴리스 이미지 SHA 번호를 받으세요:

    $ DTK_IMAGE=$(oc adm release info --image-for=driver-toolkit quay.io/openshift-release-dev/ocp-release:$OCP_VERSION-x86_64)
    Copy to Clipboard Toggle word wrap
  3. 릴리스 이미지 컨테이너를 실행하고 클러스터의 현재 릴리스와 함께 패키징된 커널 버전을 추출합니다.

    $ podman run --rm $DTK_IMAGE rpm -qa | grep 'kernel-rt-core-' | sed 's#kernel-rt-core-##'
    Copy to Clipboard Toggle word wrap

    출력 예

    4.18.0-305.49.1.rt7.121.el8_4.x86_64
    Copy to Clipboard Toggle word wrap

    이는 릴리스와 함께 제공되는 기본 실시간 커널 버전입니다.

    참고

    실시간 커널은 커널 버전에서 문자열 .rt 로 표시됩니다.

검증

클러스터의 현재 릴리스에 나열된 커널 버전이 클러스터에서 실행 중인 실제 실시간 커널과 일치하는지 확인하세요. 다음 명령을 실행하여 실행 중인 실시간 커널 버전을 확인하세요.

  1. 클러스터 노드에 대한 원격 쉘 연결을 엽니다.

    $ oc debug node/<node_name>
    Copy to Clipboard Toggle word wrap
  2. 실시간 커널 버전을 확인하세요.

    sh-4.4# uname -r
    Copy to Clipboard Toggle word wrap

    출력 예

    4.18.0-305.49.1.rt7.121.el8_4.x86_64
    Copy to Clipboard Toggle word wrap

7.3. 권장되는 클러스터 구성이 적용되었는지 확인

클러스터가 올바른 구성으로 실행되고 있는지 확인할 수 있습니다. 다음 절차에서는 OpenShift Container Platform 4.19 클러스터에 DU 애플리케이션을 배포하는 데 필요한 다양한 구성을 확인하는 방법을 설명합니다.

사전 요구 사항

  • 클러스터를 배포하고 vDU 워크로드에 맞게 조정했습니다.
  • OpenShift CLI(oc)가 설치되어 있습니다.
  • 클러스터 관리자 권한이 있는 사용자로 로그인했습니다.

프로세스

  1. 기본 OperatorHub 소스가 비활성화되어 있는지 확인합니다. 다음 명령을 실행합니다.

    $ oc get operatorhub cluster -o yaml
    Copy to Clipboard Toggle word wrap

    출력 예

    spec:
        disableAllDefaultSources: true
    Copy to Clipboard Toggle word wrap

  2. 다음 명령을 실행하여 모든 필수 CatalogSource 리소스가 작업 분할( PreferredDuringScheduling )에 대해 주석이 달려 있는지 확인하세요.

    $ oc get catalogsource -A -o jsonpath='{range .items[*]}{.metadata.name}{" -- "}{.metadata.annotations.target\.workload\.openshift\.io/management}{"\n"}{end}'
    Copy to Clipboard Toggle word wrap

    출력 예

    certified-operators -- {"effect": "PreferredDuringScheduling"}
    community-operators -- {"effect": "PreferredDuringScheduling"}
    ran-operators 
    1
    
    redhat-marketplace -- {"effect": "PreferredDuringScheduling"}
    redhat-operators -- {"effect": "PreferredDuringScheduling"}
    Copy to Clipboard Toggle word wrap

    1
    주석이 달리지 않은 CatalogSource 리소스도 반환됩니다. 이 예에서 ran-operators CatalogSource 리소스는 주석이 달려 있지 않으며 PreferredDuringScheduling 주석이 없습니다.
    참고

    적절하게 구성된 vDU 클러스터에서는 주석이 달린 카탈로그 소스가 하나만 나열됩니다.

  3. 모든 해당 OpenShift Container Platform Operator 네임스페이스에 워크로드 분할에 대한 주석이 달려 있는지 확인하세요. 여기에는 핵심 OpenShift Container Platform과 함께 설치된 모든 Operator와 참조 DU 튜닝 구성에 포함된 추가 Operator 세트가 포함됩니다. 다음 명령을 실행합니다.

    $ oc get namespaces -A -o jsonpath='{range .items[*]}{.metadata.name}{" -- "}{.metadata.annotations.workload\.openshift\.io/allowed}{"\n"}{end}'
    Copy to Clipboard Toggle word wrap

    출력 예

    default --
    openshift-apiserver -- management
    openshift-apiserver-operator -- management
    openshift-authentication -- management
    openshift-authentication-operator -- management
    Copy to Clipboard Toggle word wrap

    중요

    추가 연산자는 워크로드 분할에 주석을 달면 안 됩니다. 이전 명령의 출력에서 추가 연산자는 -- 구분 기호의 오른쪽에 값 없이 나열되어야 합니다.

  4. ClusterLogging 구성이 올바른지 확인하세요. 다음 명령을 실행하세요.

    1. 적절한 입력 및 출력 로그가 구성되었는지 확인합니다.

      $ oc get -n openshift-logging ClusterLogForwarder instance -o yaml
      Copy to Clipboard Toggle word wrap

      출력 예

      apiVersion: logging.openshift.io/v1
      kind: ClusterLogForwarder
      metadata:
        creationTimestamp: "2022-07-19T21:51:41Z"
        generation: 1
        name: instance
        namespace: openshift-logging
        resourceVersion: "1030342"
        uid: 8c1a842d-80c5-447a-9150-40350bdf40f0
      spec:
        inputs:
        - infrastructure: {}
          name: infra-logs
        outputs:
        - name: kafka-open
          type: kafka
          url: tcp://10.46.55.190:9092/test
        pipelines:
        - inputRefs:
          - audit
          name: audit-logs
          outputRefs:
          - kafka-open
        - inputRefs:
          - infrastructure
          name: infrastructure-logs
          outputRefs:
          - kafka-open
      ...
      Copy to Clipboard Toggle word wrap

    2. 큐레이션 일정이 귀하의 애플리케이션에 적합한지 확인하세요.

      $ oc get -n openshift-logging clusterloggings.logging.openshift.io instance -o yaml
      Copy to Clipboard Toggle word wrap

      출력 예

      apiVersion: logging.openshift.io/v1
      kind: ClusterLogging
      metadata:
        creationTimestamp: "2022-07-07T18:22:56Z"
        generation: 1
        name: instance
        namespace: openshift-logging
        resourceVersion: "235796"
        uid: ef67b9b8-0e65-4a10-88ff-ec06922ea796
      spec:
        collection:
          logs:
            fluentd: {}
            type: fluentd
        curation:
          curator:
            schedule: 30 3 * * *
          type: curator
        managementState: Managed
      ...
      Copy to Clipboard Toggle word wrap

  5. 다음 명령을 실행하여 웹 콘솔이 비활성화되었는지( managementState: Removed ) 확인하세요.

    $ oc get consoles.operator.openshift.io cluster -o jsonpath="{ .spec.managementState }"
    Copy to Clipboard Toggle word wrap

    출력 예

    Removed
    Copy to Clipboard Toggle word wrap

  6. 다음 명령을 실행하여 클러스터 노드에서 chronyd가 비활성화되었는지 확인하세요.

    $ oc debug node/<node_name>
    Copy to Clipboard Toggle word wrap

    노드에서 chronyd 상태를 확인하세요.

    sh-4.4# chroot /host
    Copy to Clipboard Toggle word wrap
    sh-4.4# systemctl status chronyd
    Copy to Clipboard Toggle word wrap

    출력 예

    ● chronyd.service - NTP client/server
        Loaded: loaded (/usr/lib/systemd/system/chronyd.service; disabled; vendor preset: enabled)
        Active: inactive (dead)
          Docs: man:chronyd(8)
                man:chrony.conf(5)
    Copy to Clipboard Toggle word wrap

  7. linuxptp-daemon 컨테이너와 PTP 관리 클라이언트( pmc ) 도구에 대한 원격 셸 연결을 사용하여 PTP 인터페이스가 기본 시계와 성공적으로 동기화되었는지 확인하세요.

    1. 다음 명령을 실행하여 $PTP_POD_NAME 변수를 linuxptp-daemon pod의 이름으로 설정합니다.

      $ PTP_POD_NAME=$(oc get pods -n openshift-ptp -l app=linuxptp-daemon -o name)
      Copy to Clipboard Toggle word wrap
    2. 다음 명령을 실행하여 PTP 장치의 동기화 상태를 확인하세요.

      $ oc -n openshift-ptp rsh -c linuxptp-daemon-container ${PTP_POD_NAME} pmc -u -f /var/run/ptp4l.0.config -b 0 'GET PORT_DATA_SET'
      Copy to Clipboard Toggle word wrap

      출력 예

      sending: GET PORT_DATA_SET
        3cecef.fffe.7a7020-1 seq 0 RESPONSE MANAGEMENT PORT_DATA_SET
          portIdentity            3cecef.fffe.7a7020-1
          portState               SLAVE
          logMinDelayReqInterval  -4
          peerMeanPathDelay       0
          logAnnounceInterval     1
          announceReceiptTimeout  3
          logSyncInterval         0
          delayMechanism          1
          logMinPdelayReqInterval 0
          versionNumber           2
        3cecef.fffe.7a7020-2 seq 0 RESPONSE MANAGEMENT PORT_DATA_SET
          portIdentity            3cecef.fffe.7a7020-2
          portState               LISTENING
          logMinDelayReqInterval  0
          peerMeanPathDelay       0
          logAnnounceInterval     1
          announceReceiptTimeout  3
          logSyncInterval         0
          delayMechanism          1
          logMinPdelayReqInterval 0
          versionNumber           2
      Copy to Clipboard Toggle word wrap

    3. 다음 pmc 명령을 실행하여 PTP 시계 상태를 확인하세요.

      $ oc -n openshift-ptp rsh -c linuxptp-daemon-container ${PTP_POD_NAME} pmc -u -f /var/run/ptp4l.0.config -b 0 'GET TIME_STATUS_NP'
      Copy to Clipboard Toggle word wrap

      출력 예

      sending: GET TIME_STATUS_NP
        3cecef.fffe.7a7020-0 seq 0 RESPONSE MANAGEMENT TIME_STATUS_NP
          master_offset              10 
      1
      
          ingress_time               1657275432697400530
          cumulativeScaledRateOffset +0.000000000
          scaledLastGmPhaseChange    0
          gmTimeBaseIndicator        0
          lastGmPhaseChange          0x0000'0000000000000000.0000
          gmPresent                  true 
      2
      
          gmIdentity                 3c2c30.ffff.670e00
      Copy to Clipboard Toggle word wrap

      1
      master_offset은 -100~100ns 사이여야 합니다.
      2
      PTP 클록이 마스터에 동기화되어 있고, 로컬 클록이 그랜드마스터 클록이 아님을 나타냅니다.
    4. /var/run/ptp4l.0.config 에 있는 값에 해당하는 예상 마스터 오프셋 값이 linuxptp-daemon-container 로그에서 발견되는지 확인하세요.

      $ oc logs $PTP_POD_NAME -n openshift-ptp -c linuxptp-daemon-container
      Copy to Clipboard Toggle word wrap

      출력 예

      phc2sys[56020.341]: [ptp4l.1.config] CLOCK_REALTIME phc offset  -1731092 s2 freq -1546242 delay    497
      ptp4l[56020.390]: [ptp4l.1.config] master offset         -2 s2 freq   -5863 path delay       541
      ptp4l[56020.390]: [ptp4l.0.config] master offset         -8 s2 freq  -10699 path delay       533
      Copy to Clipboard Toggle word wrap

  8. 다음 명령을 실행하여 SR-IOV 구성이 올바른지 확인하세요.

    1. SriovOperatorConfig 리소스의 disableDrain 값이 true 로 설정되어 있는지 확인하세요.

      $ oc get sriovoperatorconfig -n openshift-sriov-network-operator default -o jsonpath="{.spec.disableDrain}{'\n'}"
      Copy to Clipboard Toggle word wrap

      출력 예

      true
      Copy to Clipboard Toggle word wrap

    2. 다음 명령을 실행하여 SriovNetworkNodeState 동기화 상태가 Succeeded 인지 확인하세요.

      $ oc get SriovNetworkNodeStates -n openshift-sriov-network-operator -o jsonpath="{.items[*].status.syncStatus}{'\n'}"
      Copy to Clipboard Toggle word wrap

      출력 예

      Succeeded
      Copy to Clipboard Toggle word wrap

    3. SR-IOV에 대해 구성된 각 인터페이스 아래의 가상 기능( Vfs )의 예상 수와 구성이 .status.interfaces 필드에 있고 올바른지 확인합니다. 예를 들면 다음과 같습니다.

      $ oc get SriovNetworkNodeStates -n openshift-sriov-network-operator -o yaml
      Copy to Clipboard Toggle word wrap

      출력 예

      apiVersion: v1
      items:
      - apiVersion: sriovnetwork.openshift.io/v1
        kind: SriovNetworkNodeState
      ...
        status:
          interfaces:
          ...
          - Vfs:
            - deviceID: 154c
              driver: vfio-pci
              pciAddress: 0000:3b:0a.0
              vendor: "8086"
              vfID: 0
            - deviceID: 154c
              driver: vfio-pci
              pciAddress: 0000:3b:0a.1
              vendor: "8086"
              vfID: 1
            - deviceID: 154c
              driver: vfio-pci
              pciAddress: 0000:3b:0a.2
              vendor: "8086"
              vfID: 2
            - deviceID: 154c
              driver: vfio-pci
              pciAddress: 0000:3b:0a.3
              vendor: "8086"
              vfID: 3
            - deviceID: 154c
              driver: vfio-pci
              pciAddress: 0000:3b:0a.4
              vendor: "8086"
              vfID: 4
            - deviceID: 154c
              driver: vfio-pci
              pciAddress: 0000:3b:0a.5
              vendor: "8086"
              vfID: 5
            - deviceID: 154c
              driver: vfio-pci
              pciAddress: 0000:3b:0a.6
              vendor: "8086"
              vfID: 6
            - deviceID: 154c
              driver: vfio-pci
              pciAddress: 0000:3b:0a.7
              vendor: "8086"
              vfID: 7
      Copy to Clipboard Toggle word wrap

  9. 클러스터 성능 프로필이 올바른지 확인하세요. CPUHugePages 섹션은 하드웨어 구성에 따라 달라집니다. 다음 명령을 실행합니다.

    $ oc get PerformanceProfile openshift-node-performance-profile -o yaml
    Copy to Clipboard Toggle word wrap

    출력 예

    apiVersion: performance.openshift.io/v2
    kind: PerformanceProfile
    metadata:
      creationTimestamp: "2022-07-19T21:51:31Z"
      finalizers:
      - foreground-deletion
      generation: 1
      name: openshift-node-performance-profile
      resourceVersion: "33558"
      uid: 217958c0-9122-4c62-9d4d-fdc27c31118c
    spec:
      additionalKernelArgs:
      - idle=poll
      - rcupdate.rcu_normal_after_boot=0
      - efi=runtime
      cpu:
        isolated: 2-51,54-103
        reserved: 0-1,52-53
      hugepages:
        defaultHugepagesSize: 1G
        pages:
        - count: 32
          size: 1G
      machineConfigPoolSelector:
        pools.operator.machineconfiguration.openshift.io/master: ""
      net:
        userLevelNetworking: true
      nodeSelector:
        node-role.kubernetes.io/master: ""
      numa:
        topologyPolicy: restricted
      realTimeKernel:
        enabled: true
    status:
      conditions:
      - lastHeartbeatTime: "2022-07-19T21:51:31Z"
        lastTransitionTime: "2022-07-19T21:51:31Z"
        status: "True"
        type: Available
      - lastHeartbeatTime: "2022-07-19T21:51:31Z"
        lastTransitionTime: "2022-07-19T21:51:31Z"
        status: "True"
        type: Upgradeable
      - lastHeartbeatTime: "2022-07-19T21:51:31Z"
        lastTransitionTime: "2022-07-19T21:51:31Z"
        status: "False"
        type: Progressing
      - lastHeartbeatTime: "2022-07-19T21:51:31Z"
        lastTransitionTime: "2022-07-19T21:51:31Z"
        status: "False"
        type: Degraded
      runtimeClass: performance-openshift-node-performance-profile
      tuned: openshift-cluster-node-tuning-operator/openshift-node-performance-openshift-node-performance-profile
    Copy to Clipboard Toggle word wrap

    참고

    CPU 설정은 서버에서 사용 가능한 코어 수에 따라 달라지며 작업 분할 설정과 일치해야 합니다. hugepages 구성은 서버와 애플리케이션에 따라 다릅니다.

  10. 다음 명령을 실행하여 PerformanceProfile 이 클러스터에 성공적으로 적용되었는지 확인합니다.

    $ oc get performanceprofile openshift-node-performance-profile -o jsonpath="{range .status.conditions[*]}{ @.type }{' -- '}{@.status}{'\n'}{end}"
    Copy to Clipboard Toggle word wrap

    출력 예

    Available -- True
    Upgradeable -- True
    Progressing -- False
    Degraded -- False
    Copy to Clipboard Toggle word wrap

  11. 다음 명령을 실행하여 Tuned 성능 패치 설정을 확인하세요.

    $ oc get tuneds.tuned.openshift.io -n openshift-cluster-node-tuning-operator performance-patch -o yaml
    Copy to Clipboard Toggle word wrap

    출력 예

    apiVersion: tuned.openshift.io/v1
    kind: Tuned
    metadata:
      creationTimestamp: "2022-07-18T10:33:52Z"
      generation: 1
      name: performance-patch
      namespace: openshift-cluster-node-tuning-operator
      resourceVersion: "34024"
      uid: f9799811-f744-4179-bf00-32d4436c08fd
    spec:
      profile:
      - data: |
          [main]
          summary=Configuration changes profile inherited from performance created tuned
          include=openshift-node-performance-openshift-node-performance-profile
          [bootloader]
          cmdline_crash=nohz_full=2-23,26-47 
    1
    
          [sysctl]
          kernel.timer_migration=1
          [scheduler]
          group.ice-ptp=0:f:10:*:ice-ptp.*
          [service]
          service.stalld=start,enable
          service.chronyd=stop,disable
        name: performance-patch
      recommend:
      - machineConfigLabels:
          machineconfiguration.openshift.io/role: master
        priority: 19
        profile: performance-patch
    Copy to Clipboard Toggle word wrap

    1
    cmdline=nohz_full= 의 CPU 목록은 하드웨어 구성에 따라 달라집니다.
  12. 다음 명령을 실행하여 클러스터 네트워킹 진단이 비활성화되었는지 확인하세요.

    $ oc get networks.operator.openshift.io cluster -o jsonpath='{.spec.disableNetworkDiagnostics}'
    Copy to Clipboard Toggle word wrap

    출력 예

    true
    Copy to Clipboard Toggle word wrap

  13. Kubelet 하우스키핑 간격이 더 느린 속도로 조정되었는지 확인하세요. 이는 containerMountNS 머신 구성에서 설정됩니다. 다음 명령을 실행합니다.

    $ oc describe machineconfig container-mount-namespace-and-kubelet-conf-master | grep OPENSHIFT_MAX_HOUSEKEEPING_INTERVAL_DURATION
    Copy to Clipboard Toggle word wrap

    출력 예

    Environment="OPENSHIFT_MAX_HOUSEKEEPING_INTERVAL_DURATION=60s"
    Copy to Clipboard Toggle word wrap

  14. 다음 명령을 실행하여 Grafana와 alertManagerMain 이 비활성화되어 있고 Prometheus 보존 기간이 24시간으로 설정되어 있는지 확인하세요.

    $ oc get configmap cluster-monitoring-config -n openshift-monitoring -o jsonpath="{ .data.config\.yaml }"
    Copy to Clipboard Toggle word wrap

    출력 예

    grafana:
      enabled: false
    alertmanagerMain:
      enabled: false
    prometheusK8s:
       retention: 24h
    Copy to Clipboard Toggle word wrap

    1. 다음 명령을 사용하여 Grafana 및 alertManagerMain 경로가 클러스터에서 발견되지 않는지 확인하세요.

      $ oc get route -n openshift-monitoring alertmanager-main
      Copy to Clipboard Toggle word wrap
      $ oc get route -n openshift-monitoring grafana
      Copy to Clipboard Toggle word wrap

      두 쿼리 모두 서버 오류(NotFound) 메시지를 반환해야 합니다.

  15. 다음 명령을 실행하여 PerformanceProfile , Tuned performance-patch, 워크로드 분할 및 커널 명령줄 인수 각각에 대해 최소 4개의 CPU가 예약 되어 있는지 확인하세요.

    $ oc get performanceprofile -o jsonpath="{ .items[0].spec.cpu.reserved }"
    Copy to Clipboard Toggle word wrap

    출력 예

    0-3
    Copy to Clipboard Toggle word wrap

    참고

    작업 부하 요구 사항에 따라 추가로 예약된 CPU를 할당해야 할 수도 있습니다.

8장. SiteConfig 리소스를 사용한 고급 관리형 클러스터 구성

SiteConfig 사용자 정의 리소스(CR)를 사용하면 설치 시 관리되는 클러스터에 사용자 정의 기능과 구성을 배포할 수 있습니다.

중요

SiteConfig v1은 OpenShift Container Platform 버전 4.18부터 더 이상 사용되지 않습니다. 이제 ClusterInstance 사용자 정의 리소스를 사용하여 SiteConfig Operator를 통해 동등하고 향상된 기능을 사용할 수 있습니다. 자세한 내용은 SiteConfig CR에서 ClusterInstance API로 전환하는 절차를 참조하세요.

SiteConfig Operator에 대한 자세한 내용은 SiteConfig를 참조하십시오.

8.1. GitOps ZTP 파이프라인에서 추가 설치 매니페스트 사용자 지정

GitOps Zero Touch Provisioning(ZTP) 파이프라인의 설치 단계에 포함할 추가 매니페스트 세트를 정의할 수 있습니다. 이러한 매니페스트는 SiteConfig 사용자 정의 리소스(CR)에 연결되며 설치 중에 클러스터에 적용됩니다. 설치 시점에 MachineConfig CR을 포함하면 설치 프로세스의 효율성이 높아집니다.

사전 요구 사항

  • 사용자 정의 사이트 구성 데이터를 관리하는 Git 저장소를 만듭니다. 저장소는 허브 클러스터에서 접근할 수 있어야 하며 Argo CD 애플리케이션의 소스 저장소로 정의되어야 합니다.

프로세스

  1. GitOps ZTP 파이프라인이 클러스터 설치를 사용자 지정하는 데 사용하는 추가 매니페스트 CR 세트를 만듭니다.
  2. 사용자 정의 /siteconfig 디렉토리에 추가 매니페스트를 위한 하위 디렉토리 /custom-manifest를 만듭니다. 다음 예에서는 /custom-manifest 폴더가 있는 샘플 /siteconfig를 보여줍니다.

    siteconfig
    ├── site1-sno-du.yaml
    ├── site2-standard-du.yaml
    ├── extra-manifest/
    └── custom-manifest
        └── 01-example-machine-config.yaml
    Copy to Clipboard Toggle word wrap
    참고

    이 문서 전반에 사용된 하위 디렉토리 이름 /custom-manifest/extra-manifest는 단지 예시 이름입니다. 이러한 이름을 사용해야 하는 요구 사항은 없으며 하위 디렉토리의 이름을 지정하는 방법에 대한 제한도 없습니다. 이 예에서 /extra-manifest는 ztp-site-generate 컨테이너의 /extra-manifest 내용을 저장하는 Git 하위 디렉터리를 참조합니다.

  3. 사용자 지정 추가 매니페스트 CR을 siteconfig/custom-manifest 디렉토리에 추가합니다.
  4. SiteConfig CR에서 extraManifests.searchPaths 필드에 디렉토리 이름을 입력합니다(예:).

    clusters:
    - clusterName: "example-sno"
      networkType: "OVNKubernetes"
      extraManifests:
        searchPaths:
          - extra-manifest/ 
    1
    
          - custom-manifest/ 
    2
    Copy to Clipboard Toggle word wrap
    1
    ztp-site-generate 컨테이너에서 복사된 매니페스트 폴더입니다.
    2
    사용자 정의 매니페스트 폴더입니다.
  5. SiteConfig , /extra-manifest , /custom-manifest CR을 저장하고 사이트 구성 저장소에 푸시합니다.

클러스터 프로비저닝 중에 GitOps ZTP 파이프라인은 /custom-manifest 디렉토리에 있는 CR을 extra-manifest/ 에 저장된 기본 추가 매니페스트 세트에 추가합니다.

참고

버전 4.14부터 extraManifestPath는 사용 중단 경고를 받습니다.

extraManifestPath가 계속 지원되지만 extraManifests.searchPaths를 사용하는 것이 좋습니다. SiteConfig 파일에서 extraManifests.searchPaths를 정의하는 경우 GitOps ZTP 파이프라인은 사이트 설치 중에 ztp-site-generate 컨테이너에서 매니페스트를 가져오지 않습니다.

Siteconfig CR에서 extraManifestPathextraManifests.searchPaths를 모두 정의하는 경우 extraManifests.searchPaths 에 대해 정의된 설정이 우선합니다.

ztp-site-generate 컨테이너에서 /extra-manifest 의 내용을 추출하여 GIT 저장소에 푸시하는 것이 좋습니다.

8.2. SiteConfig 필터를 사용하여 사용자 정의 리소스 필터링

필터를 사용하면 SiteConfig 사용자 정의 리소스(CR)를 쉽게 사용자 지정하여 GitOps Zero Touch Provisioning(ZTP) 파이프라인의 설치 단계에서 사용할 다른 CR을 포함하거나 제외할 수 있습니다.

SiteConfig CR에 대해 include 또는 excludeinclusionDefault 값을 지정할 수 있으며, 포함하거나 제외하려는 특정 extraManifest RAN CR 목록도 지정할 수 있습니다. inclusionDefault를 include 로 설정하면 GitOps ZTP 파이프라인이 설치 중에 /source-crs/extra-manifest 에 있는 모든 파일을 적용합니다. inclusionDefault를 exclude 로 설정하면 반대의 결과가 발생합니다.

기본적으로 포함된 개별 CR을 /source-crs/extra-manifest 폴더에서 제외할 수 있습니다. 다음 예제에서는 설치 시 /source-crs/extra-manifest/03-sctp-machine-config-worker.yaml CR을 제외하도록 사용자 지정 단일 노드 OpenShift SiteConfig CR을 구성합니다.

또한, 몇 가지 추가적인 선택적 필터링 시나리오도 설명합니다.

사전 요구 사항

  • 필요한 설치 및 정책 CR을 생성하기 위해 허브 클러스터를 구성했습니다.
  • 사용자 정의 사이트 구성 데이터를 관리하는 Git 저장소를 만들었습니다. 저장소는 허브 클러스터에서 접근할 수 있어야 하며 Argo CD 애플리케이션의 소스 저장소로 정의되어야 합니다.

프로세스

  1. GitOps ZTP 파이프라인이 03-sctp-machine-config-worker.yaml CR 파일을 적용하지 못하게 하려면 SiteConfig CR에 다음 YAML을 적용하세요.

    apiVersion: ran.openshift.io/v1
    kind: SiteConfig
    metadata:
      name: "site1-sno-du"
      namespace: "site1-sno-du"
    spec:
      baseDomain: "example.com"
      pullSecretRef:
        name: "assisted-deployment-pull-secret"
      clusterImageSetNameRef: "openshift-4.19"
      sshPublicKey: "<ssh_public_key>"
      clusters:
    - clusterName: "site1-sno-du"
      extraManifests:
        filter:
          exclude:
            - 03-sctp-machine-config-worker.yaml
    Copy to Clipboard Toggle word wrap

    GitOps ZTP 파이프라인은 설치 중에 03-sctp-machine-config-worker.yaml CR을 건너뜁니다. /source-crs/extra-manifest 에 있는 다른 모든 CR이 적용됩니다.

  2. SiteConfig CR을 저장하고 사이트 구성 리포지토리로 변경 사항을 내보냅니다.

    GitOps ZTP 파이프라인은 SiteConfig 필터 지침에 따라 적용되는 CR을 모니터링하고 조정합니다.

  3. 선택 사항: 클러스터 설치 중에 GitOps ZTP 파이프라인이 모든 /source-crs/extra-manifest CR을 적용하지 않도록 하려면 SiteConfig CR에 다음 YAML을 적용하세요.

    - clusterName: "site1-sno-du"
      extraManifests:
        filter:
          inclusionDefault: exclude
    Copy to Clipboard Toggle word wrap
  4. 선택 사항: 모든 /source-crs/extra-manifest RAN CR을 제외하고 대신 설치 중에 사용자 정의 CR 파일을 포함하려면 사용자 정의 SiteConfig CR을 편집하여 사용자 정의 매니페스트 폴더와 포함 파일을 설정합니다.예:

    clusters:
    - clusterName: "site1-sno-du"
      extraManifestPath: "<custom_manifest_folder>" 
    1
    
      extraManifests:
        filter:
          inclusionDefault: exclude  
    2
    
          include:
            - custom-sctp-machine-config-worker.yaml
    Copy to Clipboard Toggle word wrap
    1
    <custom_manifest_folder>를 사용자 정의 설치 CR이 포함된 폴더의 이름(예: user-custom-manifest/ ) 으로 바꿉니다.
    2
    설치 중에 GitOps ZTP 파이프라인이 /source-crs/extra-manifest 에 있는 파일을 적용하지 못하도록 하려면 inclusionDefault를 exclude 로 설정합니다.

    다음 예에서는 사용자 정의 폴더 구조를 보여줍니다.

    siteconfig
      ├── site1-sno-du.yaml
      └── user-custom-manifest
            └── custom-sctp-machine-config-worker.yaml
    Copy to Clipboard Toggle word wrap

8.3. SiteConfig CR을 사용하여 노드 삭제

SiteConfig 사용자 정의 리소스(CR)를 사용하면 노드를 삭제하고 다시 프로비저닝할 수 있습니다. 이 방법은 노드를 수동으로 삭제하는 것보다 효율적입니다.

사전 요구 사항

  • 필요한 설치 및 정책 CR을 생성하도록 허브 클러스터를 구성했습니다.
  • 사용자 정의 사이트 구성 데이터를 관리할 수 있는 Git 저장소를 만들었습니다. 저장소는 허브 클러스터에서 접근할 수 있어야 하며 Argo CD 애플리케이션의 소스 저장소로 정의되어야 합니다.

프로세스

  1. SiteConfig CR을 업데이트하여 bmac.agent-install.openshift.io/remove-agent-and-node-on-delete=true 주석을 포함하고 변경 사항을 Git 저장소에 푸시합니다.

    apiVersion: ran.openshift.io/v1
    kind: SiteConfig
    metadata:
      name: "cnfdf20"
      namespace: "cnfdf20"
    spec:
      clusters:
        nodes:
        - hostname: node6
          role: "worker"
          crAnnotations:
            add:
              BareMetalHost:
                bmac.agent-install.openshift.io/remove-agent-and-node-on-delete: true
    # ...
    Copy to Clipboard Toggle word wrap
  2. 다음 명령을 실행하여 BareMetalHost 개체에 주석이 달려 있는지 확인하세요.

    oc get bmh -n <managed-cluster-namespace> <bmh-object> -ojsonpath='{.metadata}' | jq -r '.annotations["bmac.agent-install.openshift.io/remove-agent-and-node-on-delete"]'
    Copy to Clipboard Toggle word wrap

    출력 예

    true
    Copy to Clipboard Toggle word wrap

  3. SiteConfig CR을 업데이트하여 crSuppression.BareMetalHost 주석을 포함시켜 BareMetalHost CR 생성을 억제합니다.

    apiVersion: ran.openshift.io/v1
    kind: SiteConfig
    metadata:
      name: "cnfdf20"
      namespace: "cnfdf20"
    spec:
      clusters:
      - nodes:
        - hostName: node6
          role: "worker"
          crSuppression:
          - BareMetalHost
    # ...
    Copy to Clipboard Toggle word wrap
  4. 변경 사항을 Git 저장소에 푸시하고 프로비저닝 해제가 시작될 때까지 기다립니다. BareMetalHost CR의 상태가 deprovisioning 으로 변경되어야 합니다. BareMetalHost 의 프로비저닝 해제가 완료되고 완전히 삭제될 때까지 기다리세요.

검증

  1. 다음 명령을 실행하여 작업자 노드의 BareMetalHostAgent CR이 허브 클러스터에서 삭제되었는지 확인합니다.

    $ oc get bmh -n <cluster-ns>
    Copy to Clipboard Toggle word wrap
    $ oc get agent -n <cluster-ns>
    Copy to Clipboard Toggle word wrap
  2. 다음 명령을 실행하여 스포크 클러스터에서 노드 레코드가 삭제되었는지 확인하세요.

    $ oc get nodes
    Copy to Clipboard Toggle word wrap
    참고

    비밀을 다루는 경우 비밀을 너무 일찍 삭제하면 문제가 발생할 수 있습니다. 삭제 후 ArgoCD가 재동기화를 완료하려면 비밀이 필요하기 때문입니다. 현재 ArgoCD 동기화가 완료되고 노드 정리가 완료된 후에만 비밀을 삭제하세요.

다음 단계

노드를 다시 프로비저닝하려면 이전에 SiteConfig 에 추가한 변경 사항을 삭제하고, 변경 사항을 Git 저장소에 푸시한 다음 동기화가 완료될 때까지 기다립니다. 이렇게 하면 작업자 노드의 BareMetalHost CR이 재생성되고 노드가 다시 설치됩니다.

9장. PolicyGenerator 리소스를 사용하여 클러스터 정책 관리

9.1. PolicyGenerator 리소스를 사용하여 관리되는 클러스터 정책 구성

Red Hat Advanced Cluster Management(RHACM)가 PolicyGenerator CR을 사용하여 프로비저닝하는 관리형 클러스터를 구성하는 정책 CR을 생성하는 방식을 사용자 정의할 수 있습니다.

RHACM 및 PolicyGenerator CR을 사용하는 것은 정책을 관리하고 관리형 클러스터에 배포하는 데 권장되는 방법입니다. 이는 이 목적을 위해 PolicyGenTemplate CR을 사용하는 것을 대체합니다. PolicyGenerator 리소스에 대한 자세한 내용은 RHACM Policy Generator 설명서를 참조하세요.

9.1.1. RHACM PolicyGenerator와 PolicyGenTemplate 리소스 패치 비교

PolicyGenerator 사용자 정의 리소스(CR)와 PolicyGenTemplate CR은 GitOps ZTP에서 관리형 클러스터에 대한 RHACM 정책을 생성하는 데 사용할 수 있습니다.

GitOps ZTP를 사용하여 OpenShift Container Platform 리소스에 패치를 적용할 때 PolicyGenTemplate CR보다 PolicyGenerator CR을 사용하는 데에는 여러 가지 이점이 있습니다. RHACM PolicyGenerator API를 사용하면 PolicyGenTemplate 리소스에서는 불가능한 리소스 패치의 일반적인 방법을 제공합니다.

PolicyGenerator API는 Open Cluster Management 표준의 일부이지만 PolicyGenTemplate API는 그렇지 않습니다. 다음 표에서는 PolicyGeneratorPolicyGenTemplate 리소스 패치 및 배치 전략을 비교하여 설명합니다.

중요

PolicyGenTemplate CR을 사용하여 관리형 클러스터에 정책을 관리하고 배포하는 기능은 향후 OpenShift Container Platform 릴리스에서 더 이상 지원되지 않습니다. Red Hat Advanced Cluster Management(RHACM) 및 PolicyGenerator CR을 사용하면 동일하거나 향상된 기능을 사용할 수 있습니다.

PolicyGenerator 리소스에 대한 자세한 내용은 RHACM 통합 정책 생성기 문서를 참조하세요.

Expand
표 9.1. RHACM PolicyGenerator와 PolicyGenTemplate 패치 비교
PolicyGenerator 패치PolicyGenTemplate 패치

리소스 병합을 위해 Kustomize 전략적 병합을 사용합니다. 자세한 내용은 Kustomize를 사용하는 Kubernetes 오브젝트의 선언적 관리를 참조하십시오.

패치에 정의된 대로 변수를 값으로 교체하여 작동합니다. 이는 Kustomize 병합 전략보다 유연합니다.

ManagedClusterSetBinding 리소스를 지원합니다.

ManagedClusterSetBinding 리소스를 지원하지 않습니다.

패치에만 의존하며 내장된 변수 대체가 필요하지 않습니다.

패치에 정의된 변수 값을 덮어씁니다.

병합 패치에서 목록 병합을 지원하지 않습니다. 병합 패치에서 목록을 바꾸는 것이 지원됩니다.

목록 병합 및 교체는 제한적으로 지원됩니다. 즉, 목록에서는 하나의 객체만 병합할 수 있습니다.

현재 리소스 패치에 대한 OpenAPI 사양을 지원하지 않습니다. 즉, 스키마를 따르지 않는 콘텐츠(예: PtpConfig 리소스)를 병합하려면 패치에 추가 지침이 필요하다는 의미입니다.

패치에서 정의한 값으로 필드와 값을 대체하여 작동합니다.

스키마를 따르지 않는 콘텐츠를 병합하려면 패치에 $patch: replace와 같은 추가 지침이 필요합니다.

소스 CR에 정의된 필드와 값을 패치에 정의된 값(예: $name ) 으로 대체합니다.

참조 소스 CR에 정의된 이름네임스페이스 필드를 패치할 수 있지만 CR 파일에 단일 개체가 있는 경우에만 가능합니다.

참조 소스 CR에 정의된 이름네임스페이스 필드에 패치를 적용할 수 있습니다.

9.1.2. PolicyGenerator CRD에 대하여

PolicyGenerator 사용자 정의 리소스 정의(CRD)는 PolicyGen 정책 생성기에 클러스터 구성에 어떤 사용자 정의 리소스(CR)를 포함해야 하는지, CR을 생성된 정책에 어떻게 결합해야 하는지, 해당 CR의 어떤 항목을 오버레이 콘텐츠로 업데이트해야 하는지 알려줍니다.

다음 예에서는 ztp-site-generate 참조 컨테이너에서 추출된 PolicyGenerator CR( acm-common-du-ranGen.yaml )을 보여줍니다. acm-common-du-ranGen.yaml 파일은 두 개의 Red Hat Advanced Cluster Management(RHACM) 정책을 정의합니다. 정책은 CR의 policyName 의 각 고유 값에 대해 하나씩 구성 CR 컬렉션을 관리합니다. acm-common-du-ranGen.yaml은 policyDefaults.placement.labelSelector 섹션에 나열된 레이블을 기준으로 정책을 클러스터에 바인딩하기 위한 단일 배치 바인딩과 배치 규칙을 생성합니다.

PolicyGenerator CR 예시 - acm-common-ranGen.yaml

apiVersion: policy.open-cluster-management.io/v1
kind: PolicyGenerator
metadata:
    name: common-latest
placementBindingDefaults:
    name: common-latest-placement-binding 
1

policyDefaults:
    namespace: ztp-common
    placement:
        labelSelector:
            matchExpressions:
                - key: common
                  operator: In
                  values:
                    - "true"
                - key: du-profile
                  operator: In
                  values:
                    - latest
    remediationAction: inform
    severity: low
    namespaceSelector:
        exclude:
            - kube-*
        include:
            - '*'
    evaluationInterval:
        compliant: 10m
        noncompliant: 10s
policies:
    - name: common-latest-config-policy
      policyAnnotations:
        ran.openshift.io/ztp-deploy-wave: "1"
      manifests:
        - path: source-crs/ReduceMonitoringFootprint.yaml
        - path: source-crs/DefaultCatsrc.yaml 
2

          patches:
            - metadata:
                name: redhat-operators-disconnected
              spec:
                displayName: disconnected-redhat-operators
                image: registry.example.com:5000/disconnected-redhat-operators/disconnected-redhat-operator-index:v4.9
        - path: source-crs/DisconnectedICSP.yaml
          patches:
            - spec:
                repositoryDigestMirrors:
                    - mirrors:
                        - registry.example.com:5000
                      source: registry.redhat.io
    - name: common-latest-subscriptions-policy
      policyAnnotations:
        ran.openshift.io/ztp-deploy-wave: "2"
      manifests: 
3

        - path: source-crs/SriovSubscriptionNS.yaml
        - path: source-crs/SriovSubscriptionOperGroup.yaml
        - path: source-crs/SriovSubscription.yaml
        - path: source-crs/SriovOperatorStatus.yaml
        - path: source-crs/PtpSubscriptionNS.yaml
        - path: source-crs/PtpSubscriptionOperGroup.yaml
        - path: source-crs/PtpSubscription.yaml
        - path: source-crs/PtpOperatorStatus.yaml
        - path: source-crs/ClusterLogNS.yaml
        - path: source-crs/ClusterLogOperGroup.yaml
        - path: source-crs/ClusterLogSubscription.yaml
        - path: source-crs/ClusterLogOperatorStatus.yaml
        - path: source-crs/StorageNS.yaml
        - path: source-crs/StorageOperGroup.yaml
        - path: source-crs/StorageSubscription.yaml
        - path: source-crs/StorageOperatorStatus.yaml
Copy to Clipboard Toggle word wrap

1
이 레이블이 있는 모든 클러스터에 정책을 적용합니다.
2
DefaultCatsrc.yaml 파일에는 연결이 끊긴 레지스트리의 카탈로그 소스와 관련 레지스트리 구성 세부 정보가 포함되어 있습니다.
3
policies.manifests 에 나열된 파일은 설치된 클러스터에 대한 운영자 정책을 생성합니다.

PolicyGenerator CR은 포함된 CR의 수에 제한 없이 구성할 수 있습니다. 다음 예제 CR을 허브 클러스터에 적용하여 단일 CR을 포함하는 정책을 생성합니다.

apiVersion: policy.open-cluster-management.io/v1
kind: PolicyGenerator
metadata:
  name: group-du-sno
placementBindingDefaults:
  name: group-du-sno-placement-binding
policyDefaults:
  namespace: ztp-group
  placement:
    labelSelector:
      matchExpressions:
        - key: group-du-sno
          operator: Exists
  remediationAction: inform
  severity: low
  namespaceSelector:
    exclude:
      - kube-*
    include:
      - '*'
  evaluationInterval:
    compliant: 10m
    noncompliant: 10s
policies:
  - name: group-du-sno-config-policy
    policyAnnotations:
      ran.openshift.io/ztp-deploy-wave: '10'
    manifests:
      - path: source-crs/PtpConfigSlave-MCP-master.yaml
        patches:
          - metadata: null
            name: du-ptp-slave
            namespace: openshift-ptp
            annotations:
              ran.openshift.io/ztp-deploy-wave: '10'
            spec:
              profile:
                - name: slave
                  interface: $interface
                  ptp4lOpts: '-2 -s'
                  phc2sysOpts: '-a -r -n 24'
                  ptpSchedulingPolicy: SCHED_FIFO
                  ptpSchedulingPriority: 10
                  ptpSettings:
                    logReduce: 'true'
                  ptp4lConf: |
                    [global]
                    #
                    # Default Data Set
                    #
                    twoStepFlag 1
                    slaveOnly 1
                    priority1 128
                    priority2 128
                    domainNumber 24
                    #utc_offset 37
                    clockClass 255
                    clockAccuracy 0xFE
                    offsetScaledLogVariance 0xFFFF
                    free_running 0
                    freq_est_interval 1
                    dscp_event 0
                    dscp_general 0
                    dataset_comparison G.8275.x
                    G.8275.defaultDS.localPriority 128
                    #
                    # Port Data Set
                    #
                    logAnnounceInterval -3
                    logSyncInterval -4
                    logMinDelayReqInterval -4
                    logMinPdelayReqInterval -4
                    announceReceiptTimeout 3
                    syncReceiptTimeout 0
                    delayAsymmetry 0
                    fault_reset_interval -4
                    neighborPropDelayThresh 20000000
                    masterOnly 0
                    G.8275.portDS.localPriority 128
                    #
                    # Run time options
                    #
                    assume_two_step 0
                    logging_level 6
                    path_trace_enabled 0
                    follow_up_info 0
                    hybrid_e2e 0
                    inhibit_multicast_service 0
                    net_sync_monitor 0
                    tc_spanning_tree 0
                    tx_timestamp_timeout 50
                    unicast_listen 0
                    unicast_master_table 0
                    unicast_req_duration 3600
                    use_syslog 1
                    verbose 0
                    summary_interval 0
                    kernel_leap 1
                    check_fup_sync 0
                    clock_class_threshold 7
                    #
                    # Servo Options
                    #
                    pi_proportional_const 0.0
                    pi_integral_const 0.0
                    pi_proportional_scale 0.0
                    pi_proportional_exponent -0.3
                    pi_proportional_norm_max 0.7
                    pi_integral_scale 0.0
                    pi_integral_exponent 0.4
                    pi_integral_norm_max 0.3
                    step_threshold 2.0
                    first_step_threshold 0.00002
                    max_frequency 900000000
                    clock_servo pi
                    sanity_freq_limit 200000000
                    ntpshm_segment 0
                    #
                    # Transport options
                    #
                    transportSpecific 0x0
                    ptp_dst_mac 01:1B:19:00:00:00
                    p2p_dst_mac 01:80:C2:00:00:0E
                    udp_ttl 1
                    udp6_scope 0x0E
                    uds_address /var/run/ptp4l
                    #
                    # Default interface options
                    #
                    clock_type OC
                    network_transport L2
                    delay_mechanism E2E
                    time_stamping hardware
                    tsproc_mode filter
                    delay_filter moving_median
                    delay_filter_length 10
                    egressLatency 0
                    ingressLatency 0
                    boundary_clock_jbod 0
                    #
                    # Clock description
                    #
                    productDescription ;;
                    revisionData ;;
                    manufacturerIdentity 00:00:00
                    userDescription ;
                    timeSource 0xA0
              recommend:
                - profile: slave
                  priority: 4
                  match:
                    - nodeLabel: node-role.kubernetes.io/master
Copy to Clipboard Toggle word wrap

소스 파일 PtpConfigSlave.yaml을 예로 들어, 해당 파일은 PtpConfig CR을 정의합니다. PtpConfigSlave 예제에 대해 생성된 정책의 이름은 group-du-sno-config-policy 입니다. 생성된 group-du-sno-config-policy 에 정의된 PtpConfig CR의 이름은 du-ptp-slave 입니다. PtpConfigSlave.yaml 에 정의된 사양 은 소스 파일에 정의된 다른 사양 항목과 함께 du-ptp-slave 에 배치됩니다.

다음 예에서는 group-du-sno-config-policy CR을 보여줍니다.

---
apiVersion: policy.open-cluster-management.io/v1
kind: PolicyGenerator
metadata:
    name: du-upgrade
placementBindingDefaults:
    name: du-upgrade-placement-binding
policyDefaults:
    namespace: ztp-group-du-sno
    placement:
        labelSelector:
            matchExpressions:
                - key: group-du-sno
                  operator: Exists
    remediationAction: inform
    severity: low
    namespaceSelector:
        exclude:
            - kube-*
        include:
            - '*'
    evaluationInterval:
        compliant: 10m
        noncompliant: 10s
policies:
    - name: du-upgrade-operator-catsrc-policy
      policyAnnotations:
        ran.openshift.io/ztp-deploy-wave: "1"
      manifests:
        - path: source-crs/DefaultCatsrc.yaml
          patches:
            - metadata:
                name: redhat-operators
              spec:
                displayName: Red Hat Operators Catalog
                image: registry.example.com:5000/olm/redhat-operators:v4.14
                updateStrategy:
                    registryPoll:
                        interval: 1h
              status:
                connectionState:
                    lastObservedState: READY
Copy to Clipboard Toggle word wrap

9.1.3. PolicyGenerator CR을 사용자 정의할 때의 권장 사항

사이트 구성 PolicyGenerator 사용자 정의 리소스(CR)를 사용자 정의할 때 다음의 모범 사례를 고려하세요.

  • 꼭 필요한 최소한의 정책만 사용하세요. 정책을 적게 사용하면 필요한 자원도 줄어듭니다. 추가 정책이 있을 때마다 허브 클러스터와 배포된 관리 클러스터의 CPU 부하가 증가합니다. CR은 PolicyGenerator CR의 policyName 필드를 기반으로 정책으로 결합됩니다. 동일한 PolicyGenerator 에 있는 CR 중 policyName 에 동일한 값을 갖는 CR은 단일 정책으로 관리됩니다.
  • 연결이 끊긴 환경에서는 레지스트리를 모든 운영자를 포함하는 단일 인덱스로 구성하여 모든 운영자에 대해 단일 카탈로그 소스를 사용합니다. 관리되는 클러스터에 CatalogSource CR이 추가될 때마다 CPU 사용량이 늘어납니다.
  • MachineConfig CR은 SiteConfig CR에 extraManifests 로 포함되어야 설치 중에 적용됩니다. 이렇게 하면 클러스터가 애플리케이션을 배포할 준비가 될 때까지 걸리는 전체 시간을 줄일 수 있습니다.
  • PolicyGenerator CR은 채널 필드를 재정의하여 원하는 버전을 명시적으로 식별해야 합니다. 이렇게 하면 업그레이드 중에 소스 CR이 변경되어도 생성된 구독이 업데이트되지 않습니다.
  • policyDefaults.consolidateManifests 의 기본 설정은 true 입니다. 이는 DU 프로필에 권장되는 설정입니다. false 로 설정하면 대규모 배포에 영향을 줄 수 있습니다.
  • policyDefaults.orderPolicies 의 기본 설정은 false 입니다. 이는 DU 프로필에 권장되는 설정입니다. 클러스터 설치가 완료되고 클러스터가 준비 상태가 되면 TALM은 이 클러스터에 해당하는 ClusterGroupUpgrade CR을 생성합니다. ClusterGroupUpgrade CR에는 ran.openshift.io/ztp-deploy-wave 주석으로 정의된 정렬된 정책 목록이 포함되어 있습니다. PolicyGenerator CR을 사용하여 정책 순서를 변경하는 경우 충돌이 발생할 수 있으며 구성이 적용되지 않을 수 있습니다.
참고

허브 클러스터에서 많은 수의 스포크 클러스터를 관리하는 경우 리소스 소비를 줄이기 위해 정책 수를 최소화하세요.

여러 구성 CR을 단일 정책이나 제한된 수의 정책으로 그룹화하는 것은 허브 클러스터의 전체 정책 수를 줄이는 한 가지 방법입니다. 사이트 구성을 관리하기 위해 공통, 그룹 및 사이트 계층 정책을 사용하는 경우 사이트별 구성을 단일 정책으로 결합하는 것이 특히 중요합니다.

9.1.4. RAN 배포를 위한 PolicyGenerator CR

GitOps Zero Touch Provisioning(ZTP) 파이프라인을 사용하여 클러스터에 적용되는 구성을 사용자 지정하려면 PolicyGenerator 사용자 지정 리소스(CR)를 사용합니다. PolicyGenerator CR을 사용하면 클러스터 플릿의 구성 CR 세트를 관리하는 하나 이상의 정책을 생성할 수 있습니다. PolicyGenerator CR은 관리되는 CR 세트를 식별하고 이를 정책으로 묶은 다음 해당 CR을 중심으로 정책을 래핑하고 레이블 바인딩 규칙을 사용하여 정책을 클러스터와 연결합니다.

GitOps ZTP 컨테이너에서 얻은 참조 구성은 클러스터가 RAN(무선 접속 네트워크) 분산 장치(DU) 애플리케이션에서 일반적으로 나타나는 엄격한 성능 및 리소스 활용 제약 조건을 지원할 수 있도록 보장하는 중요한 기능 세트와 노드 튜닝 설정을 제공하도록 설계되었습니다. 기준 구성을 변경하거나 누락하면 기능 가용성, 성능 및 리소스 활용도에 영향을 미칠 수 있습니다. PolicyGenerator CR 참조를 기반으로 특정 사이트 요구 사항에 맞는 구성 파일 계층을 만듭니다.

RAN DU 클러스터 구성을 위해 정의된 기준 PolicyGenerator CR은 GitOps ZTP ztp-site-generate 컨테이너에서 추출할 수 있습니다. 자세한 내용은 "GitOps ZTP 사이트 구성 저장소 준비"를 참조하세요.

PolicyGenerator CR은 ./out/argocd/example/acmpolicygenerator/ 폴더에서 찾을 수 있습니다. 참조 아키텍처에는 공통, 그룹 및 사이트별 구성 CR이 있습니다. 각 PolicyGenerator CR은 ./out/source-crs 폴더에서 찾을 수 있는 다른 CR을 참조합니다.

RAN 클러스터 구성과 관련된 PolicyGenerator CR은 아래와 같습니다. 단일 노드, 3노드 컴팩트 및 표준 클러스터 구성의 차이점을 설명하기 위해 그룹 PolicyGenerator CR에 대한 변형이 제공됩니다. 마찬가지로, 단일 노드 클러스터와 다중 노드(컴팩트 또는 표준) 클러스터에 대한 사이트별 구성 변형이 제공됩니다. 배포에 적합한 그룹 및 사이트별 구성 변형을 사용하세요.

Expand
표 9.2. RAN 배포를 위한 PolicyGenerator CR
PolicyGenerator CR설명

acm-example-multinode-site.yaml

다중 노드 클러스터에 적용되는 CR 세트를 포함합니다. 이러한 CR은 RAN 설치에 일반적인 SR-IOV 기능을 구성합니다.

acm-example-sno-site.yaml

단일 노드 OpenShift 클러스터에 적용되는 CR 세트를 포함합니다. 이러한 CR은 RAN 설치에 일반적인 SR-IOV 기능을 구성합니다.

acm-common-mno-ranGen.yaml

다중 노드 클러스터에 적용되는 공통 RAN 정책 구성 세트가 포함되어 있습니다.

acm-common-ranGen.yaml

모든 클러스터에 적용되는 공통 RAN CR 세트를 포함합니다. 이러한 CR은 RAN에 일반적인 클러스터 기능과 기준 클러스터 튜닝을 제공하는 일련의 운영자를 구독합니다.

acm-group-du-3node-ranGen.yaml

3노드 클러스터에 대한 RAN 정책만 포함되어 있습니다.

acm-group-du-sno-ranGen.yaml

단일 노드 클러스터에 대한 RAN 정책만 포함되어 있습니다.

acm-group-du-standard-ranGen.yaml

표준 세 개의 컨트롤 플레인 클러스터에 대한 RAN 정책이 포함되어 있습니다.

acm-group-du-3node-validator-ranGen.yaml

3-노드 클러스터에 필요한 다양한 정책을 생성하는 데 사용되는 PolicyGenerator CR입니다.

acm-group-du-standard-validator-ranGen.yaml

PolicyGenerator CR은 표준 클러스터에 필요한 다양한 정책을 생성하는 데 사용됩니다.

acm-group-du-sno-validator-ranGen.yaml

PolicyGenerator CR은 단일 노드 OpenShift 클러스터에 필요한 다양한 정책을 생성하는 데 사용됩니다.

9.1.5. PolicyGenerator CR을 사용하여 관리 클러스터 사용자 정의

GitOps Zero Touch Provisioning(ZTP) 파이프라인을 사용하여 프로비저닝하는 관리형 클러스터에 적용되는 정책을 사용자 지정하려면 다음 절차를 따르세요.

사전 요구 사항

  • OpenShift CLI(oc)가 설치되어 있습니다.
  • cluster-admin 권한이 있는 사용자로 허브 클러스터에 로그인했습니다.
  • 필요한 설치 및 정책 CR을 생성하기 위해 허브 클러스터를 구성했습니다.
  • 사용자 정의 사이트 구성 데이터를 관리하는 Git 저장소를 만들었습니다. 저장소는 허브 클러스터에서 접근할 수 있어야 하며 Argo CD 애플리케이션의 소스 저장소로 정의되어야 합니다.

프로세스

  1. 사이트별 구성 CR에 대한 PolicyGenerator CR을 만듭니다.

    1. out/argocd/example/acmpolicygenerator/ 폴더에서 CR에 적합한 예를 선택합니다(예: acm-example-sno-site.yaml 또는 acm-example-multinode-site.yaml ).
    2. SiteConfig CR에 포함된 사이트별 레이블과 일치하도록 예제 파일의 policyDefaults.placement.labelSelector 필드를 변경합니다. 예시 SiteConfig 파일에서 사이트별 레이블은 sites: example-sno 입니다.

      참고

      PolicyGenerator policyDefaults.placement.labelSelector 필드에 정의된 레이블이 관련 관리 클러스터 SiteConfig CR에 정의된 레이블과 일치하는지 확인하세요.

    3. 원하는 구성에 맞게 예제 파일의 내용을 변경하세요.
  2. 선택 사항: 클러스터 전체에 적용되는 공통 구성 CR에 대한 PolicyGenerator CR을 만듭니다.

    1. out/argocd/example/acmpolicygenerator/ 폴더에서 CR에 적합한 예를 선택합니다(예: acm-common-ranGen.yaml ).
    2. 필요한 구성에 맞게 예제 파일의 내용을 변경합니다.
  3. 선택 사항: 플릿의 특정 클러스터 그룹에 적용되는 모든 그룹 구성 CR에 대한 PolicyGenerator CR을 만듭니다.

    오버레이된 사양 파일의 콘텐츠가 필요한 최종 상태와 일치하는지 확인합니다. 참고로, out/source-crs 디렉토리에는 PolicyGenerator 템플릿에 포함 및 오버레이할 수 있는 source-crs의 전체 목록이 포함되어 있습니다.

    참고

    클러스터의 구체적인 요구 사항에 따라 클러스터 유형당 두 개 이상의 그룹 정책이 필요할 수 있습니다. 특히, 예시 그룹 정책 각각에 단일 PerformancePolicy.yaml 파일이 있고, 해당 클러스터가 동일한 하드웨어 구성으로 구성된 경우에만 클러스터 세트에서 이 파일을 공유할 수 있다는 점을 고려할 때 더욱 그렇습니다.

    1. out/argocd/example/acmpolicygenerator/ 폴더에서 CR에 적합한 예를 선택합니다(예: acm-group-du-sno-ranGen.yaml) .
    2. 필요한 구성에 맞게 예제 파일의 내용을 변경합니다.
  4. 선택 사항입니다. GitOps ZTP 설치 및 배포된 클러스터 구성이 완료되면 이를 알리는 검증기 정보 정책 PolicyGenerator CR을 생성합니다. 자세한 내용은 "검증자 정보 정책 만들기"를 참조하세요.
  5. 예제 out/argocd/example/acmpolicygenerator//ns.yaml 파일과 유사하게 YAML 파일에 모든 정책 네임스페이스를 정의합니다.

    중요

    PolicyGenerator CR과 같은 파일에 Namespace CR을 포함하지 마세요.

  6. out/argocd/example/acmpolicygenerator/kustomization.yaml 에 표시된 예와 유사하게 kustomization.yaml 파일의 generators 섹션에 PolicyGenerator CR과 네임스페이스 CR을 추가합니다.
  7. Git 저장소에서 PolicyGenerator CR, Namespace CR 및 관련 kustomization.yaml 파일을 커밋하고 변경 사항을 푸시합니다.

    ArgoCD 파이프라인은 변경 사항을 감지하고 관리형 클러스터 배포를 시작합니다. SiteConfig CR과 PolicyGenerator CR에 변경 사항을 동시에 푸시할 수 있습니다.

9.1.6. 관리되는 클러스터 정책 배포 진행 상황 모니터링

ArgoCD 파이프라인은 Git의 PolicyGenerator CR을 사용하여 RHACM 정책을 생성한 다음 이를 허브 클러스터와 동기화합니다. 지원 서비스가 관리되는 클러스터에 OpenShift Container Platform을 설치한 후 관리되는 클러스터 정책 동기화의 진행 상황을 모니터링할 수 있습니다.

사전 요구 사항

  • OpenShift CLI(oc)가 설치되어 있습니다.
  • cluster-admin 권한이 있는 사용자로 허브 클러스터에 로그인했습니다.

프로세스

  1. TALM(Topology Aware Lifecycle Manager)은 클러스터에 바인딩된 구성 정책을 적용합니다.

    클러스터 설치가 완료되고 클러스터가 준비 상태 가 되면 ran.openshift.io/ztp-deploy-wave 주석 으로 정의된 정렬된 정책 목록이 포함된 이 클러스터에 해당하는 ClusterGroupUpgrade CR이 TALM에 의해 자동으로 생성됩니다. 클러스터 정책은 ClusterGroupUpgrade CR에 나열된 순서대로 적용됩니다.

    다음 명령을 사용하여 구성 정책 조정의 상위 수준 진행 상황을 모니터링할 수 있습니다.

    $ export CLUSTER=<clusterName>
    Copy to Clipboard Toggle word wrap
    $ oc get clustergroupupgrades -n ztp-install $CLUSTER -o jsonpath='{.status.conditions[-1:]}' | jq
    Copy to Clipboard Toggle word wrap

    출력 예

    {
      "lastTransitionTime": "2022-11-09T07:28:09Z",
      "message": "Remediating non-compliant policies",
      "reason": "InProgress",
      "status": "True",
      "type": "Progressing"
    }
    Copy to Clipboard Toggle word wrap

  2. RHACM 대시보드나 명령줄을 사용하여 자세한 클러스터 정책 준수 상태를 모니터링할 수 있습니다.

    1. oc 를 사용하여 정책 준수 여부를 확인하려면 다음 명령을 실행하세요.

      $ oc get policies -n $CLUSTER
      Copy to Clipboard Toggle word wrap

      출력 예

      NAME                                                     REMEDIATION ACTION   COMPLIANCE STATE   AGE
      ztp-common.common-config-policy                          inform               Compliant          3h42m
      ztp-common.common-subscriptions-policy                   inform               NonCompliant       3h42m
      ztp-group.group-du-sno-config-policy                     inform               NonCompliant       3h42m
      ztp-group.group-du-sno-validator-du-policy               inform               NonCompliant       3h42m
      ztp-install.example1-common-config-policy-pjz9s          enforce              Compliant          167m
      ztp-install.example1-common-subscriptions-policy-zzd9k   enforce              NonCompliant       164m
      ztp-site.example1-config-policy                          inform               NonCompliant       3h42m
      ztp-site.example1-perf-policy                            inform               NonCompliant       3h42m
      Copy to Clipboard Toggle word wrap

    2. RHACM 웹 콘솔에서 정책 상태를 확인하려면 다음 작업을 수행하세요.

      1. 거버넌스정책 찾기를 클릭합니다.
      2. 클러스터 정책을 클릭하여 상태를 확인하세요.

모든 클러스터 정책이 준수되면 클러스터에 대한 GitOps ZTP 설치 및 구성이 완료됩니다. ztp-done 라벨이 클러스터에 추가됩니다.

참조 구성에서 규정을 준수하는 최종 정책은 *-du-validator-policy 정책에 정의된 정책입니다. 이 정책이 클러스터에서 준수되는 경우 모든 클러스터 구성, 운영자 설치 및 운영자 구성이 완료됩니다.

9.1.7. 구성 변경을 위한 재부팅 조정

구성 변경으로 인해 재부팅이 필요한 경우(예: 지연된 튜닝 변경) TALM(Topology Aware Lifecycle Manager)을 사용하여 여러 스포크 클러스터에서 재부팅을 조정할 수 있습니다. 재부팅 정책이 적용되면 TALM은 선택된 클러스터의 대상 MachineConfigPool 에 있는 모든 노드를 재부팅합니다.

개별적으로 변경한 후 노드를 재부팅하는 대신, 정책을 통해 모든 구성 업데이트를 적용한 다음 단일의 조정된 재부팅을 트리거할 수 있습니다.

사전 요구 사항

  • OpenShift CLI(oc)가 설치되어 있습니다.
  • cluster-admin 권한이 있는 사용자로 허브 클러스터에 로그인했습니다.
  • TALM을 배포하고 구성했습니다.

프로세스

  1. PolicyGenerator 사용자 정의 리소스(CR)를 생성하여 구성 정책을 생성합니다. 다음 샘플 매니페스트 중 하나를 사용할 수 있습니다.

    • out/argocd/example/acmpolicygenerator/acm-example-sno-reboot
    • out/argocd/example/acmpolicygenerator/acm-example-multinode-reboot
  2. 재부팅할 클러스터를 대상으로 하도록 PolicyGenerator CR에서 policyDefaults.placement.labelSelector 필드를 업데이트합니다. 필요에 따라 사용 사례에 맞게 다른 필드를 수정하세요.

    지연된 튜닝 변경 사항을 적용하기 위해 재부팅을 조정하는 경우 재부팅 정책의 MachineConfigPoolTuned 개체의 spec.recommend 필드에 지정된 값과 일치하는지 확인하세요.

  3. PolicyGenerator CR을 적용하여 구성 정책을 생성하고 적용합니다. 자세한 단계는 " PolicyGenerator CR을 사용하여 관리 클러스터 사용자 지정"을 참조하십시오.
  4. ArgoCD가 정책 동기화를 완료하면 ClusterGroupUpgrade (CGU) CR을 만들고 적용합니다.

    CGU 사용자 정의 리소스 구성 예

    apiVersion: ran.openshift.io/v1alpha1
    kind: ClusterGroupUpgrade
    metadata:
      name: reboot
      namespace: default
    spec:
      clusterLabelSelectors:
      - matchLabels: 
    1
    
    # ...
      enable: true
      managedPolicies: 
    2
    
      - example-reboot
      remediationStrategy:
        timeout: 300 
    3
    
        maxConcurrency: 10
    # ...
    Copy to Clipboard Toggle word wrap

    1
    재부팅하려는 클러스터와 일치하는 레이블을 구성합니다.
    2
    재부팅 정책 전에 필요한 모든 구성 정책을 추가합니다. TALM은 정책에 지정된 구성 변경 사항을 나열된 순서대로 적용합니다.
    3
    선택한 모든 클러스터에서 전체 업그레이드에 대한 시간 초과를 초 단위로 지정합니다. 최악의 시나리오를 고려하여 이 필드를 설정하세요.
  5. CGU 사용자 지정 리소스를 적용한 후 TALM은 구성 정책을 순서대로 롤아웃합니다. 모든 정책이 준수되면 재부팅 정책이 적용되고 지정된 MachineConfigPool 에 있는 모든 노드가 재부팅됩니다.

검증

  1. CGU 출시 상태를 모니터링합니다.

    상태를 확인하여 허브에서 CGU 사용자 정의 리소스의 롤아웃을 모니터링할 수 있습니다. 다음 명령을 실행하여 재부팅이 성공적으로 롤아웃되었는지 확인하세요.

    oc get cgu -A
    Copy to Clipboard Toggle word wrap

    출력 예

    NAMESPACE   NAME     AGE   STATE       DETAILS
    default     reboot   1d    Completed   All clusters are compliant with all the managed policies
    Copy to Clipboard Toggle word wrap

  2. 특정 노드에서 재부팅이 성공적으로 이루어졌는지 확인합니다.

    특정 노드에서 재부팅이 성공적으로 이루어졌는지 확인하려면 다음 명령을 실행하여 노드의 MachineConfigPool (MCP) 상태를 확인하세요.

    oc get mcp master
    Copy to Clipboard Toggle word wrap

    출력 예

    NAME     CONFIG                                             UPDATED   UPDATING   DEGRADED   MACHINECOUNT   READYMACHINECOUNT   UPDATEDMACHINECOUNT   DEGRADEDMACHINECOUNT   AGE
    master   rendered-master-be5785c3b98eb7a1ec902fef2b81e865   True      False      False      3              3                   3                     0                      72d
    Copy to Clipboard Toggle word wrap

9.1.8. 구성 정책 CR 생성 검증

정책 사용자 정의 리소스(CR)는 생성된 PolicyGenerator 와 동일한 네임스페이스에 생성됩니다. 다음 명령을 사용하여 표시된 것처럼 ztp-common , ztp-group 또는 ztp-site 기반인지 여부에 관계없이 PolicyGenerator 에서 생성된 모든 정책 CR에 동일한 문제 해결 흐름이 적용됩니다.

$ export NS=<namespace>
Copy to Clipboard Toggle word wrap
$ oc get policy -n $NS
Copy to Clipboard Toggle word wrap

예상되는 정책이 적용된 CR 세트가 표시되어야 합니다.

정책 동기화에 실패한 경우 다음 문제 해결 단계를 따르세요.

프로세스

  1. 정책에 대한 자세한 정보를 표시하려면 다음 명령을 실행하세요.

    $ oc describe -n openshift-gitops application policies
    Copy to Clipboard Toggle word wrap
  2. 상태 확인: 조건: 오류 로그를 표시합니다. 예를 들어, 잘못된 sourceFile 항목을 fileName: 으로 설정하면 아래와 같은 오류가 발생합니다.

    Status:
      Conditions:
        Last Transition Time:  2021-11-26T17:21:39Z
        Message:               rpc error: code = Unknown desc = `kustomize build /tmp/https___git.com/ran-sites/policies/ --enable-alpha-plugins` failed exit status 1: 2021/11/26 17:21:40 Error could not find test.yaml under source-crs/: no such file or directory Error: failure in plugin configured via /tmp/kust-plugin-config-52463179; exit status 1: exit status 1
        Type:  ComparisonError
    Copy to Clipboard Toggle word wrap
  3. 상태 확인: 동기화: . 상태: 조건: 에 로그 오류가 있는 경우 상태: 동기화: 에 알 수 없음 또는 오류가 표시됩니다.

    Status:
      Sync:
        Compared To:
          Destination:
            Namespace:  policies-sub
            Server:     https://kubernetes.default.svc
          Source:
            Path:             policies
            Repo URL:         https://git.com/ran-sites/policies/.git
            Target Revision:  master
        Status:               Error
    Copy to Clipboard Toggle word wrap
  4. Red Hat Advanced Cluster Management(RHACM)에서 정책이 ManagedCluster 개체에 적용된다는 것을 인식하면 정책 CR 개체가 클러스터 네임스페이스에 적용됩니다. 정책이 클러스터 네임스페이스에 복사되었는지 확인하세요.

    $ oc get policy -n $CLUSTER
    Copy to Clipboard Toggle word wrap

    출력 예

    NAME                                         REMEDIATION ACTION   COMPLIANCE STATE   AGE
    ztp-common.common-config-policy              inform               Compliant          13d
    ztp-common.common-subscriptions-policy       inform               Compliant          13d
    ztp-group.group-du-sno-config-policy         inform               Compliant          13d
    ztp-group.group-du-sno-validator-du-policy   inform               Compliant          13d
    ztp-site.example-sno-config-policy           inform               Compliant          13d
    Copy to Clipboard Toggle word wrap

    RHACM은 적용 가능한 모든 정책을 클러스터 네임스페이스에 복사합니다. 복사된 정책 이름의 형식은 <PolicyGenerator.Namespace>.<PolicyGenerator.Name>-<policyName> 입니다.

  5. 클러스터 네임스페이스에 복사되지 않은 정책이 있는지 배치 규칙을 확인하세요. 해당 정책에 대한 PlacementmatchSelector는 ManagedCluster 개체의 레이블과 일치해야 합니다.

    $ oc get Placement -n $NS
    Copy to Clipboard Toggle word wrap
  6. 다음 명령을 사용하여 누락된 정책, 공통, 그룹 또는 사이트에 적합한 배치 이름을 기록해 둡니다.

    $ oc get Placement -n $NS <placement_rule_name> -o yaml
    Copy to Clipboard Toggle word wrap
    • 상태 결정에는 클러스터 이름이 포함되어야 합니다.
    • 사양의 matchSelector 의 키-값 쌍은 관리되는 클러스터의 레이블과 일치해야 합니다.
  7. 다음 명령을 사용하여 ManagedCluster 개체의 레이블을 확인하세요.

    $ oc get ManagedCluster $CLUSTER -o jsonpath='{.metadata.labels}' | jq
    Copy to Clipboard Toggle word wrap
  8. 다음 명령을 사용하여 어떤 정책이 준수되는지 확인하세요.

    $ oc get policy -n $CLUSTER
    Copy to Clipboard Toggle word wrap

    Namespace , OperatorGroupSubscription 정책은 준수하지만 Operator 구성 정책은 준수하지 않는 경우 Operator가 관리되는 클러스터에 설치되지 않았을 가능성이 높습니다. CRD가 아직 스포크에 적용되지 않았기 때문에 운영자 구성 정책이 적용되지 않습니다.

9.1.9. 정책 조정 재시작

예기치 않은 규정 준수 문제(예: ClusterGroupUpgrade 사용자 지정 리소스(CR)가 시간 초과된 경우)가 발생하면 정책 조정을 다시 시작할 수 있습니다.

프로세스

  1. 관리되는 클러스터가 준비 상태 가 되면 Topology Aware Lifecycle Manager가 ztp-install 네임스페이스에 ClusterGroupUpgrade CR을 생성합니다.

    $ export CLUSTER=<clusterName>
    Copy to Clipboard Toggle word wrap
    $ oc get clustergroupupgrades -n ztp-install $CLUSTER
    Copy to Clipboard Toggle word wrap
  2. 예상치 못한 문제가 발생하고 정책이 구성된 제한 시간(기본값은 4시간) 내에 준수되지 않으면 ClusterGroupUpgrade CR의 상태가 UpgradeTimedOut으로 표시됩니다.

    $ oc get clustergroupupgrades -n ztp-install $CLUSTER -o jsonpath='{.status.conditions[?(@.type=="Ready")]}'
    Copy to Clipboard Toggle word wrap
  3. ClusterGroupUpgrade CR이 UpgradeTimedOut 상태이면 정책 조정을 1시간마다 자동으로 다시 시작합니다. 정책을 변경한 경우 기존 ClusterGroupUpgrade CR을 삭제하여 즉시 재시도를 시작할 수 있습니다. 이렇게 하면 정책을 즉시 조정하기 시작하는 새 ClusterGroupUpgrade CR이 자동으로 생성됩니다.

    $ oc delete clustergroupupgrades -n ztp-install $CLUSTER
    Copy to Clipboard Toggle word wrap

ClusterGroupUpgrade CR이 UpgradeCompleted 상태로 완료되고 관리되는 클러스터에 ztp-done 레이블이 적용되면 PolicyGenerator를 사용하여 추가적인 구성 변경을 수행할 수 있습니다. 기존 ClusterGroupUpgrade CR을 삭제해도 TALM에서 새 CR을 생성하지 않습니다.

이 시점에서 GitOps ZTP는 클러스터와의 상호 작용을 완료했으며 이후의 모든 상호 작용은 업데이트로 처리되어야 하며 정책을 수정하기 위해 새로운 ClusterGroupUpgrade CR이 생성되어야 합니다.

9.1.10. 정책을 사용하여 적용된 관리 클러스터 CR 변경

정책을 통해 관리되는 클러스터에 배포된 사용자 지정 리소스(CR)에서 콘텐츠를 제거할 수 있습니다.

기본적으로 PolicyGenerator CR에서 생성된 모든 Policy CR에는 complianceType 필드가 musthave 로 설정되어 있습니다. 제거된 콘텐츠가 없는 필수 정책은 관리되는 클러스터의 CR에 지정된 모든 콘텐츠가 있으므로 여전히 규정을 준수하는 것으로 간주됩니다. 이 구성을 사용하면 CR에서 콘텐츠를 제거하면 TALM이 정책에서 콘텐츠를 제거하지만 관리되는 클러스터의 CR에서는 콘텐츠가 제거되지 않습니다.

complianceType 필드를 mustonlyhave 로 설정하면 정책은 클러스터의 CR이 정책에 지정된 내용과 정확히 일치하도록 보장합니다.

사전 요구 사항

  • OpenShift CLI(oc)가 설치되어 있습니다.
  • cluster-admin 권한이 있는 사용자로 허브 클러스터에 로그인했습니다.
  • RHACM을 실행하는 허브 클러스터에서 관리형 클러스터를 배포했습니다.
  • 허브 클러스터에 Topology Aware Lifecycle Manager를 설치했습니다.

프로세스

  1. 영향을 받은 CR에서 더 이상 필요하지 않은 콘텐츠를 제거합니다. 이 예에서 disableDrain: false 줄은 SriovOperatorConfig CR에서 제거되었습니다.

    CR 예시

    apiVersion: sriovnetwork.openshift.io/v1
    kind: SriovOperatorConfig
    metadata:
      name: default
      namespace: openshift-sriov-network-operator
    spec:
      configDaemonNodeSelector:
        "node-role.kubernetes.io/$mcp": ""
      disableDrain: true
      enableInjector: true
      enableOperatorWebhook: true
    Copy to Clipboard Toggle word wrap

  2. acm-group-du-sno-ranGen.yaml 파일에서 영향을 받는 정책의 complianceType을 mustonlyhave 로 변경합니다.

    YAML의 예

    # ...
    policyDefaults:
      complianceType: "mustonlyhave"
    # ...
    policies:
      - name: config-policy
        policyAnnotations:
          ran.openshift.io/ztp-deploy-wave: ""
        manifests:
          - path: source-crs/SriovOperatorConfig.yaml
    Copy to Clipboard Toggle word wrap

  3. ClusterGroupUpdates CR을 만들고 CR 변경 사항을 받아야 하는 클러스터를 지정합니다.

    ClusterGroupUpdates CR 예제

    apiVersion: ran.openshift.io/v1alpha1
    kind: ClusterGroupUpgrade
    metadata:
      name: cgu-remove
      namespace: default
    spec:
      managedPolicies:
        - ztp-group.group-du-sno-config-policy
      enable: false
      clusters:
      - spoke1
      - spoke2
      remediationStrategy:
        maxConcurrency: 2
        timeout: 240
      batchTimeoutAction:
    Copy to Clipboard Toggle word wrap

  4. 다음 명령을 실행하여 ClusterGroupUpgrade CR을 만듭니다.

    $ oc create -f cgu-remove.yaml
    Copy to Clipboard Toggle word wrap
  5. 예를 들어 적절한 유지 관리 기간 동안 변경 사항을 적용할 준비가 되면 다음 명령을 실행하여 spec.enable 필드의 값을 true 로 변경합니다.

    $ oc --namespace=default patch clustergroupupgrade.ran.openshift.io/cgu-remove \
    --patch '{"spec":{"enable":true}}' --type=merge
    Copy to Clipboard Toggle word wrap

검증

  1. 다음 명령을 실행하여 정책 상태를 확인하세요.

    $ oc get <kind> <changed_cr_name>
    Copy to Clipboard Toggle word wrap

    출력 예

    NAMESPACE   NAME                                                   REMEDIATION ACTION   COMPLIANCE STATE   AGE
    default     cgu-ztp-group.group-du-sno-config-policy               enforce                                 17m
    default     ztp-group.group-du-sno-config-policy                   inform               NonCompliant       15h
    Copy to Clipboard Toggle word wrap

    정책의 준수 상태가 준수 인 경우 CR이 업데이트되고 원치 않는 콘텐츠가 제거되었음을 의미합니다.

  2. 관리되는 클러스터에서 다음 명령을 실행하여 대상 클러스터에서 정책이 제거되었는지 확인하세요.

    $ oc get <kind> <changed_cr_name>
    Copy to Clipboard Toggle word wrap

    결과가 없으면 CR이 관리되는 클러스터에서 제거됩니다.

9.1.11. GitOps ZTP 설치 완료 표시

GitOps Zero Touch Provisioning(ZTP)은 클러스터의 GitOps ZTP 설치 상태를 확인하는 프로세스를 간소화합니다. GitOps ZTP 상태는 클러스터 설치, 클러스터 구성, GitOps ZTP 완료의 세 단계를 거칩니다.

클러스터 설치 단계
클러스터 설치 단계는 ManagedCluster CR의 ManagedClusterJoinedManagedClusterAvailable 조건을 통해 표시됩니다. ManagedCluster CR에 이러한 조건이 없거나 조건이 False 로 설정된 경우 클러스터는 여전히 설치 단계에 있습니다. 설치에 대한 추가 세부 정보는 AgentClusterInstallClusterDeployment CR에서 확인할 수 있습니다. 자세한 내용은 "GitOps ZTP 문제 해결"을 참조하세요.
클러스터 구성 단계
클러스터 구성 단계는 클러스터에 대한 ManagedCluster CR이 적용된 ztp 실행 레이블을 통해 표시됩니다.
GitOps ZTP 완료

클러스터 설치 및 구성은 GitOps ZTP 완료 단계에서 완료됩니다. 이는 ManagedCluster CR에서 ztp-running 레이블이 제거되고 ztp-done 레이블이 추가된 것을 통해 알 수 있습니다. ztp-done 레이블은 구성이 적용되었고 기준 DU 구성의 클러스터 튜닝이 완료되었음을 보여줍니다.

GitOps ZTP 완료 상태로의 변경은 Red Hat Advanced Cluster Management(RHACM) 검증자 정보 정책의 규정 준수 상태에 따라 달라집니다. 이 정책은 완료된 설치에 대한 기존 기준을 파악하고 관리되는 클러스터의 GitOps ZTP 프로비저닝이 완료될 때만 해당 설치가 규정 준수 상태로 전환되는지 검증합니다.

검증자 알림 정책은 클러스터 구성이 완전히 적용되었고 운영자가 초기화를 완료했는지 확인합니다. 정책은 다음 사항을 검증합니다.

  • 대상 MachineConfigPool 에 예상 항목이 포함되어 있으며 업데이트가 완료되었습니다. 모든 노드가 사용 가능하며 성능이 저하되지 않았습니다.
  • SR-IOV 운영자는 최소한 하나의 SriovNetworkNodeStatesyncStatus: Succeeded 로 표시된 대로 초기화를 완료했습니다.
  • PTP 운영자 데몬 세트가 존재합니다.

9.2. PolicyGenerator 리소스를 사용한 고급 관리형 클러스터 구성

PolicyGenerator CR을 사용하면 관리되는 클러스터에 사용자 정의 기능을 배포할 수 있습니다. RHACM 및 PolicyGenerator CR을 사용하는 것은 정책을 관리하고 관리형 클러스터에 배포하는 데 권장되는 방법입니다. 이는 이 목적을 위해 PolicyGenTemplate CR을 사용하는 것을 대체합니다. PolicyGenerator 리소스에 대한 자세한 내용은 RHACM Policy Generator 설명서를 참조하세요.

9.2.1. 클러스터에 추가 변경 사항 배포

기본 GitOps Zero Touch Provisioning(ZTP) 파이프라인 구성 외부에서 클러스터 구성을 변경해야 하는 경우 다음 세 가지 옵션이 있습니다.

GitOps ZTP 파이프라인이 완료된 후 추가 구성을 적용합니다.
GitOps ZTP 파이프라인 배포가 완료되면 배포된 클러스터가 애플리케이션 워크로드에 대해 준비됩니다. 이 시점에서 추가 운영자를 설치하고 요구 사항에 맞는 구성을 적용할 수 있습니다. 추가 구성이 플랫폼 성능이나 할당된 CPU 예산에 부정적인 영향을 미치지 않는지 확인하세요.
GitOps ZTP 라이브러리에 콘텐츠 추가
GitOps ZTP 파이프라인을 사용하여 배포하는 기본 소스 사용자 정의 리소스(CR)는 필요에 따라 사용자 정의 콘텐츠로 확장될 수 있습니다.
클러스터 설치를 위한 추가 매니페스트를 만듭니다.
설치 중에 추가 매니페스트가 적용되어 설치 프로세스의 효율성이 높아집니다.
중요

추가 소스 CR을 제공하거나 기존 소스 CR을 수정하면 OpenShift Container Platform의 성능이나 CPU 프로필에 상당한 영향을 미칠 수 있습니다.

9.2.2. PolicyGenerator CR을 사용하여 소스 CR 콘텐츠 재정의

PolicyGenerator 사용자 정의 리소스(CR)를 사용하면 ztp-site-generate 컨테이너의 GitOps 플러그인과 함께 제공되는 기본 소스 CR 위에 추가 구성 세부 정보를 오버레이할 수 있습니다. PolicyGenerator CR은 기본 CR에 대한 논리적 병합이나 패치라고 생각할 수 있습니다. PolicyGenerator CR을 사용하여 기본 CR의 단일 필드를 업데이트하거나 기본 CR의 전체 내용을 오버레이합니다. 기본 CR에 없는 값을 업데이트하고 필드를 삽입할 수 있습니다.

다음 예제 절차에서는 acm-group-du-sno-ranGen.yaml 파일에 있는 PolicyGenerator CR을 기반으로 참조 구성에 대해 생성된 PerformanceProfile CR의 필드를 업데이트하는 방법을 설명합니다. 이 절차를 기반으로 요구 사항에 맞게 PolicyGenerator 의 다른 부분을 수정하세요.

사전 요구 사항

  • 사용자 정의 사이트 구성 데이터를 관리하는 Git 저장소를 만듭니다. 저장소는 허브 클러스터에서 접근할 수 있어야 하며 Argo CD의 소스 저장소로 정의되어야 합니다.

프로세스

  1. 기존 콘텐츠의 기본 소스 CR을 검토합니다. GitOps Zero Touch Provisioning(ZTP) 컨테이너에서 추출하여 참조 PolicyGenerator CR에 나열된 소스 CR을 검토할 수 있습니다.

    1. /out 폴더를 만듭니다.

      $ mkdir -p ./out
      Copy to Clipboard Toggle word wrap
    2. 소스 CR을 추출합니다.

      $ podman run --log-driver=none --rm registry.redhat.io/openshift4/ztp-site-generate-rhel8:v4.19.1 extract /home/ztp --tar | tar x -C ./out
      Copy to Clipboard Toggle word wrap
  2. ./out/source-crs/PerformanceProfile.yaml 에서 기준 PerformanceProfile CR을 검토합니다.

    apiVersion: performance.openshift.io/v2
    kind: PerformanceProfile
    metadata:
      name: $name
      annotations:
        ran.openshift.io/ztp-deploy-wave: "10"
    spec:
      additionalKernelArgs:
      - "idle=poll"
      - "rcupdate.rcu_normal_after_boot=0"
      cpu:
        isolated: $isolated
        reserved: $reserved
      hugepages:
        defaultHugepagesSize: $defaultHugepagesSize
        pages:
          - size: $size
            count: $count
            node: $node
      machineConfigPoolSelector:
        pools.operator.machineconfiguration.openshift.io/$mcp: ""
      net:
        userLevelNetworking: true
      nodeSelector:
        node-role.kubernetes.io/$mcp: ''
      numa:
        topologyPolicy: "restricted"
      realTimeKernel:
        enabled: true
    Copy to Clipboard Toggle word wrap
    참고

    PolicyGenerator CR에서 $…​를 포함하는 소스 CR의 모든 필드가 제공되지 않으면 생성된 CR에서 제거됩니다.

  3. acm-group-du-sno-ranGen.yaml 참조 파일에서 PerformanceProfile 에 대한 PolicyGenerator 항목을 업데이트합니다. 다음 예제 PolicyGenerator CR 연은 적절한 CPU 사양을 제공하고, hugepages 구성을 설정하고, globalDisableIrqLoadBalancing을 false로 설정하는 새 필드를 추가합니다.

    - path: source-crs/PerformanceProfile.yaml
      patches:
        - spec:
            # These must be tailored for the specific hardware platform
            cpu:
              isolated: "2-19,22-39"
              reserved: "0-1,20-21"
            hugepages:
              defaultHugepagesSize: 1G
              pages:
              - size: 1G
                count: 10
            globallyDisableIrqLoadBalancing: false
    Copy to Clipboard Toggle word wrap
  4. Git에서 PolicyGenerator 변경 사항을 커밋한 다음, GitOps ZTP argo CD 애플리케이션에서 모니터링하는 Git 저장소에 푸시합니다.

    출력 예

    GitOps ZTP 애플리케이션은 생성된 PerformanceProfile CR을 포함하는 RHACM 정책을 생성합니다. 해당 CR의 내용은 PolicyGeneratorPerformanceProfile 항목에 있는 메타데이터사양 내용을 소스 CR에 병합하여 파생됩니다. 결과 CR의 내용은 다음과 같습니다.

    ---
    apiVersion: performance.openshift.io/v2
    kind: PerformanceProfile
    metadata:
        name: openshift-node-performance-profile
    spec:
        additionalKernelArgs:
            - idle=poll
            - rcupdate.rcu_normal_after_boot=0
        cpu:
            isolated: 2-19,22-39
            reserved: 0-1,20-21
        globallyDisableIrqLoadBalancing: false
        hugepages:
            defaultHugepagesSize: 1G
            pages:
                - count: 10
                  size: 1G
        machineConfigPoolSelector:
            pools.operator.machineconfiguration.openshift.io/master: ""
        net:
            userLevelNetworking: true
        nodeSelector:
            node-role.kubernetes.io/master: ""
        numa:
            topologyPolicy: restricted
        realTimeKernel:
            enabled: true
    Copy to Clipboard Toggle word wrap
참고

ztp-site-generate 컨테이너에서 추출한 /source-crs 폴더에서 $ 구문은 구문에서 암시하는 대로 템플릿 대체에 사용되지 않습니다. 대신 policyGen 도구가 문자열에 대한 $ 접두사를 확인하고 관련 PolicyGenerator CR에서 해당 필드에 대한 값을 지정하지 않으면 해당 필드는 출력 CR에서 완전히 생략됩니다.

이에 대한 예외는 /source-crs YAML 파일의 $mcp 변수로, PolicyGenerator CR의 mcp 에 지정된 값으로 대체됩니다. 예를 들어 example/acmpolicygenerator/acm-group-du-standard-ranGen.yaml 에서 mcp 의 값은 worker 입니다.

spec:
  bindingRules:
    group-du-standard: ""
  mcp: "worker"
Copy to Clipboard Toggle word wrap

policyGen 도구는 출력 CR에서 $mcp 인스턴스를 worker 로 바꿉니다.

9.2.3. GitOps ZTP 파이프라인에 사용자 정의 콘텐츠 추가

GitOps ZTP 파이프라인에 새로운 콘텐츠를 추가하려면 다음 절차를 수행하세요.

프로세스

  1. PolicyGenerator 사용자 정의 리소스(CR)에 대한 kustomization.yaml 파일이 포함된 디렉토리에 source-crs 라는 하위 디렉토리를 만듭니다.
  2. 다음 예와 같이 사용자가 제공한 CR을 source-crs 하위 디렉토리에 추가합니다.

    example
    └── acmpolicygenerator
        ├── dev.yaml
        ├── kustomization.yaml
        ├── mec-edge-sno1.yaml
        ├── sno.yaml
        └── source-crs 
    1
    
            ├── PaoCatalogSource.yaml
            ├── PaoSubscription.yaml
            ├── custom-crs
            |   ├── apiserver-config.yaml
            |   └── disable-nic-lldp.yaml
            └── elasticsearch
                ├── ElasticsearchNS.yaml
                └── ElasticsearchOperatorGroup.yaml
    Copy to Clipboard Toggle word wrap
    1
    source-crs 하위 디렉토리는 kustomization.yaml 파일과 같은 디렉토리에 있어야 합니다.
  3. source-crs/custom-crssource-crs/elasticsearch 디렉토리에 추가한 콘텐츠에 대한 참조를 포함하도록 필수 PolicyGenerator CR을 업데이트합니다. 예를 들면 다음과 같습니다.

    apiVersion: policy.open-cluster-management.io/v1
    kind: PolicyGenerator
    metadata:
        name: group-dev
    placementBindingDefaults:
        name: group-dev-placement-binding
    policyDefaults:
        namespace: ztp-clusters
        placement:
            labelSelector:
                matchExpressions:
                    - key: dev
                      operator: In
                      values:
                        - "true"
        remediationAction: inform
        severity: low
        namespaceSelector:
            exclude:
                - kube-*
            include:
                - '*'
        evaluationInterval:
            compliant: 10m
            noncompliant: 10s
    policies:
        - name: group-dev-group-dev-cluster-log-ns
          policyAnnotations:
            ran.openshift.io/ztp-deploy-wave: "2"
          manifests:
            - path: source-crs/ClusterLogNS.yaml
        - name: group-dev-group-dev-cluster-log-operator-group
          policyAnnotations:
            ran.openshift.io/ztp-deploy-wave: "2"
          manifests:
            - path: source-crs/ClusterLogOperGroup.yaml
        - name: group-dev-group-dev-cluster-log-sub
          policyAnnotations:
            ran.openshift.io/ztp-deploy-wave: "2"
          manifests:
            - path: source-crs/ClusterLogSubscription.yaml
        - name: group-dev-group-dev-lso-ns
          policyAnnotations:
            ran.openshift.io/ztp-deploy-wave: "2"
          manifests:
            - path: source-crs/StorageNS.yaml
        - name: group-dev-group-dev-lso-operator-group
          policyAnnotations:
            ran.openshift.io/ztp-deploy-wave: "2"
          manifests:
            - path: source-crs/StorageOperGroup.yaml
        - name: group-dev-group-dev-lso-sub
          policyAnnotations:
            ran.openshift.io/ztp-deploy-wave: "2"
          manifests:
            - path: source-crs/StorageSubscription.yaml
        - name: group-dev-group-dev-pao-cat-source
          policyAnnotations:
            ran.openshift.io/ztp-deploy-wave: "1"
          manifests:
            - path: source-crs/PaoSubscriptionCatalogSource.yaml
              patches:
                - spec:
                    image: <container_image_url>
        - name: group-dev-group-dev-pao-ns
          policyAnnotations:
            ran.openshift.io/ztp-deploy-wave: "2"
          manifests:
            - path: source-crs/PaoSubscriptionNS.yaml
        - name: group-dev-group-dev-pao-sub
          policyAnnotations:
            ran.openshift.io/ztp-deploy-wave: "2"
          manifests:
            - path: source-crs/PaoSubscription.yaml
        - name: group-dev-group-dev-elasticsearch-ns
          policyAnnotations:
            ran.openshift.io/ztp-deploy-wave: "2"
          manifests:
            - path: elasticsearch/ElasticsearchNS.yaml 
    1
    
        - name: group-dev-group-dev-elasticsearch-operator-group
          policyAnnotations:
            ran.openshift.io/ztp-deploy-wave: "2"
          manifests:
            - path: elasticsearch/ElasticsearchOperatorGroup.yaml
        - name: group-dev-group-dev-apiserver-config
          policyAnnotations:
            ran.openshift.io/ztp-deploy-wave: "2"
          manifests:
            - path: custom-crs/apiserver-config.yaml 
    2
    
        - name: group-dev-group-dev-disable-nic-lldp
          policyAnnotations:
            ran.openshift.io/ztp-deploy-wave: "2"
          manifests:
            - path: custom-crs/disable-nic-lldp.yaml
    Copy to Clipboard Toggle word wrap
    1 2
    /source-crs 상위 디렉터리의 파일에 대한 상대 경로를 포함하도록 policies.manifests.path를 설정합니다.
  4. Git에서 PolicyGenerator 변경 사항을 커밋한 다음, GitOps ZTP Argo CD 정책 애플리케이션에서 모니터링하는 Git 저장소에 푸시합니다.
  5. ClusterGroupUpgrade CR을 업데이트하여 변경된 PolicyGenerator를 포함하고 cgu-test.yaml 로 저장합니다. 다음 예에서는 생성된 cgu-test.yaml 파일을 보여줍니다.

    apiVersion: ran.openshift.io/v1alpha1
    kind: ClusterGroupUpgrade
    metadata:
      name: custom-source-cr
      namespace: ztp-clusters
    spec:
      managedPolicies:
        - group-dev-config-policy
      enable: true
      clusters:
      - cluster1
      remediationStrategy:
        maxConcurrency: 2
        timeout: 240
    Copy to Clipboard Toggle word wrap
  6. 다음 명령을 실행하여 업데이트된 ClusterGroupUpgrade CR을 적용합니다.

    $ oc apply -f cgu-test.yaml
    Copy to Clipboard Toggle word wrap

검증

  • 다음 명령을 실행하여 업데이트가 성공했는지 확인하세요.

    $ oc get cgu -A
    Copy to Clipboard Toggle word wrap

    출력 예

    NAMESPACE     NAME               AGE   STATE        DETAILS
    ztp-clusters  custom-source-cr   6s    InProgress   Remediating non-compliant policies
    ztp-install   cluster1           19h   Completed    All clusters are compliant with all the managed policies
    Copy to Clipboard Toggle word wrap

9.2.4. PolicyGenerator CR에 대한 정책 준수 평가 시간 초과 구성

허브 클러스터에 설치된 Red Hat Advanced Cluster Management(RHACM)를 사용하면 관리되는 클러스터가 적용된 정책을 준수하는지 모니터링하고 보고할 수 있습니다. RHACM은 정책 템플릿을 사용하여 미리 정의된 정책 컨트롤러와 정책을 적용합니다. 정책 컨트롤러는 Kubernetes 사용자 정의 리소스 정의(CRD) 인스턴스입니다.

PolicyGenerator 사용자 정의 리소스(CR)를 사용하여 기본 정책 평가 간격을 재정의할 수 있습니다. RHACM이 적용된 클러스터 정책을 다시 평가하기 전에 ConfigurationPolicy CR이 정책을 준수하거나 준수하지 않는 상태를 유지할 수 있는 기간을 정의하는 기간 설정을 구성합니다.

GitOps Zero Touch Provisioning(ZTP) 정책 생성기는 사전 정의된 정책 평가 간격으로 ConfigurationPolicy CR 정책을 생성합니다. 비준수 상태의 기본값은 10초입니다. 규정 준수 상태의 기본값은 10분입니다. 평가 간격을 비활성화하려면 값을 never 로 설정합니다.

사전 요구 사항

  • OpenShift CLI(oc)가 설치되어 있습니다.
  • cluster-admin 권한이 있는 사용자로 허브 클러스터에 로그인했습니다.
  • 사용자 정의 사이트 구성 데이터를 관리하는 Git 저장소를 만들었습니다.

프로세스

  1. PolicyGenerator CR의 모든 정책에 대한 평가 간격을 구성하려면 evaluationInterval 필드에 적절한 준수비준수 값을 설정합니다. 예를 들면 다음과 같습니다.

    policyDefaults:
      evaluationInterval:
        compliant: 30m
        noncompliant: 45s
    Copy to Clipboard Toggle word wrap
    참고

    특정 준수 상태에 도달한 후에도 정책 평가를 중단하지 않으려면 준수비준수 필드를 ' 절대 안 함'으로 설정할 수도 있습니다.

  2. PolicyGenerator CR에서 개별 정책 개체에 대한 평가 간격을 구성하려면 evaluationInterval 필드를 추가하고 적절한 값을 설정합니다. 예를 들면 다음과 같습니다.

    policies:
      - name: "sriov-sub-policy"
        manifests:
          - path: "SriovSubscription.yaml"
            evaluationInterval:
              compliant: never
              noncompliant: 10s
    Copy to Clipboard Toggle word wrap
  3. PolicyGenerator CR 파일을 Git 저장소에 커밋하고 변경 사항을 푸시합니다.

검증

관리되는 스포크 클러스터 정책이 예상 간격으로 모니터링되는지 확인하세요.

  1. 관리되는 클러스터에 클러스터 관리자 권한이 있는 사용자로 로그인합니다.
  2. open-cluster-management-agent-addon 네임스페이스에서 실행 중인 포드를 가져옵니다. 다음 명령을 실행합니다.

    $ oc get pods -n open-cluster-management-agent-addon
    Copy to Clipboard Toggle word wrap

    출력 예

    NAME                                         READY   STATUS    RESTARTS        AGE
    config-policy-controller-858b894c68-v4xdb    1/1     Running   22 (5d8h ago)   10d
    Copy to Clipboard Toggle word wrap

  3. config-policy-controller pod의 로그에서 예상 간격으로 적용된 정책이 평가되는지 확인하세요.

    $ oc logs -n open-cluster-management-agent-addon config-policy-controller-858b894c68-v4xdb
    Copy to Clipboard Toggle word wrap

    출력 예

    2022-05-10T15:10:25.280Z       info   configuration-policy-controller controllers/configurationpolicy_controller.go:166      Skipping the policy evaluation due to the policy not reaching the evaluation interval  {"policy": "compute-1-config-policy-config"}
    2022-05-10T15:10:25.280Z       info   configuration-policy-controller controllers/configurationpolicy_controller.go:166      Skipping the policy evaluation due to the policy not reaching the evaluation interval  {"policy": "compute-1-common-compute-1-catalog-policy-config"}
    Copy to Clipboard Toggle word wrap

배포된 클러스터의 GitOps Zero Touch Provisioning(ZTP) 설치 및 구성이 완료되면 신호를 보내는 검증자 알림 정책을 만듭니다. 이 정책은 단일 노드 OpenShift 클러스터, 3-노드 클러스터 및 표준 클러스터의 배포에 사용할 수 있습니다.

프로세스

  1. 소스 파일 validatorCRs/informDuValidator.yaml을 포함하는 독립 실행형 PolicyGenerator 사용자 정의 리소스(CR)를 만듭니다. 각 클러스터 유형마다 독립형 PolicyGenerator CR이 하나만 필요합니다. 예를 들어, 이 CR은 단일 노드 OpenShift 클러스터에 대한 검증자 정보 정책을 적용합니다.

    단일 노드 클러스터 검증기 정보 정책 CR(acm-group-du-sno-validator-ranGen.yaml) 예시

    apiVersion: policy.open-cluster-management.io/v1
    kind: PolicyGenerator
    metadata:
        name: group-du-sno-validator-latest
    placementBindingDefaults:
        name: group-du-sno-validator-latest-placement-binding
    policyDefaults:
        namespace: ztp-group
        placement:
            labelSelector:
                matchExpressions:
                    - key: du-profile
                      operator: In
                      values:
                        - latest
                    - key: group-du-sno
                      operator: Exists
                    - key: ztp-done
                      operator: DoesNotExist
        remediationAction: inform
        severity: low
        namespaceSelector:
            exclude:
                - kube-*
            include:
                - '*'
        evaluationInterval:
            compliant: 10m
            noncompliant: 10s
    policies:
        - name: group-du-sno-validator-latest-du-policy
          policyAnnotations:
            ran.openshift.io/ztp-deploy-wave: "10000"
          evaluationInterval:
            compliant: 5s
          manifests:
            - path: source-crs/validatorCRs/informDuValidator-MCP-master.yaml
    Copy to Clipboard Toggle word wrap

  2. Git 저장소에 PolicyGenerator CR 파일을 커밋하고 변경 사항을 푸시합니다.

9.2.6. PolicyGenerator CR을 사용하여 전원 상태 구성

낮은 지연 시간과 고성능 에지 배포를 위해서는 C-상태와 P-상태를 비활성화하거나 제한해야 합니다. 이 구성을 사용하면 CPU는 일정한 주파수, 일반적으로 최대 터보 주파수로 실행됩니다. 이를 통해 CPU가 항상 최대 속도로 실행되므로 성능이 높고 지연 시간이 짧아집니다. 이로 인해 워크로드에 대한 최적의 대기 시간이 발생합니다. 하지만 이로 인해 전력 소모가 가장 높아지는데, 이는 모든 작업 부하에 필요하지 않을 수도 있습니다.

워크로드는 중요 워크로드와 비중요 워크로드로 분류할 수 있습니다. 중요 워크로드는 높은 성능과 낮은 지연 시간을 위해 비활성화된 C-상태 및 P-상태 설정이 필요하고, 비중요 워크로드는 일부 지연 시간과 성능을 희생하여 전력을 절약하기 위해 C-상태 및 P-상태 설정을 사용합니다. GitOps Zero Touch Provisioning(ZTP)을 사용하여 다음 세 가지 전원 상태를 구성할 수 있습니다.

  • 고성능 모드는 가장 높은 전력 소비에서도 매우 낮은 지연 시간을 제공합니다.
  • 성능 모드는 상대적으로 높은 전력 소비로 낮은 지연 시간을 제공합니다.
  • 전력 절감은 대기 시간이 증가하여 전력 소비를 줄일 수 있습니다.

기본 구성은 낮은 지연 시간과 성능 모드입니다.

PolicyGenerator 사용자 정의 리소스(CR)를 사용하면 ztp-site-generate 컨테이너의 GitOps 플러그인과 함께 제공되는 기본 소스 CR에 추가 구성 세부 정보를 오버레이할 수 있습니다.

acm-group-du-sno-ranGen.yamlPolicyGenerator CR을 기반으로 참조 구성에 대한 생성된 PerformanceProfile CR의 workloadHints 필드를 업데이트하여 전원 상태를 구성합니다.

다음은 세 가지 전원 상태를 구성하는 데 적용되는 일반적인 전제 조건입니다.

사전 요구 사항

  • 사용자 정의 사이트 구성 데이터를 관리하는 Git 저장소를 만들었습니다. 저장소는 허브 클러스터에서 접근할 수 있어야 하며 Argo CD의 소스 저장소로 정의되어야 합니다.
  • " GitOps ZTP 사이트 구성 리포지토리 준비"에 설명된 절차를 수행했습니다.
9.2.6.1. PolicyGenerator CR을 사용하여 성능 모드 구성

acm-group-du-sno-ranGen.yamlPolicyGenerator CR을 기반으로 참조 구성에 대한 생성된 PerformanceProfile CR의 workloadHints 필드를 업데이트하여 성능 모드를 설정하는 이 예제를 따르세요.

성능 모드는 상대적으로 높은 전력 소비로 낮은 지연 시간을 제공합니다.

사전 요구 사항

  • "낮은 지연 시간과 높은 성능을 위한 호스트 펌웨어 구성"의 지침에 따라 성능 관련 설정으로 BIOS를 구성했습니다.

프로세스

  1. out/argocd/example/acmpolicygenerator// 에 있는 acm-group-du-sno-ranGen.yaml 참조 파일의 PerformanceProfile 에 대한 PolicyGenerator 항목을 다음과 같이 업데이트하여 성능 모드를 설정합니다.

    - path: source-crs/PerformanceProfile.yaml
      patches:
        - spec:
            workloadHints:
                 realTime: true
                 highPowerConsumption: false
                 perPodPowerManagement: false
    Copy to Clipboard Toggle word wrap
  2. Git에서 PolicyGenerator 변경 사항을 커밋한 다음, GitOps ZTP Argo CD 애플리케이션에서 모니터링하는 Git 저장소에 푸시합니다.
9.2.6.2. PolicyGenerator CR을 사용하여 고성능 모드 구성

acm-group-du-sno-ranGen.yamlPolicyGenerator CR을 기반으로 참조 구성에 대한 생성된 PerformanceProfile CR의 workloadHints 필드를 업데이트하여 고성능 모드를 설정하는 이 예제를 따르세요.

고성능 모드는 가장 높은 전력 소비에서도 매우 낮은 지연 시간을 제공합니다.

사전 요구 사항

  • "낮은 지연 시간과 높은 성능을 위한 호스트 펌웨어 구성"의 지침에 따라 성능 관련 설정으로 BIOS를 구성했습니다.

프로세스

  1. out/argocd/example/acmpolicygenerator/ 에 있는 acm-group-du-sno-ranGen.yaml 참조 파일의 PerformanceProfile 에 대한 PolicyGenerator 항목을 다음과 같이 업데이트하여 고성능 모드를 설정합니다.

    - path: source-crs/PerformanceProfile.yaml
      patches:
        - spec:
            workloadHints:
                 realTime: true
                 highPowerConsumption: true
                 perPodPowerManagement: false
    Copy to Clipboard Toggle word wrap
  2. Git에서 PolicyGenerator 변경 사항을 커밋한 다음, GitOps ZTP Argo CD 애플리케이션에서 모니터링하는 Git 저장소에 푸시합니다.
9.2.6.3. PolicyGenerator CR을 사용하여 절전 모드 구성

acm-group-du-sno-ranGen.yamlPolicyGenerator CR을 기반으로 참조 구성에 대해 생성된 PerformanceProfile CR의 workloadHints 필드를 업데이트하여 절전 모드를 설정하는 이 예제를 따르세요.

절전 모드는 전력 소비를 줄이는 것과 지연 시간을 늘리는 것의 균형을 맞춥니다.

사전 요구 사항

  • BIOS에서 C-상태와 OS 제어 P-상태를 활성화했습니다.

프로세스

  1. out/argocd/example/acmpolicygenerator/ 에 있는 acm-group-du-sno-ranGen.yaml 참조 파일의 PerformanceProfile 에 대한 PolicyGenerator 항목을 다음과 같이 업데이트하여 전원 절약 모드를 구성합니다. 추가 커널 인수 객체를 통해 CPU 관리자를 절전 모드로 구성하는 것이 좋습니다.

    - path: source-crs/PerformanceProfile.yaml
      patches:
        - spec:
            # ...
            workloadHints:
              realTime: true
              highPowerConsumption: false
              perPodPowerManagement: true
            # ...
            additionalKernelArgs:
              - # ...
              - "cpufreq.default_governor=schedutil" 
    1
    Copy to Clipboard Toggle word wrap
    1
    schedutil 관리자를 사용하는 것이 좋지만 ondemandpowersave 등 다른 관리자를 사용할 수도 있습니다.
  2. Git에서 PolicyGenerator 변경 사항을 커밋한 다음, GitOps ZTP Argo CD 애플리케이션에서 모니터링하는 Git 저장소에 푸시합니다.

검증

  1. 다음 명령을 사용하여 식별된 노드 목록에서 배포된 클러스터의 작업자 노드를 선택합니다.

    $ oc get nodes
    Copy to Clipboard Toggle word wrap
  2. 다음 명령을 사용하여 노드에 로그인합니다.

    $ oc debug node/<node-name>
    Copy to Clipboard Toggle word wrap

    <노드 이름>을 전원 상태를 확인하려는 노드의 이름으로 바꾸세요.

  3. 디버그 쉘 내에서 /host를 root 디렉터리로 설정합니다. 디버그 Pod는 Pod 내의 /host에 호스트의 루트 파일 시스템을 마운트합니다. 루트 디렉토리를 /host 로 변경하면 다음 예와 같이 호스트의 실행 파일 경로에 포함된 바이너리를 실행할 수 있습니다.

    # chroot /host
    Copy to Clipboard Toggle word wrap
  4. 다음 명령을 실행하여 적용된 전원 상태를 확인하세요.

    # cat /proc/cmdline
    Copy to Clipboard Toggle word wrap

예상 출력

  • 절전 모드의 경우 intel_pstate=passive 입니다 .
9.2.6.4. 전원 비용 절감 극대화

최대 CPU 빈도를 제한하면 최대 전력 절감이 권장됩니다. 최대 CPU 빈도를 제한하지 않고 중요하지 않은 워크로드 CPU에서 C 상태를 활성화하면 중요한 CPU의 빈도를 높임으로써 전력 절감이 거의 발생하지 않습니다.

sysfs 플러그인 필드를 업데이트하여 전력 절감을 극대화하고 참조 구성에 대한 TunedPerformancePatch CR의 max_perf_pct 에 대한 적절한 값을 설정합니다. acm-group-du-sno-ranGen.yaml 을 기반으로 하는 이 예제에서는 최대 CPU 빈도를 제한하는 절차를 설명합니다.

사전 요구 사항

  • " PolicyGenerator CR 사용으로 전원 절약 모드"에 설명된 대로 전원 절약 모드를 구성했습니다.

프로세스

  1. out/argocd/example/acmpolicygenerator/ 에서 acm-group-du-sno-ranGen.yaml 참조 파일에서 TunedPerformancePatch 에 대한 PolicyGenerator 항목을 업데이트합니다. 전원 절감을 극대화하려면 다음 예와 같이 max_perf_pct 를 추가합니다.

    - path: source-crs/TunedPerformancePatch.yaml
      patches:
        - spec:
          profile:
            - name: performance-patch
              data: |
                # ...
                [sysfs]
                /sys/devices/system/cpu/intel_pstate/max_perf_pct=<x> 
    1
    Copy to Clipboard Toggle word wrap
    1
    max_perf_pctcpufreq 드라이버가 지원되는 최대 CPU 빈도의 백분율로 설정할 수 있는 최대 빈도를 제어합니다. 이 값은 모든 CPU에 적용됩니다. /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_max_freq 에서 지원되는 최대 빈도를 확인할 수 있습니다. 시작점으로 모든 CPU를 모든 코어 frequency로 제한하는 백분율로 사용할 수 있습니다. All Cores Cryostat 빈도는 코어가 완전히 비어 있을 때 모든 코어가 실행되는 빈도입니다.
    참고

    전력 절감을 극대화하려면 더 낮은 가치를 설정하십시오. max_perf_pct 에 대한 더 낮은 값을 설정하면 최대 CPU 빈도가 제한되므로 전력 소비가 줄어들지만 잠재적으로 성능에 영향을 미칠 수 있습니다. 다양한 값을 실험하고 시스템의 성능 및 전력 소비를 모니터링하여 사용 사례에 가장 적합한 설정을 찾습니다.

  2. Git에서 PolicyGenerator 변경 사항을 커밋한 다음 GitOps ZTP Argo CD 애플리케이션에서 모니터링하는 Git 리포지토리로 내보냅니다.

9.2.7. PolicyGenerator CR을 사용하여 LVM 스토리지 구성

ZTP(ZTP)를 사용하여 배포하는 관리형 클러스터에 대해 LVM(Logical Volume Manager) 스토리지를 구성할 수 있습니다.

참고

HTTP 전송과 함께 PTP 이벤트 또는 베어 메탈 하드웨어 이벤트를 사용할 때 LVM 스토리지를 사용하여 이벤트 서브스크립션을 유지합니다.

분산 단위로 로컬 볼륨을 사용하는 영구 스토리지에 Local Storage Operator를 사용합니다.

사전 요구 사항

  • OpenShift CLI(oc)를 설치합니다.
  • cluster-admin 권한이 있는 사용자로 로그인합니다.
  • 사용자 지정 사이트 구성 데이터를 관리하는 Git 리포지토리를 생성합니다.

프로세스

  1. 새 관리 클러스터에 대해 LVM 스토리지를 구성하려면 acm-common-ranGen.yaml 파일의 policies.manifests 에 다음 YAML을 추가합니다.

    - name: subscription-policies
      policyAnnotations:
        ran.openshift.io/ztp-deploy-wave: "2"
      manifests:
        - path: source-crs/StorageLVMOSubscriptionNS.yaml
        - path: source-crs/StorageLVMOSubscriptionOperGroup.yaml
        - path: source-crs/StorageLVMOSubscription.yaml
          spec:
            name: lvms-operator
            channel: stable-4.19
    Copy to Clipboard Toggle word wrap
    참고

    스토리지 LVMO 서브스크립션은 더 이상 사용되지 않습니다. 향후 OpenShift Container Platform 릴리스에서는 스토리지 LVMO 서브스크립션을 사용할 수 없습니다. 대신 Storage LVMS 서브스크립션을 사용해야 합니다.

    OpenShift Container Platform 4.19에서는 LVMO 서브스크립션 대신 Storage LVMS 서브스크립션을 사용할 수 있습니다. LVMS 서브스크립션에는 acm-common-ranGen.yaml 파일의 수동 덮어쓰기가 필요하지 않습니다. 스토리지 LVMS 서브스크립션을 사용하려면 acm-common-ranGen.yaml 파일의 policies.manifests 에 다음 YAML을 추가합니다.

    - path: source-crs/StorageLVMSubscriptionNS.yaml
    - path: source-crs/StorageLVMSubscriptionOperGroup.yaml
    - path: source-crs/StorageLVMSubscription.yaml
    Copy to Clipboard Toggle word wrap
  2. 특정 그룹 또는 개별 사이트 구성 파일의 policies.manifestsLVMCluster CR을 추가합니다. 예를 들어 acm-group-du-sno-ranGen.yaml 파일에서 다음을 추가합니다.

    - fileName: StorageLVMCluster.yaml
      policyName: "lvms-config"
        metadata:
          name: "lvms-storage-cluster-config"
            spec:
              storage:
                deviceClasses:
                - name: vg1
                  thinPoolConfig:
                    name: thin-pool-1
                    sizePercent: 90
                    overprovisionRatio: 10
    Copy to Clipboard Toggle word wrap

    이 예제 구성은 OpenShift Container Platform이 설치된 디스크를 제외한 모든 사용 가능한 장치를 포함하는 볼륨 그룹( vg1 )을 생성합니다. thin-pool 논리 볼륨도 생성됩니다.

  3. 기타 필요한 변경 사항 및 파일을 사용자 지정 사이트 리포지토리와 병합합니다.
  4. Git에서 PolicyGenerator 변경 사항을 커밋한 다음 사이트 구성 리포지토리로 변경 사항을 내보내 GitOps ZTP를 사용하여 새 사이트에 LVM 스토리지를 배포합니다.

9.2.8. PolicyGenerator CR을 사용하여 PTP 이벤트 구성

GitOps ZTP 파이프라인을 사용하여 HTTP 전송을 사용하는 PTP 이벤트를 구성할 수 있습니다.

9.2.8.1. HTTP 전송을 사용하는 PTP 이벤트 구성

ZTP(ZTP) 파이프라인으로 배포하는 관리형 클러스터에서 HTTP 전송을 사용하는 PTP 이벤트를 구성할 수 있습니다.

사전 요구 사항

  • OpenShift CLI(oc)가 설치되어 있습니다.
  • cluster-admin 권한이 있는 사용자로 로그인했습니다.
  • 사용자 지정 사이트 구성 데이터를 관리하는 Git 리포지토리를 생성했습니다.

프로세스

  1. 요구 사항에 따라 acm-group-du-3node-ranGen.yaml,acm-group-du-sno-ranGen.yaml 또는 acm-group-du-standard-ranGen.yaml 파일에 다음 PolicyGenerator 변경 사항을 적용합니다.

    1. policies.manifests 에서 전송 호스트를 구성하는 PtpOperatorConfig CR 파일을 추가합니다.

      - path: source-crs/PtpOperatorConfigForEvent.yaml
        patches:
        - metadata:
            name: default
            namespace: openshift-ptp
            annotations:
              ran.openshift.io/ztp-deploy-wave: "10"
          spec:
            daemonNodeSelector:
              node-role.kubernetes.io/$mcp: ""
            ptpEventConfig:
              enableEventPublisher: true
              transportHost: "http://ptp-event-publisher-service-NODE_NAME.openshift-ptp.svc.cluster.local:9043"
      Copy to Clipboard Toggle word wrap
      참고

      OpenShift Container Platform 4.13 이상에서는 PTP 이벤트와 함께 HTTP 전송을 사용할 때 PtpOperatorConfig 리소스에서 transportHost 필드를 설정할 필요가 없습니다.

    2. PTP 클럭 유형 및 인터페이스에 대해 linuxptpphc2sys 를 구성합니다. 예를 들어 policies.manifests 에 다음 YAML을 추가합니다.

      - path: source-crs/PtpConfigSlave.yaml 
      1
      
        patches:
        - metadata:
            name: "du-ptp-slave"
          spec:
            recommend:
            - match:
              - nodeLabel: node-role.kubernetes.io/master
              priority: 4
              profile: slave
            profile:
            - name: "slave"
              # This interface must match the hardware in this group
              interface: "ens5f0" 
      2
      
              ptp4lOpts: "-2 -s --summary_interval -4" 
      3
      
              phc2sysOpts: "-a -r -n 24" 
      4
      
              ptpSchedulingPolicy: SCHED_FIFO
              ptpSchedulingPriority: 10
              ptpSettings:
                logReduce: "true"
              ptp4lConf: |
                [global]
                #
                # Default Data Set
                #
                twoStepFlag 1
                slaveOnly 1
                priority1 128
                priority2 128
                domainNumber 24
                #utc_offset 37
                clockClass 255
                clockAccuracy 0xFE
                offsetScaledLogVariance 0xFFFF
                free_running 0
                freq_est_interval 1
                dscp_event 0
                dscp_general 0
                dataset_comparison G.8275.x
                G.8275.defaultDS.localPriority 128
                #
                # Port Data Set
                #
                logAnnounceInterval -3
                logSyncInterval -4
                logMinDelayReqInterval -4
                logMinPdelayReqInterval -4
                announceReceiptTimeout 3
                syncReceiptTimeout 0
                delayAsymmetry 0
                fault_reset_interval -4
                neighborPropDelayThresh 20000000
                masterOnly 0
                G.8275.portDS.localPriority 128
                #
                # Run time options
                #
                assume_two_step 0
                logging_level 6
                path_trace_enabled 0
                follow_up_info 0
                hybrid_e2e 0
                inhibit_multicast_service 0
                net_sync_monitor 0
                tc_spanning_tree 0
                tx_timestamp_timeout 50
                unicast_listen 0
                unicast_master_table 0
                unicast_req_duration 3600
                use_syslog 1
                verbose 0
                summary_interval 0
                kernel_leap 1
                check_fup_sync 0
                clock_class_threshold 7
                #
                # Servo Options
                #
                pi_proportional_const 0.0
                pi_integral_const 0.0
                pi_proportional_scale 0.0
                pi_proportional_exponent -0.3
                pi_proportional_norm_max 0.7
                pi_integral_scale 0.0
                pi_integral_exponent 0.4
                pi_integral_norm_max 0.3
                step_threshold 2.0
                first_step_threshold 0.00002
                max_frequency 900000000
                clock_servo pi
                sanity_freq_limit 200000000
                ntpshm_segment 0
                #
                # Transport options
                #
                transportSpecific 0x0
                ptp_dst_mac 01:1B:19:00:00:00
                p2p_dst_mac 01:80:C2:00:00:0E
                udp_ttl 1
                udp6_scope 0x0E
                uds_address /var/run/ptp4l
                #
                # Default interface options
                #
                clock_type OC
                network_transport L2
                delay_mechanism E2E
                time_stamping hardware
                tsproc_mode filter
                delay_filter moving_median
                delay_filter_length 10
                egressLatency 0
                ingressLatency 0
                boundary_clock_jbod 0
                #
                # Clock description
                #
                productDescription ;;
                revisionData ;;
                manufacturerIdentity 00:00:00
                userDescription ;
                timeSource 0xA0
            ptpClockThreshold: 
      5
      
              holdOverTimeout: 30 # seconds
              maxOffsetThreshold: 100  # nano seconds
              minOffsetThreshold: -100
      Copy to Clipboard Toggle word wrap
      1
      요구 사항에 따라 PtpConfigMaster.yaml 또는 PtpConfigSlave.yaml 일 수 있습니다. acm-group-du-sno-ranGen.yaml 또는 acm-group-du-3node-ranGen.yaml 기반 구성의 경우 PtpConfigSlave.yaml 을 사용합니다.
      2
      장치별 인터페이스 이름입니다.
      3
      PTP 빠른 이벤트를 활성화하려면 .spec.sourceFiles.spec.profileptp4lOpts--summary_interval -4 값을 추가해야 합니다.
      4
      필수 phc2sysOpts 값. -m 은 메시지를 stdout 에 출력합니다. linuxptp-daemon DaemonSet 은 로그를 구문 분석하고 Prometheus 지표를 생성합니다.
      5
      선택 사항: ptpClockThreshold 스탠자가 없으면 ptpClockThreshold 필드에 기본값이 사용됩니다. 스탠자는 기본 ptpClockThreshold 값을 표시합니다. ptpClockThreshold 값은 PTP 이벤트가 트리거되기 전에 PTP 마스터 클록의 연결이 해제된 후의 시간을 구성합니다. holdOverTimeout 은 PTP 마스터 클록의 연결이 끊어지면 PTP 클럭 이벤트 상태가 Free RUN 으로 변경되기 전의 시간(초)입니다. maxOffsetThresholdminOffsetThreshold 설정은 CLOCK_REALTIME (phc2sys) 또는 master 오프셋(ptp4l)의 값과 비교하는 오프셋 값을 나노초로 구성합니다. ptp4l 또는 phc2sys 오프셋 값이 이 범위를 벗어나는 경우 PTP 클럭 상태가 Free RUN으로 설정됩니다. 오프셋 값이 이 범위 내에 있으면 PTP 클럭 상태가 LOCKED 로 설정됩니다.
  2. 기타 필요한 변경 사항 및 파일을 사용자 지정 사이트 리포지토리와 병합합니다.
  3. GitOps ZTP를 사용하여 새 사이트에 PTP 빠른 이벤트를 배포하려면 사이트 구성 리포지토리로 변경 사항을 푸시합니다.

9.2.9. 이미지 로컬 캐싱을 위해 Image Registry Operator 구성

OpenShift Container Platform은 로컬 레지스트리를 사용하여 이미지 캐싱을 관리합니다. 에지 컴퓨팅 사용 사례에서 클러스터는 중앙 집중식 이미지 레지스트리와 통신할 때 대역폭 제한의 영향을 받는 경우가 많기 때문에 이미지 다운로드 시간이 길어질 수 있습니다.

초기 배포 시에는 다운로드 시간이 길어지는 것은 불가피합니다. 시간이 지남에 따라 CRI-O에서 예기치 않은 종료의 경우 /var/lib/containers/storage 디렉터리를 지울 위험이 있습니다. 긴 이미지 다운로드 시간을 해결하기 위해ZTP( GitOps Zero Touch Provisioning)를 사용하여 원격 관리 클러스터에 로컬 이미지 레지스트리를 생성할 수 있습니다. 이는 클러스터가 네트워크의 맨 에지에 배포되는 에지 컴퓨팅 시나리오에서 유용합니다.

GitOps ZTP를 사용하여 로컬 이미지 레지스트리를 설정하려면 원격 관리 클러스터를 설치하는 데 사용하는 SiteConfig CR에서 디스크 파티션을 구성해야 합니다. 설치 후 PolicyGenerator CR을 사용하여 로컬 이미지 레지스트리를 구성합니다. 그런 다음 GitOps ZTP 파이프라인은 PV(영구 볼륨) 및 PVC(영구 볼륨 클레임) CR을 생성하고 imageregistry 구성을 패치합니다.

참고

로컬 이미지 레지스트리는 사용자 애플리케이션 이미지에만 사용할 수 있으며 OpenShift Container Platform 또는 Operator Lifecycle Manager Operator 이미지에는 사용할 수 없습니다.

9.2.9.1. siteConfig를 사용하여 디스크 파티션 구성

SiteConfig CR 및 GitOps ZTP(ZTP)를 사용하여 관리 클러스터에 대한 디스크 파티션을 구성합니다. SiteConfig CR의 디스크 파티션 세부 정보는 기본 디스크와 일치해야 합니다.

중요

설치 시 이 절차를 완료해야 합니다.

사전 요구 사항

  • Butane을 설치합니다.

프로세스

  1. storage.bu 파일을 생성합니다.

    variant: fcos
    version: 1.3.0
    storage:
      disks:
      - device: /dev/disk/by-path/pci-0000:01:00.0-scsi-0:2:0:0 
    1
    
        wipe_table: false
        partitions:
        - label: var-lib-containers
          start_mib: <start_of_partition> 
    2
    
          size_mib: <partition_size> 
    3
    
      filesystems:
        - path: /var/lib/containers
          device: /dev/disk/by-partlabel/var-lib-containers
          format: xfs
          wipe_filesystem: true
          with_mount_unit: true
          mount_options:
            - defaults
            - prjquota
    Copy to Clipboard Toggle word wrap
    1
    root 디스크를 지정합니다.
    2
    MiB로 파티션의 시작을 지정합니다. 값이 너무 작으면 설치에 실패합니다.
    3
    파티션의 크기를 지정합니다. 값이 너무 작으면 배포에 실패합니다.
  2. 다음 명령을 실행하여 storage.bu 를 Ignition 파일로 변환합니다.

    $ butane storage.bu
    Copy to Clipboard Toggle word wrap

    출력 예

    {"ignition":{"version":"3.2.0"},"storage":{"disks":[{"device":"/dev/disk/by-path/pci-0000:01:00.0-scsi-0:2:0:0","partitions":[{"label":"var-lib-containers","sizeMiB":0,"startMiB":250000}],"wipeTable":false}],"filesystems":[{"device":"/dev/disk/by-partlabel/var-lib-containers","format":"xfs","mountOptions":["defaults","prjquota"],"path":"/var/lib/containers","wipeFilesystem":true}]},"systemd":{"units":[{"contents":"# # Generated by Butane\n[Unit]\nRequires=systemd-fsck@dev-disk-by\\x2dpartlabel-var\\x2dlib\\x2dcontainers.service\nAfter=systemd-fsck@dev-disk-by\\x2dpartlabel-var\\x2dlib\\x2dcontainers.service\n\n[Mount]\nWhere=/var/lib/containers\nWhat=/dev/disk/by-partlabel/var-lib-containers\nType=xfs\nOptions=defaults,prjquota\n\n[Install]\nRequiredBy=local-fs.target","enabled":true,"name":"var-lib-containers.mount"}]}}
    Copy to Clipboard Toggle word wrap

  3. JSON Pretty Print 와 같은 도구를 사용하여 출력을 JSON 형식으로 변환합니다.
  4. 출력을 SiteConfig CR의 .spec.clusters.nodes.ignitionConfigOverride 필드에 복사합니다.

    [...]
    spec:
      clusters:
        - nodes:
            - ignitionConfigOverride: |
              {
                "ignition": {
                  "version": "3.2.0"
                },
                "storage": {
                  "disks": [
                    {
                      "device": "/dev/disk/by-path/pci-0000:01:00.0-scsi-0:2:0:0",
                      "partitions": [
                        {
                          "label": "var-lib-containers",
                          "sizeMiB": 0,
                          "startMiB": 250000
                        }
                      ],
                      "wipeTable": false
                    }
                  ],
                  "filesystems": [
                    {
                      "device": "/dev/disk/by-partlabel/var-lib-containers",
                      "format": "xfs",
                      "mountOptions": [
                        "defaults",
                        "prjquota"
                      ],
                      "path": "/var/lib/containers",
                      "wipeFilesystem": true
                    }
                  ]
                },
                "systemd": {
                  "units": [
                    {
                      "contents": "# # Generated by Butane\n[Unit]\nRequires=systemd-fsck@dev-disk-by\\x2dpartlabel-var\\x2dlib\\x2dcontainers.service\nAfter=systemd-fsck@dev-disk-by\\x2dpartlabel-var\\x2dlib\\x2dcontainers.service\n\n[Mount]\nWhere=/var/lib/containers\nWhat=/dev/disk/by-partlabel/var-lib-containers\nType=xfs\nOptions=defaults,prjquota\n\n[Install]\nRequiredBy=local-fs.target",
                      "enabled": true,
                      "name": "var-lib-containers.mount"
                    }
                  ]
                }
              }
    [...]
    Copy to Clipboard Toggle word wrap

    참고

    .spec.clusters.nodes.ignitionConfigOverride 필드가 없는 경우 생성합니다.

검증

  1. 설치 중 또는 설치 후 hub 클러스터에서 BareMetalHost 오브젝트가 다음 명령을 실행하여 주석을 표시하는지 확인합니다.

    $ oc get bmh -n my-sno-ns my-sno -ojson | jq '.metadata.annotations["bmac.agent-install.openshift.io/ignition-config-overrides"]
    Copy to Clipboard Toggle word wrap

    출력 예

    "{\"ignition\":{\"version\":\"3.2.0\"},\"storage\":{\"disks\":[{\"device\":\"/dev/disk/by-id/wwn-0x6b07b250ebb9d0002a33509f24af1f62\",\"partitions\":[{\"label\":\"var-lib-containers\",\"sizeMiB\":0,\"startMiB\":250000}],\"wipeTable\":false}],\"filesystems\":[{\"device\":\"/dev/disk/by-partlabel/var-lib-containers\",\"format\":\"xfs\",\"mountOptions\":[\"defaults\",\"prjquota\"],\"path\":\"/var/lib/containers\",\"wipeFilesystem\":true}]},\"systemd\":{\"units\":[{\"contents\":\"# Generated by Butane\\n[Unit]\\nRequires=systemd-fsck@dev-disk-by\\\\x2dpartlabel-var\\\\x2dlib\\\\x2dcontainers.service\\nAfter=systemd-fsck@dev-disk-by\\\\x2dpartlabel-var\\\\x2dlib\\\\x2dcontainers.service\\n\\n[Mount]\\nWhere=/var/lib/containers\\nWhat=/dev/disk/by-partlabel/var-lib-containers\\nType=xfs\\nOptions=defaults,prjquota\\n\\n[Install]\\nRequiredBy=local-fs.target\",\"enabled\":true,\"name\":\"var-lib-containers.mount\"}]}}"
    Copy to Clipboard Toggle word wrap

  2. 설치 후 단일 노드 OpenShift 디스크 상태를 확인합니다.

    1. 다음 명령을 실행하여 단일 노드 OpenShift 노드에서 디버그 세션에 들어갑니다. 이 단계는 <node_name>-debug라는 디버그 Pod를 인스턴스화합니다.

      $ oc debug node/my-sno-node
      Copy to Clipboard Toggle word wrap
    2. 다음 명령을 실행하여 디버그 쉘 내에서 /host 를 root 디렉터리로 설정합니다. 디버그 Pod는 Pod 내의 /host에 호스트의 루트 파일 시스템을 마운트합니다. root 디렉토리를 /host로 변경하면 호스트의 실행 경로에 포함된 바이너리를 실행할 수 있습니다.

      # chroot /host
      Copy to Clipboard Toggle word wrap
    3. 다음 명령을 실행하여 사용 가능한 모든 블록 장치에 대한 정보를 나열합니다.

      # lsblk
      Copy to Clipboard Toggle word wrap

      출력 예

      NAME   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINTS
      sda      8:0    0 446.6G  0 disk
      ├─sda1   8:1    0     1M  0 part
      ├─sda2   8:2    0   127M  0 part
      ├─sda3   8:3    0   384M  0 part /boot
      ├─sda4   8:4    0 243.6G  0 part /var
      │                                /sysroot/ostree/deploy/rhcos/var
      │                                /usr
      │                                /etc
      │                                /
      │                                /sysroot
      └─sda5   8:5    0 202.5G  0 part /var/lib/containers
      Copy to Clipboard Toggle word wrap

    4. 다음 명령을 실행하여 파일 시스템 디스크 공간 사용량에 대한 정보를 표시합니다.

      # df -h
      Copy to Clipboard Toggle word wrap

      출력 예

      Filesystem      Size  Used Avail Use% Mounted on
      devtmpfs        4.0M     0  4.0M   0% /dev
      tmpfs           126G   84K  126G   1% /dev/shm
      tmpfs            51G   93M   51G   1% /run
      /dev/sda4       244G  5.2G  239G   3% /sysroot
      tmpfs           126G  4.0K  126G   1% /tmp
      /dev/sda5       203G  119G   85G  59% /var/lib/containers
      /dev/sda3       350M  110M  218M  34% /boot
      tmpfs            26G     0   26G   0% /run/user/1000
      Copy to Clipboard Toggle word wrap

9.2.9.2. PolicyGenerator CR을 사용하여 이미지 레지스트리 구성

PolicyGenerator (PGT) CR을 사용하여 이미지 레지스트리를 구성하는 데 필요한 CR을 적용하고 이미지 레지스트리 구성을 패치합니다.

사전 요구 사항

  • 관리되는 클러스터에 디스크 파티션을 구성했습니다.
  • OpenShift CLI(oc)가 설치되어 있습니다.
  • cluster-admin 권한이 있는 사용자로 허브 클러스터에 로그인했습니다.
  • GitOps Zero Touch Provisioning(ZTP)과 함께 사용할 사용자 지정 사이트 구성 데이터를 관리하는 Git 저장소를 만들었습니다.

프로세스

  1. 적절한 PolicyGenerator CR에서 스토리지 클래스, 영구 볼륨 클레임, 영구 볼륨 및 이미지 레지스트리 구성을 구성합니다. 예를 들어, 개별 사이트를 구성하려면 다음 YAML을 acm-example-sno-site.yaml 파일에 추가합니다.

    sourceFiles:
      # storage class
      - fileName: StorageClass.yaml
        policyName: "sc-for-image-registry"
        metadata:
          name: image-registry-sc
          annotations:
            ran.openshift.io/ztp-deploy-wave: "100" 
    1
    
      # persistent volume claim
      - fileName: StoragePVC.yaml
        policyName: "pvc-for-image-registry"
        metadata:
          name: image-registry-pvc
          namespace: openshift-image-registry
          annotations:
            ran.openshift.io/ztp-deploy-wave: "100"
        spec:
          accessModes:
            - ReadWriteMany
          resources:
            requests:
              storage: 100Gi
          storageClassName: image-registry-sc
          volumeMode: Filesystem
      # persistent volume
      - fileName: ImageRegistryPV.yaml 
    2
    
        policyName: "pv-for-image-registry"
        metadata:
          annotations:
            ran.openshift.io/ztp-deploy-wave: "100"
      - fileName: ImageRegistryConfig.yaml
        policyName: "config-for-image-registry"
        complianceType: musthave
        metadata:
          annotations:
            ran.openshift.io/ztp-deploy-wave: "100"
        spec:
          storage:
            pvc:
              claim: "image-registry-pvc"
    Copy to Clipboard Toggle word wrap
    1
    사이트, 공통 또는 그룹 수준에서 이미지 레지스트리를 구성하는지에 따라 ztp-deploy-wave 에 적절한 값을 설정합니다. ztp-deploy-wave: "100"은 참조된 소스 파일을 함께 그룹화할 수 있으므로 개발이나 테스트에 적합합니다.
    2
    ImageRegistryPV.yaml 에서 spec.local.path 필드가 SiteConfig CR의 mount_point 필드에 설정된 값과 일치하도록 /var/imageregistry 로 설정되어 있는지 확인합니다.
    중요

    - fileName: ImageRegistryConfig.yaml 구성에 대해 complianceType: mustonlyhave를 설정하지 마세요. 이로 인해 레지스트리 포드 배포가 실패할 수 있습니다.

  2. PolicyGenerator 변경 사항을 Git에 커밋한 다음, GitOps ZTP ArgoCD 애플리케이션에서 모니터링하는 Git 저장소에 푸시합니다.

검증

관리되는 클러스터의 로컬 이미지 레지스트리에서 발생하는 오류를 해결하려면 다음 단계를 따르세요.

  • 관리되는 클러스터에 로그인한 상태에서 레지스트리에 성공적으로 로그인했는지 확인합니다. 다음 명령을 실행하세요.

    1. 관리되는 클러스터 이름을 내보냅니다.

      $ cluster=<managed_cluster_name>
      Copy to Clipboard Toggle word wrap
    2. 관리되는 클러스터 kubeconfig 세부 정보를 가져옵니다.

      $ oc get secret -n $cluster $cluster-admin-password -o jsonpath='{.data.password}' | base64 -d > kubeadmin-password-$cluster
      Copy to Clipboard Toggle word wrap
    3. 클러스터 kubeconfig를 다운로드하고 내보냅니다.

      $ oc get secret -n $cluster $cluster-admin-kubeconfig -o jsonpath='{.data.kubeconfig}' | base64 -d > kubeconfig-$cluster && export KUBECONFIG=./kubeconfig-$cluster
      Copy to Clipboard Toggle word wrap
    4. 관리되는 클러스터에서 이미지 레지스트리에 대한 액세스를 확인합니다. "레지스트리 접근"을 참조하세요.
  • imageregistry.operator.openshift.io 그룹 인스턴스의 Config CRD가 오류를 보고하지 않는지 확인하세요. 관리되는 클러스터에 로그인한 상태에서 다음 명령을 실행합니다.

    $ oc get image.config.openshift.io cluster -o yaml
    Copy to Clipboard Toggle word wrap

    출력 예

    apiVersion: config.openshift.io/v1
    kind: Image
    metadata:
      annotations:
        include.release.openshift.io/ibm-cloud-managed: "true"
        include.release.openshift.io/self-managed-high-availability: "true"
        include.release.openshift.io/single-node-developer: "true"
        release.openshift.io/create-only: "true"
      creationTimestamp: "2021-10-08T19:02:39Z"
      generation: 5
      name: cluster
      resourceVersion: "688678648"
      uid: 0406521b-39c0-4cda-ba75-873697da75a4
    spec:
      additionalTrustedCA:
        name: acm-ice
    Copy to Clipboard Toggle word wrap

  • 관리되는 클러스터의 PersistentVolumeClaim 에 데이터가 채워졌는지 확인합니다. 관리되는 클러스터에 로그인한 상태에서 다음 명령을 실행합니다.

    $ oc get pv image-registry-sc
    Copy to Clipboard Toggle word wrap
  • registry* pod가 실행 중이고 openshift-image-registry 네임스페이스에 있는지 확인하세요.

    $ oc get pods -n openshift-image-registry | grep registry*
    Copy to Clipboard Toggle word wrap

    출력 예

    cluster-image-registry-operator-68f5c9c589-42cfg   1/1     Running     0          8d
    image-registry-5f8987879-6nx6h                     1/1     Running     0          8d
    Copy to Clipboard Toggle word wrap

  • 관리되는 클러스터의 디스크 파티션이 올바른지 확인하세요.

    1. 관리되는 클러스터에 대한 디버그 셸을 엽니다.

      $ oc debug node/sno-1.example.com
      Copy to Clipboard Toggle word wrap
    2. lsblk 를 실행하여 호스트 디스크 파티션을 확인합니다.

      sh-4.4# lsblk
      NAME   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
      sda      8:0    0 446.6G  0 disk
        |-sda1   8:1    0     1M  0 part
        |-sda2   8:2    0   127M  0 part
        |-sda3   8:3    0   384M  0 part /boot
        |-sda4   8:4    0 336.3G  0 part /sysroot
        `-sda5   8:5    0 100.1G  0 part /var/imageregistry 
      1
      
      sdb      8:16   0 446.6G  0 disk
      sr0     11:0    1   104M  0 rom
      Copy to Clipboard Toggle word wrap
      1
      /var/imageregistry는 디스크가 올바르게 파티션되었음을 나타냅니다.

GitOps Zero Touch Provisioning(ZTP) 및 Topology Aware Lifecycle Manager(TALM)를 사용하여 배포한 관리형 클러스터의 소프트웨어 수명 주기를 관리하려면 Topology Aware Lifecycle Manager(TALM)를 사용할 수 있습니다. TALM은 Red Hat Advanced Cluster Management(RHACM) PolicyGenerator 정책을 사용하여 대상 클러스터에 적용된 변경 사항을 관리하고 제어합니다.

중요

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

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

9.3.1. 연결이 끊긴 환경 설정

TALM은 플랫폼과 Operator 업데이트를 모두 수행할 수 있습니다.

TALM을 사용하여 연결이 끊긴 클러스터를 업데이트하려면 먼저 미러 레지스트리에서 업데이트하려는 플랫폼 이미지와 운영자 이미지를 모두 미러링해야 합니다. 이미지를 미러링하려면 다음 단계를 완료하세요.

  • 플랫폼을 업데이트하려면 다음 단계를 수행해야 합니다.

    1. 원하는 OpenShift Container Platform 이미지 저장소를 미러링합니다. 추가 리소스에 링크된 "OpenShift 컨테이너 플랫폼 이미지 저장소 미러링" 절차에 따라 원하는 플랫폼 이미지가 미러링되었는지 확인하세요. imageContentSources 섹션의 내용을 imageContentSources.yaml 파일에 저장합니다.

      출력 예

      imageContentSources:
       - mirrors:
         - mirror-ocp-registry.ibmcloud.io.cpak:5000/openshift-release-dev/openshift4
         source: quay.io/openshift-release-dev/ocp-release
       - mirrors:
         - mirror-ocp-registry.ibmcloud.io.cpak:5000/openshift-release-dev/openshift4
         source: quay.io/openshift-release-dev/ocp-v4.0-art-dev
      Copy to Clipboard Toggle word wrap

    2. 미러링된 원하는 플랫폼 이미지의 이미지 서명을 저장합니다. 플랫폼 업데이트를 위해 PolicyGenerator CR에 이미지 서명을 추가해야 합니다. 이미지 서명을 얻으려면 다음 단계를 수행하세요.

      1. 다음 명령을 실행하여 원하는 OpenShift Container Platform 태그를 지정합니다.

        $ OCP_RELEASE_NUMBER=<release_version>
        Copy to Clipboard Toggle word wrap
      2. 다음 명령을 실행하여 클러스터의 아키텍처를 지정합니다.

        $ ARCHITECTURE=<cluster_architecture> 
        1
        Copy to Clipboard Toggle word wrap
        1
        x86_64,aarch64,s390x 또는 ppc64le 과 같은 클러스터의 아키텍처를 지정합니다.
      3. 다음 명령을 실행하여 Quay에서 릴리스 이미지 다이제스트를 가져옵니다.

        $ DIGEST="$(oc adm release info quay.io/openshift-release-dev/ocp-release:${OCP_RELEASE_NUMBER}-${ARCHITECTURE} | sed -n 's/Pull From: .*@//p')"
        Copy to Clipboard Toggle word wrap
      4. 다음 명령을 실행하여 다이제스트 알고리즘을 설정하세요.

        $ DIGEST_ALGO="${DIGEST%%:*}"
        Copy to Clipboard Toggle word wrap
      5. 다음 명령을 실행하여 다이제스트 서명을 설정하세요.

        $ DIGEST_ENCODED="${DIGEST#*:}"
        Copy to Clipboard Toggle word wrap
      6. 다음 명령을 실행하여 mirror.openshift.com 웹사이트에서 이미지 서명을 가져옵니다.

        $ SIGNATURE_BASE64=$(curl -s "https://mirror.openshift.com/pub/openshift-v4/signatures/openshift/release/${DIGEST_ALGO}=${DIGEST_ENCODED}/signature-1" | base64 -w0 && echo)
        Copy to Clipboard Toggle word wrap
      7. 다음 명령을 실행하여 이미지 서명을 checksum-<OCP_RELEASE_NUMBER>.yaml 파일에 저장합니다.

        $ cat >checksum-${OCP_RELEASE_NUMBER}.yaml <<EOF
        ${DIGEST_ALGO}-${DIGEST_ENCODED}: ${SIGNATURE_BASE64}
        EOF
        Copy to Clipboard Toggle word wrap
    3. 업데이트 그래프를 준비합니다. 업데이트 그래프를 준비하는 데는 두 가지 옵션이 있습니다.

      1. OpenShift 업데이트 서비스를 사용하세요.

        허브 클러스터에서 그래프를 설정하는 방법에 대한 자세한 내용은 OpenShift Update Service에 대한 운영자 배포그래프 데이터 초기화 컨테이너 빌드를 참조하세요.

      2. 상류 그래프의 로컬 복사본을 만듭니다. 관리되는 클러스터에 액세스할 수 있는 연결이 끊긴 환경의 http 또는 https 서버에서 업데이트 그래프를 호스팅합니다. 업데이트 그래프를 다운로드하려면 다음 명령을 사용하세요.

        $ curl -s https://api.openshift.com/api/upgrades_info/v1/graph?channel=stable-4.19 -o ~/upgrade-graph_stable-4.19
        Copy to Clipboard Toggle word wrap
  • 운영자 업데이트를 위해서는 다음 작업을 수행해야 합니다.

    • 운영자 카탈로그를 미러링합니다. "연결이 끊긴 클러스터에 사용하기 위한 운영자 카탈로그 미러링" 섹션의 절차에 따라 원하는 운영자 이미지가 미러링되었는지 확인하세요.

9.3.2. PolicyGenerator CR을 사용하여 플랫폼 업데이트 수행

TALM을 사용하여 플랫폼 업데이트를 수행할 수 있습니다.

사전 요구 사항

  • TALM(Topology Aware Lifecycle Manager)을 설치합니다.
  • GitOps Zero Touch Provisioning(ZTP)을 최신 버전으로 업데이트합니다.
  • GitOps ZTP를 사용하여 하나 이상의 관리형 클러스터를 프로비저닝합니다.
  • 원하는 이미지 저장소를 미러링합니다.
  • cluster-admin 권한이 있는 사용자로 로그인합니다.
  • 허브 클러스터에서 RHACM 정책을 만듭니다.

프로세스

  1. 플랫폼 업데이트를 위한 PolicyGenerator CR을 만듭니다.

    1. 다음 PolicyGenerator CR을 du-upgrade.yaml 파일에 저장합니다.

      플랫폼 업데이트를 위한 PolicyGenerator 의 예

      apiVersion: policy.open-cluster-management.io/v1
      kind: PolicyGenerator
      metadata:
          name: du-upgrade
      placementBindingDefaults:
          name: du-upgrade-placement-binding
      policyDefaults:
          namespace: ztp-group-du-sno
          placement:
              labelSelector:
                  matchExpressions:
                      - key: group-du-sno
                        operator: Exists
          remediationAction: inform
          severity: low
          namespaceSelector:
              exclude:
                  - kube-*
              include:
                  - '*'
          evaluationInterval:
              compliant: 10m
              noncompliant: 10s
      policies:
          - name: du-upgrade-platform-upgrade
            policyAnnotations:
              ran.openshift.io/ztp-deploy-wave: "100"
            manifests:
              - path: source-crs/ClusterVersion.yaml 
      1
      
                patches:
                  - metadata:
                      name: version
                    spec:
                      channel: stable-4.19
                      desiredUpdate:
                          version: 4.19.4
                      upstream: http://upgrade.example.com/images/upgrade-graph_stable-4.19
                    status:
                      history:
                          - state: Completed
                            version: 4.19.4
          - name: du-upgrade-platform-upgrade-prep
            policyAnnotations:
              ran.openshift.io/ztp-deploy-wave: "1"
            manifests:
              - path: source-crs/ImageSignature.yaml 
      2
      
              - path: source-crs/DisconnectedICSP.yaml
                patches:
                  - metadata:
                      name: disconnected-internal-icsp-for-ocp
                    spec:
                      repositoryDigestMirrors: 
      3
      
                          - mirrors:
                              - quay-intern.example.com/ocp4/openshift-release-dev
                            source: quay.io/openshift-release-dev/ocp-release
                          - mirrors:
                              - quay-intern.example.com/ocp4/openshift-release-dev
                            source: quay.io/openshift-release-dev/ocp-v4.0-art-dev
      Copy to Clipboard Toggle word wrap

      1
      업데이트를 트리거하기 위한 ClusterVersion CR을 보여줍니다. channel , upstream , desiredVersion 필드는 모두 이미지 사전 캐싱에 필요합니다.
      2
      ImageSignature.yaml 에는 필요한 릴리스 이미지의 이미지 서명이 포함되어 있습니다. 이미지 서명은 플랫폼 업데이트를 적용하기 전에 이미지를 확인하는 데 사용됩니다.
      3
      필요한 OpenShift Container Platform 이미지가 포함된 미러 저장소를 표시합니다. "환경 설정" 섹션의 절차에 따라 저장한 imageContentSources.yaml 파일에서 미러를 가져옵니다.

      PolicyGenerator CR은 두 가지 정책을 생성합니다.

      • du-upgrade-platform-upgrade-prep 정책은 플랫폼 업데이트를 위한 준비 작업을 수행합니다. 원하는 릴리스 이미지 서명에 대한 ConfigMap CR을 생성하고, 미러링된 릴리스 이미지 저장소의 이미지 콘텐츠 소스를 생성하고, 연결이 끊긴 환경에서 관리되는 클러스터가 도달할 수 있는 업데이트 그래프와 원하는 업데이트 채널로 클러스터 버전을 업데이트합니다.
      • du-upgrade-platform-upgrade 정책은 플랫폼 업그레이드를 수행하는 데 사용됩니다.
    2. PolicyGenerator CR의 GitOps ZTP Git 저장소에 있는 kustomization.yaml 파일에 du-upgrade.yaml 파일 내용을 추가하고 변경 사항을 Git 저장소에 푸시합니다.

      ArgoCD는 Git 저장소에서 변경 사항을 가져와 허브 클러스터에 대한 정책을 생성합니다.

    3. 다음 명령을 실행하여 생성된 정책을 확인하세요.

      $ oc get policies -A | grep platform-upgrade
      Copy to Clipboard Toggle word wrap
  2. spec.enable 필드를 false 로 설정하여 플랫폼 업데이트에 대한 ClusterGroupUpdate CR을 만듭니다.

    1. 다음 예와 같이 du-upgrade-platform-upgrade-prepdu-upgrade-platform-upgrade 정책과 대상 클러스터를 사용하여 플랫폼 업데이트 ClusterGroupUpdate CR의 내용을 cgu-platform-upgrade.yml 파일에 저장합니다.

      apiVersion: ran.openshift.io/v1alpha1
      kind: ClusterGroupUpgrade
      metadata:
        name: cgu-platform-upgrade
        namespace: default
      spec:
        managedPolicies:
        - du-upgrade-platform-upgrade-prep
        - du-upgrade-platform-upgrade
        preCaching: false
        clusters:
        - spoke1
        remediationStrategy:
          maxConcurrency: 1
        enable: false
      Copy to Clipboard Toggle word wrap
    2. 다음 명령을 실행하여 허브 클러스터에 ClusterGroupUpdate CR을 적용합니다.

      $ oc apply -f cgu-platform-upgrade.yml
      Copy to Clipboard Toggle word wrap
  3. 선택 사항: 플랫폼 업데이트를 위해 이미지를 미리 캐시합니다.

    1. 다음 명령을 실행하여 ClusterGroupUpdate CR에서 사전 캐싱을 활성화합니다.

      $ oc --namespace=default patch clustergroupupgrade.ran.openshift.io/cgu-platform-upgrade \
      --patch '{"spec":{"preCaching": true}}' --type=merge
      Copy to Clipboard Toggle word wrap
    2. 업데이트 프로세스를 모니터링하고 사전 캐싱이 완료될 때까지 기다리세요. 허브 클러스터에서 다음 명령을 실행하여 사전 캐싱 상태를 확인하세요.

      $ oc get cgu cgu-platform-upgrade -o jsonpath='{.status.precaching.status}'
      Copy to Clipboard Toggle word wrap
  4. 플랫폼 업데이트를 시작합니다.

    1. 다음 명령을 실행하여 cgu-platform-upgrade 정책을 활성화하고 사전 캐싱을 비활성화합니다.

      $ oc --namespace=default patch clustergroupupgrade.ran.openshift.io/cgu-platform-upgrade \
      --patch '{"spec":{"enable":true, "preCaching": false}}' --type=merge
      Copy to Clipboard Toggle word wrap
    2. 과정을 모니터링합니다. 완료되면 다음 명령을 실행하여 정책이 준수되는지 확인하세요.

      $ oc get policies --all-namespaces
      Copy to Clipboard Toggle word wrap

9.3.3. PolicyGenerator CR을 사용하여 Operator 업데이트 수행

TALM을 사용하여 운영자 업데이트를 수행할 수 있습니다.

사전 요구 사항

  • TALM(Topology Aware Lifecycle Manager)을 설치합니다.
  • GitOps Zero Touch Provisioning(ZTP)을 최신 버전으로 업데이트합니다.
  • GitOps ZTP를 사용하여 하나 이상의 관리형 클러스터를 프로비저닝합니다.
  • 원하는 인덱스 이미지, 번들 이미지 및 번들 이미지에서 참조되는 모든 운영자 이미지를 미러링합니다.
  • cluster-admin 권한이 있는 사용자로 로그인합니다.
  • 허브 클러스터에서 RHACM 정책을 만듭니다.

프로세스

  1. 운영자 업데이트를 위해 PolicyGenerator CR을 업데이트합니다.

    1. du-upgrade.yaml 파일에 다음 추가 내용으로 du-upgrade PolicyGenerator CR을 업데이트합니다.

      apiVersion: policy.open-cluster-management.io/v1
      kind: PolicyGenerator
      metadata:
          name: du-upgrade
      placementBindingDefaults:
          name: du-upgrade-placement-binding
      policyDefaults:
          namespace: ztp-group-du-sno
          placement:
              labelSelector:
                  matchExpressions:
                      - key: group-du-sno
                        operator: Exists
          remediationAction: inform
          severity: low
          namespaceSelector:
              exclude:
                  - kube-*
              include:
                  - '*'
          evaluationInterval:
              compliant: 10m
              noncompliant: 10s
      policies:
          - name: du-upgrade-operator-catsrc-policy
            policyAnnotations:
              ran.openshift.io/ztp-deploy-wave: "1"
            manifests:
              - path: source-crs/DefaultCatsrc.yaml
                patches:
                  - metadata:
                      name: redhat-operators-disconnected
                    spec:
                      displayName: Red Hat Operators Catalog
                      image: registry.example.com:5000/olm/redhat-operators-disconnected:v4.19 
      1
      
                      updateStrategy: 
      2
      
                          registryPoll:
                              interval: 1h
                    status:
                      connectionState:
                          lastObservedState: READY 
      3
      Copy to Clipboard Toggle word wrap
      1
      필요한 운영자 이미지가 포함되어 있습니다. 인덱스 이미지가 항상 동일한 이미지 이름과 태그로 푸시되는 경우 이 변경은 필요하지 않습니다.
      2
      registryPoll.interval 필드를 사용하여 Operator Lifecycle Manager(OLM)가 새 Operator 버전에 대한 인덱스 이미지를 폴링하는 빈도를 설정합니다. y-stream 및 z-stream 연산자 업데이트를 위해 항상 새로운 인덱스 이미지 태그가 푸시되는 경우에는 이 변경이 필요하지 않습니다. registryPoll.interval 필드는 업데이트를 신속하게 처리하기 위해 더 짧은 간격으로 설정할 수 있지만, 간격이 짧을수록 계산 부하가 증가합니다. 이를 방지하려면 업데이트가 완료되면 registryPoll.interval을 기본값으로 복원하면 됩니다.
      3
      카탈로그 연결의 관찰 상태를 표시합니다. READY 값은 CatalogSource 정책이 준비되었으며 인덱스 포드가 풀링되어 실행 중임을 나타냅니다. 이런 방식으로 TALM은 최신 정책 준수 상태에 따라 운영자를 업그레이드합니다.
    2. 이 업데이트는 원하는 Operator 이미지가 포함된 새 인덱스 이미지로 redhat-operators-disconnected 카탈로그 소스를 업데이트하기 위해 du-upgrade-operator-catsrc-policy라는 하나의 정책을 생성합니다.

      참고

      Operator에 대해 이미지 사전 캐싱을 사용하려는 경우 redhat-operators-disconnected 가 아닌 다른 카탈로그 소스에 Operator가 있는 경우 다음 작업을 수행해야 합니다.

      • 다른 카탈로그 소스에 대한 새 인덱스 이미지나 레지스트리 폴링 간격 업데이트로 별도의 카탈로그 소스 정책을 준비합니다.
      • 다양한 카탈로그 소스에서 원하는 운영자에 대해 별도의 구독 정책을 준비합니다.

      예를 들어, 원하는 SRIOV-FEC 연산자는 인증된 연산자 카탈로그 소스에서 사용할 수 있습니다. 카탈로그 소스와 Operator 구독을 업데이트하려면 다음 내용을 추가하여 du-upgrade-fec-catsrc-policydu-upgrade-subscriptions-fec-policy라는 두 가지 정책을 생성합니다.

      apiVersion: policy.open-cluster-management.io/v1
      kind: PolicyGenerator
      metadata:
          name: du-upgrade
      placementBindingDefaults:
          name: du-upgrade-placement-binding
      policyDefaults:
          namespace: ztp-group-du-sno
          placement:
              labelSelector:
                  matchExpressions:
                      - key: group-du-sno
                        operator: Exists
          remediationAction: inform
          severity: low
          namespaceSelector:
              exclude:
                  - kube-*
              include:
                  - '*'
          evaluationInterval:
              compliant: 10m
              noncompliant: 10s
      policies:
          - name: du-upgrade-fec-catsrc-policy
            policyAnnotations:
              ran.openshift.io/ztp-deploy-wave: "1"
            manifests:
              - path: source-crs/DefaultCatsrc.yaml
                patches:
                  - metadata:
                      name: certified-operators
                    spec:
                      displayName: Intel SRIOV-FEC Operator
                      image: registry.example.com:5000/olm/far-edge-sriov-fec:v4.10
                      updateStrategy:
                          registryPoll:
                              interval: 10m
          - name: du-upgrade-subscriptions-fec-policy
            policyAnnotations:
              ran.openshift.io/ztp-deploy-wave: "2"
            manifests:
              - path: source-crs/AcceleratorsSubscription.yaml
                patches:
                  - spec:
                      channel: stable
                      source: certified-operators
      Copy to Clipboard Toggle word wrap
    3. 공통 PolicyGenerator CR에 지정된 구독 채널이 있는 경우 이를 제거합니다. GitOps ZTP 이미지의 기본 서브스크립션 채널은 업데이트에 사용됩니다.

      참고

      GitOps ZTP 4.19를 통해 적용된 Operator의 기본 채널은 performance-addon-operator를 제외하고 stable 입니다. OpenShift Container Platform 4.11부터 performance-addon-operator 기능이 node-tuning-operator 로 이동되었습니다. 4.10 릴리스의 경우 PAO의 기본 채널은 v4.10 입니다. 공통 PolicyGenerator CR에서 기본 채널을 지정할 수도 있습니다.

    4. PolicyGenerator CR 업데이트를 GitOps ZTP Git 저장소에 푸시합니다.

      ArgoCD는 Git 저장소에서 변경 사항을 가져와 허브 클러스터에 대한 정책을 생성합니다.

    5. 다음 명령을 실행하여 생성된 정책을 확인하세요.

      $ oc get policies -A | grep -E "catsrc-policy|subscription"
      Copy to Clipboard Toggle word wrap
  2. Operator 업데이트를 시작하기 전에 필요한 카탈로그 소스 업데이트를 적용하세요.

    1. 카탈로그 소스 정책과 대상 관리 클러스터를 포함하는 operator-upgrade-prep 이라는 ClusterGroupUpgrade CR의 내용을 cgu-operator-upgrade-prep.yml 파일에 저장합니다.

      apiVersion: ran.openshift.io/v1alpha1
      kind: ClusterGroupUpgrade
      metadata:
        name: cgu-operator-upgrade-prep
        namespace: default
      spec:
        clusters:
        - spoke1
        enable: true
        managedPolicies:
        - du-upgrade-operator-catsrc-policy
        remediationStrategy:
          maxConcurrency: 1
      Copy to Clipboard Toggle word wrap
    2. 다음 명령을 실행하여 허브 클러스터에 정책을 적용합니다.

      $ oc apply -f cgu-operator-upgrade-prep.yml
      Copy to Clipboard Toggle word wrap
    3. 업데이트 프로세스를 모니터링합니다. 완료되면 다음 명령을 실행하여 정책이 준수되는지 확인하세요.

      $ oc get policies -A | grep -E "catsrc-policy"
      Copy to Clipboard Toggle word wrap
  3. spec.enable 필드를 false 로 설정하여 Operator 업데이트에 대한 ClusterGroupUpgrade CR을 만듭니다.

    1. 다음 예와 같이 du-upgrade-operator-catsrc-policy 정책과 공통 PolicyGenerator 및 대상 클러스터에서 생성된 구독 정책을 사용하여 Operator 업데이트 ClusterGroupUpgrade CR의 내용을 cgu-operator-upgrade.yml 파일에 저장합니다.

      apiVersion: ran.openshift.io/v1alpha1
      kind: ClusterGroupUpgrade
      metadata:
        name: cgu-operator-upgrade
        namespace: default
      spec:
        managedPolicies:
        - du-upgrade-operator-catsrc-policy 
      1
      
        - common-subscriptions-policy 
      2
      
        preCaching: false
        clusters:
        - spoke1
        remediationStrategy:
          maxConcurrency: 1
        enable: false
      Copy to Clipboard Toggle word wrap
      1
      카탈로그 소스에서 운영자 이미지를 검색하려면 이미지 사전 캐싱 기능에 이 정책이 필요합니다.
      2
      해당 정책에는 운영자 구독이 포함되어 있습니다. PolicyGenTemplates 참조의 구조와 내용을 따랐다면 모든 Operator 구독은 common-subscriptions-policy 정책으로 그룹화됩니다.
      참고

      하나의 ClusterGroupUpgrade CR은 ClusterGroupUpgrade CR에 포함된 하나의 카탈로그 소스에서 구독 정책에 정의된 원하는 운영자의 이미지만 사전 캐시할 수 있습니다. 원하는 운영자가 서로 다른 카탈로그 소스에 있는 경우(예: SRIOV-FEC 운영자) SRIOV -FEC 운영자 이미지를 사전 캐싱하고 업데이트하기 위해 du-upgrade-fec-catsrc-policydu-upgrade-subscriptions-fec-policy 정책을 사용하여 다른 ClusterGroupUpgrade CR을 만들어야 합니다.

    2. 다음 명령을 실행하여 허브 클러스터에 ClusterGroupUpgrade CR을 적용합니다.

      $ oc apply -f cgu-operator-upgrade.yml
      Copy to Clipboard Toggle word wrap
  4. 선택 사항: 운영자 업데이트를 위해 이미지를 미리 캐시합니다.

    1. 이미지 사전 캐싱을 시작하기 전에 다음 명령을 실행하여 구독 정책이 NonCompliant 인지 확인하세요.

      $ oc get policy common-subscriptions-policy -n <policy_namespace>
      Copy to Clipboard Toggle word wrap

      출력 예

      NAME                          REMEDIATION ACTION   COMPLIANCE STATE     AGE
      common-subscriptions-policy   inform               NonCompliant         27d
      Copy to Clipboard Toggle word wrap

    2. 다음 명령을 실행하여 ClusterGroupUpgrade CR에서 사전 캐싱을 활성화합니다.

      $ oc --namespace=default patch clustergroupupgrade.ran.openshift.io/cgu-operator-upgrade \
      --patch '{"spec":{"preCaching": true}}' --type=merge
      Copy to Clipboard Toggle word wrap
    3. 프로세스를 모니터링하고 사전 캐싱이 완료될 때까지 기다리세요. 관리되는 클러스터에서 다음 명령을 실행하여 사전 캐싱 상태를 확인하세요.

      $ oc get cgu cgu-operator-upgrade -o jsonpath='{.status.precaching.status}'
      Copy to Clipboard Toggle word wrap
    4. 다음 명령을 실행하여 업데이트를 시작하기 전에 사전 캐싱이 완료되었는지 확인하세요.

      $ oc get cgu -n default cgu-operator-upgrade -ojsonpath='{.status.conditions}' | jq
      Copy to Clipboard Toggle word wrap

      출력 예

      [
          {
            "lastTransitionTime": "2022-03-08T20:49:08.000Z",
            "message": "The ClusterGroupUpgrade CR is not enabled",
            "reason": "UpgradeNotStarted",
            "status": "False",
            "type": "Ready"
          },
          {
            "lastTransitionTime": "2022-03-08T20:55:30.000Z",
            "message": "Precaching is completed",
            "reason": "PrecachingCompleted",
            "status": "True",
            "type": "PrecachingDone"
          }
      ]
      Copy to Clipboard Toggle word wrap

  5. Operator 업데이트를 시작합니다.

    1. 다음 명령을 실행하여 cgu-operator-upgrade ClusterGroupUpgrade CR을 활성화하고 사전 캐싱을 비활성화하여 Operator 업데이트를 시작합니다.

      $ oc --namespace=default patch clustergroupupgrade.ran.openshift.io/cgu-operator-upgrade \
      --patch '{"spec":{"enable":true, "preCaching": false}}' --type=merge
      Copy to Clipboard Toggle word wrap
    2. 과정을 모니터링합니다. 완료되면 다음 명령을 실행하여 정책이 준수되는지 확인하세요.

      $ oc get policies --all-namespaces
      Copy to Clipboard Toggle word wrap

9.3.4. PolicyGenerator CR을 사용하여 누락된 Operator 업데이트 문제 해결

일부 시나리오에서는 TALM(Topology Aware Lifecycle Manager)이 오래된 정책 준수 상태로 인해 운영자 업데이트를 놓칠 수 있습니다.

카탈로그 소스를 업데이트한 후, 운영자 수명 주기 관리자(OLM)가 구독 상태를 업데이트하는 데 시간이 걸립니다. TALM에서 수정이 필요한지 여부를 결정하는 동안 구독 정책 상태가 계속 준수로 표시될 수 있습니다. 결과적으로, 구독 정책에 명시된 운영자는 업그레이드되지 않습니다.

이러한 시나리오를 방지하려면 PolicyGenerator 에 다른 카탈로그 소스 구성을 추가하고 업데이트가 필요한 모든 Operator에 대한 구독에서 이 구성을 지정합니다.

프로세스

  1. PolicyGenerator 리소스에 카탈로그 소스 구성을 추가합니다.

    manifests:
    - path: source-crs/DefaultCatsrc.yaml
      patches:
        - metadata:
            name: redhat-operators-disconnected
          spec:
            displayName: Red Hat Operators Catalog
            image: registry.example.com:5000/olm/redhat-operators-disconnected:v{product-version}
            updateStrategy:
                registryPoll:
                    interval: 1h
          status:
            connectionState:
                lastObservedState: READY
    - path: source-crs/DefaultCatsrc.yaml
      patches:
        - metadata:
            name: redhat-operators-disconnected-v2 
    1
    
          spec:
            displayName: Red Hat Operators Catalog v2 
    2
    
            image: registry.example.com:5000/olm/redhat-operators-disconnected:<version> 
    3
    
            updateStrategy:
                registryPoll:
                    interval: 1h
          status:
            connectionState:
                lastObservedState: READY
    Copy to Clipboard Toggle word wrap
    1
    새로운 구성의 이름을 업데이트합니다.
    2
    새로운 구성에 대한 표시 이름을 업데이트합니다.
    3
    인덱스 이미지 URL을 업데이트합니다. 이 policies.manifests.patches.spec.image 필드는 DefaultCatsrc.yaml 파일의 모든 구성을 재정의합니다.
  2. 업데이트가 필요한 운영자를 위한 새 구성을 가리키도록 구독 리소스를 업데이트합니다.

    apiVersion: operators.coreos.com/v1alpha1
    kind: Subscription
    metadata:
      name: operator-subscription
      namespace: operator-namspace
    # ...
    spec:
      source: redhat-operators-disconnected-v2 
    1
    
    # ...
    Copy to Clipboard Toggle word wrap
    1
    PolicyGenerator 리소스에서 정의한 추가 카탈로그 소스 구성의 이름을 입력합니다.

9.3.5. 플랫폼과 운영자 업데이트를 함께 수행

플랫폼과 운영자 업데이트를 동시에 수행할 수 있습니다.

사전 요구 사항

  • TALM(Topology Aware Lifecycle Manager)을 설치합니다.
  • GitOps Zero Touch Provisioning(ZTP)을 최신 버전으로 업데이트합니다.
  • GitOps ZTP를 사용하여 하나 이상의 관리형 클러스터를 프로비저닝합니다.
  • cluster-admin 권한이 있는 사용자로 로그인합니다.
  • 허브 클러스터에서 RHACM 정책을 만듭니다.

프로세스

  1. "플랫폼 업데이트 수행" 및 "운영자 업데이트 수행" 섹션에 설명된 단계에 따라 업데이트를 위한 PolicyGenerator CR을 만듭니다.
  2. 플랫폼과 운영자 업데이트를 위한 준비 작업을 적용합니다.

    1. 플랫폼 업데이트 준비 작업, 카탈로그 소스 업데이트 및 대상 클러스터에 대한 정책이 포함된 ClusterGroupUpgrade CR의 내용을 cgu-platform-operator-upgrade-prep.yml 파일에 저장합니다. 예:

      apiVersion: ran.openshift.io/v1alpha1
      kind: ClusterGroupUpgrade
      metadata:
        name: cgu-platform-operator-upgrade-prep
        namespace: default
      spec:
        managedPolicies:
        - du-upgrade-platform-upgrade-prep
        - du-upgrade-operator-catsrc-policy
        clusterSelector:
        - group-du-sno
        remediationStrategy:
          maxConcurrency: 10
        enable: true
      Copy to Clipboard Toggle word wrap
    2. 다음 명령을 실행하여 cgu-platform-operator-upgrade-prep.yml 파일을 허브 클러스터에 적용합니다.

      $ oc apply -f cgu-platform-operator-upgrade-prep.yml
      Copy to Clipboard Toggle word wrap
    3. 과정을 모니터링합니다. 완료되면 다음 명령을 실행하여 정책이 준수되는지 확인하세요.

      $ oc get policies --all-namespaces
      Copy to Clipboard Toggle word wrap
  3. 플랫폼에 대한 ClusterGroupUpdate CR을 만들고 spec.enable 필드를 false 로 설정하여 Operator를 업데이트합니다.

    1. 다음 예와 같이 플랫폼 및 운영자 업데이트 ClusterGroupUpdate CR의 내용을 정책과 대상 클러스터와 함께 cgu-platform-operator-upgrade.yml 파일에 저장합니다.

      apiVersion: ran.openshift.io/v1alpha1
      kind: ClusterGroupUpgrade
      metadata:
        name: cgu-du-upgrade
        namespace: default
      spec:
        managedPolicies:
        - du-upgrade-platform-upgrade 
      1
      
        - du-upgrade-operator-catsrc-policy 
      2
      
        - common-subscriptions-policy 
      3
      
        preCaching: true
        clusterSelector:
        - group-du-sno
        remediationStrategy:
          maxConcurrency: 1
        enable: false
      Copy to Clipboard Toggle word wrap
      1
      이는 플랫폼 업데이트 정책입니다.
      2
      이는 운영자가 업데이트해야 하는 카탈로그 소스 정보를 담고 있는 정책입니다. 사전 캐싱 기능에는 관리되는 클러스터에 어떤 운영자 이미지를 다운로드할지 결정하는 것이 필요합니다.
      3
      이는 운영자를 업데이트하는 정책입니다.
    2. 다음 명령을 실행하여 cgu-platform-operator-upgrade.yml 파일을 허브 클러스터에 적용합니다.

      $ oc apply -f cgu-platform-operator-upgrade.yml
      Copy to Clipboard Toggle word wrap
  4. 선택 사항: 플랫폼 및 운영자 업데이트에 대한 이미지를 미리 캐시합니다.

    1. 다음 명령을 실행하여 ClusterGroupUpgrade CR에서 사전 캐싱을 활성화합니다.

      $ oc --namespace=default patch clustergroupupgrade.ran.openshift.io/cgu-du-upgrade \
      --patch '{"spec":{"preCaching": true}}' --type=merge
      Copy to Clipboard Toggle word wrap
    2. 업데이트 프로세스를 모니터링하고 사전 캐싱이 완료될 때까지 기다리세요. 관리되는 클러스터에서 다음 명령을 실행하여 사전 캐싱 상태를 확인하세요.

      $ oc get jobs,pods -n openshift-talm-pre-cache
      Copy to Clipboard Toggle word wrap
    3. 다음 명령을 실행하여 업데이트를 시작하기 전에 사전 캐싱이 완료되었는지 확인하세요.

      $ oc get cgu cgu-du-upgrade -ojsonpath='{.status.conditions}'
      Copy to Clipboard Toggle word wrap
  5. 플랫폼과 운영자 업데이트를 시작합니다.

    1. 다음 명령을 실행하여 cgu-du-upgrade ClusterGroupUpgrade CR을 활성화하여 플랫폼과 Operator 업데이트를 시작합니다.

      $ oc --namespace=default patch clustergroupupgrade.ran.openshift.io/cgu-du-upgrade \
      --patch '{"spec":{"enable":true, "preCaching": false}}' --type=merge
      Copy to Clipboard Toggle word wrap
    2. 과정을 모니터링합니다. 완료되면 다음 명령을 실행하여 정책이 준수되는지 확인하세요.

      $ oc get policies --all-namespaces
      Copy to Clipboard Toggle word wrap
      참고

      플랫폼 및 운영자 업데이트에 대한 CR은 설정을 spec.enable: true 로 구성하여 처음부터 생성할 수 있습니다. 이 경우 사전 캐싱이 완료된 직후 업데이트가 시작되므로 CR을 수동으로 활성화할 필요가 없습니다.

      사전 캐싱과 업데이트는 모두 정책, 배치 바인딩, 배치 규칙, 관리형 클러스터 작업, 관리형 클러스터 뷰와 같은 추가 리소스를 생성하여 절차를 완료하는 데 도움이 됩니다. afterCompletion.deleteObjects 필드를 true 로 설정하면 업데이트가 완료된 후 이러한 모든 리소스가 삭제됩니다.

이전 버전의 OpenShift Container Platform에서 Performance Addon Operator는 애플리케이션에 대한 짧은 대기 시간 성능 튜닝을 제공합니다. OpenShift Container Platform 4.11 이상에서는 이러한 기능이 Node Tuning Operator의 일부입니다.

OpenShift Container Platform 4.11 이상을 실행하는 클러스터에 Performance Addon Operator를 설치하지 마세요. OpenShift Container Platform 4.11 이상으로 업그레이드하면 Node Tuning Operator가 자동으로 Performance Addon Operator를 제거합니다.

참고

Operator 재설치를 방지하려면 Performance Addon Operator 구독을 생성하는 모든 정책을 제거해야 합니다.

참조 DU 프로필에는 PolicyGenerator CR acm-common-ranGen.yaml 에 Performance Addon Operator가 포함되어 있습니다. 배포된 관리형 클러스터에서 구독을 제거하려면 acm-common-ranGen.yaml을 업데이트해야 합니다.

참고

OpenShift Container Platform 4.11 이상에 Performance Addon Operator 4.10.3-5 이상을 설치하면 Performance Addon Operator가 클러스터 버전을 감지하고 자동으로 최대 절전 모드로 전환하여 Node Tuning Operator 기능을 방해하지 않습니다. 하지만 최상의 성능을 보장하려면 OpenShift Container Platform 4.11 클러스터에서 Performance Addon Operator를 제거하세요.

사전 요구 사항

  • 사용자 정의 사이트 구성 데이터를 관리하는 Git 저장소를 만듭니다. 저장소는 허브 클러스터에서 접근할 수 있어야 하며 ArgoCD의 소스 저장소로 정의되어야 합니다.
  • OpenShift Container Platform 4.11 이상으로 업데이트하세요.
  • cluster-admin 권한이 있는 사용자로 로그인합니다.

프로세스

  1. acm-common-ranGen.yaml 파일에서 Performance Addon Operator 네임스페이스, Operator 그룹 및 구독에 대한 complianceTypemustnothave 로 변경합니다.

    - name: group-du-sno-pg-subscriptions-policy
      policyAnnotations:
        ran.openshift.io/ztp-deploy-wave: "2"
      manifests:
        - path: source-crs/PaoSubscriptionNS.yaml
        - path: source-crs/PaoSubscriptionOperGroup.yaml
        - path: source-crs/PaoSubscription.yaml
    Copy to Clipboard Toggle word wrap
  2. 변경 사항을 사용자 지정 사이트 저장소와 병합하고 ArgoCD 애플리케이션이 변경 사항을 허브 클러스터와 동기화할 때까지 기다립니다. common-subscriptions-policy 정책의 상태가 비준수 로 변경되었습니다.
  3. Topology Aware Lifecycle Manager를 사용하여 대상 클러스터에 변경 사항을 적용합니다. 구성 변경 사항을 롤아웃하는 방법에 대한 자세한 내용은 "추가 리소스" 섹션을 참조하세요.
  4. 과정을 모니터링합니다. 대상 클러스터의 common-subscriptions-policy 정책 상태가 Compliant 인 경우 Performance Addon Operator가 클러스터에서 제거된 것입니다. 다음 명령을 실행하여 common-subscriptions-policy 의 상태를 가져옵니다.

    $ oc get policy -n ztp-common common-subscriptions-policy
    Copy to Clipboard Toggle word wrap
  5. acm-common-ranGen.yaml 파일의 policies.manifests 에서 Performance Addon Operator 네임스페이스, Operator 그룹 및 구독 CR을 삭제합니다.
  6. 변경 사항을 사용자 지정 사이트 저장소와 병합하고 ArgoCD 애플리케이션이 변경 사항을 허브 클러스터와 동기화할 때까지 기다립니다. 해당 정책은 계속 준수됩니다.

애플리케이션을 업그레이드하기 전에 단일 노드 OpenShift 클러스터에서 애플리케이션별 워크로드 이미지를 사전 캐싱할 수 있습니다.

다음 사용자 정의 리소스(CR)를 사용하여 사전 캐싱 작업에 대한 구성 옵션을 지정할 수 있습니다.

  • PreCachingConfig CR
  • ClusterGroupUpgrade CR
참고

PreCachingConfig CR의 모든 필드는 선택 사항입니다.

PreCachingConfig CR 예제

apiVersion: ran.openshift.io/v1alpha1
kind: PreCachingConfig
metadata:
  name: exampleconfig
  namespace: exampleconfig-ns
spec:
  overrides: 
1

    platformImage: quay.io/openshift-release-dev/ocp-release@sha256:3d5800990dee7cd4727d3fe238a97e2d2976d3808fc925ada29c559a47e2e1ef
    operatorsIndexes:
      - registry.example.com:5000/custom-redhat-operators:1.0.0
    operatorsPackagesAndChannels:
      - local-storage-operator: stable
      - ptp-operator: stable
      - sriov-network-operator: stable
  spaceRequired: 30 Gi 
2

  excludePrecachePatterns: 
3

    - aws
    - vsphere
  additionalImages: 
4

    - quay.io/exampleconfig/application1@sha256:3d5800990dee7cd4727d3fe238a97e2d2976d3808fc925ada29c559a47e2e1ef
    - quay.io/exampleconfig/application2@sha256:3d5800123dee7cd4727d3fe238a97e2d2976d3808fc925ada29c559a47adfaef
    - quay.io/exampleconfig/applicationN@sha256:4fe1334adfafadsf987123adfffdaf1243340adfafdedga0991234afdadfsa09
Copy to Clipboard Toggle word wrap

1
기본적으로 TALM은 관리되는 클러스터의 정책에서 platformImage , operatorsIndexesoperatorsPackagesAndChannels 필드를 자동으로 채웁니다. 이러한 필드에 대해 기본 TALM 파생 값을 재정의하기 위한 값을 지정할 수 있습니다.
2
클러스터에 필요한 최소 디스크 공간을 지정합니다. 지정하지 않으면 TALM은 OpenShift Container Platform 이미지에 대한 기본값을 정의합니다. 디스크 공간 필드에는 정수 값과 저장 단위가 포함되어야 합니다. 예: 40GiB , 200MB , 1TiB .
3
이미지 이름 일치에 따라 사전 캐싱에서 제외할 이미지를 지정합니다.
4
사전 캐시할 추가 이미지 목록을 지정합니다.

PreCachingConfig CR 참조가 포함된 ClusterGroupUpgrade CR 예시

apiVersion: ran.openshift.io/v1alpha1
kind: ClusterGroupUpgrade
metadata:
  name: cgu
spec:
  preCaching: true 
1

  preCachingConfigRef:
    name: exampleconfig 
2

    namespace: exampleconfig-ns 
3
Copy to Clipboard Toggle word wrap

1
preCaching 필드를 true 로 설정하면 사전 캐싱 작업이 활성화됩니다.
2
preCachingConfigRef.name 필드는 사용하려는 PreCachingConfig CR을 지정합니다.
3
preCachingConfigRef.namespace 는 사용하려는 PreCachingConfig CR의 네임스페이스를 지정합니다.
9.3.7.1. 사전 캐싱을 위한 사용자 정의 리소스 생성

ClusterGroupUpgrade CR과 동시에 또는 그 전에 PreCachingConfig CR을 만들어야 합니다.

  1. 사전 캐시하려는 추가 이미지 목록으로 PreCachingConfig CR을 만듭니다.

    apiVersion: ran.openshift.io/v1alpha1
    kind: PreCachingConfig
    metadata:
      name: exampleconfig
      namespace: default 
    1
    
    spec:
    [...]
      spaceRequired: 30Gi 
    2
    
      additionalImages:
        - quay.io/exampleconfig/application1@sha256:3d5800990dee7cd4727d3fe238a97e2d2976d3808fc925ada29c559a47e2e1ef
        - quay.io/exampleconfig/application2@sha256:3d5800123dee7cd4727d3fe238a97e2d2976d3808fc925ada29c559a47adfaef
        - quay.io/exampleconfig/applicationN@sha256:4fe1334adfafadsf987123adfffdaf1243340adfafdedga0991234afdadfsa09
    Copy to Clipboard Toggle word wrap
    1
    네임스페이스는 허브 클러스터에서 액세스할 수 있어야 합니다.
    2
    사전 캐시된 이미지를 위한 충분한 저장 공간을 확보하려면 필요한 최소 디스크 공간 필드를 설정하는 것이 좋습니다.
  2. preCaching 필드를 true 로 설정하여 ClusterGroupUpgrade CR을 만들고 이전 단계에서 만든 PreCachingConfig CR을 지정합니다.

    apiVersion: ran.openshift.io/v1alpha1
    kind: ClusterGroupUpgrade
    metadata:
      name: cgu
      namespace: default
    spec:
      clusters:
      - sno1
      - sno2
      preCaching: true
      preCachingConfigRef:
      - name: exampleconfig
        namespace: default
      managedPolicies:
        - du-upgrade-platform-upgrade
        - du-upgrade-operator-catsrc-policy
        - common-subscriptions-policy
      remediationStrategy:
        timeout: 240
    Copy to Clipboard Toggle word wrap
    주의

    클러스터에 이미지를 설치한 후에는 해당 이미지를 변경하거나 삭제할 수 없습니다.

  3. 이미지 사전 캐싱을 시작하려면 다음 명령을 실행하여 ClusterGroupUpgrade CR을 적용하세요.

    $ oc apply -f cgu.yaml
    Copy to Clipboard Toggle word wrap

TALM은 ClusterGroupUpgrade CR을 확인합니다.

이 지점부터 TALM 사전 캐싱 워크플로를 계속 진행할 수 있습니다.

참고

모든 사이트는 동시에 사전 캐시됩니다.

검증

  1. 다음 명령을 실행하여 ClusterUpgradeGroup CR이 적용된 허브 클러스터의 사전 캐싱 상태를 확인하세요.

    $ oc get cgu <cgu_name> -n <cgu_namespace> -oyaml
    Copy to Clipboard Toggle word wrap

    출력 예

      precaching:
        spec:
          platformImage: quay.io/openshift-release-dev/ocp-release@sha256:3d5800990dee7cd4727d3fe238a97e2d2976d3808fc925ada29c559a47e2e1ef
          operatorsIndexes:
            - registry.example.com:5000/custom-redhat-operators:1.0.0
          operatorsPackagesAndChannels:
            - local-storage-operator: stable
            - ptp-operator: stable
            - sriov-network-operator: stable
          excludePrecachePatterns:
            - aws
            - vsphere
          additionalImages:
            - quay.io/exampleconfig/application1@sha256:3d5800990dee7cd4727d3fe238a97e2d2976d3808fc925ada29c559a47e2e1ef
            - quay.io/exampleconfig/application2@sha256:3d5800123dee7cd4727d3fe238a97e2d2976d3808fc925ada29c559a47adfaef
            - quay.io/exampleconfig/applicationN@sha256:4fe1334adfafadsf987123adfffdaf1243340adfafdedga0991234afdadfsa09
          spaceRequired: "30"
        status:
          sno1: Starting
          sno2: Starting
    Copy to Clipboard Toggle word wrap

    사전 캐싱 구성은 관리되는 정책이 있는지 확인하여 검증됩니다. ClusterGroupUpgradePreCachingConfig CR의 유효한 구성은 다음과 같은 상태를 초래합니다.

    유효한 CR의 출력 예

    - lastTransitionTime: "2023-01-01T00:00:01Z"
      message: All selected clusters are valid
      reason: ClusterSelectionCompleted
      status: "True"
      type: ClusterSelected
    - lastTransitionTime: "2023-01-01T00:00:02Z"
      message: Completed validation
      reason: ValidationCompleted
      status: "True"
      type: Validated
    - lastTransitionTime: "2023-01-01T00:00:03Z"
      message: Precaching spec is valid and consistent
      reason: PrecacheSpecIsWellFormed
      status: "True"
      type: PrecacheSpecValid
    - lastTransitionTime: "2023-01-01T00:00:04Z"
      message: Precaching in progress for 1 clusters
      reason: InProgress
      status: "False"
      type: PrecachingSucceeded
    Copy to Clipboard Toggle word wrap

    잘못된 PreCachingConfig CR의 예

    Type:    "PrecacheSpecValid"
    Status:  False,
    Reason:  "PrecacheSpecIncomplete"
    Message: "Precaching spec is incomplete: failed to get PreCachingConfig resource due to PreCachingConfig.ran.openshift.io "<pre-caching_cr_name>" not found"
    Copy to Clipboard Toggle word wrap

  2. 관리되는 클러스터에서 다음 명령을 실행하여 사전 캐싱 작업을 찾을 수 있습니다.

    $ oc get jobs -n openshift-talo-pre-cache
    Copy to Clipboard Toggle word wrap

    진행 중인 사전 캐싱 작업의 예

    NAME        COMPLETIONS       DURATION      AGE
    pre-cache   0/1               1s            1s
    Copy to Clipboard Toggle word wrap

  3. 다음 명령을 실행하면 사전 캐싱 작업을 위해 생성된 Pod의 상태를 확인할 수 있습니다.

    $ oc describe pod pre-cache -n openshift-talo-pre-cache
    Copy to Clipboard Toggle word wrap

    진행 중인 사전 캐싱 작업의 예

    Type        Reason              Age    From              Message
    Normal      SuccesfulCreate     19s    job-controller    Created pod: pre-cache-abcd1
    Copy to Clipboard Toggle word wrap

  4. 다음 명령을 실행하면 작업 상태에 대한 실시간 업데이트를 받을 수 있습니다.

    $ oc logs -f pre-cache-abcd1 -n openshift-talo-pre-cache
    Copy to Clipboard Toggle word wrap
  5. 사전 캐시 작업이 성공적으로 완료되었는지 확인하려면 다음 명령을 실행하세요.

    $ oc describe pod pre-cache -n openshift-talo-pre-cache
    Copy to Clipboard Toggle word wrap

    완료된 사전 캐시 작업의 예

    Type        Reason              Age    From              Message
    Normal      SuccesfulCreate     5m19s  job-controller    Created pod: pre-cache-abcd1
    Normal      Completed           19s    job-controller    Job completed
    Copy to Clipboard Toggle word wrap

  6. 단일 노드 OpenShift에서 이미지가 성공적으로 사전 캐싱되었는지 확인하려면 다음을 수행합니다.

    1. 디버그 모드에서 노드에 들어가세요:

      $ oc debug node/cnfdf00.example.lab
      Copy to Clipboard Toggle word wrap
    2. 루트를 호스트 로 변경 :

      $ chroot /host/
      Copy to Clipboard Toggle word wrap
    3. 원하는 이미지를 검색하세요:

      $ sudo podman images | grep <operator_name>
      Copy to Clipboard Toggle word wrap

9.3.8. GitOps ZTP용 자동 생성 ClusterGroupUpgrade CR에 대한 정보

TALM에는 허브 클러스터의 ManagedCluster CR의 준비 상태를 모니터링하고 GitOps Zero Touch Provisioning(ZTP)을 위한 ClusterGroupUpgrade CR을 생성하는 ManagedClusterForCGU 라는 컨트롤러가 있습니다.

ztp-done 레이블이 적용되지 않은 준비 상태의 관리형 클러스터의 경우 ManagedClusterForCGU 컨트롤러는 GitOps ZTP 프로세스 중에 생성된 연관된 RHACM 정책과 함께 ztp-install 네임스페이스에 ClusterGroupUpgrade CR을 자동으로 생성합니다. 그런 다음 TALM은 자동 생성된 ClusterGroupUpgrade CR에 나열된 구성 정책 세트를 수정하여 구성 CR을 관리 클러스터로 푸시합니다.

클러스터가 Ready 상태가 되는 시점에 관리 클러스터에 대한 정책이 없는 경우 정책이 생성되지 않은 ClusterGroupUpgrade CR이 생성됩니다. ClusterGroupUpgrade 가 완료되면 관리되는 클러스터에 ztp-done 이라는 레이블이 지정됩니다. 관리되는 클러스터에 적용하려는 정책이 있는 경우 2일차 작업으로 ClusterGroupUpgrade를 수동으로 생성합니다.

GitOps ZTP에 대한 자동 생성 ClusterGroupUpgrade CR의 예

apiVersion: ran.openshift.io/v1alpha1
kind: ClusterGroupUpgrade
metadata:
  generation: 1
  name: spoke1
  namespace: ztp-install
  ownerReferences:
  - apiVersion: cluster.open-cluster-management.io/v1
    blockOwnerDeletion: true
    controller: true
    kind: ManagedCluster
    name: spoke1
    uid: 98fdb9b2-51ee-4ee7-8f57-a84f7f35b9d5
  resourceVersion: "46666836"
  uid: b8be9cd2-764f-4a62-87d6-6b767852c7da
spec:
  actions:
    afterCompletion:
      addClusterLabels:
        ztp-done: "" 
1

      deleteClusterLabels:
        ztp-running: ""
      deleteObjects: true
    beforeEnable:
      addClusterLabels:
        ztp-running: "" 
2

  clusters:
  - spoke1
  enable: true
  managedPolicies:
  - common-spoke1-config-policy
  - common-spoke1-subscriptions-policy
  - group-spoke1-config-policy
  - spoke1-config-policy
  - group-spoke1-validator-du-policy
  preCaching: false
  remediationStrategy:
    maxConcurrency: 1
    timeout: 240
Copy to Clipboard Toggle word wrap

1
TALM이 클러스터 구성을 완료하면 관리되는 클러스터에 적용됩니다.
2
TALM이 구성 정책을 배포하기 시작하면 관리되는 클러스터에 적용됩니다.

10장. PolicyGenTemplate 리소스를 사용하여 클러스터 정책 관리

10.1. PolicyGenTemplate 리소스를 사용하여 관리되는 클러스터 정책 구성

적용된 정책 사용자 정의 리소스(CR)는 사용자가 프로비저닝하는 관리형 클러스터를 구성합니다. Red Hat Advanced Cluster Management(RHACM)가 PolicyGenTemplate CR을 사용하여 적용되는 Policy CR을 생성하는 방식을 사용자 정의할 수 있습니다.

중요

PolicyGenTemplate CR을 사용하여 관리형 클러스터에 정책을 관리하고 배포하는 기능은 향후 OpenShift Container Platform 릴리스에서 더 이상 지원되지 않습니다. Red Hat Advanced Cluster Management(RHACM) 및 PolicyGenerator CR을 사용하면 동일하거나 향상된 기능을 사용할 수 있습니다.

PolicyGenerator 리소스에 대한 자세한 내용은 RHACM 통합 정책 생성기 문서를 참조하세요.

10.1.1. PolicyGenTemplate CRD에 관하여

PolicyGenTemplate 사용자 정의 리소스 정의(CRD)는 PolicyGen 정책 생성기에 클러스터 구성에 어떤 사용자 정의 리소스(CR)를 포함해야 하는지, CR을 생성된 정책에 어떻게 결합해야 하는지, 해당 CR의 어떤 항목을 오버레이 콘텐츠로 업데이트해야 하는지 알려줍니다.

다음 예제는 ztp-site-generate 참조 컨테이너에서 추출된 PolicyGenTemplate CR( common-du-ranGen.yaml )을 보여줍니다. common-du-ranGen.yaml 파일은 두 개의 Red Hat Advanced Cluster Management(RHACM) 정책을 정의합니다. 정책은 CR의 policyName 의 각 고유 값에 대해 하나씩 구성 CR 컬렉션을 관리합니다. common-du-ranGen.yaml은 spec.bindingRules 섹션에 나열된 레이블을 기준으로 정책을 클러스터에 바인딩하기 위한 단일 배치 바인딩과 배치 규칙을 생성합니다.

Example PolicyGenTemplate CR - common-ranGen.yaml

apiVersion: ran.openshift.io/v1
kind: PolicyGenTemplate
metadata:
  name: "common-latest"
  namespace: "ztp-common"
spec:
  bindingRules:
    common: "true" 
1

    du-profile: "latest"
  sourceFiles: 
2

    - fileName: SriovSubscriptionNS.yaml
      policyName: "subscriptions-policy"
    - fileName: SriovSubscriptionOperGroup.yaml
      policyName: "subscriptions-policy"
    - fileName: SriovSubscription.yaml
      policyName: "subscriptions-policy"
    - fileName: SriovOperatorStatus.yaml
      policyName: "subscriptions-policy"
    - fileName: PtpSubscriptionNS.yaml
      policyName: "subscriptions-policy"
    - fileName: PtpSubscriptionOperGroup.yaml
      policyName: "subscriptions-policy"
    - fileName: PtpSubscription.yaml
      policyName: "subscriptions-policy"
    - fileName: PtpOperatorStatus.yaml
      policyName: "subscriptions-policy"
    - fileName: ClusterLogNS.yaml
      policyName: "subscriptions-policy"
    - fileName: ClusterLogOperGroup.yaml
      policyName: "subscriptions-policy"
    - fileName: ClusterLogSubscription.yaml
      policyName: "subscriptions-policy"
    - fileName: ClusterLogOperatorStatus.yaml
      policyName: "subscriptions-policy"
    - fileName: StorageNS.yaml
      policyName: "subscriptions-policy"
    - fileName: StorageOperGroup.yaml
      policyName: "subscriptions-policy"
    - fileName: StorageSubscription.yaml
      policyName: "subscriptions-policy"
    - fileName: StorageOperatorStatus.yaml
      policyName: "subscriptions-policy"
    - fileName: DefaultCatsrc.yaml 
3

      policyName: "config-policy" 
4

      metadata:
        name: redhat-operators-disconnected
      spec:
        displayName: disconnected-redhat-operators
        image: registry.example.com:5000/disconnected-redhat-operators/disconnected-redhat-operator-index:v4.9
    - fileName: DisconnectedICSP.yaml
      policyName: "config-policy"
      spec:
        repositoryDigestMirrors:
        - mirrors:
          - registry.example.com:5000
          source: registry.redhat.io
Copy to Clipboard Toggle word wrap

1
일반: "true"는 이 레이블이 있는 모든 클러스터에 정책을 적용합니다.
2
sourceFiles 에 나열된 파일은 설치된 클러스터에 대한 운영자 정책을 생성합니다.
3
DefaultCatsrc.yaml은 연결이 끊긴 레지스트리에 대한 카탈로그 소스를 구성합니다.
4
policyName: "config-policy" 는 Operator 구독을 구성합니다. OperatorHub CR은 기본값을 비활성화하고, 이 CR은 redhat-operators를 연결이 끊긴 레지스트리를 가리키는 CatalogSource CR로 대체합니다.

PolicyGenTemplate CR은 포함된 CR의 수에 제한 없이 구성할 수 있습니다. 다음 예제 CR을 허브 클러스터에 적용하여 단일 CR을 포함하는 정책을 생성합니다.

apiVersion: ran.openshift.io/v1
kind: PolicyGenTemplate
metadata:
  name: "group-du-sno"
  namespace: "ztp-group"
spec:
  bindingRules:
    group-du-sno: ""
  mcp: "master"
  sourceFiles:
    - fileName: PtpConfigSlave.yaml
      policyName: "config-policy"
      metadata:
        name: "du-ptp-slave"
      spec:
        profile:
        - name: "slave"
          interface: "ens5f0"
          ptp4lOpts: "-2 -s --summary_interval -4"
          phc2sysOpts: "-a -r -n 24"
Copy to Clipboard Toggle word wrap

소스 파일 PtpConfigSlave.yaml을 예로 들어, 해당 파일은 PtpConfig CR을 정의합니다. PtpConfigSlave 예제에 대해 생성된 정책의 이름은 group-du-sno-config-policy 입니다. 생성된 group-du-sno-config-policy 에 정의된 PtpConfig CR의 이름은 du-ptp-slave 입니다. PtpConfigSlave.yaml 에 정의된 사양 은 소스 파일에 정의된 다른 사양 항목과 함께 du-ptp-slave 에 배치됩니다.

다음 예에서는 group-du-sno-config-policy CR을 보여줍니다.

apiVersion: policy.open-cluster-management.io/v1
kind: Policy
metadata:
  name: group-du-ptp-config-policy
  namespace: groups-sub
  annotations:
    policy.open-cluster-management.io/categories: CM Configuration Management
    policy.open-cluster-management.io/controls: CM-2 Baseline Configuration
    policy.open-cluster-management.io/standards: NIST SP 800-53
spec:
    remediationAction: inform
    disabled: false
    policy-templates:
        - objectDefinition:
            apiVersion: policy.open-cluster-management.io/v1
            kind: ConfigurationPolicy
            metadata:
                name: group-du-ptp-config-policy-config
            spec:
                remediationAction: inform
                severity: low
                namespaceselector:
                    exclude:
                        - kube-*
                    include:
                        - '*'
                object-templates:
                    - complianceType: musthave
                      objectDefinition:
                        apiVersion: ptp.openshift.io/v1
                        kind: PtpConfig
                        metadata:
                            name: du-ptp-slave
                            namespace: openshift-ptp
                        spec:
                            recommend:
                                - match:
                                - nodeLabel: node-role.kubernetes.io/worker-du
                                  priority: 4
                                  profile: slave
                            profile:
                                - interface: ens5f0
                                  name: slave
                                  phc2sysOpts: -a -r -n 24
                                  ptp4lConf: |
                                    [global]
                                    #
                                    # Default Data Set
                                    #
                                    twoStepFlag 1
                                    slaveOnly 0
                                    priority1 128
                                    priority2 128
                                    domainNumber 24
Copy to Clipboard Toggle word wrap

10.1.2. PolicyGenTemplate CR을 사용자 지정할 때의 권장 사항

사이트 구성 PolicyGenTemplate 사용자 정의 리소스(CR)를 사용자 정의할 때 다음의 모범 사례를 고려하세요.

  • 꼭 필요한 최소한의 정책만 사용하세요. 정책을 적게 사용하면 필요한 자원도 줄어듭니다. 추가 정책이 있을 때마다 허브 클러스터와 배포된 관리 클러스터의 CPU 부하가 증가합니다. CR은 PolicyGenTemplate CR의 policyName 필드를 기반으로 정책으로 결합됩니다. 동일한 PolicyGenTemplate 에 있는 CR 중 policyName 에 동일한 값을 갖는 CR은 단일 정책으로 관리됩니다.
  • 연결이 끊긴 환경에서는 레지스트리를 모든 운영자를 포함하는 단일 인덱스로 구성하여 모든 운영자에 대해 단일 카탈로그 소스를 사용합니다. 관리되는 클러스터에 CatalogSource CR이 추가될 때마다 CPU 사용량이 늘어납니다.
  • MachineConfig CR은 SiteConfig CR에 extraManifests 로 포함되어야 설치 중에 적용됩니다. 이렇게 하면 클러스터가 애플리케이션을 배포할 준비가 될 때까지 걸리는 전체 시간을 줄일 수 있습니다.
  • PolicyGenTemplate CR은 채널 필드를 재정의하여 원하는 버전을 명시적으로 식별해야 합니다. 이렇게 하면 업그레이드 중에 소스 CR이 변경되어도 생성된 구독이 업데이트되지 않습니다.
  • policyDefaults.consolidateManifests 의 기본 설정은 true 입니다. 이는 DU 프로필에 권장되는 설정입니다. false 로 설정하면 대규모 배포에 영향을 줄 수 있습니다.
  • policyDefaults.orderPolicies 의 기본 설정은 false 입니다. 이는 DU 프로필에 권장되는 설정입니다. 클러스터 설치가 완료되고 클러스터가 준비 상태가 되면 TALM은 이 클러스터에 해당하는 ClusterGroupUpgrade CR을 생성합니다. ClusterGroupUpgrade CR에는 ran.openshift.io/ztp-deploy-wave 주석으로 정의된 정렬된 정책 목록이 포함되어 있습니다. PolicyGenTemplate CR을 사용하여 정책 순서를 변경하는 경우 충돌이 발생할 수 있으며 구성이 적용되지 않을 수 있습니다.
참고

허브 클러스터에서 많은 수의 스포크 클러스터를 관리하는 경우 리소스 소비를 줄이기 위해 정책 수를 최소화하세요.

여러 구성 CR을 단일 정책이나 제한된 수의 정책으로 그룹화하는 것은 허브 클러스터의 전체 정책 수를 줄이는 한 가지 방법입니다. 사이트 구성을 관리하기 위해 공통, 그룹 및 사이트 계층 정책을 사용하는 경우 특히 사이트별 구성을 단일 정책으로 결합하는 것이 중요합니다.

10.1.3. RAN 배포를 위한 PolicyGenTemplate CR

GitOps Zero Touch Provisioning(ZTP) 파이프라인을 사용하여 클러스터에 적용되는 구성을 사용자 지정하려면 PolicyGenTemplate 사용자 지정 리소스(CR)를 사용합니다. PolicyGenTemplate CR을 사용하면 클러스터의 구성 CR 세트를 관리하는 하나 이상의 정책을 생성할 수 있습니다. PolicyGenTemplate CR은 관리되는 CR 세트를 식별하고, 정책에 번들로 연결하며, 해당 CR을 래핑하는 정책을 빌드하며, 라벨 바인딩 규칙을 사용하여 정책과 클러스터를 연결합니다.

GitOps ZTP 컨테이너에서 얻은 참조 구성은 클러스터가 RAN(Radio Access Network) 분산 단위(DU) 애플리케이션의 엄격한 성능 및 리소스 사용률 제약 조건을 지원할 수 있도록 중요한 기능 및 노드 튜닝 설정 세트를 제공하도록 설계되었습니다. 기준 구성의 변경 사항 또는 누락은 기능 가용성, 성능 및 리소스 사용률에 영향을 미칠 수 있습니다. 참조 PolicyGenTemplate CR을 기준으로 사용하여 특정 사이트 요구 사항에 맞는 구성 파일의 계층 구조를 생성합니다.

RAN DU 클러스터 구성에 정의된 기본 PolicyGenTemplate CR은 GitOps ZTP ztp-site-generate 컨테이너에서 추출할 수 있습니다. 자세한 내용은 " GitOps ZTP 사이트 구성 리포지토리 준비"를 참조하십시오.

PolicyGenTemplate CR은 ./out/argocd/example/policygentemplates 폴더에서 확인할 수 있습니다. 참조 아키텍처에는 공통, 그룹 및 사이트별 구성 CR이 있습니다. 각 PolicyGenTemplate CR은 ./out/source-crs 폴더에 있는 다른 CR을 나타냅니다.

RAN 클러스터 구성과 관련된 PolicyGenTemplate CR은 다음과 같습니다. 단일 노드, 3-노드 컴팩트 및 표준 클러스터 구성의 차이점을 고려하여 PolicyGenTemplate CR 그룹에 변형이 제공됩니다. 마찬가지로 단일 노드 클러스터 및 다중 노드(콤팩트 또는 표준) 클러스터에 대해 사이트별 구성 변형이 제공됩니다. 배포와 관련된 그룹 및 사이트별 구성 변형을 사용합니다.

Expand
표 10.1. RAN 배포를 위한 PolicyGenTemplate CR
PolicyGenTemplate CR설명

example-multinode-site.yaml

다중 노드 클러스터에 적용되는 CR 세트를 포함합니다. 이러한 CR은 RAN 설치에 일반적인 SR-IOV 기능을 구성합니다.

example-sno-site.yaml

단일 노드 OpenShift 클러스터에 적용되는 CR 세트를 포함합니다. 이러한 CR은 RAN 설치에 일반적인 SR-IOV 기능을 구성합니다.

common-mno-ranGen.yaml

다중 노드 클러스터에 적용할 수 있는 일반적인 RAN 정책 구성 세트가 포함되어 있습니다.

common-ranGen.yaml

모든 클러스터에 적용되는 공통 RAN CR 세트를 포함합니다. 이러한 CR은 RAN에 일반적인 클러스터 기능과 기준 클러스터 튜닝을 제공하는 일련의 운영자를 구독합니다.

group-du-3node-ranGen.yaml

3노드 클러스터에 대한 RAN 정책만 포함되어 있습니다.

group-du-sno-ranGen.yaml

단일 노드 클러스터에 대한 RAN 정책만 포함되어 있습니다.

group-du-standard-ranGen.yaml

표준 세 개의 컨트롤 플레인 클러스터에 대한 RAN 정책이 포함되어 있습니다.

group-du-3node-validator-ranGen.yaml

3-노드 클러스터에 필요한 다양한 정책을 생성하는 데 사용되는 PolicyGenTemplate CR입니다.

group-du-standard-validator-ranGen.yaml

PolicyGenTemplate CR은 표준 클러스터에 필요한 다양한 정책을 생성하는 데 사용됩니다.

group-du-sno-validator-ranGen.yaml

PolicyGenTemplate CR은 단일 노드 OpenShift 클러스터에 필요한 다양한 정책을 생성하는 데 사용됩니다.

10.1.4. PolicyGenTemplate CR을 사용하여 관리 클러스터 사용자 정의

GitOps Zero Touch Provisioning(ZTP) 파이프라인을 사용하여 프로비저닝하는 관리형 클러스터에 적용되는 정책을 사용자 지정하려면 다음 절차를 따르세요.

사전 요구 사항

  • OpenShift CLI(oc)가 설치되어 있습니다.
  • cluster-admin 권한이 있는 사용자로 허브 클러스터에 로그인했습니다.
  • 필요한 설치 및 정책 CR을 생성하기 위해 허브 클러스터를 구성했습니다.
  • 사용자 정의 사이트 구성 데이터를 관리하는 Git 저장소를 만들었습니다. 저장소는 허브 클러스터에서 접근할 수 있어야 하며 Argo CD 애플리케이션의 소스 저장소로 정의되어야 합니다.

프로세스

  1. 사이트별 구성 CR에 대한 PolicyGenTemplate CR을 만듭니다.

    1. out/argocd/example/policygentemplates 폴더에서 CR에 적합한 예를 선택합니다(예: example-sno-site.yaml 또는 example-multinode-site.yaml) .
    2. SiteConfig CR에 포함된 사이트별 레이블과 일치하도록 예제 파일의 spec.bindingRules 필드를 변경합니다. 예시 SiteConfig 파일에서 사이트별 레이블은 sites: example-sno 입니다.

      참고

      PolicyGenTemplate spec.bindingRules 필드에 정의된 레이블이 관련 관리 클러스터 SiteConfig CR에 정의된 레이블과 일치하는지 확인하세요.

    3. 원하는 구성에 맞게 예제 파일의 내용을 변경하세요.
  2. 선택 사항: 클러스터 전체에 적용되는 공통 구성 CR에 대한 PolicyGenTemplate CR을 만듭니다.

    1. out/argocd/example/policygentemplates 폴더에서 CR에 적합한 예를 선택합니다(예: common-ranGen.yaml ).
    2. 필요한 구성에 맞게 예제 파일의 내용을 변경합니다.
  3. 선택 사항: 플릿의 특정 클러스터 그룹에 적용되는 모든 그룹 구성 CR에 대한 PolicyGenTemplate CR을 만듭니다.

    오버레이된 사양 파일의 콘텐츠가 필요한 최종 상태와 일치하는지 확인합니다. 참고로, out/source-crs 디렉토리에는 PolicyGenTemplate 템플릿에 포함 및 오버레이할 수 있는 source-crs의 전체 목록이 포함되어 있습니다.

    참고

    클러스터의 구체적인 요구 사항에 따라 클러스터 유형당 두 개 이상의 그룹 정책이 필요할 수 있습니다. 특히, 예시 그룹 정책 각각에 단일 PerformancePolicy.yaml 파일이 있고, 해당 클러스터가 동일한 하드웨어 구성으로 구성된 경우에만 클러스터 세트에서 이 파일을 공유할 수 있다는 점을 고려할 때 더욱 그렇습니다.

    1. out/argocd/example/policygentemplates 폴더에서 CR에 적합한 예를 선택합니다(예: group-du-sno-ranGen.yaml) .
    2. 필요한 구성에 맞게 예제 파일의 내용을 변경합니다.
  4. 선택 사항입니다. GitOps ZTP 설치 및 배포된 클러스터 구성이 완료되면 이를 알리는 검증기 정보 정책 PolicyGenTemplate CR을 생성합니다. 자세한 내용은 "검증자 정보 정책 만들기"를 참조하세요.
  5. 예제 out/argocd/example/policygentemplates/ns.yaml 파일과 유사한 YAML 파일에 모든 정책 네임스페이스를 정의합니다.

    중요

    PolicyGenTemplate CR과 같은 파일에 Namespace CR을 포함하지 마세요.

  6. out/argocd/example/policygentemplatekustomization.yaml 에 표시된 예와 유사하게 kustomization.yaml 파일의 generators 섹션에 PolicyGenTemplate CR과 네임스페이스 CR을 추가합니다.
  7. Git 리포지토리에서 PolicyGenTemplate CR, Namespace CR 및 관련 kustomization.yaml 파일을 커밋하고 변경 사항을 내보냅니다.

    ArgoCD 파이프라인은 변경 사항을 감지하고 관리 클러스터 배포를 시작합니다. 변경 사항을 SiteConfig CR 및 PolicyGenTemplate CR에 동시에 푸시할 수 있습니다.

10.1.5. 관리형 클러스터 정책 배포 진행 상황 모니터링

ArgoCD 파이프라인은 Git의 PolicyGenTemplate CR을 사용하여 RHACM 정책을 생성한 다음 hub 클러스터에 동기화합니다. 지원 서비스가 관리형 클러스터에 OpenShift Container Platform을 설치한 후 관리 클러스터 정책 동기화의 진행 상황을 모니터링할 수 있습니다.

사전 요구 사항

  • OpenShift CLI(oc)가 설치되어 있습니다.
  • cluster-admin 권한이 있는 사용자로 허브 클러스터에 로그인했습니다.

프로세스

  1. Topology Aware Lifecycle Manager(TALM)는 클러스터에 바인딩된 구성 정책을 적용합니다.

    클러스터 설치가 완료되고 클러스터가 Ready 가 되면 ran.openshift.io/ztp-deploy-ECDHE 주석에 의해 정의된 정렬된 정책 목록과 함께 이 클러스터에 해당하는 ClusterGroupUpgrade CR이 TALM에 의해 자동으로 생성됩니다. 클러스터의 정책은 ClusterGroupUpgrade CR에 나열된 순서대로 적용됩니다.

    다음 명령을 사용하여 구성 정책 조정의 고급 진행 상황을 모니터링할 수 있습니다.

    $ export CLUSTER=<clusterName>
    Copy to Clipboard Toggle word wrap
    $ oc get clustergroupupgrades -n ztp-install $CLUSTER -o jsonpath='{.status.conditions[-1:]}' | jq
    Copy to Clipboard Toggle word wrap

    출력 예

    {
      "lastTransitionTime": "2022-11-09T07:28:09Z",
      "message": "Remediating non-compliant policies",
      "reason": "InProgress",
      "status": "True",
      "type": "Progressing"
    }
    Copy to Clipboard Toggle word wrap

  2. RHACM 대시보드 또는 명령줄을 사용하여 자세한 클러스터 정책 규정 준수 상태를 모니터링할 수 있습니다.

    1. oc 를 사용하여 정책 규정 준수를 확인하려면 다음 명령을 실행합니다.

      $ oc get policies -n $CLUSTER
      Copy to Clipboard Toggle word wrap

      출력 예

      NAME                                                     REMEDIATION ACTION   COMPLIANCE STATE   AGE
      ztp-common.common-config-policy                          inform               Compliant          3h42m
      ztp-common.common-subscriptions-policy                   inform               NonCompliant       3h42m
      ztp-group.group-du-sno-config-policy                     inform               NonCompliant       3h42m
      ztp-group.group-du-sno-validator-du-policy               inform               NonCompliant       3h42m
      ztp-install.example1-common-config-policy-pjz9s          enforce              Compliant          167m
      ztp-install.example1-common-subscriptions-policy-zzd9k   enforce              NonCompliant       164m
      ztp-site.example1-config-policy                          inform               NonCompliant       3h42m
      ztp-site.example1-perf-policy                            inform               NonCompliant       3h42m
      Copy to Clipboard Toggle word wrap

    2. RHACM 웹 콘솔에서 정책 상태를 확인하려면 다음 작업을 수행합니다.

      1. Governancepolicies 찾기를 클릭합니다.
      2. 클러스터 정책을 클릭하여 상태를 확인합니다.

모든 클러스터 정책이 준수되면 클러스터의 GitOps ZTP 설치 및 구성이 완료됩니다. ztp-done 레이블이 클러스터에 추가되었습니다.

참조 구성에서 준수되는 최종 정책은 *-du-validator-policy 정책에 정의된 정책입니다. 클러스터 준수 시 이 정책은 모든 클러스터 구성, Operator 설치 및 Operator 구성이 완료되었는지 확인합니다.

10.1.6. 구성 정책 CR 생성 검증

정책 사용자 정의 리소스(CR)는 생성된 PolicyGenTemplate 과 동일한 네임스페이스에 생성됩니다. 다음 명령을 사용하여 표시된 것처럼 ztp-common , ztp-group 또는 ztp-site 기반인지 여부에 관계없이 PolicyGenTemplate 에서 생성된 모든 정책 CR에 동일한 문제 해결 흐름이 적용됩니다.

$ export NS=<namespace>
Copy to Clipboard Toggle word wrap
$ oc get policy -n $NS
Copy to Clipboard Toggle word wrap

예상되는 정책이 적용된 CR 세트가 표시되어야 합니다.

정책 동기화에 실패한 경우 다음 문제 해결 단계를 따르세요.

프로세스

  1. 정책에 대한 자세한 정보를 표시하려면 다음 명령을 실행하세요.

    $ oc describe -n openshift-gitops application policies
    Copy to Clipboard Toggle word wrap
  2. 상태 확인: 조건: 오류 로그를 표시합니다. 예를 들어, 잘못된 sourceFile 항목을 fileName: 으로 설정하면 아래와 같은 오류가 발생합니다.

    Status:
      Conditions:
        Last Transition Time:  2021-11-26T17:21:39Z
        Message:               rpc error: code = Unknown desc = `kustomize build /tmp/https___git.com/ran-sites/policies/ --enable-alpha-plugins` failed exit status 1: 2021/11/26 17:21:40 Error could not find test.yaml under source-crs/: no such file or directory Error: failure in plugin configured via /tmp/kust-plugin-config-52463179; exit status 1: exit status 1
        Type:  ComparisonError
    Copy to Clipboard Toggle word wrap
  3. 상태 확인: 동기화: . 상태: 조건: 에 로그 오류가 있는 경우 상태: 동기화: 에 알 수 없음 또는 오류가 표시됩니다.

    Status:
      Sync:
        Compared To:
          Destination:
            Namespace:  policies-sub
            Server:     https://kubernetes.default.svc
          Source:
            Path:             policies
            Repo URL:         https://git.com/ran-sites/policies/.git
            Target Revision:  master
        Status:               Error
    Copy to Clipboard Toggle word wrap
  4. Red Hat Advanced Cluster Management(RHACM)에서 정책이 ManagedCluster 개체에 적용된다는 것을 인식하면 정책 CR 개체가 클러스터 네임스페이스에 적용됩니다. 정책이 클러스터 네임스페이스에 복사되었는지 확인하세요.

    $ oc get policy -n $CLUSTER
    Copy to Clipboard Toggle word wrap

    출력 예

    NAME                                         REMEDIATION ACTION   COMPLIANCE STATE   AGE
    ztp-common.common-config-policy              inform               Compliant          13d
    ztp-common.common-subscriptions-policy       inform               Compliant          13d
    ztp-group.group-du-sno-config-policy         inform               Compliant          13d
    ztp-group.group-du-sno-validator-du-policy   inform               Compliant          13d
    ztp-site.example-sno-config-policy           inform               Compliant          13d
    Copy to Clipboard Toggle word wrap

    RHACM은 적용 가능한 모든 정책을 클러스터 네임스페이스에 복사합니다. 복사된 정책 이름의 형식은 <PolicyGenTemplate.Namespace>.<PolicyGenTemplate.Name>-<policyName> 입니다.

  5. 클러스터 네임스페이스에 복사되지 않은 정책이 있는지 배치 규칙을 확인하세요. 해당 정책에 대한 PlacementRulematchSelector는 ManagedCluster 개체의 레이블과 일치해야 합니다.

    $ oc get PlacementRule -n $NS
    Copy to Clipboard Toggle word wrap
  6. 다음 명령을 사용하여 누락된 정책, 공통, 그룹 또는 사이트에 적합한 PlacementRule 이름을 확인하세요.

    $ oc get PlacementRule -n $NS <placement_rule_name> -o yaml
    Copy to Clipboard Toggle word wrap
    • 상태 결정에는 클러스터 이름이 포함되어야 합니다.
    • 사양의 matchSelector 의 키-값 쌍은 관리되는 클러스터의 레이블과 일치해야 합니다.
  7. 다음 명령을 사용하여 ManagedCluster 개체의 레이블을 확인하세요.

    $ oc get ManagedCluster $CLUSTER -o jsonpath='{.metadata.labels}' | jq
    Copy to Clipboard Toggle word wrap
  8. 다음 명령을 사용하여 어떤 정책이 준수되는지 확인하세요.

    $ oc get policy -n $CLUSTER
    Copy to Clipboard Toggle word wrap

    Namespace , OperatorGroupSubscription 정책은 준수하지만 Operator 구성 정책은 준수하지 않는 경우 Operator가 관리되는 클러스터에 설치되지 않았을 가능성이 높습니다. CRD가 아직 스포크에 적용되지 않았기 때문에 운영자 구성 정책이 적용되지 않습니다.

10.1.7. 정책 조정 재시작

예기치 않은 규정 준수 문제(예: ClusterGroupUpgrade 사용자 지정 리소스(CR)가 시간 초과된 경우)가 발생하면 정책 조정을 다시 시작할 수 있습니다.

프로세스

  1. 관리되는 클러스터가 준비 상태 가 되면 Topology Aware Lifecycle Manager가 ztp-install 네임스페이스에 ClusterGroupUpgrade CR을 생성합니다.

    $ export CLUSTER=<clusterName>
    Copy to Clipboard Toggle word wrap
    $ oc get clustergroupupgrades -n ztp-install $CLUSTER
    Copy to Clipboard Toggle word wrap
  2. 예상치 못한 문제가 발생하고 정책이 구성된 제한 시간(기본값은 4시간) 내에 준수되지 않으면 ClusterGroupUpgrade CR의 상태가 UpgradeTimedOut으로 표시됩니다.

    $ oc get clustergroupupgrades -n ztp-install $CLUSTER -o jsonpath='{.status.conditions[?(@.type=="Ready")]}'
    Copy to Clipboard Toggle word wrap
  3. ClusterGroupUpgrade CR이 UpgradeTimedOut 상태이면 정책 조정을 1시간마다 자동으로 다시 시작합니다. 정책을 변경한 경우 기존 ClusterGroupUpgrade CR을 삭제하여 즉시 재시도를 시작할 수 있습니다. 이렇게 하면 정책을 즉시 조정하기 시작하는 새 ClusterGroupUpgrade CR이 자동으로 생성됩니다.

    $ oc delete clustergroupupgrades -n ztp-install $CLUSTER
    Copy to Clipboard Toggle word wrap

ClusterGroupUpgrade CR이 UpgradeCompleted 상태로 완료되고 관리되는 클러스터에 ztp-done 레이블이 적용되면 PolicyGenTemplate을 사용하여 추가적인 구성 변경을 수행할 수 있습니다. 기존 ClusterGroupUpgrade CR을 삭제해도 TALM에서 새 CR을 생성하지 않습니다.

이 시점에서 GitOps ZTP는 클러스터와의 상호 작용을 완료했으며 이후의 모든 상호 작용은 업데이트로 처리되어야 하며 정책을 수정하기 위해 새로운 ClusterGroupUpgrade CR이 생성되어야 합니다.

10.1.8. 정책을 사용하여 적용된 관리 클러스터 CR 변경

정책을 통해 관리되는 클러스터에 배포된 사용자 지정 리소스(CR)에서 콘텐츠를 제거할 수 있습니다.

기본적으로 PolicyGenTemplate CR에서 생성된 모든 Policy CR의 complianceType 필드는 musthave 로 설정됩니다. 제거된 콘텐츠가 없는 필수 정책은 관리되는 클러스터의 CR에 지정된 모든 콘텐츠가 있으므로 여전히 규정을 준수하는 것으로 간주됩니다. 이 구성을 사용하면 CR에서 콘텐츠를 제거하면 TALM이 정책에서 콘텐츠를 제거하지만 관리되는 클러스터의 CR에서는 콘텐츠가 제거되지 않습니다.

complianceType 필드를 mustonlyhave 로 설정하면 정책은 클러스터의 CR이 정책에 지정된 내용과 정확히 일치하도록 보장합니다.

사전 요구 사항

  • OpenShift CLI(oc)가 설치되어 있습니다.
  • cluster-admin 권한이 있는 사용자로 허브 클러스터에 로그인했습니다.
  • RHACM을 실행하는 허브 클러스터에서 관리형 클러스터를 배포했습니다.
  • 허브 클러스터에 Topology Aware Lifecycle Manager를 설치했습니다.

프로세스

  1. 영향을 받은 CR에서 더 이상 필요하지 않은 콘텐츠를 제거합니다. 이 예에서 disableDrain: false 줄은 SriovOperatorConfig CR에서 제거되었습니다.

    CR 예시

    apiVersion: sriovnetwork.openshift.io/v1
    kind: SriovOperatorConfig
    metadata:
      name: default
      namespace: openshift-sriov-network-operator
    spec:
      configDaemonNodeSelector:
        "node-role.kubernetes.io/$mcp": ""
      disableDrain: true
      enableInjector: true
      enableOperatorWebhook: true
    Copy to Clipboard Toggle word wrap

  2. group-du-sno-ranGen.yaml 파일에서 영향을 받는 정책의 complianceType을 mustonlyhave 로 변경합니다.

    YAML의 예

    - fileName: SriovOperatorConfig.yaml
      policyName: "config-policy"
      complianceType: mustonlyhave
    Copy to Clipboard Toggle word wrap

  3. ClusterGroupUpdates CR을 만들고 CR 변경 사항을 받아야 하는 클러스터를 지정합니다.

    ClusterGroupUpdates CR 예제

    apiVersion: ran.openshift.io/v1alpha1
    kind: ClusterGroupUpgrade
    metadata:
      name: cgu-remove
      namespace: default
    spec:
      managedPolicies:
        - ztp-group.group-du-sno-config-policy
      enable: false
      clusters:
      - spoke1
      - spoke2
      remediationStrategy:
        maxConcurrency: 2
        timeout: 240
      batchTimeoutAction:
    Copy to Clipboard Toggle word wrap

  4. 다음 명령을 실행하여 ClusterGroupUpgrade CR을 만듭니다.

    $ oc create -f cgu-remove.yaml
    Copy to Clipboard Toggle word wrap
  5. 예를 들어 적절한 유지 관리 기간 동안 변경 사항을 적용할 준비가 되면 다음 명령을 실행하여 spec.enable 필드의 값을 true 로 변경합니다.

    $ oc --namespace=default patch clustergroupupgrade.ran.openshift.io/cgu-remove \
    --patch '{"spec":{"enable":true}}' --type=merge
    Copy to Clipboard Toggle word wrap

검증

  1. 다음 명령을 실행하여 정책 상태를 확인하세요.

    $ oc get <kind> <changed_cr_name>
    Copy to Clipboard Toggle word wrap

    출력 예

    NAMESPACE   NAME                                                   REMEDIATION ACTION   COMPLIANCE STATE   AGE
    default     cgu-ztp-group.group-du-sno-config-policy               enforce                                 17m
    default     ztp-group.group-du-sno-config-policy                   inform               NonCompliant       15h
    Copy to Clipboard Toggle word wrap

    정책의 준수 상태가 준수 인 경우 CR이 업데이트되고 원치 않는 콘텐츠가 제거되었음을 의미합니다.

  2. 관리되는 클러스터에서 다음 명령을 실행하여 대상 클러스터에서 정책이 제거되었는지 확인하세요.

    $ oc get <kind> <changed_cr_name>
    Copy to Clipboard Toggle word wrap

    결과가 없으면 CR이 관리되는 클러스터에서 제거됩니다.

10.1.9. GitOps ZTP 설치 완료 표시

GitOps Zero Touch Provisioning(ZTP)은 클러스터의 GitOps ZTP 설치 상태를 확인하는 프로세스를 간소화합니다. GitOps ZTP 상태는 클러스터 설치, 클러스터 구성, GitOps ZTP 완료의 세 단계를 거칩니다.

클러스터 설치 단계
클러스터 설치 단계는 ManagedCluster CR의 ManagedClusterJoinedManagedClusterAvailable 조건을 통해 표시됩니다. ManagedCluster CR에 이러한 조건이 없거나 조건이 False 로 설정된 경우 클러스터는 여전히 설치 단계에 있습니다. 설치에 대한 추가 세부 정보는 AgentClusterInstallClusterDeployment CR에서 확인할 수 있습니다. 자세한 내용은 "GitOps ZTP 문제 해결"을 참조하세요.
클러스터 구성 단계
클러스터 구성 단계는 클러스터에 대한 ManagedCluster CR이 적용된 ztp 실행 레이블을 통해 표시됩니다.
GitOps ZTP 완료

클러스터 설치 및 구성은 GitOps ZTP 완료 단계에서 완료됩니다. 이는 ManagedCluster CR에서 ztp-running 레이블이 제거되고 ztp-done 레이블이 추가된 것을 통해 알 수 있습니다. ztp-done 레이블은 구성이 적용되었고 기준 DU 구성의 클러스터 튜닝이 완료되었음을 보여줍니다.

GitOps ZTP 완료 상태로의 변경은 Red Hat Advanced Cluster Management(RHACM) 검증자 정보 정책의 규정 준수 상태에 따라 달라집니다. 이 정책은 완료된 설치에 대한 기존 기준을 파악하고 관리되는 클러스터의 GitOps ZTP 프로비저닝이 완료될 때만 해당 설치가 규정 준수 상태로 전환되는지 검증합니다.

검증자 알림 정책은 클러스터 구성이 완전히 적용되었고 운영자가 초기화를 완료했는지 확인합니다. 정책은 다음 사항을 검증합니다.

  • 대상 MachineConfigPool 에 예상 항목이 포함되어 있으며 업데이트가 완료되었습니다. 모든 노드가 사용 가능하며 성능이 저하되지 않았습니다.
  • SR-IOV 운영자는 최소한 하나의 SriovNetworkNodeStatesyncStatus: Succeeded 로 표시된 대로 초기화를 완료했습니다.
  • PTP 운영자 데몬 세트가 존재합니다.

10.2. PolicyGenTemplate 리소스를 사용한 고급 관리형 클러스터 구성

PolicyGenTemplate CR을 사용하면 관리되는 클러스터에 사용자 정의 기능을 배포할 수 있습니다.

중요

RHACM 및 PolicyGenTemplate CR을 사용하는 것은 정책을 관리하고 관리형 클러스터에 배포하는 데 권장되는 방법입니다. 이는 이 목적을 위해 PolicyGenTemplate CR을 사용하는 것을 대체합니다. PolicyGenTemplate 리소스에 대한 자세한 내용은 RHACM 정책 생성기 설명서를 참조하세요.

중요

PolicyGenTemplate CR을 사용하여 관리형 클러스터에 정책을 관리하고 배포하는 기능은 향후 OpenShift Container Platform 릴리스에서 더 이상 지원되지 않습니다. Red Hat Advanced Cluster Management(RHACM) 및 PolicyGenerator CR을 사용하면 동일하거나 향상된 기능을 사용할 수 있습니다.

PolicyGenerator 리소스에 대한 자세한 내용은 RHACM 통합 정책 생성기 문서를 참조하세요.

10.2.1. 클러스터에 추가 변경 사항 배포

기본 GitOps Zero Touch Provisioning(ZTP) 파이프라인 구성 외부에서 클러스터 구성을 변경해야 하는 경우 다음 세 가지 옵션이 있습니다.

GitOps ZTP 파이프라인이 완료된 후 추가 구성을 적용합니다.
GitOps ZTP 파이프라인 배포가 완료되면 배포된 클러스터가 애플리케이션 워크로드에 대해 준비됩니다. 이 시점에서 추가 운영자를 설치하고 요구 사항에 맞는 구성을 적용할 수 있습니다. 추가 구성이 플랫폼 성능이나 할당된 CPU 예산에 부정적인 영향을 미치지 않는지 확인하세요.
GitOps ZTP 라이브러리에 콘텐츠 추가
GitOps ZTP 파이프라인을 사용하여 배포하는 기본 소스 사용자 정의 리소스(CR)는 필요에 따라 사용자 정의 콘텐츠로 확장될 수 있습니다.
클러스터 설치를 위한 추가 매니페스트를 만듭니다.
설치 중에 추가 매니페스트가 적용되어 설치 프로세스의 효율성이 높아집니다.
중요

추가 소스 CR을 제공하거나 기존 소스 CR을 수정하면 OpenShift Container Platform의 성능이나 CPU 프로필에 상당한 영향을 미칠 수 있습니다.

10.2.2. PolicyGenTemplate CR을 사용하여 소스 CR 콘텐츠 재정의

PolicyGenTemplate 사용자 정의 리소스(CR)를 사용하면 ztp-site-generate 컨테이너의 GitOps 플러그인과 함께 제공되는 기본 소스 CR 위에 추가 구성 세부 정보를 오버레이할 수 있습니다. PolicyGenTemplate CR은 기본 CR에 대한 논리적 병합이나 패치라고 생각할 수 있습니다. PolicyGenTemplate CR을 사용하여 기본 CR의 단일 필드를 업데이트하거나 기본 CR의 전체 내용을 오버레이합니다. 기본 CR에 없는 값을 업데이트하고 필드를 삽입할 수 있습니다.

다음 예제 절차에서는 group-du-sno-ranGen.yaml 파일에 있는 PolicyGenTemplate CR을 기반으로 참조 구성에 대해 생성된 PerformanceProfile CR의 필드를 업데이트하는 방법을 설명합니다. 요구 사항에 맞게 PolicyGenTemplate 의 다른 부분을 수정하기 위한 기초로 이 절차를 활용하세요.

사전 요구 사항

  • 사용자 정의 사이트 구성 데이터를 관리하는 Git 저장소를 만듭니다. 저장소는 허브 클러스터에서 접근할 수 있어야 하며 Argo CD의 소스 저장소로 정의되어야 합니다.

프로세스

  1. 기존 콘텐츠의 기본 소스 CR을 검토합니다. GitOps Zero Touch Provisioning(ZTP) 컨테이너에서 추출하여 참조 PolicyGenTemplate CR에 나열된 소스 CR을 검토할 수 있습니다.

    1. /out 폴더를 만듭니다.

      $ mkdir -p ./out
      Copy to Clipboard Toggle word wrap
    2. 소스 CR을 추출합니다.

      $ podman run --log-driver=none --rm registry.redhat.io/openshift4/ztp-site-generate-rhel8:v4.19.1 extract /home/ztp --tar | tar x -C ./out
      Copy to Clipboard Toggle word wrap
  2. ./out/source-crs/PerformanceProfile.yaml 에서 기준 PerformanceProfile CR을 검토합니다.

    apiVersion: performance.openshift.io/v2
    kind: PerformanceProfile
    metadata:
      name: $name
      annotations:
        ran.openshift.io/ztp-deploy-wave: "10"
    spec:
      additionalKernelArgs:
      - "idle=poll"
      - "rcupdate.rcu_normal_after_boot=0"
      cpu:
        isolated: $isolated
        reserved: $reserved
      hugepages:
        defaultHugepagesSize: $defaultHugepagesSize
        pages:
          - size: $size
            count: $count
            node: $node
      machineConfigPoolSelector:
        pools.operator.machineconfiguration.openshift.io/$mcp: ""
      net:
        userLevelNetworking: true
      nodeSelector:
        node-role.kubernetes.io/$mcp: ''
      numa:
        topologyPolicy: "restricted"
      realTimeKernel:
        enabled: true
    Copy to Clipboard Toggle word wrap
    참고

    PolicyGenTemplate CR에서 $…​를 포함하는 소스 CR의 모든 필드가 제공되지 않으면 생성된 CR에서 제거됩니다.

  3. group-du-sno-ranGen.yaml 참조 파일에서 PerformanceProfile 에 대한 PolicyGenTemplate 항목을 업데이트합니다. 다음 PolicyGenTemplate CR 스탠자 예제에서는 적절한 CPU 사양을 제공하고, hugepages 구성을 설정하고, globalDisableIrqLoadBalancing을 false로 설정하는 새 필드를 추가합니다.

    - fileName: PerformanceProfile.yaml
      policyName: "config-policy"
      metadata:
        name: openshift-node-performance-profile
      spec:
        cpu:
          # These must be tailored for the specific hardware platform
          isolated: "2-19,22-39"
          reserved: "0-1,20-21"
        hugepages:
          defaultHugepagesSize: 1G
          pages:
            - size: 1G
              count: 10
        globallyDisableIrqLoadBalancing: false
    Copy to Clipboard Toggle word wrap
  4. Git에서 PolicyGenTemplate 변경 사항을 커밋한 다음, GitOps ZTP argo CD 애플리케이션에서 모니터링하는 Git 저장소에 푸시합니다.

    출력 예

    GitOps ZTP 애플리케이션은 생성된 PerformanceProfile CR을 포함하는 RHACM 정책을 생성합니다. 해당 CR의 내용은 PolicyGenTemplatePerformanceProfile 항목에 있는 메타데이터사양 내용을 소스 CR에 병합하여 파생됩니다. 결과 CR의 내용은 다음과 같습니다.

    ---
    apiVersion: performance.openshift.io/v2
    kind: PerformanceProfile
    metadata:
        name: openshift-node-performance-profile
    spec:
        additionalKernelArgs:
            - idle=poll
            - rcupdate.rcu_normal_after_boot=0
        cpu:
            isolated: 2-19,22-39
            reserved: 0-1,20-21
        globallyDisableIrqLoadBalancing: false
        hugepages:
            defaultHugepagesSize: 1G
            pages:
                - count: 10
                  size: 1G
        machineConfigPoolSelector:
            pools.operator.machineconfiguration.openshift.io/master: ""
        net:
            userLevelNetworking: true
        nodeSelector:
            node-role.kubernetes.io/master: ""
        numa:
            topologyPolicy: restricted
        realTimeKernel:
            enabled: true
    Copy to Clipboard Toggle word wrap
참고

ztp-site-generate 컨테이너에서 추출한 /source-crs 폴더에서 $ 구문은 구문에서 암시하는 대로 템플릿 대체에 사용되지 않습니다. 대신 policyGen 도구가 문자열에 대한 $ 접두사를 확인하고 관련 PolicyGenTemplate CR에서 해당 필드에 대한 값을 지정하지 않으면 해당 필드는 출력 CR에서 완전히 생략됩니다.

이에 대한 예외는 PolicyGenTemplate CR의 mcp 에 지정된 값으로 대체되는 /source-crs YAML 파일의 $mcp 변수입니다. 예를 들어, example/policygentemplates/group-du-standard-ranGen.yaml 에서 mcp 의 값은 worker 입니다.

spec:
  bindingRules:
    group-du-standard: ""
  mcp: "worker"
Copy to Clipboard Toggle word wrap

policyGen 도구는 출력 CR에서 $mcp 인스턴스를 worker 로 바꿉니다.

10.2.3. GitOps ZTP 파이프라인에 사용자 정의 콘텐츠 추가

GitOps ZTP 파이프라인에 새로운 콘텐츠를 추가하려면 다음 절차를 수행하세요.

프로세스

  1. PolicyGenTemplate 사용자 정의 리소스(CR)에 대한 kustomization.yaml 파일이 포함된 디렉토리에 source-crs 라는 하위 디렉토리를 만듭니다.
  2. 다음 예와 같이 사용자가 제공한 CR을 source-crs 하위 디렉토리에 추가합니다.

    example
    └── policygentemplates
        ├── dev.yaml
        ├── kustomization.yaml
        ├── mec-edge-sno1.yaml
        ├── sno.yaml
        └── source-crs 
    1
    
            ├── PaoCatalogSource.yaml
            ├── PaoSubscription.yaml
            ├── custom-crs
            |   ├── apiserver-config.yaml
            |   └── disable-nic-lldp.yaml
            └── elasticsearch
                ├── ElasticsearchNS.yaml
                └── ElasticsearchOperatorGroup.yaml
    Copy to Clipboard Toggle word wrap
    1
    source-crs 하위 디렉토리는 kustomization.yaml 파일과 같은 디렉토리에 있어야 합니다.
  3. source-crs/custom-crssource-crs/elasticsearch 디렉토리에 추가한 콘텐츠에 대한 참조를 포함하도록 필수 PolicyGenTemplate CR을 업데이트합니다. 예를 들면 다음과 같습니다.

    apiVersion: ran.openshift.io/v1
    kind: PolicyGenTemplate
    metadata:
      name: "group-dev"
      namespace: "ztp-clusters"
    spec:
      bindingRules:
        dev: "true"
      mcp: "master"
      sourceFiles:
        # These policies/CRs come from the internal container Image
        #Cluster Logging
        - fileName: ClusterLogNS.yaml
          remediationAction: inform
          policyName: "group-dev-cluster-log-ns"
        - fileName: ClusterLogOperGroup.yaml
          remediationAction: inform
          policyName: "group-dev-cluster-log-operator-group"
        - fileName: ClusterLogSubscription.yaml
          remediationAction: inform
          policyName: "group-dev-cluster-log-sub"
        #Local Storage Operator
        - fileName: StorageNS.yaml
          remediationAction: inform
          policyName: "group-dev-lso-ns"
        - fileName: StorageOperGroup.yaml
          remediationAction: inform
          policyName: "group-dev-lso-operator-group"
        - fileName: StorageSubscription.yaml
          remediationAction: inform
          policyName: "group-dev-lso-sub"
        #These are custom local policies that come from the source-crs directory in the git repo
        # Performance Addon Operator
        - fileName: PaoSubscriptionNS.yaml
          remediationAction: inform
          policyName: "group-dev-pao-ns"
        - fileName: PaoSubscriptionCatalogSource.yaml
          remediationAction: inform
          policyName: "group-dev-pao-cat-source"
          spec:
            image: <container_image_url>
        - fileName: PaoSubscription.yaml
          remediationAction: inform
          policyName: "group-dev-pao-sub"
        #Elasticsearch Operator
        - fileName: elasticsearch/ElasticsearchNS.yaml 
    1
    
          remediationAction: inform
          policyName: "group-dev-elasticsearch-ns"
        - fileName: elasticsearch/ElasticsearchOperatorGroup.yaml
          remediationAction: inform
          policyName: "group-dev-elasticsearch-operator-group"
        #Custom Resources
        - fileName: custom-crs/apiserver-config.yaml 
    2
    
          remediationAction: inform
          policyName: "group-dev-apiserver-config"
        - fileName: custom-crs/disable-nic-lldp.yaml
          remediationAction: inform
          policyName: "group-dev-disable-nic-lldp"
    Copy to Clipboard Toggle word wrap
    1 2
    /source-crs 상위 디렉토리에서 해당 파일의 상대 경로를 포함하도록 fileName을 설정합니다.
  4. Git에서 PolicyGenTemplate 변경 사항을 커밋한 다음, GitOps ZTP Argo CD 정책 애플리케이션에서 모니터링하는 Git 저장소에 푸시합니다.
  5. ClusterGroupUpgrade CR을 업데이트하여 변경된 PolicyGenTemplate을 포함하고 cgu-test.yaml 로 저장합니다. 다음 예에서는 생성된 cgu-test.yaml 파일을 보여줍니다.

    apiVersion: ran.openshift.io/v1alpha1
    kind: ClusterGroupUpgrade
    metadata:
      name: custom-source-cr
      namespace: ztp-clusters
    spec:
      managedPolicies:
        - group-dev-config-policy
      enable: true
      clusters:
      - cluster1
      remediationStrategy:
        maxConcurrency: 2
        timeout: 240
    Copy to Clipboard Toggle word wrap
  6. 다음 명령을 실행하여 업데이트된 ClusterGroupUpgrade CR을 적용합니다.

    $ oc apply -f cgu-test.yaml
    Copy to Clipboard Toggle word wrap

검증

  • 다음 명령을 실행하여 업데이트가 성공했는지 확인하세요.

    $ oc get cgu -A
    Copy to Clipboard Toggle word wrap

    출력 예

    NAMESPACE     NAME               AGE   STATE        DETAILS
    ztp-clusters  custom-source-cr   6s    InProgress   Remediating non-compliant policies
    ztp-install   cluster1           19h   Completed    All clusters are compliant with all the managed policies
    Copy to Clipboard Toggle word wrap

10.2.4. PolicyGenTemplate CR에 대한 정책 준수 평가 시간 초과 구성

허브 클러스터에 설치된 Red Hat Advanced Cluster Management(RHACM)를 사용하면 관리되는 클러스터가 적용된 정책을 준수하는지 모니터링하고 보고할 수 있습니다. RHACM은 정책 템플릿을 사용하여 미리 정의된 정책 컨트롤러와 정책을 적용합니다. 정책 컨트롤러는 Kubernetes 사용자 정의 리소스 정의(CRD) 인스턴스입니다.

PolicyGenTemplate 사용자 정의 리소스(CR)를 사용하여 기본 정책 평가 간격을 재정의할 수 있습니다. RHACM이 적용된 클러스터 정책을 다시 평가하기 전에 ConfigurationPolicy CR이 정책을 준수하거나 준수하지 않는 상태를 유지할 수 있는 기간을 정의하는 기간 설정을 구성합니다.

GitOps Zero Touch Provisioning(ZTP) 정책 생성기는 사전 정의된 정책 평가 간격으로 ConfigurationPolicy CR 정책을 생성합니다. 비준수 상태의 기본값은 10초입니다. 규정 준수 상태의 기본값은 10분입니다. 평가 간격을 비활성화하려면 값을 never 로 설정합니다.

사전 요구 사항

  • OpenShift CLI(oc)가 설치되어 있습니다.
  • cluster-admin 권한이 있는 사용자로 허브 클러스터에 로그인했습니다.
  • 사용자 정의 사이트 구성 데이터를 관리하는 Git 저장소를 만들었습니다.

프로세스

  1. PolicyGenTemplate CR의 모든 정책에 대한 평가 간격을 구성하려면 evaluationInterval 필드에 적절한 호환비호환 값을 설정합니다. 예를 들면 다음과 같습니다.

    spec:
      evaluationInterval:
        compliant: 30m
        noncompliant: 20s
    Copy to Clipboard Toggle word wrap
    참고

    특정 준수 상태에 도달한 후에도 정책 평가를 중단하지 않으려면 준수비준수 필드를 ' 절대 안 함'으로 설정할 수도 있습니다.

  2. PolicyGenTemplate CR에서 개별 정책 개체에 대한 평가 간격을 구성하려면 evaluationInterval 필드를 추가하고 적절한 값을 설정합니다. 예를 들면 다음과 같습니다.

    spec:
      sourceFiles:
        - fileName: SriovSubscription.yaml
          policyName: "sriov-sub-policy"
          evaluationInterval:
            compliant: never
            noncompliant: 10s
    Copy to Clipboard Toggle word wrap
  3. PolicyGenTemplate CR 파일을 Git 저장소에 커밋하고 변경 사항을 푸시합니다.

검증

관리되는 스포크 클러스터 정책이 예상 간격으로 모니터링되는지 확인하세요.

  1. 관리되는 클러스터에 클러스터 관리자 권한이 있는 사용자로 로그인합니다.
  2. open-cluster-management-agent-addon 네임스페이스에서 실행 중인 포드를 가져옵니다. 다음 명령을 실행합니다.

    $ oc get pods -n open-cluster-management-agent-addon
    Copy to Clipboard Toggle word wrap

    출력 예

    NAME                                         READY   STATUS    RESTARTS        AGE
    config-policy-controller-858b894c68-v4xdb    1/1     Running   22 (5d8h ago)   10d
    Copy to Clipboard Toggle word wrap

  3. config-policy-controller pod의 로그에서 예상 간격으로 적용된 정책이 평가되는지 확인하세요.

    $ oc logs -n open-cluster-management-agent-addon config-policy-controller-858b894c68-v4xdb
    Copy to Clipboard Toggle word wrap

    출력 예

    2022-05-10T15:10:25.280Z       info   configuration-policy-controller controllers/configurationpolicy_controller.go:166      Skipping the policy evaluation due to the policy not reaching the evaluation interval  {"policy": "compute-1-config-policy-config"}
    2022-05-10T15:10:25.280Z       info   configuration-policy-controller controllers/configurationpolicy_controller.go:166      Skipping the policy evaluation due to the policy not reaching the evaluation interval  {"policy": "compute-1-common-compute-1-catalog-policy-config"}
    Copy to Clipboard Toggle word wrap

배포된 클러스터의 GitOps Zero Touch Provisioning(ZTP) 설치 및 구성이 완료되면 신호를 보내는 검증자 알림 정책을 만듭니다. 이 정책은 단일 노드 OpenShift 클러스터, 3-노드 클러스터 및 표준 클러스터의 배포에 사용할 수 있습니다.

프로세스

  1. 소스 파일 validatorCRs/informDuValidator.yaml을 포함하는 독립형 PolicyGenTemplate 사용자 정의 리소스(CR)를 만듭니다. 각 클러스터 유형마다 독립형 PolicyGenTemplate CR이 하나만 필요합니다. 예를 들어, 이 CR은 단일 노드 OpenShift 클러스터에 대한 검증자 정보 정책을 적용합니다.

    단일 노드 클러스터 검증기 정보 정책 CR(group-du-sno-validator-ranGen.yaml) 예시

    apiVersion: ran.openshift.io/v1
    kind: PolicyGenTemplate
    metadata:
      name: "group-du-sno-validator" 
    1
    
      namespace: "ztp-group" 
    2
    
    spec:
      bindingRules:
        group-du-sno: "" 
    3
    
      bindingExcludedRules:
        ztp-done: "" 
    4
    
      mcp: "master" 
    5
    
      sourceFiles:
        - fileName: validatorCRs/informDuValidator.yaml
          remediationAction: inform 
    6
    
          policyName: "du-policy" 
    7
    Copy to Clipboard Toggle word wrap

    1
    {policy-gen-crs} 오브젝트의 이름입니다. 이 이름은 요청된 네임스페이스 에 생성된 placementBinding , placementRulepolicy 에 대한 이름의 일부로도 사용됩니다.
    2
    이 값은 그룹 policy-gen-crs 에서 사용된 네임스페이스 와 일치해야 합니다.
    3
    bindingRules 에 정의된 group-du-* 레이블은 SiteConfig 파일에 존재해야 합니다.
    4
    bindingExcludedRules 에 정의된 레이블은 `ztp-done:`이어야 합니다. ztp-done 레이블은 Topology Aware Lifecycle Manager와 함께 사용됩니다.
    5
    mcp는 소스 파일 validatorCRs/informDuValidator.yaml 에서 사용되는 MachineConfigPool 객체를 정의합니다. 단일 노드와 3-노드 클러스터 배포의 경우 master 이고 표준 클러스터 배포의 경우 worker 여야 합니다.
    6
    선택 사항: 기본값은 inform 입니다.
    7
    이 값은 생성된 RHACM 정책의 이름의 일부로 사용됩니다. 단일 노드 예제에 대해 생성된 검증자 정책은 group-du-sno-validator-du-policy 입니다.
  2. Git 저장소에 PolicyGenTemplate CR 파일을 커밋하고 변경 사항을 푸시합니다.

10.2.6. PolicyGenTemplate CR을 사용하여 전원 상태 구성

낮은 지연 시간과 고성능 에지 배포를 위해서는 C-상태와 P-상태를 비활성화하거나 제한해야 합니다. 이 구성을 사용하면 CPU는 일정한 주파수, 일반적으로 최대 터보 주파수로 실행됩니다. 이를 통해 CPU가 항상 최대 속도로 실행되므로 성능이 높고 지연 시간이 짧아집니다. 이로 인해 워크로드에 대한 최적의 대기 시간이 발생합니다. 하지만 이로 인해 전력 소모가 가장 높아지는데, 이는 모든 작업 부하에 필요하지 않을 수도 있습니다.

워크로드는 중요 워크로드와 비중요 워크로드로 분류할 수 있습니다. 중요 워크로드는 높은 성능과 낮은 지연 시간을 위해 비활성화된 C-상태 및 P-상태 설정이 필요하고, 비중요 워크로드는 일부 지연 시간과 성능을 희생하여 전력을 절약하기 위해 C-상태 및 P-상태 설정을 사용합니다. GitOps Zero Touch Provisioning(ZTP)을 사용하여 다음 세 가지 전원 상태를 구성할 수 있습니다.

  • 고성능 모드는 가장 높은 전력 소비에서도 매우 낮은 지연 시간을 제공합니다.
  • 성능 모드는 상대적으로 높은 전력 소비로 낮은 지연 시간을 제공합니다.
  • 전력 절감은 대기 시간이 증가하여 전력 소비를 줄일 수 있습니다.

기본 구성은 낮은 지연 시간과 성능 모드입니다.

PolicyGenTemplate 사용자 정의 리소스(CR)를 사용하면 ztp-site-generate 컨테이너의 GitOps 플러그인과 함께 제공되는 기본 소스 CR에 추가 구성 세부 정보를 오버레이할 수 있습니다.

group-du-sno-ranGen.yamlPolicyGenTemplate CR을 기반으로 참조 구성에 대한 생성된 PerformanceProfile CR의 workloadHints 필드를 업데이트하여 전원 상태를 구성합니다.

다음은 세 가지 전원 상태를 구성하는 데 적용되는 일반적인 전제 조건입니다.

사전 요구 사항

  • 사용자 정의 사이트 구성 데이터를 관리하는 Git 저장소를 만들었습니다. 저장소는 허브 클러스터에서 접근할 수 있어야 하며 Argo CD의 소스 저장소로 정의되어야 합니다.
  • " GitOps ZTP 사이트 구성 리포지토리 준비"에 설명된 절차를 수행했습니다.
10.2.6.1. PolicyGenTemplate CR을 사용하여 성능 모드 구성

group-du-sno-ranGen.yamlPolicyGenTemplate CR을 기반으로 참조 구성에 대한 생성된 PerformanceProfile CR의 workloadHints 필드를 업데이트하여 성능 모드를 설정하는 이 예제를 따르세요.

성능 모드는 상대적으로 높은 전력 소비로 낮은 지연 시간을 제공합니다.

사전 요구 사항

  • "낮은 지연 시간과 높은 성능을 위한 호스트 펌웨어 구성"의 지침에 따라 성능 관련 설정으로 BIOS를 구성했습니다.

프로세스

  1. 성능 모드를 설정하려면 out/argocd/example/policygentemplates// 에 있는 group-du-sno-ranGen.yaml 참조 파일의 PerformanceProfile 에 대한 PolicyGenTemplate 항목을 다음과 같이 업데이트합니다.

    - fileName: PerformanceProfile.yaml
      policyName: "config-policy"
      metadata:
      # ...
      spec:
        # ...
        workloadHints:
             realTime: true
             highPowerConsumption: false
             perPodPowerManagement: false
    Copy to Clipboard Toggle word wrap
  2. Git에서 PolicyGenTemplate 변경 사항을 커밋한 다음, GitOps ZTP Argo CD 애플리케이션에서 모니터링하는 Git 저장소에 푸시합니다.
10.2.6.2. PolicyGenTemplate CR을 사용하여 고성능 모드 구성

group-du-sno-ranGen.yamlPolicyGenTemplate CR을 기반으로 참조 구성에 대한 생성된 PerformanceProfile CR의 workloadHints 필드를 업데이트하여 고성능 모드를 설정하는 이 예제를 따르세요.

고성능 모드는 가장 높은 전력 소비에서도 매우 낮은 지연 시간을 제공합니다.

사전 요구 사항

  • "낮은 지연 시간과 높은 성능을 위한 호스트 펌웨어 구성"의 지침에 따라 성능 관련 설정으로 BIOS를 구성했습니다.

프로세스

  1. out/argocd/example/policygentemplates/ 에 있는 group-du-sno-ranGen.yaml 참조 파일의 PerformanceProfile 에 대한 PolicyGenTemplate 항목을 다음과 같이 업데이트하여 고성능 모드를 설정합니다.

    - fileName: PerformanceProfile.yaml
      policyName: "config-policy"
      metadata:
      #  ...
      spec:
      #  ...
        workloadHints:
             realTime: true
             highPowerConsumption: true
             perPodPowerManagement: false
    Copy to Clipboard Toggle word wrap
  2. Git에서 PolicyGenTemplate 변경 사항을 커밋한 다음, GitOps ZTP Argo CD 애플리케이션에서 모니터링하는 Git 저장소에 푸시합니다.
10.2.6.3. PolicyGenTemplate CR을 사용하여 절전 모드 구성

group-du-sno-ranGen.yamlPolicyGenTemplate CR을 기반으로 참조 구성에 대한 생성된 PerformanceProfile CR의 workloadHints 필드를 업데이트하여 절전 모드를 설정하는 이 예제를 따르세요.

절전 모드는 전력 소비를 줄이는 것과 지연 시간을 늘리는 것의 균형을 맞춥니다.

사전 요구 사항

  • BIOS에서 C-상태와 OS 제어 P-상태를 활성화했습니다.

프로세스

  1. 다음과 같이 out/argocd/example/policygentemplates/ 에 있는 group-du-sno-ranGen.yaml 참조 파일의 PerformanceProfile 에 대한 PolicyGenTemplate 항목을 업데이트하여 전원 절약 모드를 구성합니다. 추가 커널 인수 객체를 통해 CPU 관리자를 절전 모드로 구성하는 것이 좋습니다.

    - fileName: PerformanceProfile.yaml
      policyName: "config-policy"
      metadata:
      # ...
      spec:
        # ...
        workloadHints:
          realTime: true
          highPowerConsumption: false
          perPodPowerManagement: true
        # ...
        additionalKernelArgs:
          - # ...
          - "cpufreq.default_governor=schedutil" 
    1
    Copy to Clipboard Toggle word wrap
    1
    schedutil 가버너가 권장되지만, ondemandpowersave 등 다른 가버너도 사용할 수 있습니다.
  2. Git에서 PolicyGenTemplate 변경 사항을 커밋한 다음, GitOps ZTP Argo CD 애플리케이션에서 모니터링하는 Git 저장소에 푸시합니다.

검증

  1. 다음 명령을 사용하여 식별된 노드 목록에서 배포된 클러스터의 작업자 노드를 선택합니다.

    $ oc get nodes
    Copy to Clipboard Toggle word wrap
  2. 다음 명령을 사용하여 노드에 로그인합니다.

    $ oc debug node/<node-name>
    Copy to Clipboard Toggle word wrap

    <노드 이름>을 전원 상태를 확인하려는 노드의 이름으로 바꾸세요.

  3. 디버그 쉘 내에서 /host를 root 디렉터리로 설정합니다. 디버그 Pod는 Pod 내의 /host에 호스트의 루트 파일 시스템을 마운트합니다. 루트 디렉토리를 /host 로 변경하면 다음 예와 같이 호스트의 실행 파일 경로에 포함된 바이너리를 실행할 수 있습니다.

    # chroot /host
    Copy to Clipboard Toggle word wrap
  4. 다음 명령을 실행하여 적용된 전원 상태를 확인하세요.

    # cat /proc/cmdline
    Copy to Clipboard Toggle word wrap

예상 출력

  • 절전 모드의 경우 intel_pstate=passive 입니다 .
10.2.6.4. 전력 절감 극대화

최대 전력 절감을 달성하려면 최대 CPU 주파수를 제한하는 것이 좋습니다. 최대 CPU 주파수를 제한하지 않고 비중요 작업 CPU에서 C 상태를 활성화하면 중요 CPU의 주파수를 높여서 얻는 전력 절감 효과가 크게 무효화됩니다.

TunedPerformancePatch CR에서 참조 구성의 max_perf_pct 에 적절한 값을 설정하고 sysfs 플러그인 필드를 업데이트하여 전력 절감을 극대화합니다. group-du-sno-ranGen.yaml을 기반으로 한 이 예제에서는 최대 CPU 주파수를 제한하는 절차를 설명합니다.

사전 요구 사항

  • "PolicyGenTemplate CR을 사용하여 절전 모드 구성"에 설명된 대로 절전 모드를 구성했습니다.

프로세스

  1. out/argocd/example/policygentemplates/ 에 있는 group-du-sno-ranGen.yaml 참조 파일에서 TunedPerformancePatch 에 대한 PolicyGenTemplate 항목을 업데이트합니다. 전력 절감을 극대화하려면 다음 예와 같이 max_perf_pct를 추가하세요.

    - fileName: TunedPerformancePatch.yaml
      policyName: "config-policy"
      spec:
        profile:
          - name: performance-patch
            data: |
              # ...
              [sysfs]
              /sys/devices/system/cpu/intel_pstate/max_perf_pct=<x> 
    1
    Copy to Clipboard Toggle word wrap
    1
    max_perf_pctcpufreq 드라이버가 설정할 수 있는 최대 주파수를 최대 지원 CPU 주파수의 백분율로 제어합니다. 이 값은 모든 CPU에 적용됩니다. 지원되는 최대 주파수는 /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_max_freq 에서 확인할 수 있습니다. 시작점으로, 모든 CPU를 All Cores Turbo 주파수로 제한하는 백분율을 사용할 수 있습니다. 모든 코어 터보 주파수는 모든 코어가 완전히 사용되었을 때 실행되는 주파수입니다.
    참고

    전력 절감을 극대화하려면 더 낮은 값을 설정하세요. max_perf_pct 값을 낮게 설정하면 최대 CPU 주파수가 제한되어 전력 소비는 줄어들지만 성능에 영향을 미칠 가능성도 있습니다. 다양한 값으로 실험하고 시스템 성능과 전력 소비를 모니터링하여 사용 사례에 가장 적합한 설정을 찾으세요.

  2. Git에서 PolicyGenTemplate 변경 사항을 커밋한 다음, GitOps ZTP Argo CD 애플리케이션에서 모니터링하는 Git 저장소에 푸시합니다.

10.2.7. PolicyGenTemplate CR을 사용하여 LVM 스토리지 구성

GitOps Zero Touch Provisioning(ZTP)을 사용하여 배포하는 관리형 클러스터에 대해 LVM(논리적 볼륨 관리자) 스토리지를 구성할 수 있습니다.

참고

HTTP 전송과 함께 PTP 이벤트나 베어 메탈 하드웨어 이벤트를 사용하는 경우 LVM 저장소를 사용하여 이벤트 구독을 유지합니다.

분산된 단위의 로컬 볼륨을 사용하는 영구 저장소의 경우 로컬 저장소 운영자를 사용하세요.

사전 요구 사항

  • OpenShift CLI(oc)를 설치합니다.
  • cluster-admin 권한이 있는 사용자로 로그인합니다.
  • 사용자 정의 사이트 구성 데이터를 관리하는 Git 저장소를 만듭니다.

프로세스

  1. 새로운 관리형 클러스터에 대한 LVM 스토리지를 구성하려면 common-ranGen.yaml 파일의 spec.sourceFiles 에 다음 YAML을 추가합니다.

    - fileName: StorageLVMOSubscriptionNS.yaml
      policyName: subscription-policies
    - fileName: StorageLVMOSubscriptionOperGroup.yaml
      policyName: subscription-policies
    - fileName: StorageLVMOSubscription.yaml
      spec:
        name: lvms-operator
        channel: stable-4.19
      policyName: subscription-policies
    Copy to Clipboard Toggle word wrap
    참고

    Storage LVMO 구독은 더 이상 제공되지 않습니다. OpenShift Container Platform의 향후 릴리스에서는 스토리지 LVMO 구독을 사용할 수 없게 됩니다. 대신 Storage LVMS 서브스크립션을 사용해야 합니다.

    OpenShift Container Platform 4.19에서는 LVMO 구독 대신 Storage LVMS 구독을 사용할 수 있습니다. LVMS 구독에는 common-ranGen.yaml 파일에서 수동으로 재정의할 필요가 없습니다. Storage LVMS 구독을 사용하려면 common-ranGen.yaml 파일의 spec.sourceFiles 에 다음 YAML을 추가하세요.

    - fileName: StorageLVMSubscriptionNS.yaml
      policyName: subscription-policies
    - fileName: StorageLVMSubscriptionOperGroup.yaml
      policyName: subscription-policies
    - fileName: StorageLVMSubscription.yaml
      policyName: subscription-policies
    Copy to Clipboard Toggle word wrap
  2. 특정 그룹 또는 개별 사이트 구성 파일의 spec.sourceFilesLVMCluster CR을 추가합니다. 예를 들어, group-du-sno-ranGen.yaml 파일에 다음을 추가합니다.

    - fileName: StorageLVMCluster.yaml
      policyName: "lvms-config"
      spec:
        storage:
          deviceClasses:
          - name: vg1
            thinPoolConfig:
              name: thin-pool-1
              sizePercent: 90
              overprovisionRatio: 10
    Copy to Clipboard Toggle word wrap

    이 예제 구성은 OpenShift Container Platform이 설치된 디스크를 제외한 모든 사용 가능한 장치를 포함하는 볼륨 그룹( vg1 )을 생성합니다. 또한 씬 풀 논리 볼륨이 생성됩니다.

  3. 필요한 기타 변경 사항과 파일을 사용자 정의 사이트 저장소에 병합합니다.
  4. Git에서 PolicyGenTemplate 변경 사항을 커밋한 다음, GitOps ZTP를 사용하여 LVM 스토리지를 새 사이트에 배포하려면 변경 사항을 사이트 구성 저장소에 푸시합니다.

10.2.8. PolicyGenTemplate CR을 사용하여 PTP 이벤트 구성

GitOps ZTP 파이프라인을 사용하면 HTTP 전송을 사용하는 PTP 이벤트를 구성할 수 있습니다.

10.2.8.1. HTTP 전송을 사용하는 PTP 이벤트 구성

GitOps Zero Touch Provisioning(ZTP) 파이프라인을 사용하여 배포하는 관리형 클러스터에서 HTTP 전송을 사용하는 PTP 이벤트를 구성할 수 있습니다.

사전 요구 사항

  • OpenShift CLI(oc)가 설치되어 있습니다.
  • 클러스터 관리자 권한이 있는 사용자로 로그인했습니다.
  • 사용자 정의 사이트 구성 데이터를 관리하는 Git 저장소를 만들었습니다.

프로세스

  1. 요구 사항에 따라 다음 PolicyGenTemplate 변경 사항을 group-du-3node-ranGen.yaml , group-du-sno-ranGen.yaml 또는 group-du-standard-ranGen.yaml 파일에 적용하세요.

    1. spec.sourceFiles 에 전송 호스트를 구성하는 PtpOperatorConfig CR 파일을 추가합니다.

      - fileName: PtpOperatorConfigForEvent.yaml
        policyName: "config-policy"
        spec:
          daemonNodeSelector: {}
          ptpEventConfig:
            enableEventPublisher: true
            transportHost: http://ptp-event-publisher-service-NODE_NAME.openshift-ptp.svc.cluster.local:9043
      Copy to Clipboard Toggle word wrap
      참고

      OpenShift Container Platform 4.13 이상에서는 PTP 이벤트와 함께 HTTP 전송을 사용할 때 PtpOperatorConfig 리소스에서 transportHost 필드를 설정할 필요가 없습니다.

    2. PTP 클록 유형과 인터페이스에 맞게 linuxptpphc2sys를 구성합니다. 예를 들어, 다음 YAML을 spec.sourceFiles 에 추가합니다.

      - fileName: PtpConfigSlave.yaml 
      1
      
        policyName: "config-policy"
        metadata:
          name: "du-ptp-slave"
        spec:
          profile:
          - name: "slave"
            interface: "ens5f1" 
      2
      
            ptp4lOpts: "-2 -s --summary_interval -4" 
      3
      
            phc2sysOpts: "-a -r -m -n 24 -N 8 -R 16" 
      4
      
          ptpClockThreshold: 
      5
      
            holdOverTimeout: 30 # seconds
            maxOffsetThreshold: 100  # nano seconds
            minOffsetThreshold: -100
      Copy to Clipboard Toggle word wrap
      1
      요구 사항에 따라 PtpConfigMaster.yaml 또는 PtpConfigSlave.yaml 이 될 수 있습니다. group-du-sno-ranGen.yaml 또는 group-du-3node-ranGen.yaml 기반 구성의 경우 PtpConfigSlave.yaml을 사용하세요.
      2
      장치별 인터페이스 이름입니다.
      3
      PTP 빠른 이벤트를 활성화하려면 .spec.sourceFiles.spec.profileptp4lOpts--summary_interval -4 값을 추가해야 합니다.
      4
      필수 phc2sysOpts 값. -m은 stdout 에 메시지를 출력합니다. linuxptp-daemon DaemonSet은 로그를 구문 분석하고 Prometheus 메트릭을 생성합니다.
      5
      선택 사항: ptpClockThreshold 스탠자가 없으면 ptpClockThreshold 필드에 기본값이 사용됩니다. 이 절에서는 기본 ptpClockThreshold 값을 보여줍니다. ptpClockThreshold 값은 PTP 마스터 클록이 분리된 후 PTP 이벤트가 트리거되기까지 걸리는 시간을 구성합니다. holdOverTimeout은 PTP 마스터 클록이 연결 해제될 때 PTP 클록 이벤트 상태가 FREERUN 으로 변경되기 전의 시간 값(초)입니다. maxOffsetThresholdminOffsetThreshold 설정은 CLOCK_REALTIME ( phc2sys ) 또는 마스터 오프셋( ptp4l ) 값과 비교하는 나노초 단위의 오프셋 값을 구성합니다. ptp4l 또는 phc2sys 오프셋 값이 이 범위를 벗어나면 PTP 클록 상태가 FREERUN 으로 설정됩니다. 오프셋 값이 이 범위 내에 있으면 PTP 클록 상태가 LOCKED 로 설정됩니다.
  2. 필요한 기타 변경 사항과 파일을 사용자 정의 사이트 저장소에 병합합니다.
  3. GitOps ZTP를 사용하여 PTP 빠른 이벤트를 새 사이트에 배포하려면 사이트 구성 저장소에 변경 사항을 푸시하세요.

10.2.9. 이미지의 로컬 캐싱을 위한 이미지 레지스트리 운영자 구성

OpenShift Container Platform은 로컬 레지스트리를 사용하여 이미지 캐싱을 관리합니다. 엣지 컴퓨팅 사용 사례에서 클러스터는 중앙 집중식 이미지 레지스트리와 통신할 때 대역폭 제한을 받는 경우가 많으며, 이로 인해 이미지 다운로드 시간이 길어질 수 있습니다.

초기 배포 시에는 다운로드 시간이 길어지는 것은 불가피합니다. 시간이 지나면서 예기치 않은 종료가 발생할 경우 CRI-O가 /var/lib/containers/storage 디렉터리를 지울 위험이 있습니다. 긴 이미지 다운로드 시간을 해결하려면 GitOps Zero Touch Provisioning(ZTP)을 사용하여 원격 관리 클러스터에 로컬 이미지 레지스트리를 만들 수 있습니다. 이 기능은 클러스터가 네트워크의 가장 먼 가장자리에 배포되는 엣지 컴퓨팅 시나리오에서 유용합니다.

GitOps ZTP로 로컬 이미지 레지스트리를 설정하려면 먼저 원격 관리 클러스터를 설치하는 데 사용하는 SiteConfig CR에서 디스크 파티셔닝을 구성해야 합니다. 설치 후 PolicyGenTemplate CR을 사용하여 로컬 이미지 레지스트리를 구성합니다. 그런 다음 GitOps ZTP 파이프라인은 영구 볼륨(PV) 및 영구 볼륨 클레임(PVC) CR을 생성하고 imageregistry 구성에 패치를 적용합니다.

참고

로컬 이미지 레지스트리는 사용자 애플리케이션 이미지에만 사용할 수 있으며 OpenShift Container Platform 또는 Operator Lifecycle Manager 운영자 이미지에는 사용할 수 없습니다.

10.2.9.1. SiteConfig를 사용하여 디스크 파티셔닝 구성

SiteConfig CR과 GitOps Zero Touch Provisioning(ZTP)을 사용하여 관리형 클러스터에 대한 디스크 파티셔닝을 구성합니다. SiteConfig CR의 디스크 파티션 세부 정보는 기본 디스크와 일치해야 합니다.

중요

이 절차는 설치 시 완료해야 합니다.

사전 요구 사항

  • 부탄을 설치하세요.

프로세스

  1. storage.bu 파일을 만듭니다.

    variant: fcos
    version: 1.3.0
    storage:
      disks:
      - device: /dev/disk/by-path/pci-0000:01:00.0-scsi-0:2:0:0 
    1
    
        wipe_table: false
        partitions:
        - label: var-lib-containers
          start_mib: <start_of_partition> 
    2
    
          size_mib: <partition_size> 
    3
    
      filesystems:
        - path: /var/lib/containers
          device: /dev/disk/by-partlabel/var-lib-containers
          format: xfs
          wipe_filesystem: true
          with_mount_unit: true
          mount_options:
            - defaults
            - prjquota
    Copy to Clipboard Toggle word wrap
    1
    root 디스크를 지정합니다.
    2
    파티션의 시작을 MiB 단위로 지정합니다. 값이 너무 작으면 설치가 실패합니다.
    3
    파티션의 크기를 지정합니다. 값이 너무 작으면 배포가 실패합니다.
  2. 다음 명령을 실행하여 storage.bu를 Ignition 파일로 변환합니다.

    $ butane storage.bu
    Copy to Clipboard Toggle word wrap

    출력 예

    {"ignition":{"version":"3.2.0"},"storage":{"disks":[{"device":"/dev/disk/by-path/pci-0000:01:00.0-scsi-0:2:0:0","partitions":[{"label":"var-lib-containers","sizeMiB":0,"startMiB":250000}],"wipeTable":false}],"filesystems":[{"device":"/dev/disk/by-partlabel/var-lib-containers","format":"xfs","mountOptions":["defaults","prjquota"],"path":"/var/lib/containers","wipeFilesystem":true}]},"systemd":{"units":[{"contents":"# # Generated by Butane\n[Unit]\nRequires=systemd-fsck@dev-disk-by\\x2dpartlabel-var\\x2dlib\\x2dcontainers.service\nAfter=systemd-fsck@dev-disk-by\\x2dpartlabel-var\\x2dlib\\x2dcontainers.service\n\n[Mount]\nWhere=/var/lib/containers\nWhat=/dev/disk/by-partlabel/var-lib-containers\nType=xfs\nOptions=defaults,prjquota\n\n[Install]\nRequiredBy=local-fs.target","enabled":true,"name":"var-lib-containers.mount"}]}}
    Copy to Clipboard Toggle word wrap

  3. JSON Pretty Print 와 같은 도구를 사용하여 출력을 JSON 형식으로 변환합니다.
  4. SiteConfig CR의 .spec.clusters.nodes.ignitionConfigOverride 필드에 출력을 복사합니다.

    [...]
    spec:
      clusters:
        - nodes:
            - ignitionConfigOverride: |
              {
                "ignition": {
                  "version": "3.2.0"
                },
                "storage": {
                  "disks": [
                    {
                      "device": "/dev/disk/by-path/pci-0000:01:00.0-scsi-0:2:0:0",
                      "partitions": [
                        {
                          "label": "var-lib-containers",
                          "sizeMiB": 0,
                          "startMiB": 250000
                        }
                      ],
                      "wipeTable": false
                    }
                  ],
                  "filesystems": [
                    {
                      "device": "/dev/disk/by-partlabel/var-lib-containers",
                      "format": "xfs",
                      "mountOptions": [
                        "defaults",
                        "prjquota"
                      ],
                      "path": "/var/lib/containers",
                      "wipeFilesystem": true
                    }
                  ]
                },
                "systemd": {
                  "units": [
                    {
                      "contents": "# # Generated by Butane\n[Unit]\nRequires=systemd-fsck@dev-disk-by\\x2dpartlabel-var\\x2dlib\\x2dcontainers.service\nAfter=systemd-fsck@dev-disk-by\\x2dpartlabel-var\\x2dlib\\x2dcontainers.service\n\n[Mount]\nWhere=/var/lib/containers\nWhat=/dev/disk/by-partlabel/var-lib-containers\nType=xfs\nOptions=defaults,prjquota\n\n[Install]\nRequiredBy=local-fs.target",
                      "enabled": true,
                      "name": "var-lib-containers.mount"
                    }
                  ]
                }
              }
    [...]
    Copy to Clipboard Toggle word wrap

    참고

    .spec.clusters.nodes.ignitionConfigOverride 필드가 없으면 생성합니다.

검증

  1. 설치 중 또는 설치 후에 다음 명령을 실행하여 허브 클러스터에서 BareMetalHost 개체에 주석이 표시되는지 확인합니다.

    $ oc get bmh -n my-sno-ns my-sno -ojson | jq '.metadata.annotations["bmac.agent-install.openshift.io/ignition-config-overrides"]
    Copy to Clipboard Toggle word wrap

    출력 예

    "{\"ignition\":{\"version\":\"3.2.0\"},\"storage\":{\"disks\":[{\"device\":\"/dev/disk/by-id/wwn-0x6b07b250ebb9d0002a33509f24af1f62\",\"partitions\":[{\"label\":\"var-lib-containers\",\"sizeMiB\":0,\"startMiB\":250000}],\"wipeTable\":false}],\"filesystems\":[{\"device\":\"/dev/disk/by-partlabel/var-lib-containers\",\"format\":\"xfs\",\"mountOptions\":[\"defaults\",\"prjquota\"],\"path\":\"/var/lib/containers\",\"wipeFilesystem\":true}]},\"systemd\":{\"units\":[{\"contents\":\"# Generated by Butane\\n[Unit]\\nRequires=systemd-fsck@dev-disk-by\\\\x2dpartlabel-var\\\\x2dlib\\\\x2dcontainers.service\\nAfter=systemd-fsck@dev-disk-by\\\\x2dpartlabel-var\\\\x2dlib\\\\x2dcontainers.service\\n\\n[Mount]\\nWhere=/var/lib/containers\\nWhat=/dev/disk/by-partlabel/var-lib-containers\\nType=xfs\\nOptions=defaults,prjquota\\n\\n[Install]\\nRequiredBy=local-fs.target\",\"enabled\":true,\"name\":\"var-lib-containers.mount\"}]}}"
    Copy to Clipboard Toggle word wrap

  2. 설치 후 단일 노드 OpenShift 디스크 상태를 확인합니다.

    1. 다음 명령을 실행하여 단일 노드 OpenShift 노드에서 디버그 세션을 시작합니다. 이 단계는 <node_name>-debug라는 디버그 Pod를 인스턴스화합니다.

      $ oc debug node/my-sno-node
      Copy to Clipboard Toggle word wrap
    2. 다음 명령을 실행하여 디버그 셸에서 /host를 루트 디렉토리로 설정합니다. 디버그 Pod는 Pod 내의 /host에 호스트의 루트 파일 시스템을 마운트합니다. root 디렉토리를 /host로 변경하면 호스트의 실행 경로에 포함된 바이너리를 실행할 수 있습니다.

      # chroot /host
      Copy to Clipboard Toggle word wrap
    3. 다음 명령을 실행하여 사용 가능한 모든 블록 장치에 대한 정보를 나열하세요.

      # lsblk
      Copy to Clipboard Toggle word wrap

      출력 예

      NAME   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINTS
      sda      8:0    0 446.6G  0 disk
      ├─sda1   8:1    0     1M  0 part
      ├─sda2   8:2    0   127M  0 part
      ├─sda3   8:3    0   384M  0 part /boot
      ├─sda4   8:4    0 243.6G  0 part /var
      │                                /sysroot/ostree/deploy/rhcos/var
      │                                /usr
      │                                /etc
      │                                /
      │                                /sysroot
      └─sda5   8:5    0 202.5G  0 part /var/lib/containers
      Copy to Clipboard Toggle word wrap

    4. 다음 명령을 실행하여 파일 시스템 디스크 공간 사용량에 대한 정보를 표시합니다.

      # df -h
      Copy to Clipboard Toggle word wrap

      출력 예

      Filesystem      Size  Used Avail Use% Mounted on
      devtmpfs        4.0M     0  4.0M   0% /dev
      tmpfs           126G   84K  126G   1% /dev/shm
      tmpfs            51G   93M   51G   1% /run
      /dev/sda4       244G  5.2G  239G   3% /sysroot
      tmpfs           126G  4.0K  126G   1% /tmp
      /dev/sda5       203G  119G   85G  59% /var/lib/containers
      /dev/sda3       350M  110M  218M  34% /boot
      tmpfs            26G     0   26G   0% /run/user/1000
      Copy to Clipboard Toggle word wrap

10.2.9.2. PolicyGenTemplate CR을 사용하여 이미지 레지스트리 구성

PolicyGenTemplate (PGT) CR을 사용하여 이미지 레지스트리를 구성하는 데 필요한 CR을 적용하고 이미지 레지스트리 구성을 패치합니다.

사전 요구 사항

  • 관리되는 클러스터에 디스크 파티션을 구성했습니다.
  • OpenShift CLI(oc)가 설치되어 있습니다.
  • cluster-admin 권한이 있는 사용자로 허브 클러스터에 로그인했습니다.
  • GitOps Zero Touch Provisioning(ZTP)과 함께 사용할 사용자 지정 사이트 구성 데이터를 관리하는 Git 저장소를 만들었습니다.

프로세스

  1. 적절한 PolicyGenTemplate CR에서 스토리지 클래스, 영구 볼륨 클레임, 영구 볼륨 및 이미지 레지스트리 구성을 구성합니다. 예를 들어, 개별 사이트를 구성하려면 다음 YAML을 example-sno-site.yaml 파일에 추가합니다.

    sourceFiles:
      # storage class
      - fileName: StorageClass.yaml
        policyName: "sc-for-image-registry"
        metadata:
          name: image-registry-sc
          annotations:
            ran.openshift.io/ztp-deploy-wave: "100" 
    1
    
      # persistent volume claim
      - fileName: StoragePVC.yaml
        policyName: "pvc-for-image-registry"
        metadata:
          name: image-registry-pvc
          namespace: openshift-image-registry
          annotations:
            ran.openshift.io/ztp-deploy-wave: "100"
        spec:
          accessModes:
            - ReadWriteMany
          resources:
            requests:
              storage: 100Gi
          storageClassName: image-registry-sc
          volumeMode: Filesystem
      # persistent volume
      - fileName: ImageRegistryPV.yaml 
    2
    
        policyName: "pv-for-image-registry"
        metadata:
          annotations:
            ran.openshift.io/ztp-deploy-wave: "100"
      - fileName: ImageRegistryConfig.yaml
        policyName: "config-for-image-registry"
        complianceType: musthave
        metadata:
          annotations:
            ran.openshift.io/ztp-deploy-wave: "100"
        spec:
          storage:
            pvc:
              claim: "image-registry-pvc"
    Copy to Clipboard Toggle word wrap
    1
    사이트, 공통 또는 그룹 수준에서 이미지 레지스트리를 구성하는지에 따라 ztp-deploy-wave 에 적절한 값을 설정합니다. ztp-deploy-wave: "100"은 참조된 소스 파일을 함께 그룹화할 수 있으므로 개발이나 테스트에 적합합니다.
    2
    ImageRegistryPV.yaml 에서는 SiteConfig CR의 mount_point 필드에 설정된 값과 일치하도록 spec.local.path 필드가 /var/imageregistry 로 설정되어 있는지 확인합니다.
    중요

    complianceType: mustonlyhave for the - fileName: ImageRegistryConfig.yaml 설정을 설정하지 마십시오. 이로 인해 레지스트리 Pod 배포가 실패할 수 있습니다.

  2. Git에서 PolicyGenTemplate 변경 사항을 커밋한 다음 GitOps ZTP ArgoCD 애플리케이션에서 모니터링하는 Git 리포지토리로 내보냅니다.

검증

다음 단계를 사용하여 관리 클러스터의 로컬 이미지 레지스트리의 오류를 해결합니다.

  • 관리 클러스터에 로그인하는 동안 레지스트리에 성공적으로 로그인했는지 확인합니다. 다음 명령을 실행합니다.

    1. 관리 클러스터 이름을 내보냅니다.

      $ cluster=<managed_cluster_name>
      Copy to Clipboard Toggle word wrap
    2. 관리 클러스터 kubeconfig 세부 정보를 가져옵니다.

      $ oc get secret -n $cluster $cluster-admin-password -o jsonpath='{.data.password}' | base64 -d > kubeadmin-password-$cluster
      Copy to Clipboard Toggle word wrap
    3. 클러스터 kubeconfig 를 다운로드하여 내보냅니다.

      $ oc get secret -n $cluster $cluster-admin-kubeconfig -o jsonpath='{.data.kubeconfig}' | base64 -d > kubeconfig-$cluster && export KUBECONFIG=./kubeconfig-$cluster
      Copy to Clipboard Toggle word wrap
    4. 관리 클러스터에서 이미지 레지스트리에 대한 액세스를 확인합니다. " registry 액세스"를 참조하십시오.
  • imageregistry.operator.openshift.io 그룹 인스턴스의 Config CRD가 오류를 보고하지 않는지 확인합니다. 관리 클러스터에 로그인하는 동안 다음 명령을 실행합니다.

    $ oc get image.config.openshift.io cluster -o yaml
    Copy to Clipboard Toggle word wrap

    출력 예

    apiVersion: config.openshift.io/v1
    kind: Image
    metadata:
      annotations:
        include.release.openshift.io/ibm-cloud-managed: "true"
        include.release.openshift.io/self-managed-high-availability: "true"
        include.release.openshift.io/single-node-developer: "true"
        release.openshift.io/create-only: "true"
      creationTimestamp: "2021-10-08T19:02:39Z"
      generation: 5
      name: cluster
      resourceVersion: "688678648"
      uid: 0406521b-39c0-4cda-ba75-873697da75a4
    spec:
      additionalTrustedCA:
        name: acm-ice
    Copy to Clipboard Toggle word wrap

  • 관리 클러스터의 PersistentVolumeClaim 이 데이터로 채워져 있는지 확인합니다. 관리 클러스터에 로그인하는 동안 다음 명령을 실행합니다.

    $ oc get pv image-registry-sc
    Copy to Clipboard Toggle word wrap
  • registry* 포드가 실행 중이고 openshift-image-registry 네임스페이스에 있는지 확인합니다.

    $ oc get pods -n openshift-image-registry | grep registry*
    Copy to Clipboard Toggle word wrap

    출력 예

    cluster-image-registry-operator-68f5c9c589-42cfg   1/1     Running     0          8d
    image-registry-5f8987879-6nx6h                     1/1     Running     0          8d
    Copy to Clipboard Toggle word wrap

  • 관리 클러스터의 디스크 파티션이 올바른지 확인합니다.

    1. 관리 클러스터에 대한 디버그 쉘을 엽니다.

      $ oc debug node/sno-1.example.com
      Copy to Clipboard Toggle word wrap
    2. lsblk 를 실행하여 호스트 디스크 파티션을 확인합니다.

      sh-4.4# lsblk
      NAME   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
      sda      8:0    0 446.6G  0 disk
        |-sda1   8:1    0     1M  0 part
        |-sda2   8:2    0   127M  0 part
        |-sda3   8:3    0   384M  0 part /boot
        |-sda4   8:4    0 336.3G  0 part /sysroot
        `-sda5   8:5    0 100.1G  0 part /var/imageregistry 
      1
      
      sdb      8:16   0 446.6G  0 disk
      sr0     11:0    1   104M  0 rom
      Copy to Clipboard Toggle word wrap
      1
      /var/imageregistry 는 디스크가 올바르게 분할되었음을 나타냅니다.

Topology Aware Lifecycle Manager(TALM)를 사용하여ZTP(ZTP) 및 Topology Aware Lifecycle Manager(TALM)를 사용하여 배포한 관리 클러스터의 소프트웨어 라이프사이클을 관리할 수 있습니다. TALM(Red Hat Advanced Cluster Management) PolicyGenTemplate 정책을 사용하여 대상 클러스터에 적용된 변경 사항을 관리하고 제어합니다.

중요

PolicyGenTemplate CR을 사용하여 관리 클러스터에 대한 정책을 관리하고 배포하면 향후 OpenShift Container Platform 릴리스에서 더 이상 사용되지 않습니다. RHACM(Advanced Cluster Management) 및 PolicyGenerator CR을 사용하여 동일하고 개선된 기능을 사용할 수 있습니다.

PolicyGenerator 리소스에 대한 자세한 내용은 RHACM 통합 정책 생성기 설명서를 참조하십시오.

10.3.1. 연결이 끊긴 환경 설정

TALM은 플랫폼과 Operator 업데이트를 모두 수행할 수 있습니다.

TALM을 사용하여 연결이 끊긴 클러스터를 업데이트하기 전에 미러 레지스트리에서 업데이트하려는 플랫폼 이미지와 Operator 이미지를 모두 미러링해야 합니다. 이미지를 미러링하려면 다음 단계를 완료합니다.

  • 플랫폼 업데이트의 경우 다음 단계를 수행해야 합니다.

    1. 원하는 OpenShift Container Platform 이미지 저장소를 미러링합니다. 추가 리소스에 연결된 "OpenShift Container Platform 이미지 저장소 미러링" 절차에 따라 원하는 플랫폼 이미지가 미러링되었는지 확인합니다. imageContentSources 섹션의 내용을 imageContentSources.yaml 파일에 저장합니다.

      출력 예

      imageContentSources:
       - mirrors:
         - mirror-ocp-registry.ibmcloud.io.cpak:5000/openshift-release-dev/openshift4
         source: quay.io/openshift-release-dev/ocp-release
       - mirrors:
         - mirror-ocp-registry.ibmcloud.io.cpak:5000/openshift-release-dev/openshift4
         source: quay.io/openshift-release-dev/ocp-v4.0-art-dev
      Copy to Clipboard Toggle word wrap

    2. 미러링된 플랫폼 이미지의 이미지 서명을 저장합니다. 플랫폼 업데이트를 위해 PolicyGenTemplate CR에 이미지 서명을 추가해야 합니다. 이미지 서명을 가져오려면 다음 단계를 수행합니다.

      1. 다음 명령을 실행하여 원하는 OpenShift Container Platform 태그를 지정합니다.

        $ OCP_RELEASE_NUMBER=<release_version>
        Copy to Clipboard Toggle word wrap
      2. 다음 명령을 실행하여 클러스터의 아키텍처를 지정합니다.

        $ ARCHITECTURE=<cluster_architecture> 
        1
        Copy to Clipboard Toggle word wrap
        1
        x86_64,aarch64,s390x 또는 ppc64le 과 같은 클러스터의 아키텍처를 지정합니다.
      3. 다음 명령을 실행하여 Quay에서 릴리스 이미지 다이제스트를 가져옵니다.

        $ DIGEST="$(oc adm release info quay.io/openshift-release-dev/ocp-release:${OCP_RELEASE_NUMBER}-${ARCHITECTURE} | sed -n 's/Pull From: .*@//p')"
        Copy to Clipboard Toggle word wrap
      4. 다음 명령을 실행하여 다이제스트 알고리즘을 설정합니다.

        $ DIGEST_ALGO="${DIGEST%%:*}"
        Copy to Clipboard Toggle word wrap
      5. 다음 명령을 실행하여 다이제스트 서명을 설정합니다.

        $ DIGEST_ENCODED="${DIGEST#*:}"
        Copy to Clipboard Toggle word wrap
      6. 다음 명령을 실행하여 mirror.openshift.com 웹 사이트에서 이미지 서명을 가져옵니다.

        $ SIGNATURE_BASE64=$(curl -s "https://mirror.openshift.com/pub/openshift-v4/signatures/openshift/release/${DIGEST_ALGO}=${DIGEST_ENCODED}/signature-1" | base64 -w0 && echo)
        Copy to Clipboard Toggle word wrap
      7. 다음 명령을 실행하여 checksum-<OCP_RELEASE_NUMBER>.yaml 파일에 이미지 서명을 저장합니다.

        $ cat >checksum-${OCP_RELEASE_NUMBER}.yaml <<EOF
        ${DIGEST_ALGO}-${DIGEST_ENCODED}: ${SIGNATURE_BASE64}
        EOF
        Copy to Clipboard Toggle word wrap
    3. 업데이트 그래프를 준비합니다. 업데이트 그래프를 준비할 수 있는 두 가지 옵션이 있습니다.

      1. OpenShift 업데이트 서비스를 사용합니다.

        hub 클러스터에 그래프를 설정하는 방법에 대한 자세한 내용은 OpenShift Update Service용 Operator 배포그래프 데이터 init 컨테이너 빌드를 참조하십시오.

      2. 업스트림 그래프의 로컬 사본을 만듭니다. 관리되는 클러스터에 액세스할 수 있는 연결이 끊긴 환경의 http 또는 https 서버에서 업데이트 그래프를 호스팅합니다. 업데이트 그래프를 다운로드하려면 다음 명령을 사용하세요.

        $ curl -s https://api.openshift.com/api/upgrades_info/v1/graph?channel=stable-4.19 -o ~/upgrade-graph_stable-4.19
        Copy to Clipboard Toggle word wrap
  • 운영자 업데이트를 위해서는 다음 작업을 수행해야 합니다.

    • 운영자 카탈로그를 미러링합니다. "연결이 끊긴 클러스터에 사용하기 위한 운영자 카탈로그 미러링" 섹션의 절차에 따라 원하는 운영자 이미지가 미러링되었는지 확인하세요.

10.3.2. PolicyGenTemplate CR을 사용하여 플랫폼 업데이트 수행

TALM을 사용하여 플랫폼 업데이트를 수행할 수 있습니다.

사전 요구 사항

  • TALM(Topology Aware Lifecycle Manager)을 설치합니다.
  • GitOps Zero Touch Provisioning(ZTP)을 최신 버전으로 업데이트합니다.
  • GitOps ZTP를 사용하여 하나 이상의 관리형 클러스터를 프로비저닝합니다.
  • 원하는 이미지 저장소를 미러링합니다.
  • cluster-admin 권한이 있는 사용자로 로그인합니다.
  • 허브 클러스터에서 RHACM 정책을 만듭니다.

프로세스

  1. 플랫폼 업데이트를 위한 PolicyGenTemplate CR을 만듭니다.

    1. 다음 PolicyGenTemplate CR을 du-upgrade.yaml 파일에 저장합니다.

      플랫폼 업데이트를 위한 PolicyGenTemplate

      apiVersion: ran.openshift.io/v1
      kind: PolicyGenTemplate
      metadata:
        name: "du-upgrade"
        namespace: "ztp-group-du-sno"
      spec:
        bindingRules:
          group-du-sno: ""
        mcp: "master"
        remediationAction: inform
        sourceFiles:
          - fileName: ImageSignature.yaml 
      1
      
            policyName: "platform-upgrade-prep"
            binaryData:
              ${DIGEST_ALGO}-${DIGEST_ENCODED}: ${SIGNATURE_BASE64} 
      2
      
          - fileName: DisconnectedICSP.yaml
            policyName: "platform-upgrade-prep"
            metadata:
              name: disconnected-internal-icsp-for-ocp
            spec:
              repositoryDigestMirrors: 
      3
      
                - mirrors:
                  - quay-intern.example.com/ocp4/openshift-release-dev
                  source: quay.io/openshift-release-dev/ocp-release
                - mirrors:
                  - quay-intern.example.com/ocp4/openshift-release-dev
                  source: quay.io/openshift-release-dev/ocp-v4.0-art-dev
          - fileName: ClusterVersion.yaml 
      4
      
            policyName: "platform-upgrade"
            metadata:
              name: version
            spec:
              channel: "stable-4.19"
              upstream: http://upgrade.example.com/images/upgrade-graph_stable-4.19
              desiredUpdate:
                version: 4.19.4
            status:
              history:
                - version: 4.19.4
                  state: "Completed"
      Copy to Clipboard Toggle word wrap

      1
      ConfigMap CR에는 업데이트할 원하는 릴리스 이미지의 서명이 포함되어 있습니다.
      2
      원하는 OpenShift Container Platform 릴리스의 이미지 서명을 표시합니다. "환경 설정" 섹션의 절차에 따라 저장한 checksum-${OCP_RELEASE_NUMBER}.yaml 파일에서 서명을 가져옵니다.
      3
      원하는 OpenShift Container Platform 이미지가 포함된 미러 저장소를 표시합니다. "환경 설정" 섹션의 절차를 따를 때 저장한 imageContentSources.yaml 파일에서 미러를 가져옵니다.
      4
      업데이트를 트리거할 ClusterVersion CR을 표시합니다. 채널,업스트림desiredVersion 필드는 모두 이미지 사전 캐싱에 필요합니다.

      PolicyGenTemplate CR은 다음 두 가지 정책을 생성합니다.

      • du-upgrade-platform-prep 정책은 플랫폼 업데이트에 대한 준비 작업을 수행합니다. 원하는 릴리스 이미지 서명에 대한 ConfigMap CR을 생성하고 미러링된 릴리스 이미지 저장소의 이미지 콘텐츠 소스를 생성하고, 원하는 업데이트 채널 및 연결이 끊긴 환경에서 관리 클러스터에서 연결할 수 있는 업데이트 그래프로 클러스터 버전을 업데이트합니다.
      • du-upgrade-platform-upgrade 정책은 플랫폼 업그레이드를 수행하는 데 사용됩니다.
    2. PolicyGenTemplate CR의 GitOps ZTP Git 리포지토리에 있는 kustomization.yaml 파일에 du-upgrade.yaml 파일 내용을 추가하고 Git 리포지토리로 변경 사항을 내보냅니다.

      rgocd는 Git 리포지토리에서 변경 사항을 가져와서 hub 클러스터에 정책을 생성합니다.

    3. 다음 명령을 실행하여 생성된 정책을 확인합니다.

      $ oc get policies -A | grep platform-upgrade
      Copy to Clipboard Toggle word wrap
  2. spec.enable 필드가 false 로 설정된 상태에서 플랫폼 업데이트에 대한 ClusterGroupUpdate CR을 생성합니다.

    1. 다음 예와 같이 du-upgrade-platform-upgrade-prepdu-upgrade-platform-upgrade 정책과 대상 클러스터를 사용하여 플랫폼 업데이트 ClusterGroupUpdate CR의 내용을 cgu-platform-upgrade.yml 파일에 저장합니다.

      apiVersion: ran.openshift.io/v1alpha1
      kind: ClusterGroupUpgrade
      metadata:
        name: cgu-platform-upgrade
        namespace: default
      spec:
        managedPolicies:
        - du-upgrade-platform-upgrade-prep
        - du-upgrade-platform-upgrade
        preCaching: false
        clusters:
        - spoke1
        remediationStrategy:
          maxConcurrency: 1
        enable: false
      Copy to Clipboard Toggle word wrap
    2. 다음 명령을 실행하여 허브 클러스터에 ClusterGroupUpdate CR을 적용합니다.

      $ oc apply -f cgu-platform-upgrade.yml
      Copy to Clipboard Toggle word wrap
  3. 선택 사항: 플랫폼 업데이트를 위해 이미지를 미리 캐시합니다.

    1. 다음 명령을 실행하여 ClusterGroupUpdate CR에서 사전 캐싱을 활성화합니다.

      $ oc --namespace=default patch clustergroupupgrade.ran.openshift.io/cgu-platform-upgrade \
      --patch '{"spec":{"preCaching": true}}' --type=merge
      Copy to Clipboard Toggle word wrap
    2. 업데이트 프로세스를 모니터링하고 사전 캐싱이 완료될 때까지 기다리세요. 허브 클러스터에서 다음 명령을 실행하여 사전 캐싱 상태를 확인하세요.

      $ oc get cgu cgu-platform-upgrade -o jsonpath='{.status.precaching.status}'
      Copy to Clipboard Toggle word wrap
  4. 플랫폼 업데이트를 시작합니다.

    1. 다음 명령을 실행하여 cgu-platform-upgrade 정책을 활성화하고 사전 캐싱을 비활성화합니다.

      $ oc --namespace=default patch clustergroupupgrade.ran.openshift.io/cgu-platform-upgrade \
      --patch '{"spec":{"enable":true, "preCaching": false}}' --type=merge
      Copy to Clipboard Toggle word wrap
    2. 과정을 모니터링합니다. 완료되면 다음 명령을 실행하여 정책이 준수되는지 확인하세요.

      $ oc get policies --all-namespaces
      Copy to Clipboard Toggle word wrap

10.3.3. PolicyGenTemplate CR을 사용하여 Operator 업데이트 수행

TALM을 사용하여 운영자 업데이트를 수행할 수 있습니다.

사전 요구 사항

  • TALM(Topology Aware Lifecycle Manager)을 설치합니다.
  • GitOps Zero Touch Provisioning(ZTP)을 최신 버전으로 업데이트합니다.
  • GitOps ZTP를 사용하여 하나 이상의 관리형 클러스터를 프로비저닝합니다.
  • 원하는 인덱스 이미지, 번들 이미지 및 번들 이미지에서 참조되는 모든 운영자 이미지를 미러링합니다.
  • cluster-admin 권한이 있는 사용자로 로그인합니다.
  • 허브 클러스터에서 RHACM 정책을 만듭니다.

프로세스

  1. 운영자 업데이트를 위해 PolicyGenTemplate CR을 업데이트합니다.

    1. du-upgrade.yaml 파일에 다음 추가 내용을 추가하여 du-upgrade PolicyGenTemplate CR을 업데이트합니다.

      apiVersion: ran.openshift.io/v1
      kind: PolicyGenTemplate
      metadata:
        name: "du-upgrade"
        namespace: "ztp-group-du-sno"
      spec:
        bindingRules:
          group-du-sno: ""
        mcp: "master"
        remediationAction: inform
        sourceFiles:
          - fileName: DefaultCatsrc.yaml
            remediationAction: inform
            policyName: "operator-catsrc-policy"
            metadata:
              name: redhat-operators-disconnected
            spec:
              displayName: Red Hat Operators Catalog
              image: registry.example.com:5000/olm/redhat-operators-disconnected:v4.19 
      1
      
              updateStrategy: 
      2
      
                registryPoll:
                  interval: 1h
            status:
              connectionState:
                  lastObservedState: READY 
      3
      Copy to Clipboard Toggle word wrap
      1
      인덱스 이미지 URL에는 원하는 운영자 이미지가 포함되어 있습니다. 인덱스 이미지가 항상 동일한 이미지 이름과 태그로 푸시되는 경우 이 변경은 필요하지 않습니다.
      2
      registryPoll.interval 필드를 사용하여 Operator Lifecycle Manager(OLM)가 새 Operator 버전에 대한 인덱스 이미지를 폴링하는 빈도를 설정합니다. y-stream 및 z-stream 연산자 업데이트를 위해 항상 새로운 인덱스 이미지 태그가 푸시되는 경우에는 이 변경이 필요하지 않습니다. registryPoll.interval 필드는 업데이트를 신속하게 처리하기 위해 더 짧은 간격으로 설정할 수 있지만, 간격이 짧을수록 계산 부하가 증가합니다. 이런 동작을 방지하려면 업데이트가 완료되면 registryPoll.interval을 기본값으로 복원하면 됩니다.
      3
      카탈로그 연결의 마지막으로 관찰된 상태입니다. READY 값은 CatalogSource 정책이 준비되었으며 인덱스 포드가 풀링되어 실행 중임을 나타냅니다. 이런 방식으로 TALM은 최신 정책 준수 상태에 따라 운영자를 업그레이드합니다.
    2. 이 업데이트는 원하는 Operator 이미지가 포함된 새 인덱스 이미지로 redhat-operators-disconnected 카탈로그 소스를 업데이트하기 위해 du-upgrade-operator-catsrc-policy라는 하나의 정책을 생성합니다.

      참고

      Operator에 대해 이미지 사전 캐싱을 사용하려는 경우 redhat-operators-disconnected 가 아닌 다른 카탈로그 소스에 Operator가 있는 경우 다음 작업을 수행해야 합니다.

      • 다른 카탈로그 소스에 대한 새 인덱스 이미지나 레지스트리 폴링 간격 업데이트로 별도의 카탈로그 소스 정책을 준비합니다.
      • 다양한 카탈로그 소스에서 원하는 운영자에 대해 별도의 구독 정책을 준비합니다.

      예를 들어, 원하는 SRIOV-FEC 연산자는 인증된 연산자 카탈로그 소스에서 사용할 수 있습니다. 카탈로그 소스와 Operator 구독을 업데이트하려면 다음 내용을 추가하여 du-upgrade-fec-catsrc-policydu-upgrade-subscriptions-fec-policy라는 두 가지 정책을 생성합니다.

      apiVersion: ran.openshift.io/v1
      kind: PolicyGenTemplate
      metadata:
        name: "du-upgrade"
        namespace: "ztp-group-du-sno"
      spec:
        bindingRules:
          group-du-sno: ""
        mcp: "master"
        remediationAction: inform
        sourceFiles:
            # ...
          - fileName: DefaultCatsrc.yaml
            remediationAction: inform
            policyName: "fec-catsrc-policy"
            metadata:
              name: certified-operators
            spec:
              displayName: Intel SRIOV-FEC Operator
              image: registry.example.com:5000/olm/far-edge-sriov-fec:v4.10
              updateStrategy:
                registryPoll:
                  interval: 10m
          - fileName: AcceleratorsSubscription.yaml
            policyName: "subscriptions-fec-policy"
            spec:
              channel: "stable"
              source: certified-operators
      Copy to Clipboard Toggle word wrap
    3. 공통 PolicyGenTemplate CR에 지정된 구독 채널이 있는 경우 이를 제거합니다. GitOps ZTP 이미지의 기본 서브스크립션 채널은 업데이트에 사용됩니다.

      참고

      GitOps ZTP 4.19를 통해 적용된 Operator의 기본 채널은 performance-addon-operator를 제외하고 stable 입니다. OpenShift Container Platform 4.11부터 performance-addon-operator 기능이 node-tuning-operator 로 이동되었습니다. 4.10 릴리스의 경우 PAO의 기본 채널은 v4.10 입니다. 공통 PolicyGenTemplate CR에서 기본 채널을 지정할 수도 있습니다.

    4. PolicyGenTemplate CR 업데이트를 GitOps ZTP Git 저장소에 푸시합니다.

      ArgoCD는 Git 저장소에서 변경 사항을 가져와 허브 클러스터에 대한 정책을 생성합니다.

    5. 다음 명령을 실행하여 생성된 정책을 확인하세요.

      $ oc get policies -A | grep -E "catsrc-policy|subscription"
      Copy to Clipboard Toggle word wrap
  2. Operator 업데이트를 시작하기 전에 필요한 카탈로그 소스 업데이트를 적용하세요.

    1. 카탈로그 소스 정책과 대상 관리 클러스터를 포함하는 operator-upgrade-prep 이라는 ClusterGroupUpgrade CR의 내용을 cgu-operator-upgrade-prep.yml 파일에 저장합니다.

      apiVersion: ran.openshift.io/v1alpha1
      kind: ClusterGroupUpgrade
      metadata:
        name: cgu-operator-upgrade-prep
        namespace: default
      spec:
        clusters:
        - spoke1
        enable: true
        managedPolicies:
        - du-upgrade-operator-catsrc-policy
        remediationStrategy:
          maxConcurrency: 1
      Copy to Clipboard Toggle word wrap
    2. 다음 명령을 실행하여 허브 클러스터에 정책을 적용합니다.

      $ oc apply -f cgu-operator-upgrade-prep.yml
      Copy to Clipboard Toggle word wrap
    3. 업데이트 프로세스를 모니터링합니다. 완료되면 다음 명령을 실행하여 정책이 준수되는지 확인하세요.

      $ oc get policies -A | grep -E "catsrc-policy"
      Copy to Clipboard Toggle word wrap
  3. spec.enable 필드를 false 로 설정하여 Operator 업데이트에 대한 ClusterGroupUpgrade CR을 만듭니다.

    1. 다음 예와 같이 du-upgrade-operator-catsrc-policy 정책과 공통 PolicyGenTemplate 및 대상 클러스터에서 생성된 구독 정책을 사용하여 Operator 업데이트 ClusterGroupUpgrade CR의 내용을 cgu-operator-upgrade.yml 파일에 저장합니다.

      apiVersion: ran.openshift.io/v1alpha1
      kind: ClusterGroupUpgrade
      metadata:
        name: cgu-operator-upgrade
        namespace: default
      spec:
        managedPolicies:
        - du-upgrade-operator-catsrc-policy 
      1
      
        - common-subscriptions-policy 
      2
      
        preCaching: false
        clusters:
        - spoke1
        remediationStrategy:
          maxConcurrency: 1
        enable: false
      Copy to Clipboard Toggle word wrap
      1
      카탈로그 소스에서 운영자 이미지를 검색하려면 이미지 사전 캐싱 기능에 이 정책이 필요합니다.
      2
      해당 정책에는 운영자 구독이 포함되어 있습니다. PolicyGenTemplates 참조의 구조와 내용을 따랐다면 모든 Operator 구독은 common-subscriptions-policy 정책으로 그룹화됩니다.
      참고

      하나의 ClusterGroupUpgrade CR은 ClusterGroupUpgrade CR에 포함된 하나의 카탈로그 소스에서 구독 정책에 정의된 원하는 운영자의 이미지만 사전 캐시할 수 있습니다. 원하는 운영자가 서로 다른 카탈로그 소스에 있는 경우(예: SRIOV-FEC 운영자) SRIOV -FEC 운영자 이미지를 사전 캐싱하고 업데이트하기 위해 du-upgrade-fec-catsrc-policydu-upgrade-subscriptions-fec-policy 정책을 사용하여 다른 ClusterGroupUpgrade CR을 만들어야 합니다.

    2. 다음 명령을 실행하여 허브 클러스터에 ClusterGroupUpgrade CR을 적용합니다.

      $ oc apply -f cgu-operator-upgrade.yml
      Copy to Clipboard Toggle word wrap
  4. 선택 사항: 운영자 업데이트를 위해 이미지를 미리 캐시합니다.

    1. 이미지 사전 캐싱을 시작하기 전에 다음 명령을 실행하여 구독 정책이 NonCompliant 인지 확인하세요.

      $ oc get policy common-subscriptions-policy -n <policy_namespace>
      Copy to Clipboard Toggle word wrap

      출력 예

      NAME                          REMEDIATION ACTION   COMPLIANCE STATE     AGE
      common-subscriptions-policy   inform               NonCompliant         27d
      Copy to Clipboard Toggle word wrap

    2. 다음 명령을 실행하여 ClusterGroupUpgrade CR에서 사전 캐싱을 활성화합니다.

      $ oc --namespace=default patch clustergroupupgrade.ran.openshift.io/cgu-operator-upgrade \
      --patch '{"spec":{"preCaching": true}}' --type=merge
      Copy to Clipboard Toggle word wrap
    3. 프로세스를 모니터링하고 사전 캐싱이 완료될 때까지 기다리세요. 관리되는 클러스터에서 다음 명령을 실행하여 사전 캐싱 상태를 확인하세요.

      $ oc get cgu cgu-operator-upgrade -o jsonpath='{.status.precaching.status}'
      Copy to Clipboard Toggle word wrap
    4. 다음 명령을 실행하여 업데이트를 시작하기 전에 사전 캐싱이 완료되었는지 확인하세요.

      $ oc get cgu -n default cgu-operator-upgrade -ojsonpath='{.status.conditions}' | jq
      Copy to Clipboard Toggle word wrap

      출력 예

      [
          {
            "lastTransitionTime": "2022-03-08T20:49:08.000Z",
            "message": "The ClusterGroupUpgrade CR is not enabled",
            "reason": "UpgradeNotStarted",
            "status": "False",
            "type": "Ready"
          },
          {
            "lastTransitionTime": "2022-03-08T20:55:30.000Z",
            "message": "Precaching is completed",
            "reason": "PrecachingCompleted",
            "status": "True",
            "type": "PrecachingDone"
          }
      ]
      Copy to Clipboard Toggle word wrap

  5. Operator 업데이트를 시작합니다.

    1. 다음 명령을 실행하여 cgu-operator-upgrade ClusterGroupUpgrade CR을 활성화하고 사전 캐싱을 비활성화하여 Operator 업데이트를 시작합니다.

      $ oc --namespace=default patch clustergroupupgrade.ran.openshift.io/cgu-operator-upgrade \
      --patch '{"spec":{"enable":true, "preCaching": false}}' --type=merge
      Copy to Clipboard Toggle word wrap
    2. 과정을 모니터링합니다. 완료되면 다음 명령을 실행하여 정책이 준수되는지 확인하세요.

      $ oc get policies --all-namespaces
      Copy to Clipboard Toggle word wrap

10.3.4. PolicyGenTemplate CR을 사용하여 누락된 Operator 업데이트 문제 해결

일부 시나리오에서는 TALM(Topology Aware Lifecycle Manager)이 오래된 정책 준수 상태로 인해 운영자 업데이트를 놓칠 수 있습니다.

카탈로그 소스를 업데이트한 후, 운영자 수명 주기 관리자(OLM)가 구독 상태를 업데이트하는 데 시간이 걸립니다. TALM에서 수정이 필요한지 여부를 결정하는 동안 구독 정책 상태가 계속 준수로 표시될 수 있습니다. 결과적으로, 구독 정책에 명시된 운영자는 업그레이드되지 않습니다.

이러한 시나리오를 방지하려면 PolicyGenTemplate 에 다른 카탈로그 소스 구성을 추가하고 업데이트가 필요한 모든 운영자에 대한 구독에서 이 구성을 지정합니다.

프로세스

  1. PolicyGenTemplate 리소스에 카탈로그 소스 구성을 추가합니다.

    - fileName: DefaultCatsrc.yaml
          remediationAction: inform
          policyName: "operator-catsrc-policy"
          metadata:
            name: redhat-operators-disconnected
          spec:
            displayName: Red Hat Operators Catalog
            image: registry.example.com:5000/olm/redhat-operators-disconnected:v{product-version}
            updateStrategy:
              registryPoll:
                interval: 1h
          status:
            connectionState:
                lastObservedState: READY
    - fileName: DefaultCatsrc.yaml
          remediationAction: inform
          policyName: "operator-catsrc-policy"
          metadata:
            name: redhat-operators-disconnected-v2 
    1
    
          spec:
            displayName: Red Hat Operators Catalog v2 
    2
    
            image: registry.example.com:5000/olm/redhat-operators-disconnected:<version> 
    3
    
            updateStrategy:
              registryPoll:
                interval: 1h
          status:
            connectionState:
                lastObservedState: READY
    Copy to Clipboard Toggle word wrap
    1
    새로운 구성의 이름을 업데이트합니다.
    2
    새로운 구성에 대한 표시 이름을 업데이트합니다.
    3
    인덱스 이미지 URL을 업데이트합니다. 이 fileName.spec.image 필드는 DefaultCatsrc.yaml 파일의 모든 구성을 재정의합니다.
  2. 업데이트가 필요한 운영자를 위한 새 구성을 가리키도록 구독 리소스를 업데이트합니다.

    apiVersion: operators.coreos.com/v1alpha1
    kind: Subscription
    metadata:
      name: operator-subscription
      namespace: operator-namspace
    # ...
    spec:
      source: redhat-operators-disconnected-v2 
    1
    
    # ...
    Copy to Clipboard Toggle word wrap
    1
    PolicyGenTemplate 리소스에서 정의한 추가 카탈로그 소스 구성의 이름을 입력합니다.

10.3.5. 플랫폼과 운영자 업데이트를 함께 수행

플랫폼과 운영자 업데이트를 동시에 수행할 수 있습니다.

사전 요구 사항

  • TALM(Topology Aware Lifecycle Manager)을 설치합니다.
  • GitOps Zero Touch Provisioning(ZTP)을 최신 버전으로 업데이트합니다.
  • GitOps ZTP를 사용하여 하나 이상의 관리형 클러스터를 프로비저닝합니다.
  • cluster-admin 권한이 있는 사용자로 로그인합니다.
  • 허브 클러스터에서 RHACM 정책을 만듭니다.

프로세스

  1. "플랫폼 업데이트 수행" 및 "운영자 업데이트 수행" 섹션에 설명된 단계에 따라 업데이트에 대한 PolicyGenTemplate CR을 만듭니다.
  2. 플랫폼과 운영자 업데이트를 위한 준비 작업을 적용합니다.

    1. 플랫폼 업데이트 준비 작업, 카탈로그 소스 업데이트 및 대상 클러스터에 대한 정책이 포함된 ClusterGroupUpgrade CR의 내용을 cgu-platform-operator-upgrade-prep.yml 파일에 저장합니다. 예:

      apiVersion: ran.openshift.io/v1alpha1
      kind: ClusterGroupUpgrade
      metadata:
        name: cgu-platform-operator-upgrade-prep
        namespace: default
      spec:
        managedPolicies:
        - du-upgrade-platform-upgrade-prep
        - du-upgrade-operator-catsrc-policy
        clusterSelector:
        - group-du-sno
        remediationStrategy:
          maxConcurrency: 10
        enable: true
      Copy to Clipboard Toggle word wrap
    2. 다음 명령을 실행하여 cgu-platform-operator-upgrade-prep.yml 파일을 허브 클러스터에 적용합니다.

      $ oc apply -f cgu-platform-operator-upgrade-prep.yml
      Copy to Clipboard Toggle word wrap
    3. 과정을 모니터링합니다. 완료되면 다음 명령을 실행하여 정책이 준수되는지 확인하세요.

      $ oc get policies --all-namespaces
      Copy to Clipboard Toggle word wrap
  3. 플랫폼에 대한 ClusterGroupUpdate CR을 만들고 spec.enable 필드를 false 로 설정하여 Operator를 업데이트합니다.

    1. 다음 예와 같이 플랫폼 및 운영자 업데이트 ClusterGroupUpdate CR의 내용을 정책과 대상 클러스터와 함께 cgu-platform-operator-upgrade.yml 파일에 저장합니다.

      apiVersion: ran.openshift.io/v1alpha1
      kind: ClusterGroupUpgrade
      metadata:
        name: cgu-du-upgrade
        namespace: default
      spec:
        managedPolicies:
        - du-upgrade-platform-upgrade 
      1
      
        - du-upgrade-operator-catsrc-policy 
      2
      
        - common-subscriptions-policy 
      3
      
        preCaching: true
        clusterSelector:
        - group-du-sno
        remediationStrategy:
          maxConcurrency: 1
        enable: false
      Copy to Clipboard Toggle word wrap
      1
      이는 플랫폼 업데이트 정책입니다.
      2
      이는 운영자가 업데이트해야 하는 카탈로그 소스 정보를 담고 있는 정책입니다. 사전 캐싱 기능에는 관리되는 클러스터에 어떤 운영자 이미지를 다운로드할지 결정하는 것이 필요합니다.
      3
      이는 운영자를 업데이트하는 정책입니다.
    2. 다음 명령을 실행하여 cgu-platform-operator-upgrade.yml 파일을 허브 클러스터에 적용합니다.

      $ oc apply -f cgu-platform-operator-upgrade.yml
      Copy to Clipboard Toggle word wrap
  4. 선택 사항: 플랫폼 및 운영자 업데이트에 대한 이미지를 미리 캐시합니다.

    1. 다음 명령을 실행하여 ClusterGroupUpgrade CR에서 사전 캐싱을 활성화합니다.

      $ oc --namespace=default patch clustergroupupgrade.ran.openshift.io/cgu-du-upgrade \
      --patch '{"spec":{"preCaching": true}}' --type=merge
      Copy to Clipboard Toggle word wrap
    2. 업데이트 프로세스를 모니터링하고 사전 캐싱이 완료될 때까지 기다리세요. 관리되는 클러스터에서 다음 명령을 실행하여 사전 캐싱 상태를 확인하세요.

      $ oc get jobs,pods -n openshift-talm-pre-cache
      Copy to Clipboard Toggle word wrap
    3. 다음 명령을 실행하여 업데이트를 시작하기 전에 사전 캐싱이 완료되었는지 확인하세요.

      $ oc get cgu cgu-du-upgrade -ojsonpath='{.status.conditions}'
      Copy to Clipboard Toggle word wrap
  5. 플랫폼과 운영자 업데이트를 시작합니다.

    1. 다음 명령을 실행하여 cgu-du-upgrade ClusterGroupUpgrade CR을 활성화하여 플랫폼과 Operator 업데이트를 시작합니다.

      $ oc --namespace=default patch clustergroupupgrade.ran.openshift.io/cgu-du-upgrade \
      --patch '{"spec":{"enable":true, "preCaching": false}}' --type=merge
      Copy to Clipboard Toggle word wrap
    2. 과정을 모니터링합니다. 완료되면 다음 명령을 실행하여 정책이 준수되는지 확인하세요.

      $ oc get policies --all-namespaces
      Copy to Clipboard Toggle word wrap
      참고

      플랫폼 및 운영자 업데이트에 대한 CR은 설정을 spec.enable: true 로 구성하여 처음부터 생성할 수 있습니다. 이 경우 사전 캐싱이 완료된 직후 업데이트가 시작되므로 CR을 수동으로 활성화할 필요가 없습니다.

      사전 캐싱과 업데이트는 모두 정책, 배치 바인딩, 배치 규칙, 관리형 클러스터 작업, 관리형 클러스터 뷰와 같은 추가 리소스를 생성하여 절차를 완료하는 데 도움이 됩니다. afterCompletion.deleteObjects 필드를 true 로 설정하면 업데이트가 완료된 후 이러한 모든 리소스가 삭제됩니다.

이전 버전의 OpenShift Container Platform에서 Performance Addon Operator는 애플리케이션에 대한 짧은 대기 시간 성능 튜닝을 제공합니다. OpenShift Container Platform 4.11 이상에서는 이러한 기능이 Node Tuning Operator의 일부입니다.

OpenShift Container Platform 4.11 이상을 실행하는 클러스터에 Performance Addon Operator를 설치하지 마세요. OpenShift Container Platform 4.11 이상으로 업그레이드하면 Node Tuning Operator가 자동으로 Performance Addon Operator를 제거합니다.

참고

Operator 재설치를 방지하려면 Performance Addon Operator 구독을 생성하는 모든 정책을 제거해야 합니다.

참조 DU 프로필에는 PolicyGenTemplate CR common-ranGen.yaml 에 Performance Addon Operator가 포함되어 있습니다. 배포된 관리형 클러스터에서 구독을 제거하려면 common-ranGen.yaml을 업데이트해야 합니다.

참고

OpenShift Container Platform 4.11 이상에 Performance Addon Operator 4.10.3-5 이상을 설치하면 Performance Addon Operator가 클러스터 버전을 감지하고 자동으로 최대 절전 모드로 전환하여 Node Tuning Operator 기능을 방해하지 않습니다. 하지만 최상의 성능을 보장하려면 OpenShift Container Platform 4.11 클러스터에서 Performance Addon Operator를 제거하세요.

사전 요구 사항

  • 사용자 정의 사이트 구성 데이터를 관리하는 Git 저장소를 만듭니다. 저장소는 허브 클러스터에서 접근할 수 있어야 하며 ArgoCD의 소스 저장소로 정의되어야 합니다.
  • OpenShift Container Platform 4.11 이상으로 업데이트하세요.
  • cluster-admin 권한이 있는 사용자로 로그인합니다.

프로세스

  1. common-ranGen.yaml 파일에서 Performance Addon Operator 네임스페이스, Operator 그룹 및 구독에 대한 complianceType을 mustnothave 로 변경합니다.

    - fileName: PaoSubscriptionNS.yaml
      policyName: "subscriptions-policy"
      complianceType: mustnothave
    - fileName: PaoSubscriptionOperGroup.yaml
      policyName: "subscriptions-policy"
      complianceType: mustnothave
    - fileName: PaoSubscription.yaml
      policyName: "subscriptions-policy"
      complianceType: mustnothave
    Copy to Clipboard Toggle word wrap
  2. 변경 사항을 사용자 지정 사이트 저장소와 병합하고 ArgoCD 애플리케이션이 변경 사항을 허브 클러스터와 동기화할 때까지 기다립니다. common-subscriptions-policy 정책의 상태가 비준수 로 변경되었습니다.
  3. Topology Aware Lifecycle Manager를 사용하여 대상 클러스터에 변경 사항을 적용합니다. 구성 변경 사항을 롤아웃하는 방법에 대한 자세한 내용은 "추가 리소스" 섹션을 참조하세요.
  4. 과정을 모니터링합니다. 대상 클러스터의 common-subscriptions-policy 정책 상태가 Compliant 인 경우 Performance Addon Operator가 클러스터에서 제거된 것입니다. 다음 명령을 실행하여 common-subscriptions-policy 의 상태를 가져옵니다.

    $ oc get policy -n ztp-common common-subscriptions-policy
    Copy to Clipboard Toggle word wrap
  5. common-ranGen.yaml 파일의 spec.sourceFiles 에서 Performance Addon Operator 네임스페이스, Operator 그룹 및 구독 CR을 삭제합니다.
  6. 변경 사항을 사용자 지정 사이트 저장소와 병합하고 ArgoCD 애플리케이션이 변경 사항을 허브 클러스터와 동기화할 때까지 기다립니다. 해당 정책은 계속 준수됩니다.

애플리케이션을 업그레이드하기 전에 단일 노드 OpenShift 클러스터에서 애플리케이션별 워크로드 이미지를 사전 캐싱할 수 있습니다.

다음 사용자 정의 리소스(CR)를 사용하여 사전 캐싱 작업에 대한 구성 옵션을 지정할 수 있습니다.

  • PreCachingConfig CR
  • ClusterGroupUpgrade CR
참고

PreCachingConfig CR의 모든 필드는 선택 사항입니다.

PreCachingConfig CR 예제

apiVersion: ran.openshift.io/v1alpha1
kind: PreCachingConfig
metadata:
  name: exampleconfig
  namespace: exampleconfig-ns
spec:
  overrides: 
1

    platformImage: quay.io/openshift-release-dev/ocp-release@sha256:3d5800990dee7cd4727d3fe238a97e2d2976d3808fc925ada29c559a47e2e1ef
    operatorsIndexes:
      - registry.example.com:5000/custom-redhat-operators:1.0.0
    operatorsPackagesAndChannels:
      - local-storage-operator: stable
      - ptp-operator: stable
      - sriov-network-operator: stable
  spaceRequired: 30 Gi 
2

  excludePrecachePatterns: 
3

    - aws
    - vsphere
  additionalImages: 
4

    - quay.io/exampleconfig/application1@sha256:3d5800990dee7cd4727d3fe238a97e2d2976d3808fc925ada29c559a47e2e1ef
    - quay.io/exampleconfig/application2@sha256:3d5800123dee7cd4727d3fe238a97e2d2976d3808fc925ada29c559a47adfaef
    - quay.io/exampleconfig/applicationN@sha256:4fe1334adfafadsf987123adfffdaf1243340adfafdedga0991234afdadfsa09
Copy to Clipboard Toggle word wrap

1
기본적으로 TALM은 관리되는 클러스터의 정책에서 platformImage , operatorsIndexesoperatorsPackagesAndChannels 필드를 자동으로 채웁니다. 이러한 필드에 대해 기본 TALM 파생 값을 재정의하기 위한 값을 지정할 수 있습니다.
2
클러스터에 필요한 최소 디스크 공간을 지정합니다. 지정하지 않으면 TALM은 OpenShift Container Platform 이미지에 대한 기본값을 정의합니다. 디스크 공간 필드에는 정수 값과 저장 단위가 포함되어야 합니다. 예: 40GiB , 200MB , 1TiB .
3
이미지 이름 일치에 따라 사전 캐싱에서 제외할 이미지를 지정합니다.
4
사전 캐시할 추가 이미지 목록을 지정합니다.

PreCachingConfig CR 참조가 포함된 ClusterGroupUpgrade CR 예시

apiVersion: ran.openshift.io/v1alpha1
kind: ClusterGroupUpgrade
metadata:
  name: cgu
spec:
  preCaching: true 
1

  preCachingConfigRef:
    name: exampleconfig 
2

    namespace: exampleconfig-ns 
3
Copy to Clipboard Toggle word wrap

1
preCaching 필드를 true 로 설정하면 사전 캐싱 작업이 활성화됩니다.
2
preCachingConfigRef.name 필드는 사용하려는 PreCachingConfig CR을 지정합니다.
3
preCachingConfigRef.namespace 는 사용하려는 PreCachingConfig CR의 네임스페이스를 지정합니다.
10.3.7.1. 사전 캐싱을 위한 사용자 정의 리소스 생성

ClusterGroupUpgrade CR과 동시에 또는 그 전에 PreCachingConfig CR을 만들어야 합니다.

  1. 사전 캐시하려는 추가 이미지 목록으로 PreCachingConfig CR을 만듭니다.

    apiVersion: ran.openshift.io/v1alpha1
    kind: PreCachingConfig
    metadata:
      name: exampleconfig
      namespace: default 
    1
    
    spec:
    [...]
      spaceRequired: 30Gi 
    2
    
      additionalImages:
        - quay.io/exampleconfig/application1@sha256:3d5800990dee7cd4727d3fe238a97e2d2976d3808fc925ada29c559a47e2e1ef
        - quay.io/exampleconfig/application2@sha256:3d5800123dee7cd4727d3fe238a97e2d2976d3808fc925ada29c559a47adfaef
        - quay.io/exampleconfig/applicationN@sha256:4fe1334adfafadsf987123adfffdaf1243340adfafdedga0991234afdadfsa09
    Copy to Clipboard Toggle word wrap
    1
    네임스페이스는 허브 클러스터에서 액세스할 수 있어야 합니다.
    2
    사전 캐시된 이미지를 위한 충분한 저장 공간을 확보하려면 필요한 최소 디스크 공간 필드를 설정하는 것이 좋습니다.
  2. preCaching 필드를 true 로 설정하여 ClusterGroupUpgrade CR을 만들고 이전 단계에서 만든 PreCachingConfig CR을 지정합니다.

    apiVersion: ran.openshift.io/v1alpha1
    kind: ClusterGroupUpgrade
    metadata:
      name: cgu
      namespace: default
    spec:
      clusters:
      - sno1
      - sno2
      preCaching: true
      preCachingConfigRef:
      - name: exampleconfig
        namespace: default
      managedPolicies:
        - du-upgrade-platform-upgrade
        - du-upgrade-operator-catsrc-policy
        - common-subscriptions-policy
      remediationStrategy:
        timeout: 240
    Copy to Clipboard Toggle word wrap
    주의

    클러스터에 이미지를 설치한 후에는 해당 이미지를 변경하거나 삭제할 수 없습니다.

  3. 이미지 사전 캐싱을 시작하려면 다음 명령을 실행하여 ClusterGroupUpgrade CR을 적용하세요.

    $ oc apply -f cgu.yaml
    Copy to Clipboard Toggle word wrap

TALM은 ClusterGroupUpgrade CR을 확인합니다.

이 지점부터 TALM 사전 캐싱 워크플로를 계속 진행할 수 있습니다.

참고

모든 사이트는 동시에 사전 캐시됩니다.

검증

  1. 다음 명령을 실행하여 ClusterUpgradeGroup CR이 적용된 허브 클러스터의 사전 캐싱 상태를 확인하세요.

    $ oc get cgu <cgu_name> -n <cgu_namespace> -oyaml
    Copy to Clipboard Toggle word wrap

    출력 예

      precaching:
        spec:
          platformImage: quay.io/openshift-release-dev/ocp-release@sha256:3d5800990dee7cd4727d3fe238a97e2d2976d3808fc925ada29c559a47e2e1ef
          operatorsIndexes:
            - registry.example.com:5000/custom-redhat-operators:1.0.0
          operatorsPackagesAndChannels:
            - local-storage-operator: stable
            - ptp-operator: stable
            - sriov-network-operator: stable
          excludePrecachePatterns:
            - aws
            - vsphere
          additionalImages:
            - quay.io/exampleconfig/application1@sha256:3d5800990dee7cd4727d3fe238a97e2d2976d3808fc925ada29c559a47e2e1ef
            - quay.io/exampleconfig/application2@sha256:3d5800123dee7cd4727d3fe238a97e2d2976d3808fc925ada29c559a47adfaef
            - quay.io/exampleconfig/applicationN@sha256:4fe1334adfafadsf987123adfffdaf1243340adfafdedga0991234afdadfsa09
          spaceRequired: "30"
        status:
          sno1: Starting
          sno2: Starting
    Copy to Clipboard Toggle word wrap

    사전 캐싱 구성은 관리되는 정책이 있는지 확인하여 검증됩니다. ClusterGroupUpgradePreCachingConfig CR의 유효한 구성은 다음과 같은 상태를 초래합니다.

    유효한 CR의 출력 예

    - lastTransitionTime: "2023-01-01T00:00:01Z"
      message: All selected clusters are valid
      reason: ClusterSelectionCompleted
      status: "True"
      type: ClusterSelected
    - lastTransitionTime: "2023-01-01T00:00:02Z"
      message: Completed validation
      reason: ValidationCompleted
      status: "True"
      type: Validated
    - lastTransitionTime: "2023-01-01T00:00:03Z"
      message: Precaching spec is valid and consistent
      reason: PrecacheSpecIsWellFormed
      status: "True"
      type: PrecacheSpecValid
    - lastTransitionTime: "2023-01-01T00:00:04Z"
      message: Precaching in progress for 1 clusters
      reason: InProgress
      status: "False"
      type: PrecachingSucceeded
    Copy to Clipboard Toggle word wrap

    잘못된 PreCachingConfig CR의 예

    Type:    "PrecacheSpecValid"
    Status:  False,
    Reason:  "PrecacheSpecIncomplete"
    Message: "Precaching spec is incomplete: failed to get PreCachingConfig resource due to PreCachingConfig.ran.openshift.io "<pre-caching_cr_name>" not found"
    Copy to Clipboard Toggle word wrap

  2. 관리되는 클러스터에서 다음 명령을 실행하여 사전 캐싱 작업을 찾을 수 있습니다.

    $ oc get jobs -n openshift-talo-pre-cache
    Copy to Clipboard Toggle word wrap

    진행 중인 사전 캐싱 작업의 예

    NAME        COMPLETIONS       DURATION      AGE
    pre-cache   0/1               1s            1s
    Copy to Clipboard Toggle word wrap

  3. 다음 명령을 실행하면 사전 캐싱 작업을 위해 생성된 Pod의 상태를 확인할 수 있습니다.

    $ oc describe pod pre-cache -n openshift-talo-pre-cache
    Copy to Clipboard Toggle word wrap

    진행 중인 사전 캐싱 작업의 예

    Type        Reason              Age    From              Message
    Normal      SuccesfulCreate     19s    job-controller    Created pod: pre-cache-abcd1
    Copy to Clipboard Toggle word wrap

  4. 다음 명령을 실행하면 작업 상태에 대한 실시간 업데이트를 받을 수 있습니다.

    $ oc logs -f pre-cache-abcd1 -n openshift-talo-pre-cache
    Copy to Clipboard Toggle word wrap
  5. 사전 캐시 작업이 성공적으로 완료되었는지 확인하려면 다음 명령을 실행하세요.

    $ oc describe pod pre-cache -n openshift-talo-pre-cache
    Copy to Clipboard Toggle word wrap

    완료된 사전 캐시 작업의 예

    Type        Reason              Age    From              Message
    Normal      SuccesfulCreate     5m19s  job-controller    Created pod: pre-cache-abcd1
    Normal      Completed           19s    job-controller    Job completed
    Copy to Clipboard Toggle word wrap

  6. 단일 노드 OpenShift에서 이미지가 성공적으로 사전 캐싱되었는지 확인하려면 다음을 수행합니다.

    1. 디버그 모드에서 노드에 들어가세요:

      $ oc debug node/cnfdf00.example.lab
      Copy to Clipboard Toggle word wrap
    2. 루트를 호스트 로 변경 :

      $ chroot /host/
      Copy to Clipboard Toggle word wrap
    3. 원하는 이미지를 검색하세요:

      $ sudo podman images | grep <operator_name>
      Copy to Clipboard Toggle word wrap

10.3.8. GitOps ZTP용 자동 생성 ClusterGroupUpgrade CR에 대한 정보

TALM에는 허브 클러스터의 ManagedCluster CR의 준비 상태를 모니터링하고 GitOps Zero Touch Provisioning(ZTP)을 위한 ClusterGroupUpgrade CR을 생성하는 ManagedClusterForCGU 라는 컨트롤러가 있습니다.

ztp-done 레이블이 적용되지 않은 준비 상태의 관리형 클러스터의 경우 ManagedClusterForCGU 컨트롤러는 GitOps ZTP 프로세스 중에 생성된 연관된 RHACM 정책과 함께 ztp-install 네임스페이스에 ClusterGroupUpgrade CR을 자동으로 생성합니다. 그런 다음 TALM은 자동 생성된 ClusterGroupUpgrade CR에 나열된 구성 정책 세트를 수정하여 구성 CR을 관리 클러스터로 푸시합니다.

클러스터가 Ready 상태가 되는 시점에 관리 클러스터에 대한 정책이 없는 경우 정책이 생성되지 않은 ClusterGroupUpgrade CR이 생성됩니다. ClusterGroupUpgrade 가 완료되면 관리되는 클러스터에 ztp-done 이라는 레이블이 지정됩니다. 관리되는 클러스터에 적용하려는 정책이 있는 경우 2일차 작업으로 ClusterGroupUpgrade를 수동으로 생성합니다.

GitOps ZTP에 대한 자동 생성 ClusterGroupUpgrade CR의 예

apiVersion: ran.openshift.io/v1alpha1
kind: ClusterGroupUpgrade
metadata:
  generation: 1
  name: spoke1
  namespace: ztp-install
  ownerReferences:
  - apiVersion: cluster.open-cluster-management.io/v1
    blockOwnerDeletion: true
    controller: true
    kind: ManagedCluster
    name: spoke1
    uid: 98fdb9b2-51ee-4ee7-8f57-a84f7f35b9d5
  resourceVersion: "46666836"
  uid: b8be9cd2-764f-4a62-87d6-6b767852c7da
spec:
  actions:
    afterCompletion:
      addClusterLabels:
        ztp-done: "" 
1

      deleteClusterLabels:
        ztp-running: ""
      deleteObjects: true
    beforeEnable:
      addClusterLabels:
        ztp-running: "" 
2

  clusters:
  - spoke1
  enable: true
  managedPolicies:
  - common-spoke1-config-policy
  - common-spoke1-subscriptions-policy
  - group-spoke1-config-policy
  - spoke1-config-policy
  - group-spoke1-validator-du-policy
  preCaching: false
  remediationStrategy:
    maxConcurrency: 1
    timeout: 240
Copy to Clipboard Toggle word wrap

1
TALM이 클러스터 구성을 완료하면 관리되는 클러스터에 적용됩니다.
2
TALM이 구성 정책을 배포하기 시작하면 관리되는 클러스터에 적용됩니다.

11장. PolicyGenerator 또는 PolicyGenTemplate CR에서 허브 템플릿 사용

Topology Aware Lifecycle Manager는 GitOps Zero Touch Provisioning(ZTP)과 함께 사용되는 구성 정책에서 Red Hat Advanced Cluster Management(RHACM) 허브 클러스터 템플릿 기능을 지원합니다.

허브 측 클러스터 템플릿을 사용하면 대상 클러스터에 맞게 동적으로 사용자 정의할 수 있는 구성 정책을 정의할 수 있습니다. 이렇게 하면 구성은 비슷하지만 값이 다른 여러 클러스터에 대해 별도의 정책을 만들 필요성이 줄어듭니다.

중요

정책 템플릿은 정책이 정의된 네임스페이스와 동일한 네임스페이스로 제한됩니다. 즉, 정책이 생성된 동일한 네임스페이스에 허브 템플릿에서 참조되는 객체를 생성해야 함을 의미합니다.

중요

PolicyGenTemplate CR을 사용하여 관리형 클러스터에 정책을 관리하고 배포하는 기능은 향후 OpenShift Container Platform 릴리스에서 더 이상 지원되지 않습니다. Red Hat Advanced Cluster Management(RHACM) 및 PolicyGenerator CR을 사용하면 동일하거나 향상된 기능을 사용할 수 있습니다.

PolicyGenerator 리소스에 대한 자세한 내용은 RHACM 통합 정책 생성기 문서를 참조하세요.

허브 템플릿을 사용하여 생성된 정책에 그룹 및 사이트 값을 채워 관리되는 클러스터에 적용함으로써 ConfigMap CR을 통해 클러스터 플릿 구성을 관리할 수 있습니다. 사이트 PolicyGenerator 또는 PolicyGentemplate CR에서 허브 템플릿을 사용하면 각 사이트에 대한 정책 CR을 만들 필요가 없습니다.

사용 사례(예: 하드웨어 유형 또는 지역)에 따라 다양한 범주로 플릿의 클러스터를 그룹화할 수 있습니다. 각 클러스터에는 해당 클러스터가 속한 그룹에 해당하는 레이블이 있어야 합니다. 각 그룹의 구성 값을 서로 다른 ConfigMap CR에서 관리하는 경우 허브 템플릿을 사용하여 그룹의 모든 클러스터에 변경 사항을 적용하려면 하나의 그룹 정책 CR만 필요합니다.

다음 예제에서는 3개의 ConfigMap CR과 하나의 PolicyGenerator CR을 사용하여 사이트 구성과 그룹 구성을 하드웨어 유형 및 리전별로 그룹화한 클러스터에 적용하는 방법을 보여줍니다.

참고

ConfigMap CR에는 1MiB 크기 제한이 있습니다(Kubernetes 문서). ConfigMap CR의 효과적인 크기는 마지막으로 적용된 구성 주석에 의해 더욱 제한됩니다. 마지막으로 적용된 구성 제한을 피하려면 템플릿 ConfigMap 에 다음 주석을 추가하세요.

argocd.argoproj.io/sync-options: Replace=true
Copy to Clipboard Toggle word wrap

사전 요구 사항

  • OpenShift CLI(oc)가 설치되어 있습니다.
  • cluster-admin 권한이 있는 사용자로 허브 클러스터에 로그인했습니다.
  • 사용자 정의 사이트 구성 데이터를 관리하는 Git 저장소를 만들었습니다. 저장소는 허브 클러스터에서 접근할 수 있어야 하며 GitOps ZTP ArgoCD 애플리케이션의 소스 저장소로 정의되어야 합니다.

프로세스

  1. 그룹 및 사이트 구성이 포함된 세 개의 ConfigMap CR을 생성합니다.

    1. 하드웨어별 구성을 보관하기 위해 group-hardware-types-configmap 이라는 ConfigMap CR을 만듭니다. 예를 들면 다음과 같습니다.

      apiVersion: v1
      kind: ConfigMap
      metadata:
        name: group-hardware-types-configmap
        namespace: ztp-group
        annotations:
          argocd.argoproj.io/sync-options: Replace=true 
      1
      
      data:
        # SriovNetworkNodePolicy.yaml
        hardware-type-1-sriov-node-policy-pfNames-1: "[\"ens5f0\"]"
        hardware-type-1-sriov-node-policy-pfNames-2: "[\"ens7f0\"]"
        # PerformanceProfile.yaml
        hardware-type-1-cpu-isolated: "2-31,34-63"
        hardware-type-1-cpu-reserved: "0-1,32-33"
        hardware-type-1-hugepages-default: "1G"
        hardware-type-1-hugepages-size: "1G"
        hardware-type-1-hugepages-count: "32"
      Copy to Clipboard Toggle word wrap
      1
      argocd.argoproj.io/sync-options 주석은 ConfigMap 크기가 1MiB보다 큰 경우에만 필요합니다.
    2. 지역 구성을 보관하기 위해 group-zones-configmap 이라는 ConfigMap CR을 만듭니다. 예를 들면 다음과 같습니다.

      apiVersion: v1
      kind: ConfigMap
      metadata:
        name: group-zones-configmap
        namespace: ztp-group
      data:
        # ClusterLogForwarder.yaml
        zone-1-cluster-log-fwd-outputs: "[{\"type\":\"kafka\", \"name\":\"kafka-open\", \"url\":\"tcp://10.46.55.190:9092/test\"}]"
        zone-1-cluster-log-fwd-pipelines: "[{\"inputRefs\":[\"audit\", \"infrastructure\"], \"labels\": {\"label1\": \"test1\", \"label2\": \"test2\", \"label3\": \"test3\", \"label4\": \"test4\"}, \"name\": \"all-to-default\", \"outputRefs\": [\"kafka-open\"]}]"
      Copy to Clipboard Toggle word wrap
    3. 사이트별 구성을 보관하기 위해 site-data-configmap 이라는 ConfigMap CR을 만듭니다. 예를 들면 다음과 같습니다.

      apiVersion: v1
      kind: ConfigMap
      metadata:
        name: site-data-configmap
        namespace: ztp-group
      data:
        # SriovNetwork.yaml
        du-sno-1-zone-1-sriov-network-vlan-1: "140"
        du-sno-1-zone-1-sriov-network-vlan-2: "150"
      Copy to Clipboard Toggle word wrap
    참고

    ConfigMap CR은 그룹 PolicyGenerator CR에서 생성될 정책과 동일한 네임스페이스에 있어야 합니다.

  2. Git에서 ConfigMap CR을 커밋한 다음 Argo CD 애플리케이션에서 모니터링하는 Git 저장소에 푸시합니다.
  3. 클러스터에 하드웨어 유형 및 지역 레이블을 적용합니다. 다음 명령은 du-sno-1-zone-1 이라는 단일 클러스터에 적용되며 선택된 레이블은 "hardware-type": "hardware-type-1""group-du-sno-zone": "zone-1" 입니다.

    $ oc patch managedclusters.cluster.open-cluster-management.io/du-sno-1-zone-1 --type merge -p '{"metadata":{"labels":{"hardware-type": "hardware-type-1", "group-du-sno-zone": "zone-1"}}}'
    Copy to Clipboard Toggle word wrap
  4. 요구 사항에 따라 ConfigMap 개체에서 필요한 데이터를 가져오기 위해 허브 템플릿을 사용하는 그룹 PolicyGenerator 또는 PolicyGentemplate CR을 만듭니다.

    1. 그룹 PolicyGenerator CR을 만듭니다. 이 예제 PolicyGenerator CR은 policyDefaults.placement 필드에 나열된 레이블과 일치하는 클러스터에 대한 로깅, VLAN ID, NIC 및 성능 프로필을 구성합니다.

      ---
      apiVersion: policy.open-cluster-management.io/v1
      kind: PolicyGenerator
      metadata:
          name: group-du-sno-pgt
      placementBindingDefaults:
          name: group-du-sno-pgt-placement-binding
      policyDefaults:
          placement:
              labelSelector:
                  matchExpressions:
                      - key: group-du-sno-zone
                        operator: In
                        values:
                          - zone-1
                      - key: hardware-type
                        operator: In
                        values:
                          - hardware-type-1
          remediationAction: inform
          severity: low
          namespaceSelector:
              exclude:
                  - kube-*
              include:
                  - '*'
          evaluationInterval:
              compliant: 10m
              noncompliant: 10s
      policies:
          - name: group-du-sno-pgt-group-du-sno-cfg-policy
            policyAnnotations:
              ran.openshift.io/ztp-deploy-wave: "10"
            manifests:
              - path: source-crs/ClusterLogForwarder.yaml
                patches:
                  - spec:
                      outputs: '{{hub fromConfigMap "" "group-zones-configmap" (printf "%s-cluster-log-fwd-outputs" (index .ManagedClusterLabels "group-du-sno-zone")) | toLiteral hub}}'
                      pipelines: '{{hub fromConfigMap "" "group-zones-configmap" (printf "%s-cluster-log-fwd-pipelines" (index .ManagedClusterLabels "group-du-sno-zone")) | toLiteral hub}}'
              - path: source-crs/PerformanceProfile-MCP-master.yaml
                patches:
                  - metadata:
                      name: openshift-node-performance-profile
                    spec:
                      additionalKernelArgs:
                          - rcupdate.rcu_normal_after_boot=0
                          - vfio_pci.enable_sriov=1
                          - vfio_pci.disable_idle_d3=1
                          - efi=runtime
                      cpu:
                          isolated: '{{hub fromConfigMap "" "group-hardware-types-configmap" (printf "%s-cpu-isolated" (index .ManagedClusterLabels "hardware-type")) hub}}'
                          reserved: '{{hub fromConfigMap "" "group-hardware-types-configmap" (printf "%s-cpu-reserved" (index .ManagedClusterLabels "hardware-type")) hub}}'
                      hugepages:
                          defaultHugepagesSize: '{{hub fromConfigMap "" "group-hardware-types-configmap" (printf "%s-hugepages-default" (index .ManagedClusterLabels "hardware-type")) hub}}'
                          pages:
                              - count: '{{hub fromConfigMap "" "group-hardware-types-configmap" (printf "%s-hugepages-count" (index .ManagedClusterLabels "hardware-type")) | toInt hub}}'
                                size: '{{hub fromConfigMap "" "group-hardware-types-configmap" (printf "%s-hugepages-size" (index .ManagedClusterLabels "hardware-type")) hub}}'
                      realTimeKernel:
                          enabled: true
          - name: group-du-sno-pgt-group-du-sno-sriov-policy
            policyAnnotations:
              ran.openshift.io/ztp-deploy-wave: "100"
            manifests:
              - path: source-crs/SriovNetwork.yaml
                patches:
                  - metadata:
                      name: sriov-nw-du-fh
                    spec:
                      resourceName: du_fh
                      vlan: '{{hub fromConfigMap "" "site-data-configmap" (printf "%s-sriov-network-vlan-1" .ManagedClusterName) | toInt hub}}'
              - path: source-crs/SriovNetworkNodePolicy-MCP-master.yaml
                patches:
                  - metadata:
                      name: sriov-nnp-du-fh
                    spec:
                      deviceType: netdevice
                      isRdma: false
                      nicSelector:
                          pfNames: '{{hub fromConfigMap "" "group-hardware-types-configmap" (printf "%s-sriov-node-policy-pfNames-1" (index .ManagedClusterLabels "hardware-type")) | toLiteral hub}}'
                      numVfs: 8
                      priority: 10
                      resourceName: du_fh
              - path: source-crs/SriovNetwork.yaml
                patches:
                  - metadata:
                      name: sriov-nw-du-mh
                    spec:
                      resourceName: du_mh
                      vlan: '{{hub fromConfigMap "" "site-data-configmap" (printf "%s-sriov-network-vlan-2" .ManagedClusterName) | toInt hub}}'
              - path: source-crs/SriovNetworkNodePolicy-MCP-master.yaml
                patches:
                  - metadata:
                      name: sriov-nw-du-fh
                    spec:
                      deviceType: netdevice
                      isRdma: false
                      nicSelector:
                          pfNames: '{{hub fromConfigMap "" "group-hardware-types-configmap" (printf "%s-sriov-node-policy-pfNames-2" (index .ManagedClusterLabels "hardware-type")) | toLiteral hub}}'
                      numVfs: 8
                      priority: 10
                      resourceName: du_fh
      Copy to Clipboard Toggle word wrap
    2. PolicyGenTemplate CR 그룹을 만듭니다. 이 예제 PolicyGenTemplate CR은 spec.bindingRules 에 나열된 레이블과 일치하는 클러스터에 대한 로깅, VLAN ID, NIC 및 성능 프로필을 구성합니다.

      apiVersion: ran.openshift.io/v1
      kind: PolicyGenTemplate
      metadata:
        name: group-du-sno-pgt
        namespace: ztp-group
      spec:
        bindingRules:
          # These policies will correspond to all clusters with these labels
          group-du-sno-zone: "zone-1"
          hardware-type: "hardware-type-1"
        mcp: "master"
        sourceFiles:
          - fileName: ClusterLogForwarder.yaml # wave 10
            policyName: "group-du-sno-cfg-policy"
            spec:
              outputs: '{{hub fromConfigMap "" "group-zones-configmap" (printf "%s-cluster-log-fwd-outputs" (index .ManagedClusterLabels "group-du-sno-zone")) | toLiteral hub}}'
              pipelines: '{{hub fromConfigMap "" "group-zones-configmap" (printf "%s-cluster-log-fwd-pipelines" (index .ManagedClusterLabels "group-du-sno-zone")) | toLiteral hub}}'
      
          - fileName: PerformanceProfile.yaml # wave 10
            policyName: "group-du-sno-cfg-policy"
            metadata:
              name: openshift-node-performance-profile
            spec:
              additionalKernelArgs:
              - rcupdate.rcu_normal_after_boot=0
              - vfio_pci.enable_sriov=1
              - vfio_pci.disable_idle_d3=1
              - efi=runtime
              cpu:
                isolated: '{{hub fromConfigMap "" "group-hardware-types-configmap" (printf "%s-cpu-isolated" (index .ManagedClusterLabels "hardware-type")) hub}}'
                reserved: '{{hub fromConfigMap "" "group-hardware-types-configmap" (printf "%s-cpu-reserved" (index .ManagedClusterLabels "hardware-type")) hub}}'
              hugepages:
                defaultHugepagesSize: '{{hub fromConfigMap "" "group-hardware-types-configmap" (printf "%s-hugepages-default" (index .ManagedClusterLabels "hardware-type")) hub}}'
                pages:
                  - size: '{{hub fromConfigMap "" "group-hardware-types-configmap" (printf "%s-hugepages-size" (index .ManagedClusterLabels "hardware-type")) hub}}'
                    count: '{{hub fromConfigMap "" "group-hardware-types-configmap" (printf "%s-hugepages-count" (index .ManagedClusterLabels "hardware-type")) | toInt hub}}'
              realTimeKernel:
                enabled: true
      
          - fileName: SriovNetwork.yaml # wave 100
            policyName: "group-du-sno-sriov-policy"
            metadata:
              name: sriov-nw-du-fh
            spec:
              resourceName: du_fh
              vlan: '{{hub fromConfigMap "" "site-data-configmap" (printf "%s-sriov-network-vlan-1" .ManagedClusterName) | toInt hub}}'
      
          - fileName: SriovNetworkNodePolicy.yaml # wave 100
            policyName: "group-du-sno-sriov-policy"
            metadata:
              name: sriov-nnp-du-fh
            spec:
              deviceType: netdevice
              isRdma: false
              nicSelector:
                pfNames: '{{hub fromConfigMap "" "group-hardware-types-configmap" (printf "%s-sriov-node-policy-pfNames-1" (index .ManagedClusterLabels "hardware-type")) | toLiteral hub}}'
              numVfs: 8
              priority: 10
              resourceName: du_fh
      
          - fileName: SriovNetwork.yaml # wave 100
            policyName: "group-du-sno-sriov-policy"
            metadata:
              name: sriov-nw-du-mh
            spec:
              resourceName: du_mh
              vlan: '{{hub fromConfigMap "" "site-data-configmap" (printf "%s-sriov-network-vlan-2" .ManagedClusterName) | toInt hub}}'
      
          - fileName: SriovNetworkNodePolicy.yaml # wave 100
            policyName: "group-du-sno-sriov-policy"
            metadata:
              name: sriov-nw-du-fh
            spec:
              deviceType: netdevice
              isRdma: false
              nicSelector:
                pfNames: '{{hub fromConfigMap "" "group-hardware-types-configmap" (printf "%s-sriov-node-policy-pfNames-2" (index .ManagedClusterLabels "hardware-type")) | toLiteral hub}}'
              numVfs: 8
              priority: 10
              resourceName: du_fh
      Copy to Clipboard Toggle word wrap
    참고

    사이트별 구성 값을 검색하려면 .ManagedClusterName 필드를 사용합니다. 이는 대상 관리 클러스터의 이름으로 설정된 템플릿 컨텍스트 값입니다.

    그룹별 구성을 검색하려면 .ManagedClusterLabels 필드를 사용합니다. 이는 관리되는 클러스터의 레이블 값으로 설정된 템플릿 컨텍스트 값입니다.

  5. Git에서 PolicyGenerator 또는 PolicyGentemplate CR 사이트를 커밋하고 ArgoCD 애플리케이션에서 모니터링하는 Git 저장소에 푸시합니다.

    참고

    참조된 ConfigMap CR에 대한 후속 변경 사항은 적용된 정책에 자동으로 동기화되지 않습니다. 기존 PolicyGenerator CR을 업데이트하려면 새로운 ConfigMap 변경 사항을 수동으로 동기화해야 합니다. "기존 PolicyGenerator 또는 PolicyGenTemplate CR에 새로운 ConfigMap 변경 사항 동기화"를 참조하세요.

    여러 클러스터에 동일한 PolicyGenerator 또는 PolicyGentemplate CR을 사용할 수 있습니다. 구성이 변경된 경우 각 클러스터의 구성과 관리되는 클러스터의 레이블을 보관하는 ConfigMap 객체에만 수정 작업을 하면 됩니다.

사전 요구 사항

  • OpenShift CLI(oc)가 설치되어 있습니다.
  • cluster-admin 권한이 있는 사용자로 허브 클러스터에 로그인했습니다.
  • 허브 클러스터 템플릿을 사용하여 ConfigMap CR에서 정보를 가져오는 PolicyGenerator 또는 PolicyGentemplate CR을 만들었습니다.

프로세스

  1. ConfigMap CR의 콘텐츠를 업데이트하고 hub 클러스터의 변경 사항을 적용합니다.
  2. 업데이트된 ConfigMap CR의 내용을 배포된 정책과 동기화하려면 다음 중 하나를 수행하세요.

    1. 옵션 1: 기존 정책을 삭제합니다. ArgoCD는 PolicyGenerator 또는 PolicyGentemplate CR을 사용하여 삭제된 정책을 즉시 다시 만듭니다. 예를 들어 다음 명령을 실행합니다.

      $ oc delete policy <policy_name> -n <policy_namespace>
      Copy to Clipboard Toggle word wrap
    2. 옵션 2: ConfigMap을 업데이트할 때마다 다른 값으로 정책에 특별한 주석 policy.open-cluster-management.io/trigger-update 를 적용합니다. 예를 들면 다음과 같습니다.

      $ oc annotate policy <policy_name> -n <policy_namespace> policy.open-cluster-management.io/trigger-update="1"
      Copy to Clipboard Toggle word wrap
      참고

      변경 사항을 적용하려면 업데이트된 정책을 적용해야 합니다. 자세한 내용은 재처리를 위한 특별 주석을 참조하세요.

  3. 선택 사항: 해당 정책이 포함된 ClusterGroupUpdate CR이 있는 경우 삭제합니다. 예를 들면 다음과 같습니다.

    $ oc delete clustergroupupgrade <cgu_name> -n <cgu_namespace>
    Copy to Clipboard Toggle word wrap
    1. 업데이트된 ConfigMap 변경 사항을 적용할 정책을 포함하는 새 ClusterGroupUpdate CR을 만듭니다. 예를 들어, 다음 YAML을 cgr-example.yaml 파일에 추가합니다.

      apiVersion: ran.openshift.io/v1alpha1
      kind: ClusterGroupUpgrade
      metadata:
        name: <cgr_name>
        namespace: <policy_namespace>
      spec:
        managedPolicies:
          - <managed_policy>
        enable: true
        clusters:
        - <managed_cluster_1>
        - <managed_cluster_2>
        remediationStrategy:
          maxConcurrency: 2
          timeout: 240
      Copy to Clipboard Toggle word wrap
    2. 업데이트된 정책을 적용합니다.

      $ oc apply -f cgr-example.yaml
      Copy to Clipboard Toggle word wrap

TALM(Topology Aware Lifecycle Manager)을 사용하면 여러 클러스터의 소프트웨어 수명 주기를 관리할 수 있습니다. TALM은 Red Hat Advanced Cluster Management(RHACM) 정책을 사용하여 대상 클러스터에서 변경을 수행합니다.

RHACM 및 PolicyGenerator CR을 사용하는 것은 정책을 관리하고 관리형 클러스터에 배포하는 데 권장되는 방법입니다. 이는 이 목적을 위해 PolicyGenTemplate CR을 사용하는 것을 대체합니다. PolicyGenerator 리소스에 대한 자세한 내용은 RHACM Policy Generator 설명서를 참조하세요.

12.1. Topology Aware Lifecycle Manager 구성에 관하여

TALM(Topology Aware Lifecycle Manager)은 하나 이상의 OpenShift Container Platform 클러스터에 대한 Red Hat Advanced Cluster Management(RHACM) 정책의 배포를 관리합니다. 대규모 클러스터 네트워크에서 TALM을 사용하면 제한된 배치로 클러스터에 정책을 단계적으로 적용할 수 있습니다. 이를 통해 업데이트 시 가능한 서비스 중단을 최소화할 수 있습니다. TALM을 사용하면 다음 작업을 제어할 수 있습니다.

  • 업데이트 타이밍
  • RHACM 관리 클러스터 수
  • 정책을 적용할 관리 클러스터의 하위 집합
  • 클러스터의 업데이트 순서
  • 클러스터에 수정된 정책 세트
  • 클러스터에 수정된 정책 순서
  • 카나리아 클러스터의 할당

단일 노드 OpenShift의 경우 TALM(Topology Aware Lifecycle Manager)은 대역폭이 제한된 클러스터에 대한 사전 캐싱 이미지를 제공합니다.

TALM은 OpenShift 컨테이너 플랫폼 y-stream 및 z-stream 업데이트의 오케스트레이션과 y-stream 및 z-stream의 2일차 작업을 지원합니다.

12.2. Topology Aware Lifecycle Manager와 함께 사용되는 관리 정책에 관하여

TALM(Topology Aware Lifecycle Manager)은 클러스터 업데이트에 RHACM 정책을 사용합니다.

TALM은 remediationAction 필드가 inform 으로 설정된 모든 정책 CR의 롤아웃을 관리하는 데 사용할 수 있습니다. 지원되는 사용 사례는 다음과 같습니다.

  • 정책 CR의 수동 사용자 생성
  • PolicyGenerator 또는 PolicyGentemplate 사용자 정의 리소스 정의(CRD)에서 자동으로 생성된 정책
참고

PolicyGentemplate CRD를 사용하는 것은 자동 정책 생성에 권장되는 방법입니다.

수동 승인으로 Operator 구독을 업데이트하는 정책의 경우, TALM은 업데이트된 Operator의 설치를 승인하는 추가 기능을 제공합니다.

관리되는 정책에 대한 자세한 내용은 RHACM 설명서의 정책 개요를 참조하세요.

12.3. 웹 콘솔을 사용하여 Topology Aware Lifecycle Manager 설치

OpenShift Container Platform 웹 콘솔을 사용하여 Topology Aware Lifecycle Manager를 설치할 수 있습니다.

사전 요구 사항

  • RHACM Operator의 최신 버전을 설치하세요.
  • TALM에는 RHACM 2.9 이상이 필요합니다.
  • 연결이 끊긴 레지스트리로 허브 클러스터를 설정합니다.
  • cluster-admin 권한이 있는 사용자로 로그인합니다.

프로세스

  1. OpenShift Container Platform 웹 콘솔에서 OperatorOperatorHub로 이동합니다.
  2. 사용 가능한 운영자 목록에서 Topology Aware Lifecycle Manager를 검색한 다음 설치를 클릭합니다.
  3. Operator가 제대로 설치되도록 하려면 설치 모드 의 기본 선택 사항["클러스터의 모든 네임스페이스(기본값)"]과 설치된 네임스페이스 ("openshift-operators")를 유지하세요.
  4. 설치를 클릭합니다.

검증

설치에 성공했는지 확인하려면 다음을 수행하십시오.

  1. Operator설치된 Operator 페이지로 이동합니다.
  2. Operator가 모든 네임스페이스 에 설치되어 있고 상태가 성공 인지 확인하세요.

Operator가 성공적으로 설치되지 않은 경우 다음을 수행하십시오.

  1. Operator설치된 Operator 페이지로 이동하여 Status 열에 오류 또는 실패가 있는지 점검합니다.
  2. 워크로드포드 페이지로 이동하여 문제를 보고하는 cluster-group-upgrades-controller-manager 포드의 모든 컨테이너에서 로그를 확인합니다.

12.4. CLI를 사용하여 Topology Aware Lifecycle Manager 설치

OpenShift CLI( oc )를 사용하여 Topology Aware Lifecycle Manager(TALM)를 설치할 수 있습니다.

사전 요구 사항

  • OpenShift CLI(oc)를 설치합니다.
  • RHACM Operator의 최신 버전을 설치하세요.
  • TALM에는 RHACM 2.9 이상이 필요합니다.
  • 연결이 끊긴 레지스트리를 사용하여 허브 클러스터를 설정합니다.
  • cluster-admin 권한이 있는 사용자로 로그인합니다.

프로세스

  1. 구독 CR 만들기:

    1. 구독 CR을 정의하고 YAML 파일(예: talm-subscription.yaml) 을 저장합니다.

      apiVersion: operators.coreos.com/v1alpha1
      kind: Subscription
      metadata:
        name: openshift-topology-aware-lifecycle-manager-subscription
        namespace: openshift-operators
      spec:
        channel: "stable"
        name: topology-aware-lifecycle-manager
        source: redhat-operators
        sourceNamespace: openshift-marketplace
      Copy to Clipboard Toggle word wrap
    2. 다음 명령을 실행하여 구독 CR을 만듭니다.

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

검증

  1. CSV 리소스를 검사하여 설치가 성공했는지 확인하세요.

    $ oc get csv -n openshift-operators
    Copy to Clipboard Toggle word wrap

    출력 예

    NAME                                                   DISPLAY                            VERSION               REPLACES                           PHASE
    topology-aware-lifecycle-manager.4.19.x   Topology Aware Lifecycle Manager   4.19.x                                      Succeeded
    Copy to Clipboard Toggle word wrap

  2. TALM이 작동 중인지 확인하세요.

    $ oc get deploy -n openshift-operators
    Copy to Clipboard Toggle word wrap

    출력 예

    NAMESPACE                                          NAME                                             READY   UP-TO-DATE   AVAILABLE   AGE
    openshift-operators                                cluster-group-upgrades-controller-manager        1/1     1            1           14s
    Copy to Clipboard Toggle word wrap

12.5. ClusterGroupUpgrade CR에 관하여

TALM(Topology Aware Lifecycle Manager)은 클러스터 그룹에 대한 ClusterGroupUpgrade CR에서 수정 계획을 수립합니다. ClusterGroupUpgrade CR에서 다음 사양을 정의할 수 있습니다.

  • 그룹의 클러스터
  • ClusterGroupUpgrade CR 차단
  • 적용 가능한 관리 정책 목록
  • 동시 업데이트 수
  • 적용 가능한 카나리아 업데이트
  • 업데이트 전후에 수행할 작업
  • 업데이트 타이밍

ClusterGroupUpgrade CR의 enable 필드를 사용하여 업데이트 시작 시간을 제어할 수 있습니다. 예를 들어 스케줄링된 유지 관리 기간이 4시간인 경우 enable 필드가 false 로 설정된 ClusterGroupUpgrade CR을 준비할 수 있습니다.

spec.remediationStrategy.timeout 설정을 다음과 같이 구성하여 시간 제한을 설정할 수 있습니다.

spec
  remediationStrategy:
          maxConcurrency: 1
          timeout: 240
Copy to Clipboard Toggle word wrap

batchTimeoutAction 을 사용하면 클러스터 업데이트가 실패할 경우 어떤 일이 발생하는지 확인할 수 있습니다. '계속' 을 지정하여 실패한 클러스터를 건너뛰고 다른 클러스터를 업그레이드하거나, '중단'을 지정 하여 모든 클러스터에 대한 정책 수정을 중지할 수 있습니다. 시간 초과가 지나면 TALM은 모든 시행 정책을 제거하여 클러스터에 더 이상 업데이트가 이루어지지 않도록 합니다.

변경 사항을 적용하려면 enabled 필드를 true 로 설정합니다.

자세한 내용은 "관리되는 클러스터에 업데이트 정책 적용" 섹션을 참조하세요.

TALM이 지정된 클러스터에 대한 정책을 수정함에 따라 ClusterGroupUpgrade CR은 여러 조건에 대해 true 또는 false 상태를 보고할 수 있습니다.

참고

TALM이 클러스터 업데이트를 완료한 후, 해당 클러스터는 동일한 ClusterGroupUpgrade CR의 제어 하에 다시 업데이트되지 않습니다. 다음의 경우 새로운 ClusterGroupUpgrade CR을 만들어야 합니다.

  • 클러스터를 다시 업데이트해야 하는 경우
  • 클러스터가 업데이트 후 정보 정책을 준수하지 않는 것으로 변경되는 경우

12.5.1. 클러스터 선택

TALM은 다음 필드를 기반으로 교정 계획을 수립하고 클러스터를 선택합니다.

  • clusterLabelSelector 필드는 업데이트하려는 클러스터의 레이블을 지정합니다. 여기에는 k8s.io/apimachinery/pkg/apis/meta/v1 의 표준 레이블 선택기 목록이 포함되어 있습니다. 목록의 각 선택자는 레이블 값 쌍이나 레이블 표현식을 사용합니다. 각 선택기의 일치 항목은 clusterSelector 필드와 cluster 필드의 일치 항목과 함께 최종 클러스터 목록에 추가됩니다.
  • 클러스터 필드는 업데이트할 클러스터 목록을 지정합니다.
  • 카나리아 필드는 카나리아 업데이트에 대한 클러스터를 지정합니다.
  • maxConcurrency 필드는 배치에서 업데이트할 클러스터 수를 지정합니다.
  • actions 필드는 TALM이 업데이트 프로세스를 시작할 때 수행하는 beforeEnable 작업과 TALM이 각 클러스터에 대한 정책 수정을 완료할 때 수행하는 afterCompletion 작업을 지정합니다.

clusters , clusterLabelSelector , clusterSelector 필드를 함께 사용하면 클러스터의 결합된 목록을 만들 수 있습니다.

교정 계획은 카나리아 필드에 나열된 클러스터부터 시작됩니다. 각 카나리아 클러스터는 단일 클러스터 배치를 형성합니다.

활성화된 필드가 false 로 설정된 샘플 ClusterGroupUpgrade CR

apiVersion: ran.openshift.io/v1alpha1
kind: ClusterGroupUpgrade
metadata:
  creationTimestamp: '2022-11-18T16:27:15Z'
  finalizers:
    - ran.openshift.io/cleanup-finalizer
  generation: 1
  name: talm-cgu
  namespace: talm-namespace
  resourceVersion: '40451823'
  uid: cca245a5-4bca-45fa-89c0-aa6af81a596c
Spec:
  actions:
    afterCompletion: 
1

      addClusterLabels:
        upgrade-done: ""
      deleteClusterLabels:
        upgrade-running: ""
      deleteObjects: true
    beforeEnable: 
2

      addClusterLabels:
        upgrade-running: ""
  clusters: 
3

    - spoke1
  enable: false 
4

  managedPolicies: 
5

    - talm-policy
  preCaching: false
  remediationStrategy: 
6

    canaries: 
7

        - spoke1
    maxConcurrency: 2 
8

    timeout: 240
  clusterLabelSelectors: 
9

    - matchExpressions:
      - key: label1
      operator: In
      values:
        - value1a
        - value1b
  batchTimeoutAction: 
10

status: 
11

    computedMaxConcurrency: 2
    conditions:
      - lastTransitionTime: '2022-11-18T16:27:15Z'
        message: All selected clusters are valid
        reason: ClusterSelectionCompleted
        status: 'True'
        type: ClustersSelected 
12

      - lastTransitionTime: '2022-11-18T16:27:15Z'
        message: Completed validation
        reason: ValidationCompleted
        status: 'True'
        type: Validated 
13

      - lastTransitionTime: '2022-11-18T16:37:16Z'
        message: Not enabled
        reason: NotEnabled
        status: 'False'
        type: Progressing
    managedPoliciesForUpgrade:
      - name: talm-policy
        namespace: talm-namespace
    managedPoliciesNs:
      talm-policy: talm-namespace
    remediationPlan:
      - - spoke1
      - - spoke2
        - spoke3
    status:
Copy to Clipboard Toggle word wrap

1
TALM이 각 클러스터에 대한 정책 수정을 완료할 때 수행하는 작업을 지정합니다.
2
TALM이 업데이트 프로세스를 시작할 때 수행하는 작업을 지정합니다.
3
업데이트할 클러스터 목록을 정의합니다.
4
enable 필드가 false 로 설정되었습니다.
5
수정할 사용자 정의 정책 세트를 나열합니다.
6
클러스터 업데이트의 세부 사항을 정의합니다.
7
카나리아 업데이트에 대한 클러스터를 정의합니다.
8
배치에서 동시 업데이트의 최대 수를 정의합니다. 수정 배치의 수는 카나리아 클러스터 수에 카나리아 클러스터를 제외한 클러스터 수를 더한 후 maxConcurrency 값으로 나눈 값입니다. 이미 모든 관리 정책과 호환되는 클러스터는 수정 계획에서 제외됩니다.
9
클러스터 선택을 위한 매개변수를 표시합니다.
10
일괄 처리가 시간 초과되는 경우 발생하는 작업을 제어합니다. 가능한 값은 abort 또는 continue 입니다. 지정되지 않은 경우 기본값은 계속됩니다.
11
업데이트 상태에 대한 정보를 표시합니다.
12
ClustersSelected 조건은 선택한 모든 클러스터가 유효한 것으로 표시됩니다.
13
검증됨 조건은 선택한 모든 클러스터가 검증되었음을 보여줍니다.
참고

카나리아 클러스터를 업데이트하는 동안 오류가 발생하면 업데이트 프로세스가 중지됩니다.

수정 계획이 성공적으로 생성되면 enable 필드를 true 로 설정하고 TALM이 지정된 관리 정책으로 호환되지 않는 클러스터를 업데이트하기 시작할 수 있습니다.

참고

ClusterGroupUpgrade CR의 enable 필드가 false 로 설정된 경우에만 spec 필드를 변경할 수 있습니다.

12.5.2. 검증

TALM은 지정된 모든 관리 정책이 사용 가능하고 올바른지 확인하고 검증 조건을 사용하여 다음과 같이 상태 및 이유를 보고합니다.

  • true

    검증이 완료되었습니다.

  • false

    정책이 없거나 유효하지 않거나 잘못된 플랫폼 이미지가 지정되었습니다.

12.5.3. 사전 캐싱

클러스터는 컨테이너 이미지 레지스트리에 액세스하기 위한 대역폭이 제한될 수 있으므로 업데이트가 완료되기 전에 시간 초과가 발생할 수 있습니다. 단일 노드 OpenShift 클러스터에서는 사전 캐싱을 사용하여 이 문제를 방지할 수 있습니다. preCaching 필드가 true 로 설정된 ClusterGroupUpgrade CR을 생성할 때 컨테이너 이미지 사전 캐싱이 시작됩니다. TALM은 사용 가능한 디스크 공간을 예상 OpenShift Container Platform 이미지 크기와 비교하여 충분한 공간이 있는지 확인합니다. 클러스터에 공간이 충분하지 않으면 TALM은 해당 클러스터의 사전 캐싱을 취소하고 정책을 수정하지 않습니다.

TALM은 PrecacheSpecValid 조건을 사용하여 다음과 같이 상태 정보를 보고합니다.

  • true

    사전 캐싱 사양은 유효하고 일관되게 유지됩니다.

  • false

    사전 캐싱 사양은 불완전합니다.

TALM은 PrecachingSucceeded 조건을 사용하여 다음과 같이 상태 정보를 보고합니다.

  • true

    TALM은 사전 캐싱 프로세스를 완료했습니다. 어떤 클러스터에서 사전 캐싱이 실패하면 해당 클러스터의 업데이트는 실패하지만 다른 모든 클러스터의 업데이트는 진행됩니다. 클러스터에 대한 사전 캐싱이 실패한 경우 이를 알려주는 메시지가 표시됩니다.

  • false

    하나 이상의 클러스터에 대한 사전 캐싱이 아직 진행 중이거나 모든 클러스터에 대해 실패했습니다.

자세한 내용은 "컨테이너 이미지 사전 캐시 기능 사용" 섹션을 참조하세요.

12.5.4. 클러스터 업데이트

TALM은 개선 계획에 따라 정책을 시행합니다. 현재 배치의 모든 클러스터가 관리되는 모든 정책을 준수한 직후에 후속 배치에 대한 정책을 시행하는 것이 시작됩니다. 배치 시간이 초과되면 TALM은 다음 배치로 넘어갑니다. 배치의 시간 초과 값은 spec.timeout 필드를 수정 계획의 배치 수로 나눈 값입니다.

TALM은 진행 조건을 사용하여 다음과 같이 상태와 이유를 보고합니다.

  • true

    TALM은 규정을 준수하지 않는 정책을 시정하고 있습니다.

  • false

    업데이트가 진행되지 않습니다. 이에 대한 가능한 이유는 다음과 같습니다.

    • 모든 클러스터는 모든 관리 정책을 준수합니다.
    • 정책 수정에 너무 오랜 시간이 걸려 업데이트 시간이 초과되었습니다.
    • 차단 CR이 시스템에 없거나 아직 완료되지 않았습니다.
    • ClusterGroupUpgrade CR이 활성화되어 있지 않습니다.
참고

관리되는 정책은 ClusterGroupUpgrade CR의 managedPolicies 필드에 나열된 순서대로 적용됩니다. 한 번에 하나의 관리 정책이 지정된 클러스터에 적용됩니다. 클러스터가 현재 정책을 준수하는 경우 다음 관리 정책이 적용됩니다.

진행 중 상태의 ClusterGroupUpgrade CR 샘플

apiVersion: ran.openshift.io/v1alpha1
kind: ClusterGroupUpgrade
metadata:
  creationTimestamp: '2022-11-18T16:27:15Z'
  finalizers:
    - ran.openshift.io/cleanup-finalizer
  generation: 1
  name: talm-cgu
  namespace: talm-namespace
  resourceVersion: '40451823'
  uid: cca245a5-4bca-45fa-89c0-aa6af81a596c
Spec:
  actions:
    afterCompletion:
      deleteObjects: true
    beforeEnable: {}
  clusters:
    - spoke1
  enable: true
  managedPolicies:
    - talm-policy
  preCaching: true
  remediationStrategy:
    canaries:
        - spoke1
    maxConcurrency: 2
    timeout: 240
  clusterLabelSelectors:
    - matchExpressions:
      - key: label1
      operator: In
      values:
        - value1a
        - value1b
  batchTimeoutAction:
status:
    clusters:
      - name: spoke1
        state: complete
    computedMaxConcurrency: 2
    conditions:
      - lastTransitionTime: '2022-11-18T16:27:15Z'
        message: All selected clusters are valid
        reason: ClusterSelectionCompleted
        status: 'True'
        type: ClustersSelected
      - lastTransitionTime: '2022-11-18T16:27:15Z'
        message: Completed validation
        reason: ValidationCompleted
        status: 'True'
        type: Validated
      - lastTransitionTime: '2022-11-18T16:37:16Z'
        message: Remediating non-compliant policies
        reason: InProgress
        status: 'True'
        type: Progressing 
1

    managedPoliciesForUpgrade:
      - name: talm-policy
        namespace: talm-namespace
    managedPoliciesNs:
      talm-policy: talm-namespace
    remediationPlan:
      - - spoke1
      - - spoke2
        - spoke3
    status:
      currentBatch: 2
      currentBatchRemediationProgress:
        spoke2:
          state: Completed
        spoke3:
          policyIndex: 0
          state: InProgress
      currentBatchStartedAt: '2022-11-18T16:27:16Z'
      startedAt: '2022-11-18T16:27:15Z'
Copy to Clipboard Toggle word wrap

1
진행 중 필드는 TALM이 정책을 개선하는 과정에 있음을 보여줍니다.

12.5.5. 상태 업데이트

TALM은 Succeeded 조건을 사용하여 다음과 같이 상태와 이유를 보고합니다.

  • true

    모든 클러스터는 지정된 관리 정책을 준수합니다.

  • false

    클러스터를 수정할 수 없거나, 다음 이유 중 하나로 정책 수정에 너무 오랜 시간이 걸려 정책 수정이 실패했습니다.

    • 현재 배치에는 카나리아 업데이트가 포함되어 있으며, 배치의 클러스터는 배치 시간 초과 내의 모든 관리 정책을 준수하지 않습니다.
    • 클러스터가 remediationStrategy 필드에 지정된 시간 초과 값 내에서 관리되는 정책을 준수하지 않았습니다.

성공 상태의 ClusterGroupUpgrade CR 샘플

    apiVersion: ran.openshift.io/v1alpha1
    kind: ClusterGroupUpgrade
    metadata:
      name: cgu-upgrade-complete
      namespace: default
    spec:
      clusters:
      - spoke1
      - spoke4
      enable: true
      managedPolicies:
      - policy1-common-cluster-version-policy
      - policy2-common-pao-sub-policy
      remediationStrategy:
        maxConcurrency: 1
        timeout: 240
    status: 
1

      clusters:
        - name: spoke1
          state: complete
        - name: spoke4
          state: complete
      conditions:
      - message: All selected clusters are valid
        reason: ClusterSelectionCompleted
        status: "True"
        type: ClustersSelected
      - message: Completed validation
        reason: ValidationCompleted
        status: "True"
        type: Validated
      - message: All clusters are compliant with all the managed policies
        reason: Completed
        status: "False"
        type: Progressing 
2

      - message: All clusters are compliant with all the managed policies
        reason: Completed
        status: "True"
        type: Succeeded 
3

      managedPoliciesForUpgrade:
      - name: policy1-common-cluster-version-policy
        namespace: default
      - name: policy2-common-pao-sub-policy
        namespace: default
      remediationPlan:
      - - spoke1
      - - spoke4
      status:
        completedAt: '2022-11-18T16:27:16Z'
        startedAt: '2022-11-18T16:27:15Z'
Copy to Clipboard Toggle word wrap

2
진행 중 필드에서 업데이트가 완료되었으므로 상태가 false로 표시됩니다. 클러스터는 모든 관리 정책을 준수합니다.
3
'성공' 필드는 검증이 성공적으로 완료되었음을 보여줍니다.
1
상태 필드에는 클러스터 목록과 해당 상태가 포함됩니다. 클러스터의 상태는 완료 또는 시간 초과일 수 있습니다.

시간 초과 상태의 ClusterGroupUpgrade CR 샘플

apiVersion: ran.openshift.io/v1alpha1
kind: ClusterGroupUpgrade
metadata:
  creationTimestamp: '2022-11-18T16:27:15Z'
  finalizers:
    - ran.openshift.io/cleanup-finalizer
  generation: 1
  name: talm-cgu
  namespace: talm-namespace
  resourceVersion: '40451823'
  uid: cca245a5-4bca-45fa-89c0-aa6af81a596c
spec:
  actions:
    afterCompletion:
      deleteObjects: true
    beforeEnable: {}
  clusters:
    - spoke1
    - spoke2
  enable: true
  managedPolicies:
    - talm-policy
  preCaching: false
  remediationStrategy:
    maxConcurrency: 2
    timeout: 240
status:
  clusters:
    - name: spoke1
      state: complete
    - currentPolicy: 
1

        name: talm-policy
        status: NonCompliant
      name: spoke2
      state: timedout
  computedMaxConcurrency: 2
  conditions:
    - lastTransitionTime: '2022-11-18T16:27:15Z'
      message: All selected clusters are valid
      reason: ClusterSelectionCompleted
      status: 'True'
      type: ClustersSelected
    - lastTransitionTime: '2022-11-18T16:27:15Z'
      message: Completed validation
      reason: ValidationCompleted
      status: 'True'
      type: Validated
    - lastTransitionTime: '2022-11-18T16:37:16Z'
      message: Policy remediation took too long
      reason: TimedOut
      status: 'False'
      type: Progressing
    - lastTransitionTime: '2022-11-18T16:37:16Z'
      message: Policy remediation took too long
      reason: TimedOut
      status: 'False'
      type: Succeeded 
2

  managedPoliciesForUpgrade:
    - name: talm-policy
      namespace: talm-namespace
  managedPoliciesNs:
    talm-policy: talm-namespace
  remediationPlan:
    - - spoke1
      - spoke2
  status:
        startedAt: '2022-11-18T16:27:15Z'
        completedAt: '2022-11-18T20:27:15Z'
Copy to Clipboard Toggle word wrap

1
클러스터 상태가 시간 초과 인 경우 currentPolicy 필드에 정책 이름과 정책 상태가 표시됩니다.
2
succeeded 상태가 false 이고 해당 메시지는 정책 수정에 너무 오랜 시간이 걸렸음을 나타냅니다.

12.5.6. Blocking ClusterGroupUpgrade CRs

여러 개의 ClusterGroupUpgrade CR을 만들고 적용 순서를 제어할 수 있습니다.

예를 들어, ClusterGroupUpgrade CR A의 시작을 차단하는 ClusterGroupUpgrade CR C를 생성하는 경우 ClusterGroupUpgrade CR C의 상태가 UpgradeComplete가 될 때까지 ClusterGroupUpgrade CR A를 시작할 수 없습니다.

하나의 ClusterGroupUpgrade CR에는 여러 개의 차단 CR이 있을 수 있습니다. 이 경우, 현재 CR에 대한 업그레이드를 시작하기 전에 모든 차단 CR이 완료되어야 합니다.

사전 요구 사항

  • TALM(Topology Aware Lifecycle Manager)을 설치합니다.
  • 하나 이상의 관리형 클러스터를 프로비저닝합니다.
  • cluster-admin 권한이 있는 사용자로 로그인합니다.
  • 허브 클러스터에서 RHACM 정책을 만듭니다.

프로세스

  1. ClusterGroupUpgrade CR의 내용을 cgu-a.yaml , cgu-b.yamlcgu-c.yaml 파일에 저장합니다.

    apiVersion: ran.openshift.io/v1alpha1
    kind: ClusterGroupUpgrade
    metadata:
      name: cgu-a
      namespace: default
    spec:
      blockingCRs: 
    1
    
      - name: cgu-c
        namespace: default
      clusters:
      - spoke1
      - spoke2
      - spoke3
      enable: false
      managedPolicies:
      - policy1-common-cluster-version-policy
      - policy2-common-pao-sub-policy
      - policy3-common-ptp-sub-policy
      remediationStrategy:
        canaries:
        - spoke1
        maxConcurrency: 2
        timeout: 240
    status:
      conditions:
      - message: The ClusterGroupUpgrade CR is not enabled
        reason: UpgradeNotStarted
        status: "False"
        type: Ready
      managedPoliciesForUpgrade:
      - name: policy1-common-cluster-version-policy
        namespace: default
      - name: policy2-common-pao-sub-policy
        namespace: default
      - name: policy3-common-ptp-sub-policy
        namespace: default
      placementBindings:
      - cgu-a-policy1-common-cluster-version-policy
      - cgu-a-policy2-common-pao-sub-policy
      - cgu-a-policy3-common-ptp-sub-policy
      placementRules:
      - cgu-a-policy1-common-cluster-version-policy
      - cgu-a-policy2-common-pao-sub-policy
      - cgu-a-policy3-common-ptp-sub-policy
      remediationPlan:
      - - spoke1
      - - spoke2
    Copy to Clipboard Toggle word wrap
    1
    차단 CR을 정의합니다. cgu- c가 완료될 때까지 cgu- a 업데이트를 시작할 수 없습니다.
    apiVersion: ran.openshift.io/v1alpha1
    kind: ClusterGroupUpgrade
    metadata:
      name: cgu-b
      namespace: default
    spec:
      blockingCRs: 
    1
    
      - name: cgu-a
        namespace: default
      clusters:
      - spoke4
      - spoke5
      enable: false
      managedPolicies:
      - policy1-common-cluster-version-policy
      - policy2-common-pao-sub-policy
      - policy3-common-ptp-sub-policy
      - policy4-common-sriov-sub-policy
      remediationStrategy:
        maxConcurrency: 1
        timeout: 240
    status:
      conditions:
      - message: The ClusterGroupUpgrade CR is not enabled
        reason: UpgradeNotStarted
        status: "False"
        type: Ready
      managedPoliciesForUpgrade:
      - name: policy1-common-cluster-version-policy
        namespace: default
      - name: policy2-common-pao-sub-policy
        namespace: default
      - name: policy3-common-ptp-sub-policy
        namespace: default
      - name: policy4-common-sriov-sub-policy
        namespace: default
      placementBindings:
      - cgu-b-policy1-common-cluster-version-policy
      - cgu-b-policy2-common-pao-sub-policy
      - cgu-b-policy3-common-ptp-sub-policy
      - cgu-b-policy4-common-sriov-sub-policy
      placementRules:
      - cgu-b-policy1-common-cluster-version-policy
      - cgu-b-policy2-common-pao-sub-policy
      - cgu-b-policy3-common-ptp-sub-policy
      - cgu-b-policy4-common-sriov-sub-policy
      remediationPlan:
      - - spoke4
      - - spoke5
      status: {}
    Copy to Clipboard Toggle word wrap
    1
    cgu-a가 완료될 때까지 cgu-b 업데이트를 시작할 수 없습니다.
    apiVersion: ran.openshift.io/v1alpha1
    kind: ClusterGroupUpgrade
    metadata:
      name: cgu-c
      namespace: default
    spec: 
    1
    
      clusters:
      - spoke6
      enable: false
      managedPolicies:
      - policy1-common-cluster-version-policy
      - policy2-common-pao-sub-policy
      - policy3-common-ptp-sub-policy
      - policy4-common-sriov-sub-policy
      remediationStrategy:
        maxConcurrency: 1
        timeout: 240
    status:
      conditions:
      - message: The ClusterGroupUpgrade CR is not enabled
        reason: UpgradeNotStarted
        status: "False"
        type: Ready
      managedPoliciesCompliantBeforeUpgrade:
      - policy2-common-pao-sub-policy
      - policy3-common-ptp-sub-policy
      managedPoliciesForUpgrade:
      - name: policy1-common-cluster-version-policy
        namespace: default
      - name: policy4-common-sriov-sub-policy
        namespace: default
      placementBindings:
      - cgu-c-policy1-common-cluster-version-policy
      - cgu-c-policy4-common-sriov-sub-policy
      placementRules:
      - cgu-c-policy1-common-cluster-version-policy
      - cgu-c-policy4-common-sriov-sub-policy
      remediationPlan:
      - - spoke6
      status: {}
    Copy to Clipboard Toggle word wrap
    1
    cgu-c 업데이트에는 차단 CR이 없습니다. TALM은 enable 필드가 true 로 설정되면 cgu-c 업데이트를 시작합니다.
  2. 각 관련 CR에 대해 다음 명령을 실행하여 ClusterGroupUpgrade CR을 만듭니다.

    $ oc apply -f <name>.yaml
    Copy to Clipboard Toggle word wrap
  3. 각 관련 CR에 대해 다음 명령을 실행하여 업데이트 프로세스를 시작합니다.

    $ oc --namespace=default patch clustergroupupgrade.ran.openshift.io/<name> \
    --type merge -p '{"spec":{"enable":true}}'
    Copy to Clipboard Toggle word wrap

    다음 예에서는 enable 필드가 true 로 설정된 ClusterGroupUpgrade CR을 보여줍니다.

    CR 차단을 포함한 cgu-a 의 예

    apiVersion: ran.openshift.io/v1alpha1
    kind: ClusterGroupUpgrade
    metadata:
      name: cgu-a
      namespace: default
    spec:
      blockingCRs:
      - name: cgu-c
        namespace: default
      clusters:
      - spoke1
      - spoke2
      - spoke3
      enable: true
      managedPolicies:
      - policy1-common-cluster-version-policy
      - policy2-common-pao-sub-policy
      - policy3-common-ptp-sub-policy
      remediationStrategy:
        canaries:
        - spoke1
        maxConcurrency: 2
        timeout: 240
    status:
      conditions:
      - message: 'The ClusterGroupUpgrade CR is blocked by other CRs that have not yet
          completed: [cgu-c]' 
    1
    
        reason: UpgradeCannotStart
        status: "False"
        type: Ready
      managedPoliciesForUpgrade:
      - name: policy1-common-cluster-version-policy
        namespace: default
      - name: policy2-common-pao-sub-policy
        namespace: default
      - name: policy3-common-ptp-sub-policy
        namespace: default
      placementBindings:
      - cgu-a-policy1-common-cluster-version-policy
      - cgu-a-policy2-common-pao-sub-policy
      - cgu-a-policy3-common-ptp-sub-policy
      placementRules:
      - cgu-a-policy1-common-cluster-version-policy
      - cgu-a-policy2-common-pao-sub-policy
      - cgu-a-policy3-common-ptp-sub-policy
      remediationPlan:
      - - spoke1
      - - spoke2
      status: {}
    Copy to Clipboard Toggle word wrap

    1
    차단된 CR 목록을 보여줍니다.

    CR 차단을 사용한 cgu-b 의 예

    apiVersion: ran.openshift.io/v1alpha1
    kind: ClusterGroupUpgrade
    metadata:
      name: cgu-b
      namespace: default
    spec:
      blockingCRs:
      - name: cgu-a
        namespace: default
      clusters:
      - spoke4
      - spoke5
      enable: true
      managedPolicies:
      - policy1-common-cluster-version-policy
      - policy2-common-pao-sub-policy
      - policy3-common-ptp-sub-policy
      - policy4-common-sriov-sub-policy
      remediationStrategy:
        maxConcurrency: 1
        timeout: 240
    status:
      conditions:
      - message: 'The ClusterGroupUpgrade CR is blocked by other CRs that have not yet
          completed: [cgu-a]' 
    1
    
        reason: UpgradeCannotStart
        status: "False"
        type: Ready
      managedPoliciesForUpgrade:
      - name: policy1-common-cluster-version-policy
        namespace: default
      - name: policy2-common-pao-sub-policy
        namespace: default
      - name: policy3-common-ptp-sub-policy
        namespace: default
      - name: policy4-common-sriov-sub-policy
        namespace: default
      placementBindings:
      - cgu-b-policy1-common-cluster-version-policy
      - cgu-b-policy2-common-pao-sub-policy
      - cgu-b-policy3-common-ptp-sub-policy
      - cgu-b-policy4-common-sriov-sub-policy
      placementRules:
      - cgu-b-policy1-common-cluster-version-policy
      - cgu-b-policy2-common-pao-sub-policy
      - cgu-b-policy3-common-ptp-sub-policy
      - cgu-b-policy4-common-sriov-sub-policy
      remediationPlan:
      - - spoke4
      - - spoke5
      status: {}
    Copy to Clipboard Toggle word wrap

    1
    차단된 CR 목록을 보여줍니다.

    CR 차단이 있는 cgu-c 의 예

    apiVersion: ran.openshift.io/v1alpha1
    kind: ClusterGroupUpgrade
    metadata:
      name: cgu-c
      namespace: default
    spec:
      clusters:
      - spoke6
      enable: true
      managedPolicies:
      - policy1-common-cluster-version-policy
      - policy2-common-pao-sub-policy
      - policy3-common-ptp-sub-policy
      - policy4-common-sriov-sub-policy
      remediationStrategy:
        maxConcurrency: 1
        timeout: 240
    status:
      conditions:
      - message: The ClusterGroupUpgrade CR has upgrade policies that are still non compliant 
    1
    
        reason: UpgradeNotCompleted
        status: "False"
        type: Ready
      managedPoliciesCompliantBeforeUpgrade:
      - policy2-common-pao-sub-policy
      - policy3-common-ptp-sub-policy
      managedPoliciesForUpgrade:
      - name: policy1-common-cluster-version-policy
        namespace: default
      - name: policy4-common-sriov-sub-policy
        namespace: default
      placementBindings:
      - cgu-c-policy1-common-cluster-version-policy
      - cgu-c-policy4-common-sriov-sub-policy
      placementRules:
      - cgu-c-policy1-common-cluster-version-policy
      - cgu-c-policy4-common-sriov-sub-policy
      remediationPlan:
      - - spoke6
      status:
        currentBatch: 1
        remediationPlanForBatch:
          spoke6: 0
    Copy to Clipboard Toggle word wrap

    1
    cgu-c 업데이트에는 차단 CR이 없습니다.

12.6. 관리 클러스터에서 정책 업데이트

TALM( Topology Aware Lifecycle Manager)은 ClusterGroupUpgrade CR(사용자 정의 리소스)에 지정된 클러스터에 대한 정보 정책 세트를 수정합니다. TALM은 PlacementBinding CR의 bindingOverrides.remediationActionsubFilter 사양을 통해 Policy CR의 remediationAction 사양을 제어하여 정책을 수정하고 알려 줍니다. 각 정책에는 해당 RHACM 배치 규칙과 RHACM 배치 바인딩이 있습니다.

TALM은 현재 배치의 각 클러스터를 적용 가능한 관리 정책에 해당하는 배치 규칙에 하나씩 추가합니다. 클러스터가 이미 정책을 준수하는 경우 TALM은 준수하는 클러스터에 해당 정책을 적용하지 않습니다. 그런 다음 TALM은 비준수 클러스터에 다음 정책을 적용합니다. TALM이 일괄적으로 업데이트를 완료하면 모든 클러스터가 정책과 연결된 배치 규칙에서 제거됩니다. 그러면 다음 배치의 업데이트가 시작됩니다.

스포크 클러스터가 RHACM에 규정 준수 상태를 보고하지 않으면 허브 클러스터의 관리 정책에 TALM에 필요한 상태 정보가 누락될 수 있습니다. TALM은 다음과 같은 방법으로 이러한 사례를 처리합니다.

  • 정책의 status.compliant 필드가 누락된 경우 TALM은 정책을 무시하고 로그 항목을 추가합니다. 그런 다음 TALM은 정책의 status.status 필드를 계속 살펴봅니다.
  • 정책의 status.status 가 없으면 TALM에서 오류가 발생합니다.
  • 정책의 status.status 필드에 클러스터의 준수 상태가 누락된 경우 TALM은 해당 클러스터가 해당 정책을 준수하지 않는 것으로 간주합니다.

ClusterGroupUpgrade CR의 batchTimeoutAction은 클러스터의 업그레이드가 실패할 경우 어떻게 되는지 결정합니다. continue를 지정하여 실패한 클러스터를 건너뛰고 다른 클러스터를 업그레이드할 수 있으며, abort를 지정하여 모든 클러스터의 정책 수정을 중지할 수 있습니다. 제한 시간이 지나면 TALM은 클러스터에 더 이상 업데이트가 이루어지지 않도록 자신이 만든 모든 리소스를 제거합니다.

업그레이드 정책 예시

apiVersion: policy.open-cluster-management.io/v1
kind: Policy
metadata:
  name: ocp-4.4.19.4
  namespace: platform-upgrade
spec:
  disabled: false
  policy-templates:
  - objectDefinition:
      apiVersion: policy.open-cluster-management.io/v1
      kind: ConfigurationPolicy
      metadata:
        name: upgrade
      spec:
        namespaceselector:
          exclude:
          - kube-*
          include:
          - '*'
        object-templates:
        - complianceType: musthave
          objectDefinition:
            apiVersion: config.openshift.io/v1
            kind: ClusterVersion
            metadata:
              name: version
            spec:
              channel: stable-4.19
              desiredUpdate:
                version: 4.4.19.4
              upstream: https://api.openshift.com/api/upgrades_info/v1/graph
            status:
              history:
                - state: Completed
                  version: 4.4.19.4
        remediationAction: inform
        severity: low
  remediationAction: inform
Copy to Clipboard Toggle word wrap

RHACM 정책에 대한 자세한 내용은 정책 개요 를 참조하십시오.

12.6.1. TALM으로 설치하는 관리형 클러스터에 대한 운영자 구독 구성

TALM(Topology Aware Lifecycle Manager)은 Operator의 구독 사용자 정의 리소스(CR)에 status.state.AtLatestKnown 필드가 포함되어 있는 경우에만 Operator에 대한 설치 계획을 승인할 수 있습니다.

프로세스

  1. 운영자의 구독 CR에 status.state.AtLatestKnown 필드를 추가합니다.

    서브스크립션 CR의 예

    apiVersion: operators.coreos.com/v1alpha1
    kind: Subscription
    metadata:
      name: cluster-logging
      namespace: openshift-logging
      annotations:
        ran.openshift.io/ztp-deploy-wave: "2"
    spec:
      channel: "stable-6.2"
      name: cluster-logging
      source: redhat-operators-disconnected
      sourceNamespace: openshift-marketplace
      installPlanApproval: Manual
    status:
      state: AtLatestKnown 
    1
    Copy to Clipboard Toggle word wrap

    1
    status.state: AtLatestKnown 필드는 Operator 카탈로그에서 사용 가능한 최신 Operator 버전에 사용됩니다.
    참고

    레지스트리에 새로운 버전의 Operator가 출시되면 관련 정책이 준수되지 않게 됩니다.

  2. ClusterGroupUpgrade CR을 사용하여 변경된 구독 정책을 관리되는 클러스터에 적용합니다.

12.6.2. 관리되는 클러스터에 업데이트 정책 적용

정책을 적용하여 관리되는 클러스터를 업데이트할 수 있습니다.

사전 요구 사항

  • TALM(Topology Aware Lifecycle Manager)을 설치합니다.
  • TALM에는 RHACM 2.9 이상이 필요합니다.
  • 하나 이상의 관리형 클러스터를 프로비저닝합니다.
  • cluster-admin 권한이 있는 사용자로 로그인합니다.
  • 허브 클러스터에서 RHACM 정책을 만듭니다.

프로세스

  1. ClusterGroupUpgrade CR의 내용을 cgu-1.yaml 파일에 저장합니다.

    apiVersion: ran.openshift.io/v1alpha1
    kind: ClusterGroupUpgrade
    metadata:
      name: cgu-1
      namespace: default
    spec:
      managedPolicies: 
    1
    
        - policy1-common-cluster-version-policy
        - policy2-common-nto-sub-policy
        - policy3-common-ptp-sub-policy
        - policy4-common-sriov-sub-policy
      enable: false
      clusters: 
    2
    
      - spoke1
      - spoke2
      - spoke5
      - spoke6
      remediationStrategy:
        maxConcurrency: 2 
    3
    
        timeout: 240 
    4
    
      batchTimeoutAction: 
    5
    Copy to Clipboard Toggle word wrap
    1
    적용할 정책의 이름입니다.
    2
    업데이트할 클러스터 목록입니다.
    3
    maxConcurrency 필드는 동시에 업데이트되는 클러스터 수를 나타냅니다.
    4
    업데이트 시간 제한(분)입니다.
    5
    일괄 처리가 시간 초과되는 경우 발생하는 작업을 제어합니다. 가능한 값은 abort 또는 continue입니다 . 지정하지 않으면 기본값은 continue 입니다.
  2. 다음 명령을 실행하여 ClusterGroupUpgrade CR을 만듭니다.

    $ oc create -f cgu-1.yaml
    Copy to Clipboard Toggle word wrap
    1. 다음 명령을 실행하여 허브 클러스터에 ClusterGroupUpgrade CR이 생성되었는지 확인하세요.

      $ oc get cgu --all-namespaces
      Copy to Clipboard Toggle word wrap

      출력 예

      NAMESPACE   NAME  AGE  STATE      DETAILS
      default     cgu-1 8m55 NotEnabled Not Enabled
      Copy to Clipboard Toggle word wrap

    2. 다음 명령을 실행하여 업데이트 상태를 확인하세요.

      $ oc get cgu -n default cgu-1 -ojsonpath='{.status}' | jq
      Copy to Clipboard Toggle word wrap

      출력 예

      {
        "computedMaxConcurrency": 2,
        "conditions": [
          {
            "lastTransitionTime": "2022-02-25T15:34:07Z",
            "message": "Not enabled", 
      1
      
            "reason": "NotEnabled",
            "status": "False",
            "type": "Progressing"
          }
        ],
        "managedPoliciesContent": {
          "policy1-common-cluster-version-policy": "null",
          "policy2-common-nto-sub-policy": "[{\"kind\":\"Subscription\",\"name\":\"node-tuning-operator\",\"namespace\":\"openshift-cluster-node-tuning-operator\"}]",
          "policy3-common-ptp-sub-policy": "[{\"kind\":\"Subscription\",\"name\":\"ptp-operator-subscription\",\"namespace\":\"openshift-ptp\"}]",
          "policy4-common-sriov-sub-policy": "[{\"kind\":\"Subscription\",\"name\":\"sriov-network-operator-subscription\",\"namespace\":\"openshift-sriov-network-operator\"}]"
        },
        "managedPoliciesForUpgrade": [
          {
            "name": "policy1-common-cluster-version-policy",
            "namespace": "default"
          },
          {
            "name": "policy2-common-nto-sub-policy",
            "namespace": "default"
          },
          {
            "name": "policy3-common-ptp-sub-policy",
            "namespace": "default"
          },
          {
            "name": "policy4-common-sriov-sub-policy",
            "namespace": "default"
          }
        ],
        "managedPoliciesNs": {
          "policy1-common-cluster-version-policy": "default",
          "policy2-common-nto-sub-policy": "default",
          "policy3-common-ptp-sub-policy": "default",
          "policy4-common-sriov-sub-policy": "default"
        },
        "placementBindings": [
          "cgu-policy1-common-cluster-version-policy",
          "cgu-policy2-common-nto-sub-policy",
          "cgu-policy3-common-ptp-sub-policy",
          "cgu-policy4-common-sriov-sub-policy"
        ],
        "placementRules": [
          "cgu-policy1-common-cluster-version-policy",
          "cgu-policy2-common-nto-sub-policy",
          "cgu-policy3-common-ptp-sub-policy",
          "cgu-policy4-common-sriov-sub-policy"
        ],
        "remediationPlan": [
          [
            "spoke1",
            "spoke2"
          ],
          [
            "spoke5",
            "spoke6"
          ]
        ],
        "status": {}
      }
      Copy to Clipboard Toggle word wrap

      1
      ClusterGroupUpgrade CR의 spec.enable 필드가 false 로 설정되었습니다.
  3. 다음 명령을 실행하여 spec.enable 필드의 값을 true 로 변경합니다.

    $ oc --namespace=default patch clustergroupupgrade.ran.openshift.io/cgu-1 \
    --patch '{"spec":{"enable":true}}' --type=merge
    Copy to Clipboard Toggle word wrap

검증

  1. 다음 명령을 실행하여 업데이트 상태를 확인하세요.

    $ oc get cgu -n default cgu-1 -ojsonpath='{.status}' | jq
    Copy to Clipboard Toggle word wrap

    출력 예

    {
      "computedMaxConcurrency": 2,
      "conditions": [ 
    1
    
        {
          "lastTransitionTime": "2022-02-25T15:33:07Z",
          "message": "All selected clusters are valid",
          "reason": "ClusterSelectionCompleted",
          "status": "True",
          "type": "ClustersSelected"
        },
        {
          "lastTransitionTime": "2022-02-25T15:33:07Z",
          "message": "Completed validation",
          "reason": "ValidationCompleted",
          "status": "True",
          "type": "Validated"
        },
        {
          "lastTransitionTime": "2022-02-25T15:34:07Z",
          "message": "Remediating non-compliant policies",
          "reason": "InProgress",
          "status": "True",
          "type": "Progressing"
        }
      ],
      "managedPoliciesContent": {
        "policy1-common-cluster-version-policy": "null",
        "policy2-common-nto-sub-policy": "[{\"kind\":\"Subscription\",\"name\":\"node-tuning-operator\",\"namespace\":\"openshift-cluster-node-tuning-operator\"}]",
        "policy3-common-ptp-sub-policy": "[{\"kind\":\"Subscription\",\"name\":\"ptp-operator-subscription\",\"namespace\":\"openshift-ptp\"}]",
        "policy4-common-sriov-sub-policy": "[{\"kind\":\"Subscription\",\"name\":\"sriov-network-operator-subscription\",\"namespace\":\"openshift-sriov-network-operator\"}]"
      },
      "managedPoliciesForUpgrade": [
        {
          "name": "policy1-common-cluster-version-policy",
          "namespace": "default"
        },
        {
          "name": "policy2-common-nto-sub-policy",
          "namespace": "default"
        },
        {
          "name": "policy3-common-ptp-sub-policy",
          "namespace": "default"
        },
        {
          "name": "policy4-common-sriov-sub-policy",
          "namespace": "default"
        }
      ],
      "managedPoliciesNs": {
        "policy1-common-cluster-version-policy": "default",
        "policy2-common-nto-sub-policy": "default",
        "policy3-common-ptp-sub-policy": "default",
        "policy4-common-sriov-sub-policy": "default"
      },
      "placementBindings": [
        "cgu-policy1-common-cluster-version-policy",
        "cgu-policy2-common-nto-sub-policy",
        "cgu-policy3-common-ptp-sub-policy",
        "cgu-policy4-common-sriov-sub-policy"
      ],
      "placementRules": [
        "cgu-policy1-common-cluster-version-policy",
        "cgu-policy2-common-nto-sub-policy",
        "cgu-policy3-common-ptp-sub-policy",
        "cgu-policy4-common-sriov-sub-policy"
      ],
      "remediationPlan": [
        [
          "spoke1",
          "spoke2"
        ],
        [
          "spoke5",
          "spoke6"
        ]
      ],
      "status": {
        "currentBatch": 1,
        "currentBatchRemediationProgress": {
           "spoke1": {
              "policyIndex": 1,
              "state": "InProgress"
           },
           "spoke2": {
              "policyIndex": 1,
              "state": "InProgress"
           }
        },
        "currentBatchStartedAt": "2022-02-25T15:54:16Z",
        "startedAt": "2022-02-25T15:54:16Z"
      }
    }
    Copy to Clipboard Toggle word wrap

    1
    현재 배치의 업데이트 진행 상황을 반영합니다. 진행 상황에 대한 최신 정보를 받으려면 이 명령을 다시 실행하세요.
  2. 다음 명령을 실행하여 정책 상태를 확인하세요.

    oc get policies -A
    Copy to Clipboard Toggle word wrap

    출력 예

    NAMESPACE   NAME                                        REMEDIATION ACTION    COMPLIANCE STATE     AGE
    spoke1    default.policy1-common-cluster-version-policy enforce               Compliant            18m
    spoke1    default.policy2-common-nto-sub-policy         enforce               NonCompliant         18m
    spoke2    default.policy1-common-cluster-version-policy enforce               Compliant            18m
    spoke2    default.policy2-common-nto-sub-policy         enforce               NonCompliant         18m
    spoke5    default.policy3-common-ptp-sub-policy         inform                NonCompliant         18m
    spoke5    default.policy4-common-sriov-sub-policy       inform                NonCompliant         18m
    spoke6    default.policy3-common-ptp-sub-policy         inform                NonCompliant         18m
    spoke6    default.policy4-common-sriov-sub-policy       inform                NonCompliant         18m
    default   policy1-common-ptp-sub-policy                 inform                Compliant            18m
    default   policy2-common-sriov-sub-policy               inform                NonCompliant         18m
    default   policy3-common-ptp-sub-policy                 inform                NonCompliant         18m
    default   policy4-common-sriov-sub-policy               inform                NonCompliant         18m
    Copy to Clipboard Toggle word wrap

    • spec.remediationAction 값은 현재 배치의 클러스터에 적용된 자식 정책에 적용되도록 변경됩니다.
    • spec.remedationAction 값은 나머지 클러스터의 자식 정책에 대한 정보를 제공합니다 .
    • 배치가 완료되면 spec.remediationAction 값이 다시 변경되어 적용된 자식 정책에 대한 정보를 알려줍니다 .
  3. 정책에 운영자 구독이 포함되어 있는 경우 단일 노드 클러스터에서 직접 설치 진행 상황을 확인할 수 있습니다.

    1. 다음 명령을 실행하여 설치 진행 상황을 확인하려는 단일 노드 클러스터의 KUBECONFIG 파일을 내보냅니다.

      $ export KUBECONFIG=<cluster_kubeconfig_absolute_path>
      Copy to Clipboard Toggle word wrap
    2. 다음 명령을 실행하여 단일 노드 클러스터에 있는 모든 구독을 확인하고 ClusterGroupUpgrade CR을 통해 설치하려는 정책에서 해당 구독을 찾으세요.

      $ oc get subs -A | grep -i <subscription_name>
      Copy to Clipboard Toggle word wrap

      클러스터 로깅 정책에 대한 예시 출력

      NAMESPACE                              NAME                         PACKAGE                      SOURCE             CHANNEL
      openshift-logging                      cluster-logging              cluster-logging              redhat-operators   stable
      Copy to Clipboard Toggle word wrap

  4. 관리되는 정책 중 하나에 ClusterVersion CR이 포함된 경우 스포크 클러스터에 대해 다음 명령을 실행하여 현재 배치의 플랫폼 업데이트 상태를 확인합니다.

    $ oc get clusterversion
    Copy to Clipboard Toggle word wrap

    출력 예

    NAME      VERSION   AVAILABLE   PROGRESSING   SINCE   STATUS
    version   4.4.19.5     True        True          43s     Working towards 4.4.19.7: 71 of 735 done (9% complete)
    Copy to Clipboard Toggle word wrap

  5. 다음 명령을 실행하여 Operator 구독을 확인하세요.

    $ oc get subs -n <operator-namespace> <operator-subscription> -ojsonpath="{.status}"
    Copy to Clipboard Toggle word wrap
  6. 다음 명령을 실행하여 원하는 구독과 연결된 단일 노드 클러스터에 있는 설치 계획을 확인하세요.

    $ oc get installplan -n <subscription_namespace>
    Copy to Clipboard Toggle word wrap

    클러스터 로깅 연산자에 대한 예제 출력

    NAMESPACE                              NAME            CSV                                 APPROVAL   APPROVED
    openshift-logging                      install-6khtw   cluster-logging.5.3.3-4             Manual     true 
    1
    Copy to Clipboard Toggle word wrap

    1
    설치 계획의 승인 필드는 수동 으로 설정되어 있으며, TALM에서 설치 계획을 승인한 후에는 승인 필드가 false 에서 true 로 변경됩니다.
    참고

    TALM이 구독이 포함된 정책을 수정할 경우 해당 구독에 연결된 모든 설치 계획을 자동으로 승인합니다. 운영자에게 최신 알려진 버전을 제공하기 위해 여러 설치 계획이 필요한 경우 TALM은 여러 설치 계획을 승인하고 하나 이상의 중간 버전을 거쳐 업그레이드하여 최종 버전을 얻을 수 있습니다.

  7. ClusterGroupUpgrade가 설치하는 정책의 운영자에 대한 클러스터 서비스 버전이 성공 단계에 도달했는지 확인하려면 다음 명령을 실행하세요.

    $ oc get csv -n <operator_namespace>
    Copy to Clipboard Toggle word wrap

    OpenShift 로깅 연산자에 대한 예제 출력

    NAME                    DISPLAY                     VERSION   REPLACES   PHASE
    cluster-logging.v6.2.1  Red Hat OpenShift Logging   6.2.1                Succeeded
    Copy to Clipboard Toggle word wrap

12.7. 컨테이너 이미지 사전 캐시 기능 사용

단일 노드 OpenShift 클러스터는 컨테이너 이미지 레지스트리에 액세스하는 데 대역폭이 제한될 수 있으며, 이로 인해 업데이트가 완료되기 전에 시간 초과가 발생할 수 있습니다.

참고

업데이트 시간은 TALM에서 설정하지 않습니다. ClusterGroupUpgrade CR은 수동 적용이나 외부 자동화를 통해 업데이트 시작 시 적용할 수 있습니다.

컨테이너 이미지 사전 캐싱은 ClusterGroupUpgrade CR에서 preCaching 필드가 true 로 설정되면 시작됩니다.

TALM은 PrecacheSpecValid 조건을 사용하여 다음과 같이 상태 정보를 보고합니다.

  • true

    사전 캐싱 사양은 유효하고 일관성이 있습니다.

  • false

    사전 캐싱 사양이 완전하지 않습니다.

TALM은 PrecachingSucceeded 조건을 사용하여 다음과 같이 상태 정보를 보고합니다.

  • true

    TALM은 사전 캐싱 프로세스를 완료했습니다. 어떤 클러스터에서 사전 캐싱이 실패하면 해당 클러스터의 업데이트는 실패하지만 다른 모든 클러스터의 업데이트는 진행됩니다. 클러스터에 대한 사전 캐싱이 실패한 경우 이를 알려주는 메시지가 표시됩니다.

  • false

    하나 이상의 클러스터에 대한 사전 캐싱이 아직 진행 중이거나 모든 클러스터에 대해 실패했습니다.

사전 캐싱 프로세스가 성공적으로 완료되면 정책 수정을 시작할 수 있습니다. 수정 작업은 enable 필드가 true 로 설정되면 시작됩니다. 클러스터에서 사전 캐싱 오류가 발생하면 해당 클러스터의 업그레이드가 실패합니다. 사전 캐시가 성공적으로 완료된 다른 모든 클러스터에 대한 업그레이드 프로세스가 계속됩니다.

사전 캐싱 프로세스는 다음 상태일 수 있습니다.

  • NotStarted

    이는 ClusterGroupUpgrade CR의 첫 번째 조정 단계에서 모든 클러스터가 자동으로 할당되는 초기 상태입니다. 이 상태에서 TALM은 이전의 완료되지 않은 업데이트에서 남아 있는 스포크 클러스터의 사전 캐싱 네임스페이스 및 허브 뷰 리소스를 삭제합니다. 그런 다음 TALM은 스포크 사전 캐싱 네임스페이스에 대한 새 ManagedClusterView 리소스를 만들어 PrecachePreparing 상태에서 삭제를 확인합니다.

  • PreparingToStart

    이전에 완료되지 않은 업데이트로 인해 남아 있는 리소스를 정리하는 작업이 진행 중입니다.

  • Starting

    사전 캐싱 작업 전제 조건이 충족되고 작업이 생성됩니다.

  • 활성

    작업이 "활성" 상태입니다.

  • 성공했다

    사전 캐시 작업이 성공했습니다.

  • PrecacheTimeout

    아티팩트 사전 캐싱이 부분적으로 완료되었습니다.

  • UnrecoverableError

    작업이 0이 아닌 종료 코드로 종료됩니다.

12.7.1. 컨테이너 이미지 사전 캐시 필터 사용

사전 캐시 기능은 일반적으로 클러스터가 업데이트에 필요한 것보다 더 많은 이미지를 다운로드합니다. 어떤 사전 캐시 이미지를 클러스터에 다운로드할지 제어할 수 있습니다. 이렇게 하면 다운로드 시간이 줄어들고 대역폭과 저장 공간도 절약됩니다.

다음 명령을 사용하면 다운로드할 수 있는 모든 이미지 목록을 볼 수 있습니다.

$ oc adm release info <ocp-version>
Copy to Clipboard Toggle word wrap

다음 ConfigMap 예제는 excludePrecachePatterns 필드를 사용하여 이미지를 제외하는 방법을 보여줍니다.

apiVersion: v1
kind: ConfigMap
metadata:
  name: cluster-group-upgrade-overrides
data:
  excludePrecachePatterns: |
    azure 
1

    aws
    vsphere
    alibaba
Copy to Clipboard Toggle word wrap
1
TALM에서는 여기에 나열된 패턴 중 하나라도 포함된 이름을 가진 모든 이미지를 제외합니다.

12.7.2. 사전 캐싱을 사용하여 ClusterGroupUpgrade CR 만들기

단일 노드 OpenShift의 경우 사전 캐시 기능을 사용하면 업데이트가 시작되기 전에 필요한 컨테이너 이미지가 스포크 클러스터에 존재하도록 할 수 있습니다.

참고

사전 캐싱의 경우 TALM은 ClusterGroupUpgrade CR의 spec.remediationStrategy.timeout 값을 사용합니다. 사전 캐싱 작업이 완료될 수 있도록 충분한 시간을 허용하는 시간 초과 값을 설정해야 합니다. 사전 캐싱이 완료된 후 ClusterGroupUpgrade CR을 활성화하면 업데이트에 적합한 기간으로 시간 초과 값을 변경할 수 있습니다.

사전 요구 사항

  • TALM(Topology Aware Lifecycle Manager)을 설치합니다.
  • 하나 이상의 관리형 클러스터를 프로비저닝합니다.
  • cluster-admin 권한이 있는 사용자로 로그인합니다.

프로세스

  1. clustergroupupgrades-group-du.yaml 파일에서 preCaching 필드를 true 로 설정하여 ClusterGroupUpgrade CR의 내용을 저장합니다.

    apiVersion: ran.openshift.io/v1alpha1
    kind: ClusterGroupUpgrade
    metadata:
      name: du-upgrade-4918
      namespace: ztp-group-du-sno
    spec:
      preCaching: true 
    1
    
      clusters:
      - cnfdb1
      - cnfdb2
      enable: false
      managedPolicies:
      - du-upgrade-platform-upgrade
      remediationStrategy:
        maxConcurrency: 2
        timeout: 240
    Copy to Clipboard Toggle word wrap
    1
    preCaching 필드가 true 로 설정되어 TALM이 업데이트를 시작하기 전에 컨테이너 이미지를 가져올 수 있습니다.
  2. 사전 캐싱을 시작하려면 다음 명령을 실행하여 ClusterGroupUpgrade CR을 적용하세요.

    $ oc apply -f clustergroupupgrades-group-du.yaml
    Copy to Clipboard Toggle word wrap

검증

  1. 다음 명령을 실행하여 Hub 클러스터에 ClusterGroupUpgrade CR이 있는지 확인합니다.

    $ oc get cgu -A
    Copy to Clipboard Toggle word wrap

    출력 예

    NAMESPACE          NAME              AGE   STATE        DETAILS
    ztp-group-du-sno   du-upgrade-4918   10s   InProgress   Precaching is required and not done 
    1
    Copy to Clipboard Toggle word wrap

    1
    CR이 생성됩니다.
  2. 다음 명령을 실행하여 사전 캐싱 작업의 상태를 확인하세요.

    $ oc get cgu -n ztp-group-du-sno du-upgrade-4918 -o jsonpath='{.status}'
    Copy to Clipboard Toggle word wrap

    출력 예

    {
      "conditions": [
        {
          "lastTransitionTime": "2022-01-27T19:07:24Z",
          "message": "Precaching is required and not done",
          "reason": "InProgress",
          "status": "False",
          "type": "PrecachingSucceeded"
        },
        {
          "lastTransitionTime": "2022-01-27T19:07:34Z",
          "message": "Pre-caching spec is valid and consistent",
          "reason": "PrecacheSpecIsWellFormed",
          "status": "True",
          "type": "PrecacheSpecValid"
        }
      ],
      "precaching": {
        "clusters": [
          "cnfdb1" 
    1
    
          "cnfdb2"
        ],
        "spec": {
          "platformImage": "image.example.io"},
        "status": {
          "cnfdb1": "Active"
          "cnfdb2": "Succeeded"}
        }
    }
    Copy to Clipboard Toggle word wrap

    1
    식별된 클러스터 목록을 표시합니다.
  3. 스포크 클러스터에서 다음 명령을 실행하여 사전 캐싱 작업의 상태를 확인하세요.

    $ oc get jobs,pods -n openshift-talo-pre-cache
    Copy to Clipboard Toggle word wrap

    출력 예

    NAME                  COMPLETIONS   DURATION   AGE
    job.batch/pre-cache   0/1           3m10s      3m10s
    
    NAME                     READY   STATUS    RESTARTS   AGE
    pod/pre-cache--1-9bmlr   1/1     Running   0          3m10s
    Copy to Clipboard Toggle word wrap

  4. 다음 명령을 실행하여 ClusterGroupUpgrade CR의 상태를 확인하세요.

    $ oc get cgu -n ztp-group-du-sno du-upgrade-4918 -o jsonpath='{.status}'
    Copy to Clipboard Toggle word wrap

    출력 예

    "conditions": [
        {
          "lastTransitionTime": "2022-01-27T19:30:41Z",
          "message": "The ClusterGroupUpgrade CR has all clusters compliant with all the managed policies",
          "reason": "UpgradeCompleted",
          "status": "True",
          "type": "Ready"
        },
        {
          "lastTransitionTime": "2022-01-27T19:28:57Z",
          "message": "Precaching is completed",
          "reason": "PrecachingCompleted",
          "status": "True",
          "type": "PrecachingSucceeded" 
    1
    
        }
    Copy to Clipboard Toggle word wrap

    1
    사전 캐시 작업이 완료되었습니다.

12.8. Topology Aware Lifecycle Manager 문제 해결

TALM(Topology Aware Lifecycle Manager)은 RHACM 정책을 수정하는 OpenShift 컨테이너 플랫폼 운영자입니다. 문제가 발생하면 oc adm must-gather 명령을 사용하여 세부 정보와 로그를 수집하고 문제 디버깅 단계를 수행합니다.

관련 주제에 대한 자세한 내용은 다음 문서를 참조하세요.

12.8.1. 일반 문제 해결

다음 질문을 검토하여 문제의 원인을 파악할 수 있습니다.

ClusterGroupUpgrade 구성이 작동하는지 확인하려면 다음을 수행할 수 있습니다.

  1. spec.enable 필드를 false 로 설정하여 ClusterGroupUpgrade CR을 만듭니다.
  2. 상태가 업데이트될 때까지 기다렸다가 문제 해결 질문을 살펴보세요.
  3. 모든 것이 예상대로라면 ClusterGroupUpgrade CR에서 spec.enable 필드를 true 로 설정합니다.
주의

ClusterUpgradeGroup CR에서 spec.enable 필드를 true 로 설정하면 업데이트 절차가 시작되고 더 이상 CR의 spec 필드를 편집할 수 없습니다.

12.8.2. ClusterUpgradeGroup CR을 수정할 수 없습니다.

문제
업데이트를 활성화한 후에는 ClusterUpgradeGroup CR을 편집할 수 없습니다.
해결

다음 단계를 수행하여 절차를 다시 시작하세요.

  1. 다음 명령을 실행하여 이전 ClusterGroupUpgrade CR을 제거합니다.

    $ oc delete cgu -n <ClusterGroupUpgradeCR_namespace> <ClusterGroupUpgradeCR_name>
    Copy to Clipboard Toggle word wrap
  2. 관리되는 클러스터와 정책의 기존 문제를 확인하고 수정합니다.

    1. 모든 클러스터가 관리되는 클러스터이고 사용 가능한지 확인하세요.
    2. 모든 정책이 존재하는지 확인하고 spec.remediationAction 필드가 inform 으로 설정되어 있는지 확인하세요.
  3. 올바른 구성으로 새 ClusterGroupUpgrade CR을 만듭니다.

    $ oc apply -f <ClusterGroupUpgradeCR_YAML>
    Copy to Clipboard Toggle word wrap

12.8.3. 관리되는 정책

시스템에서 관리되는 정책 확인
문제
시스템에 올바른 관리 정책이 있는지 확인하고 싶습니다.
해결

다음 명령을 실행합니다.

$ oc get cgu lab-upgrade -ojsonpath='{.spec.managedPolicies}'
Copy to Clipboard Toggle word wrap

출력 예

["group-du-sno-validator-du-validator-policy", "policy2-common-nto-sub-policy", "policy3-common-ptp-sub-policy"]
Copy to Clipboard Toggle word wrap

수정 작업 모드 확인
문제
관리되는 정책의 사양 에서 remediationAction 필드가 inform 으로 설정되어 있는지 확인하고 싶습니다.
해결

다음 명령을 실행합니다.

$ oc get policies --all-namespaces
Copy to Clipboard Toggle word wrap

출력 예

NAMESPACE   NAME                                                 REMEDIATION ACTION   COMPLIANCE STATE   AGE
default     policy1-common-cluster-version-policy                inform               NonCompliant       5d21h
default     policy2-common-nto-sub-policy                        inform               Compliant          5d21h
default     policy3-common-ptp-sub-policy                        inform               NonCompliant       5d21h
default     policy4-common-sriov-sub-policy                      inform               NonCompliant       5d21h
Copy to Clipboard Toggle word wrap

정책 준수 상태 확인
문제
정책의 규정 준수 상태를 확인하려고 합니다.
해결

다음 명령을 실행합니다.

$ oc get policies --all-namespaces
Copy to Clipboard Toggle word wrap

출력 예

NAMESPACE   NAME                                                 REMEDIATION ACTION   COMPLIANCE STATE   AGE
default     policy1-common-cluster-version-policy                inform               NonCompliant       5d21h
default     policy2-common-nto-sub-policy                        inform               Compliant          5d21h
default     policy3-common-ptp-sub-policy                        inform               NonCompliant       5d21h
default     policy4-common-sriov-sub-policy                      inform               NonCompliant       5d21h
Copy to Clipboard Toggle word wrap

12.8.4. 클러스터

관리되는 클러스터가 있는지 확인
문제
ClusterGroupUpgrade CR의 클러스터가 관리되는 클러스터인지 확인하고 싶습니다.
해결

다음 명령을 실행합니다.

$ oc get managedclusters
Copy to Clipboard Toggle word wrap

출력 예

NAME            HUB ACCEPTED   MANAGED CLUSTER URLS                    JOINED   AVAILABLE   AGE
local-cluster   true           https://api.hub.example.com:6443        True     Unknown     13d
spoke1          true           https://api.spoke1.example.com:6443     True     True        13d
spoke3          true           https://api.spoke3.example.com:6443     True     True        27h
Copy to Clipboard Toggle word wrap

  1. 또는 TALM 관리자 로그를 확인하세요.

    1. 다음 명령을 실행하여 TALM 관리자의 이름을 가져옵니다.

      $ oc get pod -n openshift-operators
      Copy to Clipboard Toggle word wrap

      출력 예

      NAME                                                         READY   STATUS    RESTARTS   AGE
      cluster-group-upgrades-controller-manager-75bcc7484d-8k8xp   2/2     Running   0          45m
      Copy to Clipboard Toggle word wrap

    2. 다음 명령을 실행하여 TALM 관리자 로그를 확인하세요.

      $ oc logs -n openshift-operators \
      cluster-group-upgrades-controller-manager-75bcc7484d-8k8xp -c manager
      Copy to Clipboard Toggle word wrap

      출력 예

      ERROR	controller-runtime.manager.controller.clustergroupupgrade	Reconciler error	{"reconciler group": "ran.openshift.io", "reconciler kind": "ClusterGroupUpgrade", "name": "lab-upgrade", "namespace": "default", "error": "Cluster spoke5555 is not a ManagedCluster"} 
      1
      
      sigs.k8s.io/controller-runtime/pkg/internal/controller.(*Controller).processNextWorkItem
      Copy to Clipboard Toggle word wrap

      1
      오류 메시지는 클러스터가 관리되는 클러스터가 아니라는 것을 보여줍니다.
관리되는 클러스터가 사용 가능한지 확인
문제
ClusterGroupUpgrade CR에 지정된 관리 클러스터를 사용할 수 있는지 확인하고 싶습니다.
해결

다음 명령을 실행합니다.

$ oc get managedclusters
Copy to Clipboard Toggle word wrap

출력 예

NAME            HUB ACCEPTED   MANAGED CLUSTER URLS                    JOINED   AVAILABLE   AGE
local-cluster   true           https://api.hub.testlab.com:6443        True     Unknown     13d
spoke1          true           https://api.spoke1.testlab.com:6443     True     True        13d 
1

spoke3          true           https://api.spoke3.testlab.com:6443     True     True        27h 
2
Copy to Clipboard Toggle word wrap

1 2
관리되는 클러스터의 경우 AVAILABLE 필드의 값은 True 입니다.
clusterLabelSelector 확인
문제
ClusterGroupUpgrade CR에 지정된 clusterLabelSelector 필드가 관리되는 클러스터 중 하나 이상과 일치하는지 확인하려고 합니다.
해결

다음 명령을 실행합니다.

$ oc get managedcluster --selector=upgrade=true 
1
Copy to Clipboard Toggle word wrap
1
업데이트하려는 클러스터의 레이블은 upgrade:true 입니다.

출력 예

NAME            HUB ACCEPTED   MANAGED CLUSTER URLS                     JOINED    AVAILABLE   AGE
spoke1          true           https://api.spoke1.testlab.com:6443      True     True        13d
spoke3          true           https://api.spoke3.testlab.com:6443      True     True        27h
Copy to Clipboard Toggle word wrap

카나리아 클러스터가 있는지 확인
문제

카나리아 클러스터가 클러스터 목록에 있는지 확인하고 싶습니다.

ClusterGroupUpgrade CR 예제

spec:
    remediationStrategy:
        canaries:
        - spoke3
        maxConcurrency: 2
        timeout: 240
    clusterLabelSelectors:
      - matchLabels:
          upgrade: true
Copy to Clipboard Toggle word wrap

해결

다음 명령을 실행하세요.

$ oc get cgu lab-upgrade -ojsonpath='{.spec.clusters}'
Copy to Clipboard Toggle word wrap

출력 예

["spoke1", "spoke3"]
Copy to Clipboard Toggle word wrap

  1. 다음 명령을 실행하여 clusterLabelSelector 레이블과 일치하는 클러스터 목록에 카나리아 클러스터가 있는지 확인하세요.

    $ oc get managedcluster --selector=upgrade=true
    Copy to Clipboard Toggle word wrap

    출력 예

    NAME            HUB ACCEPTED   MANAGED CLUSTER URLS   JOINED    AVAILABLE   AGE
    spoke1          true           https://api.spoke1.testlab.com:6443   True     True        13d
    spoke3          true           https://api.spoke3.testlab.com:6443   True     True        27h
    Copy to Clipboard Toggle word wrap

참고

클러스터는 spec.clusters 에 존재할 수 있으며 spec.clusterLabelSelector 레이블과 일치할 수도 있습니다.

스포크 클러스터의 사전 캐싱 상태 확인
  1. 스포크 클러스터에서 다음 명령을 실행하여 사전 캐싱 상태를 확인하세요.

    $ oc get jobs,pods -n openshift-talo-pre-cache
    Copy to Clipboard Toggle word wrap

12.8.5. 교정 전략

ClusterGroupUpgrade CR에 remediationStrategy가 있는지 확인
문제
ClusterGroupUpgrade CR에 remediationStrategy 가 있는지 확인하고 싶습니다.
해결

다음 명령을 실행합니다.

$ oc get cgu lab-upgrade -ojsonpath='{.spec.remediationStrategy}'
Copy to Clipboard Toggle word wrap

출력 예

{"maxConcurrency":2, "timeout":240}
Copy to Clipboard Toggle word wrap

ClusterGroupUpgrade CR에 maxConcurrency가 지정되었는지 확인
문제
ClusterGroupUpgrade CR에 maxConcurrency 가 지정되어 있는지 확인하고 싶습니다.
해결

다음 명령을 실행합니다.

$ oc get cgu lab-upgrade -ojsonpath='{.spec.remediationStrategy.maxConcurrency}'
Copy to Clipboard Toggle word wrap

출력 예

2
Copy to Clipboard Toggle word wrap

12.8.6. 토폴로지 인식 라이프사이클 관리자

ClusterGroupUpgrade CR에서 조건 메시지 및 상태 확인
문제
ClusterGroupUpgrade CR의 status.conditions 필드 값을 확인하고 싶습니다.
해결

다음 명령을 실행합니다.

$ oc get cgu lab-upgrade -ojsonpath='{.status.conditions}'
Copy to Clipboard Toggle word wrap

출력 예

{"lastTransitionTime":"2022-02-17T22:25:28Z", "message":"Missing managed policies:[policyList]", "reason":"NotAllManagedPoliciesExist", "status":"False", "type":"Validated"}
Copy to Clipboard Toggle word wrap

status.remediationPlan이 계산되었는지 확인
문제
status.remediationPlan 이 계산되었는지 확인하고 싶습니다.
해결

다음 명령을 실행합니다.

$ oc get cgu lab-upgrade -ojsonpath='{.status.remediationPlan}'
Copy to Clipboard Toggle word wrap

출력 예

[["spoke2", "spoke3"]]
Copy to Clipboard Toggle word wrap

TALM 관리자 컨테이너의 오류
문제
TALM의 관리자 컨테이너 로그를 확인하고 싶습니다.
해결

다음 명령을 실행합니다.

$ oc logs -n openshift-operators \
cluster-group-upgrades-controller-manager-75bcc7484d-8k8xp -c manager
Copy to Clipboard Toggle word wrap

출력 예

ERROR	controller-runtime.manager.controller.clustergroupupgrade	Reconciler error	{"reconciler group": "ran.openshift.io", "reconciler kind": "ClusterGroupUpgrade", "name": "lab-upgrade", "namespace": "default", "error": "Cluster spoke5555 is not a ManagedCluster"} 
1

sigs.k8s.io/controller-runtime/pkg/internal/controller.(*Controller).processNextWorkItem
Copy to Clipboard Toggle word wrap

1
오류를 표시합니다.
ClusterGroupUpgrade CR이 완료된 후 클러스터가 일부 정책을 준수하지 않습니다.
문제

TALM이 수정이 필요한지 여부를 결정하는 데 사용하는 정책 준수 상태는 아직 모든 클러스터에 대해 완전히 업데이트되지 않았습니다. 그 이유는 다음과 같습니다.

  • 정책이 생성되거나 업데이트된 후 CGU가 너무 빨리 실행되었습니다.
  • 정책 수정은 ClusterGroupUpgrade CR의 후속 정책 준수에 영향을 미칩니다.
해결
동일한 사양으로 새로운 ClusterGroupUpdate CR을 만들고 적용합니다.
GitOps ZTP 워크플로에서 자동 생성된 ClusterGroupUpgrade CR에는 관리되는 정책이 없습니다.
문제
클러스터가 준비 상태가 될 때 관리되는 클러스터에 대한 정책이 없으면 정책이 없는 ClusterGroupUpgrade CR이 자동으로 생성됩니다. ClusterGroupUpgrade CR이 완료되면 관리되는 클러스터에 ztp-done 이라는 레이블이 지정됩니다. SiteConfig 리소스가 푸시된 후 필요한 시간 내에 PolicyGenerator 또는 PolicyGenTemplate CR이 Git 저장소에 푸시되지 않으면 클러스터가 Ready 상태가 되었을 때 대상 클러스터에 사용할 수 있는 정책이 없을 수 있습니다.
해결
적용하려는 정책이 허브 클러스터에서 사용 가능한지 확인한 다음, 필요한 정책으로 ClusterGroupUpgrade CR을 만듭니다.

ClusterGroupUpgrade CR을 수동으로 생성하거나 자동 생성을 다시 트리거할 수 있습니다. ClusterGroupUpgrade CR의 자동 생성을 트리거하려면 클러스터에서 ztp-done 레이블을 제거하고 이전에 zip-install 네임스페이스에 생성된 빈 ClusterGroupUpgrade CR을 삭제합니다.

사전 캐싱에 실패했습니다
문제

사전 캐싱은 다음 중 하나의 이유로 실패할 수 있습니다.

  • 노드에 사용 가능한 공간이 충분하지 않습니다.
  • 연결이 끊긴 환경에서는 사전 캐시 이미지가 제대로 미러링되지 않았습니다.
  • 포드를 생성하는 중에 문제가 발생했습니다.
해결
  1. 사전 캐싱이 공간 부족으로 인해 실패했는지 확인하려면 노드의 사전 캐싱 포드 로그를 확인하세요.

    1. 다음 명령을 사용하여 포드의 이름을 찾으세요.

      $ oc get pods -n openshift-talo-pre-cache
      Copy to Clipboard Toggle word wrap
    2. 다음 명령을 사용하여 오류가 공간 부족과 관련이 있는지 로그를 확인하세요.

      $ oc logs -n openshift-talo-pre-cache <pod name>
      Copy to Clipboard Toggle word wrap
  2. 로그가 없으면 다음 명령을 사용하여 Pod 상태를 확인하세요.

    $ oc describe pod -n openshift-talo-pre-cache <pod name>
    Copy to Clipboard Toggle word wrap
  3. 포드가 존재하지 않으면 다음 명령을 사용하여 작업 상태를 확인하여 포드를 생성할 수 없는 이유를 알아보세요.

    $ oc describe job -n openshift-talo-pre-cache pre-cache
    Copy to Clipboard Toggle word wrap
관리형 클러스터가 사용 가능해지기 전에 일치하는 정책 및 ManagedCluster CR
문제
관리형 클러스터가 사용 가능해지기 전에 RHACM이 정책과 관리형 클러스터를 일치시키도록 해야 합니다.
해결

TALM이 ClusterGroupUpgrade (CGU) CR의 spec.managedPolicies 필드에 지정된 RHACM 정책을 올바르게 적용하도록 하려면 TALM이 관리형 클러스터를 사용할 수 있기 전에 이러한 정책을 관리형 클러스터와 일치시켜야 합니다. RHACM PolicyGenerator는 생성된 배치 CR을 사용하여 이를 자동으로 수행합니다. 기본적으로 이 배치 CR에는 적절한 TALM 동작을 보장하는 데 필요한 허용 범위가 포함되어 있습니다.

배치 CR에서 예상되는 spec.tolerations 설정은 다음과 같습니다.

#…​
  tolerations:
    - key: cluster.open-cluster-management.io/unavailable
     operator: Exists
    - key: cluster.open-cluster-management.io/unreachable
     operator: Exists
#…​
Copy to Clipboard Toggle word wrap

RHACM PolicyGenerator 에서 생성된 CR 대신 사용자 지정 배치 CR을 사용하는 경우 해당 배치 CR에 이러한 허용 범위를 포함합니다.

RHACM 배치에 대한 자세한 내용은 배치 개요를 참조하세요.

RHACM의 허용 오차에 대한 자세한 내용은 테인트 및 허용 오차를 사용하여 관리 클러스터 배치를 참조하십시오.

13장. GitOps ZTP를 사용하여 단일 노드 OpenShift 클러스터 확장

GitOps Zero Touch Provisioning(ZTP)을 사용하면 단일 노드 OpenShift 클러스터를 확장할 수 있습니다. 단일 노드 OpenShift 클러스터에 워커 노드를 추가하면 원래 단일 노드 OpenShift 클러스터가 제어 평면 노드 역할을 유지합니다. 워커 노드를 추가해도 기존 단일 노드 OpenShift 클러스터에 다운타임이 발생하지 않습니다.

참고

단일 노드 OpenShift 클러스터에 추가할 수 있는 워커 노드 수에는 지정된 제한이 없지만, 추가되는 워커 노드에 대한 제어 플레인 노드에서 예약된 CPU 할당을 다시 평가해야 합니다.

워커 노드에서 워크로드 분할이 필요한 경우 노드를 설치하기 전에 허브 클러스터에서 관리되는 클러스터 정책을 배포하고 수정해야 합니다. 이런 방식으로, GitOps ZTP 워크플로가 MachineConfig 점화 파일을 워커 노드에 적용하기 전에 워크로드 분할 MachineConfig 객체가 렌더링되어 워커 머신 구성 풀과 연결됩니다.

먼저 정책을 수정한 다음 작업자 노드를 설치하는 것이 좋습니다. 워커 노드를 설치한 후 워크로드 분할 매니페스트를 생성하는 경우 노드를 수동으로 비우고 데몬 세트에서 관리하는 모든 포드를 삭제해야 합니다. 관리 데몬 세트가 새로운 포드를 생성하면, 새로운 포드는 작업 분할 프로세스를 거칩니다.

중요

GitOps ZTP를 사용하여 단일 노드 OpenShift 클러스터에 워커 노드를 추가하는 것은 기술 미리 보기 기능에 불과합니다. 기술 프리뷰 기능은 Red Hat 프로덕션 서비스 수준 계약(SLA)에서 지원되지 않으며 기능적으로 완전하지 않을 수 있습니다. 따라서 프로덕션 환경에서 사용하는 것은 권장하지 않습니다. 이러한 기능을 사용하면 향후 제품 기능을 조기에 이용할 수 있어 개발 과정에서 고객이 기능을 테스트하고 피드백을 제공할 수 있습니다.

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

DU 프로필을 사용하여 추가 작업자 노드를 구성할 수 있습니다.

GitOps Zero Touch Provisioning(ZTP) 공통, 그룹 및 사이트별 PolicyGenerator 또는 PolicyGenTemplate 리소스를 사용하여 워커 노드 클러스터에 RAN 분산 유닛(DU) 프로필을 적용할 수 있습니다. ArgoCD 정책 애플리케이션에 연결된 GitOps ZTP 파이프라인에는 ztp-site-generate 컨테이너를 추출하면 해당 out/argocd/example 폴더에서 찾을 수 있는 다음 CR이 포함되어 있습니다.

/acmpolicygenerator 리소스
  • acm-common-ranGen.yaml
  • acm-group-du-sno-ranGen.yaml
  • acm-example-sno-site.yaml
  • ns.yaml
  • kustomization.yaml
/policygentemplates resources
  • common-ranGen.yaml
  • group-du-sno-ranGen.yaml
  • example-sno-site.yaml
  • ns.yaml
  • kustomization.yaml

워커 노드에서 DU 프로필을 구성하는 것은 업그레이드로 간주됩니다. 업그레이드 흐름을 시작하려면 기존 정책을 업데이트하거나 추가 정책을 만들어야 합니다. 그런 다음 클러스터 그룹의 정책을 조정하기 위해 ClusterGroupUpgrade CR을 만들어야 합니다.

13.2. PTP 및 SR-IOV 데몬 선택기 호환성 보장

DU 프로필이 GitOps Zero Touch Provisioning(ZTP) 플러그인 버전 4.11 이하를 사용하여 배포된 경우 PTP 및 SR-IOV 운영자는 마스터 로 레이블이 지정된 노드에만 데몬을 배치하도록 구성될 수 있습니다. 이 구성을 사용하면 PTP 및 SR-IOV 데몬이 워커 노드에서 작동하지 않습니다. 시스템에서 PTP 및 SR-IOV 데몬 노드 선택기가 잘못 구성된 경우 작업자 DU 프로필 구성을 진행하기 전에 데몬을 변경해야 합니다.

프로세스

  1. 스포크 클러스터 중 하나에서 PTP 운영자의 데몬 노드 선택기 설정을 확인하세요.

    $ oc get ptpoperatorconfig/default -n openshift-ptp -ojsonpath='{.spec}' | jq
    Copy to Clipboard Toggle word wrap

    PTP 운영자에 대한 출력 예

    {"daemonNodeSelector":{"node-role.kubernetes.io/master":""}} 
    1
    Copy to Clipboard Toggle word wrap

    1
    노드 선택기가 마스터 로 설정된 경우, 스포크는 변경이 필요한 GitOps ZTP 플러그인 버전으로 배포되었습니다.
  2. 스포크 클러스터 중 하나에서 SR-IOV 운영자의 데몬 노드 선택기 설정을 확인하세요.

    $  oc get sriovoperatorconfig/default -n \
    openshift-sriov-network-operator -ojsonpath='{.spec}' | jq
    Copy to Clipboard Toggle word wrap

    SR-IOV 연산자에 대한 예제 출력

    {"configDaemonNodeSelector":{"node-role.kubernetes.io/worker":""},"disableDrain":false,"enableInjector":true,"enableOperatorWebhook":true} 
    1
    Copy to Clipboard Toggle word wrap

    1
    노드 선택기가 마스터 로 설정된 경우, 스포크는 변경이 필요한 GitOps ZTP 플러그인 버전으로 배포되었습니다.
  3. 그룹 정책에서 다음 complianceTypespec 항목을 추가합니다.

    spec:
        - fileName: PtpOperatorConfig.yaml
          policyName: "config-policy"
          complianceType: mustonlyhave
          spec:
            daemonNodeSelector:
              node-role.kubernetes.io/worker: ""
        - fileName: SriovOperatorConfig.yaml
          policyName: "config-policy"
          complianceType: mustonlyhave
          spec:
            configDaemonNodeSelector:
              node-role.kubernetes.io/worker: ""
    Copy to Clipboard Toggle word wrap
    중요

    daemonNodeSelector 필드를 변경하면 일시적으로 PTP 동기화가 손실되고 SR-IOV 연결이 끊어집니다.

  4. Git에서 변경 사항을 커밋한 다음 GitOps ZTP ArgoCD 애플리케이션에서 모니터링하는 Git 저장소에 푸시합니다.

13.3. PTP 및 SR-IOV 노드 선택기 호환성

PTP 구성 리소스와 SR-IOV 네트워크 노드 정책은 node-role.kubernetes.io/master: ""를 노드 선택기로 사용합니다. 추가된 작업자 노드에 제어 평면 노드와 동일한 NIC 구성이 있는 경우 제어 평면 노드를 구성하는 데 사용된 정책을 작업자 노드에 재사용할 수 있습니다. 그러나 노드 선택기는 두 가지 노드 유형을 모두 선택하도록 변경해야 합니다(예: "node-role.kubernetes.io/worker" 레이블).

13.4. PolicyGenerator CR을 사용하여 작업자 노드에 작업자 노드 정책 적용

PolicyGenerator CR을 사용하여 작업자 노드에 대한 정책을 생성할 수 있습니다.

프로세스

  1. 다음 PolicyGenerator CR을 생성하세요.

    apiVersion: policy.open-cluster-management.io/v1
    kind: PolicyGenerator
    metadata:
        name: example-sno-workers
    placementBindingDefaults:
        name: example-sno-workers-placement-binding
    policyDefaults:
        namespace: example-sno
        placement:
            labelSelector:
                matchExpressions:
                    - key: sites
                      operator: In
                      values:
                        - example-sno 
    1
    
        remediationAction: inform
        severity: low
        namespaceSelector:
            exclude:
                - kube-*
            include:
                - '*'
        evaluationInterval:
            compliant: 10m
            noncompliant: 10s
    policies:
        - name: example-sno-workers-config-policy
          policyAnnotations:
            ran.openshift.io/ztp-deploy-wave: "10"
          manifests:
            - path: source-crs/MachineConfigGeneric.yaml 
    2
    
              patches:
                - metadata:
                    labels:
                        machineconfiguration.openshift.io/role: worker 
    3
    
                    name: enable-workload-partitioning
                  spec:
                    config:
                        storage:
                            files:
                                - contents:
                                    source: data:text/plain;charset=utf-8;base64,W2NyaW8ucnVudGltZS53b3JrbG9hZHMubWFuYWdlbWVudF0KYWN0aXZhdGlvbl9hbm5vdGF0aW9uID0gInRhcmdldC53b3JrbG9hZC5vcGVuc2hpZnQuaW8vbWFuYWdlbWVudCIKYW5ub3RhdGlvbl9wcmVmaXggPSAicmVzb3VyY2VzLndvcmtsb2FkLm9wZW5zaGlmdC5pbyIKcmVzb3VyY2VzID0geyAiY3B1c2hhcmVzIiA9IDAsICJjcHVzZXQiID0gIjAtMyIgfQo=
                                  mode: 420
                                  overwrite: true
                                  path: /etc/crio/crio.conf.d/01-workload-partitioning
                                  user:
                                    name: root
                                - contents:
                                    source: data:text/plain;charset=utf-8;base64,ewogICJtYW5hZ2VtZW50IjogewogICAgImNwdXNldCI6ICIwLTMiCiAgfQp9Cg==
                                  mode: 420
                                  overwrite: true
                                  path: /etc/kubernetes/openshift-workload-pinning
                                  user:
                                    name: root
            - path: source-crs/PerformanceProfile-MCP-worker.yaml
              patches:
                - metadata:
                    name: openshift-worker-node-performance-profile
                  spec:
                    cpu: 
    4
    
                        isolated: 4-47
                        reserved: 0-3
                    hugepages:
                        defaultHugepagesSize: 1G
                        pages:
                            - count: 32
                              size: 1G
                    realTimeKernel:
                        enabled: true
            - path: source-crs/TunedPerformancePatch-MCP-worker.yaml
              patches:
                - metadata:
                    name: performance-patch-worker
                  spec:
                    profile:
                        - data: |
                          [main]
                          summary=Configuration changes profile inherited from performance created tuned
                          include=openshift-node-performance-openshift-worker-node-performance-profile
                          [bootloader]
                          cmdline_crash=nohz_full=4-47 
    5
    
                          [sysctl]
                          kernel.timer_migration=1
                          [scheduler]
                          group.ice-ptp=0:f:10:*:ice-ptp.*
                          [service]
                          service.stalld=start,enable
                          service.chronyd=stop,disable
                          name: performance-patch-worker
                    recommend:
                        - profile: performance-patch-worker
    Copy to Clipboard Toggle word wrap
    1
    해당 정책은 이 레이블이 있는 모든 클러스터에 적용됩니다.
    2
    이 일반적인 MachineConfig CR은 작업자 노드에서 작업 분할을 구성하는 데 사용됩니다.
    3
    MCP 필드는 worker 로 설정되어야 합니다.
    4
    cpu.isolatedcpu.reserved 필드는 각 하드웨어 플랫폼에 맞게 구성되어야 합니다.
    5
    cmdline_crash CPU 세트는 PerformanceProfile 섹션의 cpu.isolated 세트와 일치해야 합니다.

    일반적인 MachineConfig CR은 작업자 노드에서 작업 부하 분할을 구성하는 데 사용됩니다. criokubelet 구성 파일의 내용을 생성할 수 있습니다.

  2. ArgoCD 정책 애플리케이션에서 모니터링하는 Git 저장소에 생성된 정책 템플릿을 추가합니다.
  3. kustomization.yaml 파일에 정책을 추가합니다.
  4. Git에서 변경 사항을 커밋한 다음 GitOps ZTP ArgoCD 애플리케이션에서 모니터링하는 Git 저장소에 푸시합니다.
  5. 스포크 클러스터에 대한 새 정책을 수정하려면 TALM 사용자 정의 리소스를 만듭니다.

    $ cat <<EOF | oc apply -f -
    apiVersion: ran.openshift.io/v1alpha1
    kind: ClusterGroupUpgrade
    metadata:
      name: example-sno-worker-policies
      namespace: default
    spec:
      backup: false
      clusters:
      - example-sno
      enable: true
      managedPolicies:
      - group-du-sno-config-policy
      - example-sno-workers-config-policy
      - example-sno-config-policy
      preCaching: false
      remediationStrategy:
        maxConcurrency: 1
    EOF
    Copy to Clipboard Toggle word wrap

PolicyGenTemplate CR을 사용하여 작업자 노드에 대한 정책을 만들 수 있습니다.

프로세스

  1. 다음 PolicyGenTemplate CR을 만듭니다.

    apiVersion: ran.openshift.io/v1
    kind: PolicyGenTemplate
    metadata:
      name: "example-sno-workers"
      namespace: "example-sno"
    spec:
      bindingRules:
        sites: "example-sno" 
    1
    
      mcp: "worker" 
    2
    
      sourceFiles:
        - fileName: MachineConfigGeneric.yaml 
    3
    
          policyName: "config-policy"
          metadata:
            labels:
              machineconfiguration.openshift.io/role: worker
            name: enable-workload-partitioning
          spec:
            config:
              storage:
                files:
                - contents:
                    source: data:text/plain;charset=utf-8;base64,W2NyaW8ucnVudGltZS53b3JrbG9hZHMubWFuYWdlbWVudF0KYWN0aXZhdGlvbl9hbm5vdGF0aW9uID0gInRhcmdldC53b3JrbG9hZC5vcGVuc2hpZnQuaW8vbWFuYWdlbWVudCIKYW5ub3RhdGlvbl9wcmVmaXggPSAicmVzb3VyY2VzLndvcmtsb2FkLm9wZW5zaGlmdC5pbyIKcmVzb3VyY2VzID0geyAiY3B1c2hhcmVzIiA9IDAsICJjcHVzZXQiID0gIjAtMyIgfQo=
                  mode: 420
                  overwrite: true
                  path: /etc/crio/crio.conf.d/01-workload-partitioning
                  user:
                    name: root
                - contents:
                    source: data:text/plain;charset=utf-8;base64,ewogICJtYW5hZ2VtZW50IjogewogICAgImNwdXNldCI6ICIwLTMiCiAgfQp9Cg==
                  mode: 420
                  overwrite: true
                  path: /etc/kubernetes/openshift-workload-pinning
                  user:
                    name: root
        - fileName: PerformanceProfile.yaml
          policyName: "config-policy"
          metadata:
            name: openshift-worker-node-performance-profile
          spec:
            cpu: 
    4
    
              isolated: "4-47"
              reserved: "0-3"
            hugepages:
              defaultHugepagesSize: 1G
              pages:
                - size: 1G
                  count: 32
            realTimeKernel:
              enabled: true
        - fileName: TunedPerformancePatch.yaml
          policyName: "config-policy"
          metadata:
            name: performance-patch-worker
          spec:
            profile:
              - name: performance-patch-worker
                data: |
                  [main]
                  summary=Configuration changes profile inherited from performance created tuned
                  include=openshift-node-performance-openshift-worker-node-performance-profile
                  [bootloader]
                  cmdline_crash=nohz_full=4-47 
    5
    
                  [sysctl]
                  kernel.timer_migration=1
                  [scheduler]
                  group.ice-ptp=0:f:10:*:ice-ptp.*
                  [service]
                  service.stalld=start,enable
                  service.chronyd=stop,disable
            recommend:
            - profile: performance-patch-worker
    Copy to Clipboard Toggle word wrap
    1
    해당 정책은 이 레이블이 있는 모든 클러스터에 적용됩니다.
    2
    MCP 필드는 worker 로 설정되어야 합니다.
    3
    이 일반적인 MachineConfig CR은 작업자 노드에서 작업 분할을 구성하는 데 사용됩니다.
    4
    cpu.isolatedcpu.reserved 필드는 각 하드웨어 플랫폼에 맞게 구성되어야 합니다.
    5
    cmdline_crash CPU 세트는 PerformanceProfile 섹션의 cpu.isolated 세트와 일치해야 합니다.

    일반적인 MachineConfig CR은 작업자 노드에서 작업 부하 분할을 구성하는 데 사용됩니다. criokubelet 구성 파일의 내용을 생성할 수 있습니다.

  2. ArgoCD 정책 애플리케이션에서 모니터링하는 Git 저장소에 생성된 정책 템플릿을 추가합니다.
  3. kustomization.yaml 파일에 정책을 추가합니다.
  4. Git에서 변경 사항을 커밋한 다음 GitOps ZTP ArgoCD 애플리케이션에서 모니터링하는 Git 저장소에 푸시합니다.
  5. 스포크 클러스터에 대한 새 정책을 수정하려면 TALM 사용자 정의 리소스를 만듭니다.

    $ cat <<EOF | oc apply -f -
    apiVersion: ran.openshift.io/v1alpha1
    kind: ClusterGroupUpgrade
    metadata:
      name: example-sno-worker-policies
      namespace: default
    spec:
      backup: false
      clusters:
      - example-sno
      enable: true
      managedPolicies:
      - group-du-sno-config-policy
      - example-sno-workers-config-policy
      - example-sno-config-policy
      preCaching: false
      remediationStrategy:
        maxConcurrency: 1
    EOF
    Copy to Clipboard Toggle word wrap

기존 단일 노드 OpenShift 클러스터에 하나 이상의 작업자 노드를 추가하여 클러스터에서 사용 가능한 CPU 리소스를 늘릴 수 있습니다.

사전 요구 사항

  • OpenShift Container Platform 4.11 이상 베어 메탈 허브 클러스터에서 RHACM 2.6 이상을 설치하고 구성
  • 허브 클러스터에 토폴로지 Aware Lifecycle Manager 설치
  • hub 클러스터에 Red Hat OpenShift GitOps 설치
  • GitOps ZTP ztp-site-generate 컨테이너 이미지 버전 4.12 이상 사용
  • GitOps ZTP를 사용하여 관리형 단일 노드 OpenShift 클러스터 배포
  • RHACM 설명서에 설명된 대로 중앙 인프라 관리 구성
  • 내부 API 끝점 api-int.<cluster_name>.<base_domain>을 확인하도록 클러스터를 제공하는 DNS를 구성합니다.

프로세스

  1. example-sno.yaml SiteConfig 매니페스트를 사용하여 클러스터를 배포한 경우 새 작업자 노드를 spec.clusters['example-sno'].nodes 목록에 추가합니다.

    nodes:
    - hostName: "example-node2.example.com"
      role: "worker"
      bmcAddress: "idrac-virtualmedia+https://[1111:2222:3333:4444::bbbb:1]/redfish/v1/Systems/System.Embedded.1"
      bmcCredentialsName:
        name: "example-node2-bmh-secret"
      bootMACAddress: "AA:BB:CC:DD:EE:11"
      bootMode: "UEFI"
      nodeNetwork:
        interfaces:
          - name: eno1
            macAddress: "AA:BB:CC:DD:EE:11"
        config:
          interfaces:
            - name: eno1
              type: ethernet
              state: up
              macAddress: "AA:BB:CC:DD:EE:11"
              ipv4:
                enabled: false
              ipv6:
                enabled: true
                address:
                - ip: 1111:2222:3333:4444::1
                  prefix-length: 64
          dns-resolver:
            config:
              search:
              - example.com
              server:
              - 1111:2222:3333:4444::2
          routes:
            config:
            - destination: ::/0
              next-hop-interface: eno1
              next-hop-address: 1111:2222:3333:4444::1
              table-id: 254
    Copy to Clipboard Toggle word wrap
  2. SiteConfig 파일의 spec.nodes 섹션에 있는 bmcCredentialsName 필드에서 참조하는 새 호스트의 BMC 인증 시크릿을 생성합니다.

    apiVersion: v1
    data:
      password: "password"
      username: "username"
    kind: Secret
    metadata:
      name: "example-node2-bmh-secret"
      namespace: example-sno
    type: Opaque
    Copy to Clipboard Toggle word wrap
  3. Git의 변경 사항을 커밋한 다음 GitOps ZTP ArgoCD 애플리케이션에서 모니터링하는 Git 리포지토리로 내보냅니다.

    ArgoCD 클러스터 애플리케이션이 동기화되면 GitOps ZTP 플러그인에서 생성한 허브 클러스터에 두 개의 새 매니페스트가 표시됩니다.

    • BareMetalHost
    • NMStateConfig

      중요

      작업자 노드에 대해 cpuset 필드를 구성해서는 안 됩니다. 노드 설치가 완료된 후 작업자 노드의 워크로드 파티셔닝이 관리 정책을 통해 추가됩니다.

검증

설치 프로세스를 여러 가지 방법으로 모니터링할 수 있습니다.

  • 다음 명령을 실행하여 사전 프로비저닝 이미지가 생성되었는지 확인합니다.

    $ oc get ppimg -n example-sno
    Copy to Clipboard Toggle word wrap

    출력 예

    NAMESPACE       NAME            READY   REASON
    example-sno     example-sno     True    ImageCreated
    example-sno     example-node2   True    ImageCreated
    Copy to Clipboard Toggle word wrap

  • 베어 메탈 호스트의 상태를 확인합니다.

    $ oc get bmh -n example-sno
    Copy to Clipboard Toggle word wrap

    출력 예

    NAME            STATE          CONSUMER   ONLINE   ERROR   AGE
    example-sno     provisioned               true             69m
    example-node2   provisioning              true             4m50s 
    1
    Copy to Clipboard Toggle word wrap

    1
    프로비저닝 상태는 설치 미디어에서 부팅하는 노드가 진행 중임을 나타냅니다.
  • 설치 프로세스를 지속적으로 모니터링합니다.

    1. 다음 명령을 실행하여 에이전트 설치 프로세스를 확인합니다.

      $ oc get agent -n example-sno --watch
      Copy to Clipboard Toggle word wrap

      출력 예

      NAME                                   CLUSTER   APPROVED   ROLE     STAGE
      671bc05d-5358-8940-ec12-d9ad22804faa   example-sno   true       master   Done
      [...]
      14fd821b-a35d-9cba-7978-00ddf535ff37   example-sno   true       worker   Starting installation
      14fd821b-a35d-9cba-7978-00ddf535ff37   example-sno   true       worker   Installing
      14fd821b-a35d-9cba-7978-00ddf535ff37   example-sno   true       worker   Writing image to disk
      [...]
      14fd821b-a35d-9cba-7978-00ddf535ff37   example-sno   true       worker   Waiting for control plane
      [...]
      14fd821b-a35d-9cba-7978-00ddf535ff37   example-sno   true       worker   Rebooting
      14fd821b-a35d-9cba-7978-00ddf535ff37   example-sno   true       worker   Done
      Copy to Clipboard Toggle word wrap

    2. 작업자 노드 설치가 완료되면 작업자 노드 인증서가 자동으로 승인됩니다. 이 시점에서 작업자는 ManagedClusterInfo 상태에 나타납니다. 다음 명령을 실행하여 상태를 확인합니다.

      $ oc get managedclusterinfo/example-sno -n example-sno -o \
      jsonpath='{range .status.nodeList[*]}{.name}{"\t"}{.conditions}{"\t"}{.labels}{"\n"}{end}'
      Copy to Clipboard Toggle word wrap

      출력 예

      example-sno	[{"status":"True","type":"Ready"}]	{"node-role.kubernetes.io/master":"","node-role.kubernetes.io/worker":""}
      example-node2	[{"status":"True","type":"Ready"}]	{"node-role.kubernetes.io/worker":""}
      Copy to Clipboard Toggle word wrap

14장. 단일 노드 OpenShift 배포를 위한 이미지 사전 캐싱

ZTP( GitOps Zero Touch Provisioning) 솔루션을 사용하여 다수의 클러스터를 배포하는 제한된 대역폭이 있는 환경에서는 OpenShift Container Platform을 부트스트랩 및 설치하는 데 필요한 모든 이미지를 다운로드하지 않도록 해야 합니다. 원격 단일 노드 OpenShift 사이트의 제한된 대역폭으로 인해 배포 시간이 길어질 수 있습니다. factory-precaching-cli 툴을 사용하면 ZTP 프로비저닝을 위해 원격 사이트에 제공하기 전에 서버를 사전 단계적으로 제공할 수 있습니다.

factory-precaching-cli 툴은 다음을 수행합니다.

  • 부팅에 최소 ISO에 필요한 RHCOS rootfs 이미지를 다운로드합니다.
  • 데이터로 레이블이 지정된 설치 디스크에서 파티션을 생성합니다.
  • xfs로 디스크를 포맷합니다.
  • 디스크 끝에 GUID 파티션 테이블(GPT) 데이터 파티션을 만듭니다. 여기서 도구에서 파티션 크기를 구성할 수 있습니다.
  • OpenShift Container Platform을 설치하는 데 필요한 컨테이너 이미지를 복사합니다.
  • OpenShift Container Platform을 설치하기 위해 ZTP에 필요한 컨테이너 이미지를 복사합니다.
  • 선택 사항: Day-2 Operator를 파티션에 복사합니다.
중요

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

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

14.1. factory-precaching-cli 툴 가져오기

factory-precaching-cli 툴 Go 바이너리는 {rds-first} 툴 컨테이너 이미지에서 공개적으로 사용할 수 있습니다. 컨테이너 이미지의 factory-precaching-cli 툴 Go 바이너리는 podman 을 사용하여 RHCOS 라이브 이미지를 실행하는 서버에서 실행됩니다. 연결이 끊긴 환경에서 작업 중이거나 프라이빗 레지스트리가 있는 경우 이미지를 서버에 다운로드할 수 있도록 이미지를 복사해야 합니다.

프로세스

  • 다음 명령을 실행하여 factory-precaching-cli 툴 이미지를 가져옵니다.

    # podman pull quay.io/openshift-kni/telco-ran-tools:latest
    Copy to Clipboard Toggle word wrap

검증

  • 도구를 사용할 수 있는지 확인하려면 factory-precaching-cli 도구 Go 바이너리의 현재 버전을 쿼리합니다.

    # podman run quay.io/openshift-kni/telco-ran-tools:latest -- factory-precaching-cli -v
    Copy to Clipboard Toggle word wrap

    출력 예

    factory-precaching-cli version 20221018.120852+main.feecf17
    Copy to Clipboard Toggle word wrap

14.2. 라이브 운영 체제 이미지에서 부팅

factory-precaching-cli 툴을 사용하여 하나의 디스크만 사용 가능하고 외부 디스크 드라이브를 서버에 연결할 수 없는 서버를 부팅할 수 있습니다.

주의

RHCOS는 RHCOS 이미지로 디스크를 쓸 때 디스크를 사용하지 않아야 합니다.

서버 하드웨어에 따라 다음 방법 중 하나를 사용하여 빈 서버에 RHCOS 라이브 ISO를 마운트할 수 있습니다.

  • Dell 서버에서 Dell RACADM 도구 사용.
  • HP 서버에서 HPONCFG 도구 사용.
  • Redfish BMC API를 사용합니다.
참고

장착 절차를 자동화하는 것이 좋습니다. 절차를 자동화하려면 필요한 이미지를 가져와 로컬 HTTP 서버에 호스팅해야 합니다.

사전 요구 사항

  • 호스트의 전원을 켰습니다.
  • 호스트에 네트워크로 연결되어 있습니다.
프로세스

이 예제 절차에서는 Redfish BMC API를 사용하여 RHCOS 라이브 ISO를 마운트합니다.

  1. RHCOS 라이브 ISO를 마운트합니다.

    1. 가상 미디어 상태 확인:

      $ curl --globoff -H "Content-Type: application/json" -H \
      "Accept: application/json" -k -X GET --user ${username_password} \
      https://$BMC_ADDRESS/redfish/v1/Managers/Self/VirtualMedia/1 | python -m json.tool
      Copy to Clipboard Toggle word wrap
    2. ISO 파일을 가상 미디어로 마운트합니다.

      $ curl --globoff -L -w "%{http_code} %{url_effective}\\n" -ku ${username_password} -H "Content-Type: application/json" -H "Accept: application/json" -d '{"Image": "http://[$HTTPd_IP]/RHCOS-live.iso"}' -X POST https://$BMC_ADDRESS/redfish/v1/Managers/Self/VirtualMedia/1/Actions/VirtualMedia.InsertMedia
      Copy to Clipboard Toggle word wrap
    3. 가상 미디어에서 한 번 부팅하도록 부팅 순서를 설정합니다.

      $ curl --globoff  -L -w "%{http_code} %{url_effective}\\n"  -ku ${username_password}  -H "Content-Type: application/json" -H "Accept: application/json" -d '{"Boot":{ "BootSourceOverrideEnabled": "Once", "BootSourceOverrideTarget": "Cd", "BootSourceOverrideMode": "UEFI"}}' -X PATCH https://$BMC_ADDRESS/redfish/v1/Systems/Self
      Copy to Clipboard Toggle word wrap
  2. 재부팅하고 서버가 가상 미디어에서 부팅되는지 확인하세요.

14.3. 디스크 분할

전체 사전 캐싱 프로세스를 실행하려면 라이브 ISO에서 부팅하고 컨테이너 이미지에서 factory-precaching-cli 도구를 사용하여 필요한 모든 아티팩트를 분할하고 사전 캐싱해야 합니다.

프로비저닝 중에 운영 체제(RHCOS)가 장치에 기록될 때 디스크가 사용 중이어서는 안 되므로 라이브 ISO 또는 RHCOS 라이브 ISO가 필요합니다. 이 절차를 통해 단일 디스크 서버도 활성화할 수 있습니다.

사전 요구 사항

  • 파티션되지 않은 디스크가 있습니다.
  • quay.io/openshift-kni/telco-ran-tools:latest 이미지에 접근할 수 있습니다.
  • OpenShift Container Platform을 설치하고 필요한 이미지를 사전 캐싱할 수 있는 충분한 저장 공간이 있습니다.

프로세스

  1. 디스크가 지워졌는지 확인하세요.

    # lsblk
    Copy to Clipboard Toggle word wrap

    출력 예

    NAME    MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
    loop0     7:0    0  93.8G  0 loop /run/ephemeral
    loop1     7:1    0 897.3M  1 loop /sysroot
    sr0      11:0    1   999M  0 rom  /run/media/iso
    nvme0n1 259:1    0   1.5T  0 disk
    Copy to Clipboard Toggle word wrap

  2. 장치에서 모든 파일 시스템, RAID 또는 파티션 테이블 서명을 지웁니다.

    # wipefs -a /dev/nvme0n1
    Copy to Clipboard Toggle word wrap

    출력 예

    /dev/nvme0n1: 8 bytes were erased at offset 0x00000200 (gpt): 45 46 49 20 50 41 52 54
    /dev/nvme0n1: 8 bytes were erased at offset 0x1749a955e00 (gpt): 45 46 49 20 50 41 52 54
    /dev/nvme0n1: 2 bytes were erased at offset 0x000001fe (PMBR): 55 aa
    Copy to Clipboard Toggle word wrap

중요

디스크가 비어 있지 않으면 도구가 실패합니다. 이 도구는 장치의 파티션 번호 1을 사용하여 아티팩트를 사전 캐싱하기 때문입니다.

14.3.1. 파티션 생성

장치가 준비되면 단일 파티션과 GPT 파티션 테이블을 만듭니다. 파티션은 자동으로 데이터 로 표시되고 장치 끝에 생성됩니다. 그렇지 않으면 해당 파티션은 coreos-installer 에 의해 재정의됩니다.

중요

coreos-installer를 사용하려면 장치 끝에 파티션을 만들고 data 로 레이블을 지정해야 합니다. 두 가지 요구 사항 모두 RHCOS 이미지를 디스크에 쓸 때 파티션을 저장하는 데 필요합니다.

사전 요구 사항

  • 호스트 장치를 포맷해야 하므로 컨테이너는 특권 모드로 실행되어야 합니다.
  • 컨테이너 내부에서 프로세스를 실행하려면 /dev 폴더를 마운트해야 합니다.

프로세스

다음 예에서 파티션 크기는 Day 2 Operators의 DU 프로필을 사전 캐싱할 수 있도록 250GiB입니다.

  1. 컨테이너를 권한 있는 권한 으로 실행하고 디스크를 분할합니다.

    # podman run -v /dev:/dev --privileged \
    --rm quay.io/openshift-kni/telco-ran-tools:latest -- \
    factory-precaching-cli partition \ 
    1
    
    -d /dev/nvme0n1 \ 
    2
    
    -s 250 
    3
    Copy to Clipboard Toggle word wrap
    1
    factory-precaching-cli 도구의 파티셔닝 기능을 지정합니다.
    2
    디스크의 루트 디렉토리를 정의합니다.
    3
    디스크 크기를 GB 단위로 정의합니다.
  2. 저장 정보를 확인하세요:

    # lsblk
    Copy to Clipboard Toggle word wrap

    출력 예

    NAME        MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
    loop0         7:0    0  93.8G  0 loop /run/ephemeral
    loop1         7:1    0 897.3M  1 loop /sysroot
    sr0          11:0    1   999M  0 rom  /run/media/iso
    nvme0n1     259:1    0   1.5T  0 disk
    └─nvme0n1p1 259:3    0   250G  0 part
    Copy to Clipboard Toggle word wrap

검증

다음 요구 사항이 충족되었는지 확인해야 합니다.

  • 장치에는 GPT 파티션 테이블이 있습니다.
  • 해당 파티션은 장치의 최신 섹터를 사용합니다.
  • 파티션이 데이터 로 올바르게 레이블이 지정되었습니다.

디스크가 예상대로 파티션되었는지 확인하려면 디스크 상태를 쿼리하세요.

# gdisk -l /dev/nvme0n1
Copy to Clipboard Toggle word wrap

출력 예

GPT fdisk (gdisk) version 1.0.3

Partition table scan:
  MBR: protective
  BSD: not present
  APM: not present
  GPT: present

Found valid GPT with protective MBR; using GPT.
Disk /dev/nvme0n1: 3125627568 sectors, 1.5 TiB
Model: Dell Express Flash PM1725b 1.6TB SFF
Sector size (logical/physical): 512/512 bytes
Disk identifier (GUID): CB5A9D44-9B3C-4174-A5C1-C64957910B61
Partition table holds up to 128 entries
Main partition table begins at sector 2 and ends at sector 33
First usable sector is 34, last usable sector is 3125627534
Partitions will be aligned on 2048-sector boundaries
Total free space is 2601338846 sectors (1.2 TiB)

Number  Start (sector)    End (sector)  Size       Code  Name
   1      2601338880      3125627534   250.0 GiB   8300  data
Copy to Clipboard Toggle word wrap

14.3.2. 파티션 장착

디스크가 올바르게 분할되었는지 확인한 후 장치를 /mnt 에 마운트할 수 있습니다.

중요

GitOps ZTP 준비 중에 해당 마운트 지점이 사용되므로 장치를 /mnt 에 마운트하는 것이 좋습니다.

  1. 파티션이 xfs 로 포맷되었는지 확인하세요.

    # lsblk -f /dev/nvme0n1
    Copy to Clipboard Toggle word wrap

    출력 예

    NAME        FSTYPE LABEL UUID                                 MOUNTPOINT
    nvme0n1
    └─nvme0n1p1 xfs          1bee8ea4-d6cf-4339-b690-a76594794071
    Copy to Clipboard Toggle word wrap

  2. 파티션을 마운트하세요:

    # mount /dev/nvme0n1p1 /mnt/
    Copy to Clipboard Toggle word wrap

검증

  • 파티션이 마운트되었는지 확인하세요.

    # lsblk
    Copy to Clipboard Toggle word wrap

    출력 예

    NAME        MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
    loop0         7:0    0  93.8G  0 loop /run/ephemeral
    loop1         7:1    0 897.3M  1 loop /sysroot
    sr0          11:0    1   999M  0 rom  /run/media/iso
    nvme0n1     259:1    0   1.5T  0 disk
    └─nvme0n1p1 259:2    0   250G  0 part /var/mnt 
    1
    Copy to Clipboard Toggle word wrap

    1
    마운트 지점은 /var/mnt 입니다. RHCOS의 /mnt 폴더는 /var/mnt 에 대한 링크이기 때문입니다.

14.4. 이미지 다운로드

factory-precaching-cli 도구를 사용하면 다음 이미지를 분할된 서버로 다운로드할 수 있습니다.

  • OpenShift 컨테이너 플랫폼 이미지
  • 5G RAN 사이트의 분산 유닛(DU) 프로필에 포함된 운영자 이미지
  • 연결이 끊긴 레지스트리의 운영자 이미지
참고

사용 가능한 Operator 이미지 목록은 OpenShift Container Platform 릴리스마다 다를 수 있습니다.

14.4.1. 병렬 작업자를 사용하여 다운로드

factory-precaching-cli 도구는 병렬 워커를 사용하여 여러 이미지를 동시에 다운로드합니다. --parallel 또는 -p 옵션을 사용하여 작업자 수를 구성할 수 있습니다. 기본 숫자는 서버에서 사용 가능한 CPU의 80%로 설정됩니다.

참고

로그인 셸이 일부 CPU로 제한되어 컨테이너에서 사용할 수 있는 CPU가 줄어들 수 있습니다. 이러한 제한을 제거하려면 다음과 같이 명령 앞에 taskset 0xffffffff를 추가합니다.

# taskset 0xffffffff podman run --rm quay.io/openshift-kni/telco-ran-tools:latest factory-precaching-cli download --help
Copy to Clipboard Toggle word wrap

14.4.2. OpenShift 컨테이너 플랫폼 이미지 다운로드 준비 중

OpenShift Container Platform 컨테이너 이미지를 다운로드하려면 멀티클러스터 엔진 버전을 알아야 합니다. --du-profile 플래그를 사용하는 경우 단일 노드 OpenShift를 프로비저닝할 허브 클러스터에서 실행되는 Red Hat Advanced Cluster Management(RHACM) 버전도 지정해야 합니다.

사전 요구 사항

  • RHACM과 멀티클러스터 엔진 Operator가 설치되어 있습니다.
  • 저장 장치를 분할했습니다.
  • 파티션된 장치에 이미지를 저장할 공간이 충분합니다.
  • 베어메탈 서버를 인터넷에 연결했습니다.
  • 유효한 풀 시크릿이 있습니다.

프로세스

  1. 허브 클러스터에서 다음 명령을 실행하여 RHACM 버전과 멀티클러스터 엔진 버전을 확인하세요.

    $ oc get csv -A | grep -i advanced-cluster-management
    Copy to Clipboard Toggle word wrap

    출력 예

    open-cluster-management                            advanced-cluster-management.v2.6.3           Advanced Cluster Management for Kubernetes   2.6.3                 advanced-cluster-management.v2.6.3                Succeeded
    Copy to Clipboard Toggle word wrap

    $ oc get csv -A | grep -i multicluster-engine
    Copy to Clipboard Toggle word wrap

    출력 예

    multicluster-engine                                cluster-group-upgrades-operator.v0.0.3       cluster-group-upgrades-operator              0.0.3                                                                   Pending
    multicluster-engine                                multicluster-engine.v2.1.4                   multicluster engine for Kubernetes           2.1.4                 multicluster-engine.v2.0.3                        Succeeded
    multicluster-engine                                openshift-gitops-operator.v1.5.7             Red Hat OpenShift GitOps                     1.5.7                 openshift-gitops-operator.v1.5.6-0.1664915551.p   Succeeded
    multicluster-engine                                openshift-pipelines-operator-rh.v1.6.4       Red Hat OpenShift Pipelines                  1.6.4                 openshift-pipelines-operator-rh.v1.6.3            Succeeded
    Copy to Clipboard Toggle word wrap

  2. 컨테이너 레지스트리에 액세스하려면 설치할 서버에 유효한 풀 시크릿을 복사하세요.

    1. .docker 폴더를 만듭니다.

      $ mkdir /root/.docker
      Copy to Clipboard Toggle word wrap
    2. config.json 파일의 유효한 풀을 이전에 만든 .docker/ 폴더로 복사합니다.

      $ cp config.json /root/.docker/config.json 
      1
      Copy to Clipboard Toggle word wrap
      1
      /root/.docker/config.json은 podman이 레지스트리의 로그인 자격 증명을 확인하는 기본 경로입니다.
참고

다른 레지스트리를 사용하여 필요한 아티팩트를 가져오는 경우 적절한 풀 비밀번호를 복사해야 합니다. 로컬 레지스트리가 TLS를 사용하는 경우 레지스트리의 인증서도 포함해야 합니다.

14.4.3. OpenShift 컨테이너 플랫폼 이미지 다운로드

factory-precaching-cli 도구를 사용하면 특정 OpenShift Container Platform 릴리스를 프로비저닝하는 데 필요한 모든 컨테이너 이미지를 미리 캐시할 수 있습니다.

프로세스

  • 다음 명령을 실행하여 릴리스를 사전 캐시합니다.

    # podman run -v /mnt:/mnt -v /root/.docker:/root/.docker --privileged --rm quay.io/openshift-kni/telco-ran-tools -- \
       factory-precaching-cli download \ 
    1
    
       -r 4.19.0 \ 
    2
    
       --acm-version 2.6.3 \ 
    3
    
       --mce-version 2.1.4 \ 
    4
    
       -f /mnt \ 
    5
    
       --img quay.io/custom/repository 
    6
    Copy to Clipboard Toggle word wrap
    1
    factory-precaching-cli 도구의 다운로드 기능을 지정합니다.
    2
    OpenShift 컨테이너 플랫폼 릴리스 버전을 정의합니다.
    3
    RHACM 버전을 정의합니다.
    4
    멀티클러스터 엔진 버전을 정의합니다.
    5
    디스크에 이미지를 다운로드할 폴더를 정의합니다.
    6
    선택 사항: 추가 이미지를 저장하는 저장소를 정의합니다. 이러한 이미지는 디스크에서 다운로드되고 미리 캐시됩니다.

    출력 예

    Generated /mnt/imageset.yaml
    Generating list of pre-cached artifacts...
    Processing artifact [1/176]: ocp-v4.0-art-dev@sha256_6ac2b96bf4899c01a87366fd0feae9f57b1b61878e3b5823da0c3f34f707fbf5
    Processing artifact [2/176]: ocp-v4.0-art-dev@sha256_f48b68d5960ba903a0d018a10544ae08db5802e21c2fa5615a14fc58b1c1657c
    Processing artifact [3/176]: ocp-v4.0-art-dev@sha256_a480390e91b1c07e10091c3da2257180654f6b2a735a4ad4c3b69dbdb77bbc06
    Processing artifact [4/176]: ocp-v4.0-art-dev@sha256_ecc5d8dbd77e326dba6594ff8c2d091eefbc4d90c963a9a85b0b2f0e6155f995
    Processing artifact [5/176]: ocp-v4.0-art-dev@sha256_274b6d561558a2f54db08ea96df9892315bb773fc203b1dbcea418d20f4c7ad1
    Processing artifact [6/176]: ocp-v4.0-art-dev@sha256_e142bf5020f5ca0d1bdda0026bf97f89b72d21a97c9cc2dc71bf85050e822bbf
    ...
    Processing artifact [175/176]: ocp-v4.0-art-dev@sha256_16cd7eda26f0fb0fc965a589e1e96ff8577e560fcd14f06b5fda1643036ed6c8
    Processing artifact [176/176]: ocp-v4.0-art-dev@sha256_cf4d862b4a4170d4f611b39d06c31c97658e309724f9788e155999ae51e7188f
    ...
    Summary:
    
    Release:                            4.19.0
    Hub Version:                        2.6.3
    ACM Version:                        2.6.3
    MCE Version:                        2.1.4
    Include DU Profile:                 No
    Workers:                            83
    Copy to Clipboard Toggle word wrap

검증

  • 서버의 대상 폴더에 있는 모든 이미지가 압축되었는지 확인하세요.

    $ ls -l /mnt 
    1
    Copy to Clipboard Toggle word wrap
    1
    /mnt 폴더에 이미지를 미리 캐시하는 것이 좋습니다.

    출력 예

    -rw-r--r--. 1 root root  136352323 Oct 31 15:19 ocp-v4.0-art-dev@sha256_edec37e7cd8b1611d0031d45e7958361c65e2005f145b471a8108f1b54316c07.tgz
    -rw-r--r--. 1 root root  156092894 Oct 31 15:33 ocp-v4.0-art-dev@sha256_ee51b062b9c3c9f4fe77bd5b3cc9a3b12355d040119a1434425a824f137c61a9.tgz
    -rw-r--r--. 1 root root  172297800 Oct 31 15:29 ocp-v4.0-art-dev@sha256_ef23d9057c367a36e4a5c4877d23ee097a731e1186ed28a26c8d21501cd82718.tgz
    -rw-r--r--. 1 root root  171539614 Oct 31 15:23 ocp-v4.0-art-dev@sha256_f0497bb63ef6834a619d4208be9da459510df697596b891c0c633da144dbb025.tgz
    -rw-r--r--. 1 root root  160399150 Oct 31 15:20 ocp-v4.0-art-dev@sha256_f0c339da117cde44c9aae8d0bd054bceb6f19fdb191928f6912a703182330ac2.tgz
    -rw-r--r--. 1 root root  175962005 Oct 31 15:17 ocp-v4.0-art-dev@sha256_f19dd2e80fb41ef31d62bb8c08b339c50d193fdb10fc39cc15b353cbbfeb9b24.tgz
    -rw-r--r--. 1 root root  174942008 Oct 31 15:33 ocp-v4.0-art-dev@sha256_f1dbb81fa1aa724e96dd2b296b855ff52a565fbef003d08030d63590ae6454df.tgz
    -rw-r--r--. 1 root root  246693315 Oct 31 15:31 ocp-v4.0-art-dev@sha256_f44dcf2c94e4fd843cbbf9b11128df2ba856cd813786e42e3da1fdfb0f6ddd01.tgz
    -rw-r--r--. 1 root root  170148293 Oct 31 15:00 ocp-v4.0-art-dev@sha256_f48b68d5960ba903a0d018a10544ae08db5802e21c2fa5615a14fc58b1c1657c.tgz
    -rw-r--r--. 1 root root  168899617 Oct 31 15:16 ocp-v4.0-art-dev@sha256_f5099b0989120a8d08a963601214b5c5cb23417a707a8624b7eb52ab788a7f75.tgz
    -rw-r--r--. 1 root root  176592362 Oct 31 15:05 ocp-v4.0-art-dev@sha256_f68c0e6f5e17b0b0f7ab2d4c39559ea89f900751e64b97cb42311a478338d9c3.tgz
    -rw-r--r--. 1 root root  157937478 Oct 31 15:37 ocp-v4.0-art-dev@sha256_f7ba33a6a9db9cfc4b0ab0f368569e19b9fa08f4c01a0d5f6a243d61ab781bd8.tgz
    -rw-r--r--. 1 root root  145535253 Oct 31 15:26 ocp-v4.0-art-dev@sha256_f8f098911d670287826e9499806553f7a1dd3e2b5332abbec740008c36e84de5.tgz
    -rw-r--r--. 1 root root  158048761 Oct 31 15:40 ocp-v4.0-art-dev@sha256_f914228ddbb99120986262168a705903a9f49724ffa958bb4bf12b2ec1d7fb47.tgz
    -rw-r--r--. 1 root root  167914526 Oct 31 15:37 ocp-v4.0-art-dev@sha256_fa3ca9401c7a9efda0502240aeb8d3ae2d239d38890454f17fe5158b62305010.tgz
    -rw-r--r--. 1 root root  164432422 Oct 31 15:24 ocp-v4.0-art-dev@sha256_fc4783b446c70df30b3120685254b40ce13ba6a2b0bf8fb1645f116cf6a392f1.tgz
    -rw-r--r--. 1 root root  306643814 Oct 31 15:11 troubleshoot@sha256_b86b8aea29a818a9c22944fd18243fa0347c7a2bf1ad8864113ff2bb2d8e0726.tgz
    Copy to Clipboard Toggle word wrap

14.4.4. 운영자 이미지 다운로드

5G 무선 접속 네트워크(RAN) 분산 장치(DU) 클러스터 구성에 사용되는 Day-2 운영자를 사전 캐싱할 수도 있습니다. Day-2 Operators는 설치된 OpenShift Container Platform 버전에 따라 달라집니다.

중요

--acm-version--mce-version 플래그를 사용하여 RHACM 허브 및 멀티클러스터 엔진 Operator 버전을 포함해야 factory-precaching-cli 도구가 RHACM 및 멀티클러스터 엔진 Operator에 적합한 컨테이너 이미지를 미리 캐시할 수 있습니다.

프로세스

  • 운영자 이미지를 사전 캐시합니다.

    # podman run -v /mnt:/mnt -v /root/.docker:/root/.docker --privileged --rm quay.io/openshift-kni/telco-ran-tools:latest -- factory-precaching-cli download \ 
    1
    
       -r 4.19.0 \ 
    2
    
       --acm-version 2.6.3 \ 
    3
    
       --mce-version 2.1.4 \ 
    4
    
       -f /mnt \ 
    5
    
       --img quay.io/custom/repository 
    6
    
       --du-profile -s 
    7
    Copy to Clipboard Toggle word wrap
    1
    factory-precaching-cli 도구의 다운로드 기능을 지정합니다.
    2
    OpenShift 컨테이너 플랫폼 릴리스 버전을 정의합니다.
    3
    RHACM 버전을 정의합니다.
    4
    멀티클러스터 엔진 버전을 정의합니다.
    5
    디스크에 이미지를 다운로드할 폴더를 정의합니다.
    6
    선택 사항: 추가 이미지를 저장하는 저장소를 정의합니다. 이러한 이미지는 디스크에서 다운로드되고 미리 캐시됩니다.
    7
    DU 구성에 포함된 연산자를 사전 캐싱하도록 지정합니다.

    출력 예

    Generated /mnt/imageset.yaml
    Generating list of pre-cached artifacts...
    Processing artifact [1/379]: ocp-v4.0-art-dev@sha256_7753a8d9dd5974be8c90649aadd7c914a3d8a1f1e016774c7ac7c9422e9f9958
    Processing artifact [2/379]: ose-kube-rbac-proxy@sha256_c27a7c01e5968aff16b6bb6670423f992d1a1de1a16e7e260d12908d3322431c
    Processing artifact [3/379]: ocp-v4.0-art-dev@sha256_370e47a14c798ca3f8707a38b28cfc28114f492bb35fe1112e55d1eb51022c99
    ...
    Processing artifact [378/379]: ose-local-storage-operator@sha256_0c81c2b79f79307305e51ce9d3837657cf9ba5866194e464b4d1b299f85034d0
    Processing artifact [379/379]: multicluster-operators-channel-rhel8@sha256_c10f6bbb84fe36e05816e873a72188018856ad6aac6cc16271a1b3966f73ceb3
    ...
    Summary:
    
    Release:                            4.19.0
    Hub Version:                        2.6.3
    ACM Version:                        2.6.3
    MCE Version:                        2.1.4
    Include DU Profile:                 Yes
    Workers:                            83
    Copy to Clipboard Toggle word wrap

14.4.5. 연결이 끊긴 환경에서 사용자 정의 이미지 사전 캐싱

--generate-imageset 인수는 ImageSetConfiguration 사용자 정의 리소스(CR)가 생성된 후 factory-precaching-cli 도구를 중지합니다. 이렇게 하면 이미지를 다운로드하기 전에 ImageSetConfiguration CR을 사용자 정의할 수 있습니다. CR을 사용자 지정한 후 --skip-imageset 인수를 사용하여 ImageSetConfiguration CR에서 지정한 이미지를 다운로드할 수 있습니다.

다음과 같은 방법으로 ImageSetConfiguration CR을 사용자 정의할 수 있습니다.

  • 운영자 및 추가 이미지 추가
  • 연산자 및 추가 이미지 제거
  • Operator 및 카탈로그 소스를 로컬 또는 연결이 끊긴 레지스트리로 변경

프로세스

  1. 이미지를 미리 캐시하세요:

    # podman run -v /mnt:/mnt -v /root/.docker:/root/.docker --privileged --rm quay.io/openshift-kni/telco-ran-tools:latest -- factory-precaching-cli download \ 
    1
    
       -r 4.19.0 \ 
    2
    
       --acm-version 2.6.3 \ 
    3
    
       --mce-version 2.1.4 \ 
    4
    
       -f /mnt \ 
    5
    
       --img quay.io/custom/repository 
    6
    
       --du-profile -s \ 
    7
    
       --generate-imageset 
    8
    Copy to Clipboard Toggle word wrap
    1
    factory-precaching-cli 도구의 다운로드 기능을 지정합니다.
    2
    OpenShift 컨테이너 플랫폼 릴리스 버전을 정의합니다.
    3
    RHACM 버전을 정의합니다.
    4
    멀티클러스터 엔진 버전을 정의합니다.
    5
    디스크에 이미지를 다운로드할 폴더를 정의합니다.
    6
    선택 사항: 추가 이미지를 저장하는 저장소를 정의합니다. 이러한 이미지는 디스크에서 다운로드되고 미리 캐시됩니다.
    7
    DU 구성에 포함된 연산자를 사전 캐싱하도록 지정합니다.
    8
    --generate-imageset 인수는 ImageSetConfiguration CR만 생성하므로 CR을 사용자 정의할 수 있습니다.

    출력 예

    Generated /mnt/imageset.yaml
    Copy to Clipboard Toggle word wrap

    ImageSetConfiguration CR 예제

    apiVersion: mirror.openshift.io/v1alpha2
    kind: ImageSetConfiguration
    mirror:
      platform:
        channels:
        - name: stable-4.19
          minVersion: 4.19.0 
    1
    
          maxVersion: 4.19.0
      additionalImages:
        - name: quay.io/custom/repository
      operators:
        - catalog: registry.redhat.io/redhat/redhat-operator-index:v4.19
          packages:
            - name: advanced-cluster-management 
    2
    
              channels:
                 - name: 'release-2.6'
                   minVersion: 2.6.3
                   maxVersion: 2.6.3
            - name: multicluster-engine 
    3
    
              channels:
                 - name: 'stable-2.1'
                   minVersion: 2.1.4
                   maxVersion: 2.1.4
            - name: local-storage-operator 
    4
    
              channels:
                - name: 'stable'
            - name: ptp-operator 
    5
    
              channels:
                - name: 'stable'
            - name: sriov-network-operator 
    6
    
              channels:
                - name: 'stable'
            - name: cluster-logging 
    7
    
              channels:
                - name: 'stable'
            - name: lvms-operator 
    8
    
              channels:
                - name: 'stable-4.19'
            - name: amq7-interconnect-operator 
    9
    
              channels:
                - name: '1.10.x'
            - name: bare-metal-event-relay 
    10
    
              channels:
                - name: 'stable'
        - catalog: registry.redhat.io/redhat/certified-operator-index:v4.19
          packages:
            - name: sriov-fec 
    11
    
              channels:
                - name: 'stable'
    Copy to Clipboard Toggle word wrap

    1
    플랫폼 버전은 도구에 전달된 버전과 일치합니다.
    2 3
    RHACM과 멀티클러스터 엔진 Operator의 버전은 도구에 전달된 버전과 일치합니다.
    4 5 6 7 8 9 10 11
    CR에는 지정된 모든 DU 연산자가 포함되어 있습니다.
  2. CR에서 카탈로그 리소스를 사용자 지정하세요.

    apiVersion: mirror.openshift.io/v1alpha2
    kind: ImageSetConfiguration
    mirror:
      platform:
    [...]
      operators:
        - catalog: eko4.cloud.lab.eng.bos.redhat.com:8443/redhat/certified-operator-index:v4.19
          packages:
            - name: sriov-fec
              channels:
                - name: 'stable'
    Copy to Clipboard Toggle word wrap

    로컬 또는 연결이 끊긴 레지스트리를 사용하여 이미지를 다운로드하는 경우 먼저 콘텐츠를 가져오려는 레지스트리에 대한 인증서를 추가해야 합니다.

  3. 오류를 방지하려면 레지스트리 인증서를 서버에 복사하세요.

    # cp /tmp/eko4-ca.crt /etc/pki/ca-trust/source/anchors/.
    Copy to Clipboard Toggle word wrap
  4. 그런 다음 인증서 신뢰 저장소를 업데이트합니다.

    # update-ca-trust
    Copy to Clipboard Toggle word wrap
  5. 호스트 /etc/pki 폴더를 factory-cli 이미지에 마운트합니다.

    # podman run -v /mnt:/mnt -v /root/.docker:/root/.docker -v /etc/pki:/etc/pki --privileged --rm quay.io/openshift-kni/telco-ran-tools:latest -- \
    factory-precaching-cli download \ 
    1
    
       -r 4.19.0 \ 
    2
    
       --acm-version 2.6.3 \ 
    3
    
       --mce-version 2.1.4 \ 
    4
    
       -f /mnt \ 
    5
    
       --img quay.io/custom/repository 
    6
    
       --du-profile -s \ 
    7
    
       --skip-imageset 
    8
    Copy to Clipboard Toggle word wrap
    1
    factory-precaching-cli 도구의 다운로드 기능을 지정합니다.
    2
    OpenShift 컨테이너 플랫폼 릴리스 버전을 정의합니다.
    3
    RHACM 버전을 정의합니다.
    4
    멀티클러스터 엔진 버전을 정의합니다.
    5
    디스크에 이미지를 다운로드할 폴더를 정의합니다.
    6
    선택 사항: 추가 이미지를 저장하는 저장소를 정의합니다. 이러한 이미지는 디스크에서 다운로드되고 미리 캐시됩니다.
    7
    DU 구성에 포함된 연산자를 사전 캐싱하도록 지정합니다.
    8
    --skip-imageset 인수를 사용하면 사용자 지정 ImageSetConfiguration CR에 지정한 이미지를 다운로드할 수 있습니다.
  6. 새로운 imageSetConfiguration CR을 생성하지 않고 이미지를 다운로드합니다.

    # podman run -v /mnt:/mnt -v /root/.docker:/root/.docker --privileged --rm quay.io/openshift-kni/telco-ran-tools:latest -- factory-precaching-cli download -r 4.19.0 \
    --acm-version 2.6.3 --mce-version 2.1.4 -f /mnt \
    --img quay.io/custom/repository \
    --du-profile -s \
    --skip-imageset
    Copy to Clipboard Toggle word wrap

14.5. GitOps ZTP에서 이미지 사전 캐싱

SiteConfig 매니페스트는 OpenShift 클러스터를 설치하고 구성하는 방법을 정의합니다. GitOps Zero Touch Provisioning(ZTP) 프로비저닝 워크플로에서 factory-precaching-cli 도구는 SiteConfig 매니페스트에 다음과 같은 추가 필드가 필요합니다.

  • clusters.ignitionConfigOverride
  • nodes.installerArgs
  • nodes.ignitionConfigOverride
중요

SiteConfig v1은 OpenShift Container Platform 버전 4.18부터 더 이상 사용되지 않습니다. 이제 ClusterInstance 사용자 정의 리소스를 사용하여 SiteConfig Operator를 통해 동등하고 향상된 기능을 사용할 수 있습니다. 자세한 내용은 SiteConfig CR에서 ClusterInstance API로 전환하는 절차를 참조하세요.

SiteConfig Operator에 대한 자세한 내용은 SiteConfig를 참조하십시오.

추가 필드가 있는 SiteConfig 예시

apiVersion: ran.openshift.io/v1
kind: SiteConfig
metadata:
  name: "example-5g-lab"
  namespace: "example-5g-lab"
spec:
  baseDomain: "example.domain.redhat.com"
  pullSecretRef:
    name: "assisted-deployment-pull-secret"
  clusterImageSetNameRef: "img4.9.10-x86-64-appsub" 
1

  sshPublicKey: "ssh-rsa ..."
  clusters:
  - clusterName: "sno-worker-0"
    clusterImageSetNameRef: "eko4-img4.11.5-x86-64-appsub" 
2

    clusterLabels:
      group-du-sno: ""
      common-411: true
      sites : "example-5g-lab"
      vendor: "OpenShift"
    clusterNetwork:
      - cidr: 10.128.0.0/14
        hostPrefix: 23
    machineNetwork:
      - cidr: 10.19.32.192/26
    serviceNetwork:
      - 172.30.0.0/16
    networkType: "OVNKubernetes"
    additionalNTPSources:
      - clock.corp.redhat.com
    ignitionConfigOverride:
      '{
        "ignition": {
          "version": "3.1.0"
        },
        "systemd": {
          "units": [
            {
              "name": "var-mnt.mount",
              "enabled": true,
              "contents": "[Unit]\nDescription=Mount partition with artifacts\nBefore=precache-images.service\nBindsTo=precache-images.service\nStopWhenUnneeded=true\n\n[Mount]\nWhat=/dev/disk/by-partlabel/data\nWhere=/var/mnt\nType=xfs\nTimeoutSec=30\n\n[Install]\nRequiredBy=precache-images.service"
            },
            {
              "name": "precache-images.service",
              "enabled": true,
              "contents": "[Unit]\nDescription=Extracts the precached images in discovery stage\nAfter=var-mnt.mount\nBefore=agent.service\n\n[Service]\nType=oneshot\nUser=root\nWorkingDirectory=/var/mnt\nExecStart=bash /usr/local/bin/extract-ai.sh\n#TimeoutStopSec=30\n\n[Install]\nWantedBy=multi-user.target default.target\nWantedBy=agent.service"
            }
          ]
        },
        "storage": {
          "files": [
            {
              "overwrite": true,
              "path": "/usr/local/bin/extract-ai.sh",
              "mode": 755,
              "user": {
                "name": "root"
              },
              "contents": {
                "source": "data:,%23%21%2Fbin%2Fbash%0A%0AFOLDER%3D%22%24%7BFOLDER%3A-%24%28pwd%29%7D%22%0AOCP_RELEASE_LIST%3D%22%24%7BOCP_RELEASE_LIST%3A-ai-images.txt%7D%22%0ABINARY_FOLDER%3D%2Fvar%2Fmnt%0A%0Apushd%20%24FOLDER%0A%0Atotal_copies%3D%24%28sort%20-u%20%24BINARY_FOLDER%2F%24OCP_RELEASE_LIST%20%7C%20wc%20-l%29%20%20%23%20Required%20to%20keep%20track%20of%20the%20pull%20task%20vs%20total%0Acurrent_copy%3D1%0A%0Awhile%20read%20-r%20line%3B%0Ado%0A%20%20uri%3D%24%28echo%20%22%24line%22%20%7C%20awk%20%27%7Bprint%241%7D%27%29%0A%20%20%23tar%3D%24%28echo%20%22%24line%22%20%7C%20awk%20%27%7Bprint%242%7D%27%29%0A%20%20podman%20image%20exists%20%24uri%0A%20%20if%20%5B%5B%20%24%3F%20-eq%200%20%5D%5D%3B%20then%0A%20%20%20%20%20%20echo%20%22Skipping%20existing%20image%20%24tar%22%0A%20%20%20%20%20%20echo%20%22Copying%20%24%7Buri%7D%20%5B%24%7Bcurrent_copy%7D%2F%24%7Btotal_copies%7D%5D%22%0A%20%20%20%20%20%20current_copy%3D%24%28%28current_copy%20%2B%201%29%29%0A%20%20%20%20%20%20continue%0A%20%20fi%0A%20%20tar%3D%24%28echo%20%22%24uri%22%20%7C%20%20rev%20%7C%20cut%20-d%20%22%2F%22%20-f1%20%7C%20rev%20%7C%20tr%20%22%3A%22%20%22_%22%29%0A%20%20tar%20zxvf%20%24%7Btar%7D.tgz%0A%20%20if%20%5B%20%24%3F%20-eq%200%20%5D%3B%20then%20rm%20-f%20%24%7Btar%7D.gz%3B%20fi%0A%20%20echo%20%22Copying%20%24%7Buri%7D%20%5B%24%7Bcurrent_copy%7D%2F%24%7Btotal_copies%7D%5D%22%0A%20%20skopeo%20copy%20dir%3A%2F%2F%24%28pwd%29%2F%24%7Btar%7D%20containers-storage%3A%24%7Buri%7D%0A%20%20if%20%5B%20%24%3F%20-eq%200%20%5D%3B%20then%20rm%20-rf%20%24%7Btar%7D%3B%20current_copy%3D%24%28%28current_copy%20%2B%201%29%29%3B%20fi%0Adone%20%3C%20%24%7BBINARY_FOLDER%7D%2F%24%7BOCP_RELEASE_LIST%7D%0A%0A%23%20workaround%20while%20https%3A%2F%2Fgithub.com%2Fopenshift%2Fassisted-service%2Fpull%2F3546%0A%23cp%20%2Fvar%2Fmnt%2Fmodified-rhcos-4.10.3-x86_64-metal.x86_64.raw.gz%20%2Fvar%2Ftmp%2F.%0A%0Aexit%200"
              }
            },
            {
              "overwrite": true,
              "path": "/usr/local/bin/agent-fix-bz1964591",
              "mode": 755,
              "user": {
                "name": "root"
              },
              "contents": {
                "source": "data:,%23%21%2Fusr%2Fbin%2Fsh%0A%0A%23%20This%20script%20is%20a%20workaround%20for%20bugzilla%201964591%20where%20symlinks%20inside%20%2Fvar%2Flib%2Fcontainers%2F%20get%0A%23%20corrupted%20under%20some%20circumstances.%0A%23%0A%23%20In%20order%20to%20let%20agent.service%20start%20correctly%20we%20are%20checking%20here%20whether%20the%20requested%0A%23%20container%20image%20exists%20and%20in%20case%20%22podman%20images%22%20returns%20an%20error%20we%20try%20removing%20the%20faulty%0A%23%20image.%0A%23%0A%23%20In%20such%20a%20scenario%20agent.service%20will%20detect%20the%20image%20is%20not%20present%20and%20pull%20it%20again.%20In%20case%0A%23%20the%20image%20is%20present%20and%20can%20be%20detected%20correctly%2C%20no%20any%20action%20is%20required.%0A%0AIMAGE%3D%24%28echo%20%241%20%7C%20sed%20%27s%2F%3A.%2A%2F%2F%27%29%0Apodman%20image%20exists%20%24IMAGE%20%7C%7C%20echo%20%22already%20loaded%22%20%7C%7C%20echo%20%22need%20to%20be%20pulled%22%0A%23podman%20images%20%7C%20grep%20%24IMAGE%20%7C%7C%20podman%20rmi%20--force%20%241%20%7C%7C%20true"
              }
            }
          ]
        }
      }'
    nodes:
      - hostName: "snonode.sno-worker-0.example.domain.redhat.com"
        role: "master"
        bmcAddress: "idrac-virtualmedia+https://10.19.28.53/redfish/v1/Systems/System.Embedded.1"
        bmcCredentialsName:
          name: "worker0-bmh-secret"
        bootMACAddress: "e4:43:4b:bd:90:46"
        bootMode: "UEFI"
        rootDeviceHints:
          deviceName: /dev/disk/by-path/pci-0000:01:00.0-scsi-0:2:0:0
        installerArgs: '["--save-partlabel", "data"]'
        ignitionConfigOverride: |
           {
            "ignition": {
              "version": "3.1.0"
            },
            "systemd": {
              "units": [
                {
                  "name": "var-mnt.mount",
                  "enabled": true,
                  "contents": "[Unit]\nDescription=Mount partition with artifacts\nBefore=precache-ocp-images.service\nBindsTo=precache-ocp-images.service\nStopWhenUnneeded=true\n\n[Mount]\nWhat=/dev/disk/by-partlabel/data\nWhere=/var/mnt\nType=xfs\nTimeoutSec=30\n\n[Install]\nRequiredBy=precache-ocp-images.service"
                },
                {
                  "name": "precache-ocp-images.service",
                  "enabled": true,
                  "contents": "[Unit]\nDescription=Extracts the precached OCP images into containers storage\nAfter=var-mnt.mount\nBefore=machine-config-daemon-pull.service nodeip-configuration.service\n\n[Service]\nType=oneshot\nUser=root\nWorkingDirectory=/var/mnt\nExecStart=bash /usr/local/bin/extract-ocp.sh\nTimeoutStopSec=60\n\n[Install]\nWantedBy=multi-user.target"
                }
              ]
            },
            "storage": {
              "files": [
                {
                  "overwrite": true,
                  "path": "/usr/local/bin/extract-ocp.sh",
                  "mode": 755,
                  "user": {
                    "name": "root"
                  },
                  "contents": {
                    "source": "data:,%23%21%2Fbin%2Fbash%0A%0AFOLDER%3D%22%24%7BFOLDER%3A-%24%28pwd%29%7D%22%0AOCP_RELEASE_LIST%3D%22%24%7BOCP_RELEASE_LIST%3A-ocp-images.txt%7D%22%0ABINARY_FOLDER%3D%2Fvar%2Fmnt%0A%0Apushd%20%24FOLDER%0A%0Atotal_copies%3D%24%28sort%20-u%20%24BINARY_FOLDER%2F%24OCP_RELEASE_LIST%20%7C%20wc%20-l%29%20%20%23%20Required%20to%20keep%20track%20of%20the%20pull%20task%20vs%20total%0Acurrent_copy%3D1%0A%0Awhile%20read%20-r%20line%3B%0Ado%0A%20%20uri%3D%24%28echo%20%22%24line%22%20%7C%20awk%20%27%7Bprint%241%7D%27%29%0A%20%20%23tar%3D%24%28echo%20%22%24line%22%20%7C%20awk%20%27%7Bprint%242%7D%27%29%0A%20%20podman%20image%20exists%20%24uri%0A%20%20if%20%5B%5B%20%24%3F%20-eq%200%20%5D%5D%3B%20then%0A%20%20%20%20%20%20echo%20%22Skipping%20existing%20image%20%24tar%22%0A%20%20%20%20%20%20echo%20%22Copying%20%24%7Buri%7D%20%5B%24%7Bcurrent_copy%7D%2F%24%7Btotal_copies%7D%5D%22%0A%20%20%20%20%20%20current_copy%3D%24%28%28current_copy%20%2B%201%29%29%0A%20%20%20%20%20%20continue%0A%20%20fi%0A%20%20tar%3D%24%28echo%20%22%24uri%22%20%7C%20%20rev%20%7C%20cut%20-d%20%22%2F%22%20-f1%20%7C%20rev%20%7C%20tr%20%22%3A%22%20%22_%22%29%0A%20%20tar%20zxvf%20%24%7Btar%7D.tgz%0A%20%20if%20%5B%20%24%3F%20-eq%200%20%5D%3B%20then%20rm%20-f%20%24%7Btar%7D.gz%3B%20fi%0A%20%20echo%20%22Copying%20%24%7Buri%7D%20%5B%24%7Bcurrent_copy%7D%2F%24%7Btotal_copies%7D%5D%22%0A%20%20skopeo%20copy%20dir%3A%2F%2F%24%28pwd%29%2F%24%7Btar%7D%20containers-storage%3A%24%7Buri%7D%0A%20%20if%20%5B%20%24%3F%20-eq%200%20%5D%3B%20then%20rm%20-rf%20%24%7Btar%7D%3B%20current_copy%3D%24%28%28current_copy%20%2B%201%29%29%3B%20fi%0Adone%20%3C%20%24%7BBINARY_FOLDER%7D%2F%24%7BOCP_RELEASE_LIST%7D%0A%0Aexit%200"
                  }
                }
              ]
            }
           }
        nodeNetwork:
          config:
            interfaces:
              - name: ens1f0
                type: ethernet
                state: up
                macAddress: "AA:BB:CC:11:22:33"
                ipv4:
                  enabled: true
                  dhcp: true
                ipv6:
                  enabled: false
          interfaces:
            - name: "ens1f0"
              macAddress: "AA:BB:CC:11:22:33"
Copy to Clipboard Toggle word wrap

1
spec.clusters.clusterImageSetNameRef 필드에서 다른 이미지 세트를 지정하지 않는 한 배포에 사용되는 클러스터 이미지 세트를 지정합니다.
2
개별 클러스터를 배포하는 데 사용되는 클러스터 이미지 세트를 지정합니다. 정의된 경우 사이트 수준에서 spec.clusterImageSetNameRef를 재정의합니다.

14.5.1. clusters.ignitionConfigOverride 필드 이해

clusters.ignitionConfigOverride 필드는 GitOps ZTP 검색 단계에서 Ignition 형식으로 구성을 추가합니다. 구성에는 가상 미디어에 마운트된 ISO의 systemd 서비스가 포함됩니다. 이렇게 하면 스크립트가 RHCOS 라이브 ISO 검색의 일부가 되어 AI(Assisted Installer) 이미지를 로드하는 데 사용할 수 있습니다.

systemd 서비스
systemd 서비스는 var-mnt.mountprecache-images.services 입니다. precache-images.servicevar-mnt.mount 유닛에 의해 /var/mnt 에 마운트될 디스크 파티션에 따라 달라집니다. 이 서비스는 extract-ai.sh 라는 스크립트를 호출합니다.
extract-ai.sh
extract-ai.sh 스크립트는 디스크 파티션에서 필요한 이미지를 추출하여 로컬 컨테이너 스토리지에 로드합니다. 스크립트가 성공적으로 완료되면 이미지를 로컬로 사용할 수 있습니다.
agent-fix-bz1964591
agent-fix-bz1964591 스크립트는 AI 문제에 대한 해결 방법입니다. AI가 이미지를 제거하여 agent.service 가 레지스트리에서 다시 이미지를 끌어오는 것을 방지하기 위해 agent-fix-bz1964591 스크립트는 요청된 컨테이너 이미지가 있는지 확인합니다.

14.5.2. nodes.installerArgs 필드 이해

nodes.installerArgs 필드를 사용하면 coreos-installer 유틸리티가 RHCOS 라이브 ISO를 디스크에 쓰는 방법을 구성할 수 있습니다. OpenShift Container Platform 설치 단계에서 데이터 파티션에 저장된 아티팩트가 필요하므로 데이터 로 표시된 디스크 파티션을 저장하도록 지정해야 합니다.

추가 매개변수는 라이브 RHCOS를 디스크에 쓰는 coreos-installer 유틸리티에 직접 전달됩니다. 다음 재부팅 시 운영 체제가 디스크에서 시작됩니다.

coreos-installer 유틸리티에 여러 옵션을 전달할 수 있습니다.

OPTIONS:
...
    -u, --image-url <URL>
            Manually specify the image URL

    -f, --image-file <path>
            Manually specify a local image file

    -i, --ignition-file <path>
            Embed an Ignition config from a file

    -I, --ignition-url <URL>
            Embed an Ignition config from a URL
...
        --save-partlabel <lx>...
            Save partitions with this label glob

        --save-partindex <id>...
            Save partitions with this number or range
...
        --insecure-ignition
            Allow Ignition URL without HTTPS or hash
Copy to Clipboard Toggle word wrap

14.5.3. nodes.ignitionConfigOverride 필드 이해

clusters.ignitionConfigOverride 와 마찬가지로 nodes.ignitionConfigOverride 필드를 사용하면 coreos-installer 유틸리티에 Ignition 형식의 구성을 추가할 수 있지만, OpenShift Container Platform 설치 단계에서 가능합니다. RHCOS가 디스크에 기록되면 GitOps ZTP 검색 ISO에 포함된 추가 구성을 더 이상 사용할 수 없습니다. 검색 단계에서 추가 구성은 라이브 OS의 메모리에 저장됩니다.

참고

이 단계에서는 추출되어 로드되는 컨테이너 이미지의 수가 검색 단계보다 더 많습니다. OpenShift 컨테이너 플랫폼 릴리스와 Day-2 Operators 설치 여부에 따라 설치 시간이 달라질 수 있습니다.

설치 단계에서는 var-mnt.mountprecache-ocp.services systemd 서비스가 사용됩니다.

precache-ocp.service

precache-ocp.service는 var-mnt.mount 유닛에 의해 /var/mnt 에 마운트될 디스크 파티션에 따라 달라집니다. precache-ocp.service 서비스는 extract-ocp.sh 라는 스크립트를 호출합니다.

중요

OpenShift Container Platform 설치 전에 모든 이미지를 추출하려면 machine-config-daemon-pull.servicenodeip-configuration.service 서비스를 실행하기 전에 precache-ocp.service를 실행해야 합니다.

extract-ocp.sh
extract-ocp.sh 스크립트는 디스크 파티션에서 필요한 이미지를 추출하여 로컬 컨테이너 스토리지에 로드합니다.

Argo CD가 모니터링하는 Git 저장소에 SiteConfig 와 선택적인 PolicyGenerator 또는 PolicyGenTemplate 사용자 정의 리소스(CR)를 커밋하면 CR을 허브 클러스터와 동기화하여 GitOps ZTP 워크플로를 시작할 수 있습니다.

14.6. "렌더링된 카탈로그가 유효하지 않습니다" 오류 문제 해결

로컬 또는 연결이 끊긴 레지스트리를 사용하여 이미지를 다운로드하는 경우 렌더링된 카탈로그가 잘못되었습니다라는 오류가 표시될 수 있습니다. 이는 콘텐츠를 가져오려는 새 레지스트리의 인증서가 없다는 것을 의미합니다.

참고

factory-precaching-cli 도구 이미지는 UBI RHEL 이미지를 기반으로 구축되었습니다. RHCOS에서는 인증서 경로와 위치가 동일합니다.

오류 예시

Generating list of pre-cached artifacts...
error: unable to run command oc-mirror -c /mnt/imageset.yaml file:///tmp/fp-cli-3218002584/mirror --ignore-history --dry-run: Creating directory: /tmp/fp-cli-3218002584/mirror/oc-mirror-workspace/src/publish
Creating directory: /tmp/fp-cli-3218002584/mirror/oc-mirror-workspace/src/v2
Creating directory: /tmp/fp-cli-3218002584/mirror/oc-mirror-workspace/src/charts
Creating directory: /tmp/fp-cli-3218002584/mirror/oc-mirror-workspace/src/release-signatures
backend is not configured in /mnt/imageset.yaml, using stateless mode
backend is not configured in /mnt/imageset.yaml, using stateless mode
No metadata detected, creating new workspace
level=info msg=trying next host error=failed to do request: Head "https://eko4.cloud.lab.eng.bos.redhat.com:8443/v2/redhat/redhat-operator-index/manifests/v4.11": x509: certificate signed by unknown authority host=eko4.cloud.lab.eng.bos.redhat.com:8443

The rendered catalog is invalid.

Run "oc-mirror list operators --catalog CATALOG-NAME --package PACKAGE-NAME" for more information.

error: error rendering new refs: render reference "eko4.cloud.lab.eng.bos.redhat.com:8443/redhat/redhat-operator-index:v4.11": error resolving name : failed to do request: Head "https://eko4.cloud.lab.eng.bos.redhat.com:8443/v2/redhat/redhat-operator-index/manifests/v4.11": x509: certificate signed by unknown authority
Copy to Clipboard Toggle word wrap

프로세스

  1. 레지스트리 인증서를 서버에 복사하세요.

    # cp /tmp/eko4-ca.crt /etc/pki/ca-trust/source/anchors/.
    Copy to Clipboard Toggle word wrap
  2. 인증서 신뢰 저장소를 업데이트합니다.

    # update-ca-trust
    Copy to Clipboard Toggle word wrap
  3. 호스트 /etc/pki 폴더를 factory-cli 이미지에 마운트합니다.

    # podman run -v /mnt:/mnt -v /root/.docker:/root/.docker -v /etc/pki:/etc/pki --privileged -it --rm quay.io/openshift-kni/telco-ran-tools:latest -- \
    factory-precaching-cli download -r 4.19.0 --acm-version 2.5.4 \
       --mce-version 2.0.4 -f /mnt \--img quay.io/custom/repository
       --du-profile -s --skip-imageset
    Copy to Clipboard Toggle word wrap

15장. 단일 노드 OpenShift 클러스터를 위한 이미지 기반 업그레이드

15.1. 단일 노드 OpenShift 클러스터의 이미지 기반 업그레이드 이해

OpenShift Container Platform 4.14.13부터 Lifecycle Agent는 단일 노드 OpenShift 클러스터의 플랫폼 버전을 업그레이드하는 대체 방법을 제공합니다. 이미지 기반 업그레이드는 표준 업그레이드 방식보다 빠르며 OpenShift Container Platform <4.y>에서 <4.y+2>로, <4.yz>에서 <4.y.z+n>으로 직접 업그레이드할 수 있습니다.

이 업그레이드 방법은 대상 단일 노드 OpenShift 클러스터에 새로운 ostree stateroot로 설치된 전용 시드 클러스터에서 생성된 OCI 이미지를 활용합니다. 시드 클러스터는 대상 OpenShift Container Platform 버전, Day 2 Operator 및 모든 대상 클러스터에 공통적인 구성을 사용하여 배포된 단일 노드 OpenShift 클러스터입니다.

시드 클러스터에서 생성된 시드 이미지를 사용하면 시드 클러스터와 동일한 하드웨어 조합, Day 2 Operator 및 클러스터 구성을 갖춘 모든 단일 노드 OpenShift 클러스터에서 플랫폼 버전을 업그레이드할 수 있습니다.

중요

이미지 기반 업그레이드는 클러스터가 실행되는 하드웨어 플랫폼에 맞는 사용자 정의 이미지를 사용합니다. 각 하드웨어 플랫폼에는 별도의 시드 이미지가 필요합니다.

Lifecycle Agent는 참여 클러스터에서 두 개의 사용자 정의 리소스(CR)를 사용하여 업그레이드를 조정합니다.

  • 시드 클러스터에서 SeedGenerator CR은 시드 이미지 생성을 허용합니다. 이 CR은 시드 이미지를 푸시할 저장소를 지정합니다.
  • 대상 클러스터에서 ImageBasedUpgrade CR은 대상 클러스터 업그레이드를 위한 시드 이미지와 워크로드에 대한 백업 구성을 지정합니다.

SeedGenerator CR의 예

apiVersion: lca.openshift.io/v1
kind: SeedGenerator
metadata:
  name: seedimage
spec:
  seedImage: <seed_image>
Copy to Clipboard Toggle word wrap

ImageBasedUpgrade CR 예시

apiVersion: lca.openshift.io/v1
kind: ImageBasedUpgrade
metadata:
  name: upgrade
spec:
  stage: Idle 
1

  seedImageRef: 
2

    version: <target_version>
    image: <seed_container_image>
    pullSecretRef:
      name: <seed_pull_secret>
  autoRollbackOnFailure: {}
#    initMonitorTimeoutSeconds: 1800 
3

  extraManifests: 
4

  - name: example-extra-manifests
    namespace: openshift-lifecycle-agent
  oadpContent: 
5

  - name: oadp-cm-example
    namespace: openshift-adp
Copy to Clipboard Toggle word wrap

1
ImageBasedUpgrade CR의 단계. 값은 Idle , Prep , Upgrade 또는 Rollback이 될 수 있습니다.
2
대상 플랫폼 버전, 사용할 시드 이미지, 이미지에 액세스하는 데 필요한 비밀번호입니다.
3
선택 사항: 첫 번째 재부팅 후 업그레이드가 해당 시간 내에 완료되지 않을 경우 롤백할 시간(초)입니다. 정의되지 않았거나 0 으로 설정된 경우 기본값인 1800 초(30분)가 사용됩니다.
4
선택 사항: 업그레이드 후에도 보관할 사용자 정의 카탈로그 소스가 포함된 ConfigMap 리소스 목록과 시드 이미지에 포함되지 않은 대상 클러스터에 적용할 추가 매니페스트입니다.
5
OADP 백업복원 CR이 포함된 ConfigMap 리소스 목록입니다.

15.1.1. 이미지 기반 업그레이드 단계

시드 클러스터에서 시드 이미지를 생성한 후 ImageBasedUpgrade CR에서 spec.stage 필드를 다음 값 중 하나로 설정하여 대상 클러스터의 단계를 이동할 수 있습니다.

  • 게으른
  • 예습
  • 업그레이드
  • 롤백 (선택 사항)

그림 15.1. 이미지 기반 업그레이드 단계

15.1.1.1. 유휴 단계

Lifecycle Agent는 Operator가 처음 배포될 때 ImageBasedUpgrade CR을 생성하여 상태를 Idle 로 설정합니다. 이는 기본 단계입니다. 지속적인 업그레이드가 없으며 클러스터는 준비 단계로 이동할 준비가 되었습니다.

그림 15.2. Idle 단계에서의 전환

또한 다음 단계 중 하나를 수행하려면 유휴 단계로 이동합니다.

  • 성공적인 업그레이드를 마무리하세요
  • 롤백을 마무리하다
  • 업그레이드 단계의 피벗 전 단계까지 진행 중인 업그레이드를 취소합니다.

유휴 단계로 이동하면 수명 주기 에이전트가 리소스를 정리하여 클러스터가 다시 업그레이드될 준비가 됩니다.

그림 15.3. 유휴 단계로의 전환

중요

업그레이드를 취소할 때 RHACM을 사용하는 경우 대상 관리 클러스터에서 import.open-cluster-management.io/disable-auto-import 주석을 제거하여 클러스터의 자동 가져오기를 다시 활성화해야 합니다.

15.1.1.2. 준비 단계
참고

예정된 유지 관리 기간 전에 이 단계를 완료할 수 있습니다.

준비 단계의 경우 ImageBasedUpgrade CR에서 다음 업그레이드 세부 정보를 지정합니다.

  • 사용할 시드 이미지
  • 백업할 리소스
  • 업그레이드 후 적용할 추가 매니페스트 및 유지할 사용자 정의 카탈로그 소스(있는 경우)

그런 다음, 귀하가 지정한 내용에 따라 Lifecycle Agent는 현재 실행 중인 버전에 영향을 주지 않고 업그레이드를 준비합니다. 이 단계에서 라이프사이클 에이전트는 특정 조건을 충족하는지 확인하여 대상 클러스터가 업그레이드 단계로 진행할 준비가 되었는지 확인합니다. 운영자는 시드 이미지에 지정된 추가 컨테이너 이미지와 함께 시드 이미지를 대상 클러스터로 가져옵니다. Lifecycle Agent는 컨테이너 스토리지 디스크에 충분한 공간이 있는지 확인하고, 필요한 경우 Operator는 디스크 사용량이 지정된 임계값 아래로 떨어질 때까지 고정 해제된 이미지를 삭제합니다. 컨테이너 스토리지 디스크 정리를 구성하거나 비활성화하는 방법에 대한 자세한 내용은 "컨테이너 스토리지 디스크의 자동 이미지 정리 구성"을 참조하세요.

또한 OADP 운영자의 백업복원 CR을 사용하여 백업 리소스를 준비합니다. 이러한 CR은 업그레이드 단계에서 클러스터를 재구성하고, RHACM에 클러스터를 등록하고, 애플리케이션 아티팩트를 복원하는 데 사용됩니다.

OADP Operator 외에도 Lifecycle Agent는 ostree 버전 관리 시스템을 사용하여 백업을 생성하는데, 이를 통해 업그레이드와 롤백 후에 클러스터를 완전히 재구성할 수 있습니다.

준비 단계가 완료되면 유휴 단계로 이동하여 업그레이드 프로세스를 취소할 수 있고, ImageBasedUpgrade CR에서 업그레이드 단계로 이동하여 업그레이드를 시작할 수 있습니다. 업그레이드를 취소하면 운영자가 정리 작업을 수행합니다.

그림 15.4. 준비 단계에서의 전환

15.1.1.3. 업그레이드 단계

업그레이드 단계는 두 단계로 구성됩니다.

피벗 전
새로운 stateroot로 전환하기 직전에 Lifecycle Agent는 필요한 클러스터별 아티팩트를 수집하여 새로운 stateroot에 저장합니다. 준비 단계에서 지정한 클러스터 리소스의 백업은 호환 가능한 개체 스토리지 솔루션에 생성됩니다. Lifecycle Agent는 ImageBasedUpgrade CR의 extraManifests 필드에 지정된 CR이나 대상 클러스터에 바인딩된 ZTP 정책에 설명된 CR을 내보냅니다. 피벗 전 단계가 완료되면 Lifecycle Agent는 새로운 stateroot 배포를 기본 부팅 항목으로 설정하고 노드를 재부팅합니다.
post-pivot
새로운 stateroot에서 부팅한 후 Lifecycle Agent는 시드 이미지의 클러스터 암호화도 다시 생성합니다. 이를 통해 동일한 시드 이미지로 업그레이드된 각 단일 노드 OpenShift 클러스터에 고유하고 유효한 암호화 개체가 있는지 확인할 수 있습니다. 그런 다음 운영자는 피벗 이전 단계에서 수집된 클러스터별 아티팩트를 적용하여 클러스터를 재구성합니다. 운영자는 저장된 모든 CR을 적용하고 백업을 복원합니다.

업그레이드가 완료되고 변경 사항에 만족하면 유휴 단계로 이동하여 업그레이드를 마무리할 수 있습니다.

중요

업그레이드를 완료하면 원래 릴리스로 롤백할 수 없습니다.

그림 15.5. 업그레이드 단계에서 전환

업그레이드를 취소하려면 업그레이드 단계의 피벗 이전 단계까지 취소할 수 있습니다. 업그레이드 후 문제가 발생하면 롤백 단계로 이동하여 수동 롤백을 수행할 수 있습니다.

15.1.1.4. 롤백 단계

롤백 단계는 실패 시 수동 또는 자동으로 시작될 수 있습니다. 롤백 단계에서 라이프사이클 에이전트는 원래 ostree stateroot 배포를 기본값으로 설정합니다. 그런 다음 노드는 이전 릴리스의 OpenShift Container Platform과 애플리케이션 구성으로 재부팅됩니다.

주의

롤백 후 유휴 단계로 전환하면 라이프사이클 에이전트는 실패한 업그레이드 문제를 해결하는 데 사용할 수 있는 리소스를 정리합니다.

Lifecycle Agent는 업그레이드가 지정된 시간 제한 내에 완료되지 않으면 자동 롤백을 시작합니다. 자동 롤백에 대한 자세한 내용은 "Lifecycle Agent를 사용하여 롤백 단계로 이동" 또는 "Lifecycle Agent와 GitOps ZTP를 사용하여 롤백 단계로 이동" 섹션을 참조하세요.

그림 15.6. 롤백 단계에서 전환

15.1.2. 이미지 기반 업그레이드에 대한 지침

성공적인 이미지 기반 업그레이드를 위해서는 배포가 특정 요구 사항을 충족해야 합니다.

이미지 기반 업그레이드를 수행할 수 있는 다양한 배포 방법이 있습니다.

GitOps ZTP
GitOps Zero Touch Provisioning(ZTP)을 사용하여 클러스터를 배포하고 구성합니다.
Non-GitOps
클러스터를 수동으로 배포하고 구성합니다.

연결이 끊긴 환경에서 이미지 기반 업그레이드를 수행할 수 있습니다. 연결이 끊긴 환경에서 이미지를 미러링하는 방법에 대한 자세한 내용은 "연결이 끊긴 설치 환경에서 이미지 미러링"을 참조하세요.

15.1.2.1. 구성 요소의 최소 소프트웨어 버전

배포 방법에 따라 이미지 기반 업그레이드에는 다음과 같은 최소 소프트웨어 버전이 필요합니다.

Expand
표 15.1. 구성 요소의 최소 소프트웨어 버전
Component소프트웨어 버전필수 항목

라이프사이클 에이전트

4.16

제공됨

OADP 운영자

1.4.1

제공됨

관리형 클러스터 버전

4.14.13

제공됨

hub 클러스터 버전

4.16

없음

RHACM

2.10.2

없음

GitOps ZTP 플러그인

4.16

GitOps ZTP 배포 방법에만 해당

Red Hat OpenShift GitOps

1.12

GitOps ZTP 배포 방법에만 해당

토폴로지 인식 라이프사이클 관리자(TALM)

4.16

GitOps ZTP 배포 방법에만 해당

로컬 스토리지 운영자 [1]

4.14

제공됨

논리 볼륨 관리자(LVM) 스토리지 [1]

4.14.2

제공됨

  1. 영구 저장소는 LVM 저장소 또는 로컬 저장소 운영자 중 하나에서 제공해야 하며, 둘 다에서 제공해서는 안 됩니다.
15.1.2.2. 허브 클러스터 가이드라인

Red Hat Advanced Cluster Management(RHACM)를 사용하는 경우 허브 클러스터가 다음 조건을 충족해야 합니다.

  • 시드 이미지에 RHACM 리소스가 포함되지 않도록 하려면 시드 이미지를 생성하기 전에 모든 선택적 RHACM 추가 기능을 비활성화해야 합니다.
  • 대상 단일 노드 OpenShift 클러스터에서 이미지 기반 업그레이드를 수행하기 전에 허브 클러스터를 최소한 대상 버전으로 업그레이드해야 합니다.
15.1.2.3. 씨앗 이미지 가이드라인

시드 이미지는 동일한 하드웨어와 유사한 구성을 갖춘 단일 노드 OpenShift 클러스터 세트를 대상으로 합니다. 즉, 시드 클러스터는 다음 항목에 대한 대상 클러스터의 구성과 일치해야 합니다.

  • CPU 토폴로지

    • CPU 코어 수
    • 예약된 CPU 수와 같은 조정된 성능 구성
  • 대상 클러스터에 대한 MachineConfig 리소스
  • IP 버전

    참고

    이 릴리스에서는 듀얼 스택 네트워킹이 지원되지 않습니다.

  • Lifecycle Agent 및 OADP Operator를 포함한 Day 2 Operator 세트
  • 연결이 끊긴 레지스트리
  • FIPS 구성

다음 구성은 참여 클러스터에서 부분적으로만 일치해야 합니다.

  • 대상 클러스터에 프록시 구성이 있는 경우 시드 클러스터에도 프록시 구성이 있어야 하지만 구성은 동일할 필요는 없습니다.
  • 모든 참여 클러스터에는 컨테이너 스토리지를 위한 기본 디스크의 전용 파티션이 필요합니다. 하지만 파티션의 크기와 시작점은 꼭 같을 필요는 없습니다. MachineConfig CR의 spec.config.storage.disks.partitions.label: varlibcontainers 레이블만 시드 클러스터와 대상 클러스터에서 일치해야 합니다. 디스크 파티션을 만드는 방법에 대한 자세한 내용은 "ostree stateroots 간 공유 컨테이너 파티션 구성" 또는 "GitOps ZTP를 사용할 때 ostree stateroots 간 공유 컨테이너 파티션 구성"을 참조하세요.

시드 이미지에 포함할 내용에 대한 자세한 내용은 "시드 이미지 구성" 및 "RAN DU 프로필을 사용한 시드 이미지 구성"을 참조하세요.

15.1.2.4. OADP 백업 및 복원 지침

OADP Operator를 사용하면 ConfigMap 객체에 래핑된 백업복원 CR을 사용하여 대상 클러스터에서 애플리케이션을 백업하고 복원할 수 있습니다. 업그레이드 후 복원할 수 있도록 애플리케이션은 현재 및 대상 OpenShift Container Platform 버전에서 작동해야 합니다. 백업에는 처음 생성된 리소스가 포함되어야 합니다.

다음 리소스는 백업에서 제외해야 합니다.

  • pods
  • 엔드포인트
  • controllerrevision
  • podmetrics
  • packagemanifest
  • 레플리카셋
  • localvolume, LSO(Local Storage Operator)를 사용하는 경우

단일 노드 OpenShift에는 두 가지 로컬 스토리지 구현이 있습니다.

로컬 스토리지 운영자(LSO)
Lifecycle Agent는 localvolume 리소스와 관련 StorageClass 리소스를 포함하여 필요한 아티팩트를 자동으로 백업하고 복원합니다. 애플리케이션 Backup CR에서 persistentvolumes 리소스를 제외해야 합니다.
LVM 스토리지
LVM 스토리지 아티팩트에 대한 백업복원 CR을 만들어야 합니다. 애플리케이션 Backup CR에 persistentVolumes 리소스를 포함해야 합니다.

이미지 기반 업그레이드의 경우, 지정된 대상 클러스터에서 하나의 Operator만 지원됩니다.

중요

두 연산자 모두 ImageBasedUpgrade CR을 통해 연산자 CR을 추가 매니페스트로 적용해서는 안 됩니다.

영구 볼륨 내용은 피벗 이후에 보존되고 사용됩니다. DataProtectionApplication CR을 구성할 때 이미지 기반 업그레이드에 대해 .spec.configuration.restic.enablefalse 로 설정되어 있는지 확인해야 합니다. 이렇게 하면 컨테이너 스토리지 인터페이스 통합이 비활성화됩니다.

15.1.2.4.1. lca.openshift.io/apply-wave 가이드라인

lca.openshift.io/apply-wave 주석은 백업 또는 복원 CR의 적용 순서를 결정합니다. 주석의 값은 문자열 숫자여야 합니다. 백업 또는 복원 CR에 lca.openshift.io/apply-wave 주석을 정의하는 경우 주석 값을 기준으로 증가하는 순서대로 적용됩니다. 주석을 정의하지 않으면 함께 적용됩니다.

lca.openshift.io/apply-wave 주석은 플랫폼 복원 CR(예: RHACM 및 LVM 스토리지 아티팩트)에서 애플리케이션의 CR보다 숫자적으로 낮아야 합니다. 이렇게 하면 플랫폼 아티팩트가 애플리케이션보다 먼저 복원됩니다.

애플리케이션에 클러스터 범위 리소스가 포함되어 있는 경우 별도의 백업복원 CR을 만들어 애플리케이션에서 만든 특정 클러스터 범위 리소스에 대한 백업 범위를 지정해야 합니다. 클러스터 범위 리소스에 대한 복원 CR은 나머지 애플리케이션 복원 CR보다 먼저 복원되어야 합니다.

15.1.2.4.2. lca.openshift.io/apply-label guidelines

lca.openshift.io/apply-label 주석을 사용하면 특정 리소스만 독점적으로 백업할 수 있습니다. 주석에서 정의한 리소스에 따라 Lifecycle Agent는 lca.openshift.io/backup: <backup_name> 레이블을 적용하고 Backup CR을 생성할 때 지정된 리소스에 labelSelector.matchLabels.lca.openshift.io/backup: <backup_name> 레이블 선택기를 추가합니다.

특정 리소스를 백업하기 위해 lca.openshift.io/apply-label 주석을 사용하려면 주석에 나열된 리소스도 spec 섹션에 포함되어야 합니다. lca.openshift.io/apply-label 주석이 Backup CR에 사용되는 경우 spec 섹션에 다른 리소스 유형이 지정되어 있어도 주석에 나열된 리소스만 백업됩니다.

CR 예

apiVersion: velero.io/v1
kind: Backup
metadata:
  name: acm-klusterlet
  namespace: openshift-adp
  annotations:
    lca.openshift.io/apply-label: rbac.authorization.k8s.io/v1/clusterroles/klusterlet,apps/v1/deployments/open-cluster-management-agent/klusterlet 
1

  labels:
    velero.io/storage-location: default
spec:
  includedNamespaces:
   - open-cluster-management-agent
  includedClusterScopedResources:
   - clusterroles
  includedNamespaceScopedResources:
   - deployments
Copy to Clipboard Toggle word wrap

1
값은 클러스터 범위 리소스의 group/version/resource/name 형식의 쉼표로 구분된 오브젝트 목록 또는 네임스페이스 범위 리소스의 group/version/resource/namespace/name 형식이어야 하며 관련 Backup CR에 연결해야 합니다.
15.1.2.5. 추가 매니페스트 지침

Lifecycle Agent는 추가 매니페스트를 사용하여 새 stateroot 배포로 재부팅한 후 애플리케이션 아티팩트를 복원하기 전에 대상 클러스터를 복원합니다.

다른 배포 방법에는 추가 매니페스트를 적용하는 다른 방법이 필요합니다.

GitOps ZTP

lca.openshift.io/target-ocp-version: <target_ocp_version > 레이블을 사용하여 피벗 후 Lifecycle Agent에서 추출하고 적용해야 하는 추가 매니페스트를 표시합니다. ImageBasedUpgrade CR에서 lca.openshift.io/target-ocp-version /target-ocp-version- count 주석을 사용하여 lca.openshift.io/target-ocp-ocp-version으로 레이블이 지정된 매니페스트 수를 지정할 수 있습니다. 지정된 경우 라이프사이클 에이전트는 정책에서 추출된 매니페스트 수가 사전 및 업그레이드 단계에서 주석에 제공된 수와 일치하는지 확인합니다.

lca.openshift.io/target-ocp-version-manifest-count 주석의 예

apiVersion: lca.openshift.io/v1
kind: ImageBasedUpgrade
metadata:
  annotations:
    lca.openshift.io/target-ocp-version-manifest-count: "5"
  name: upgrade
Copy to Clipboard Toggle word wrap

Non-GitOps
추가 매니페스트를 lca.openshift.io/apply-ECDSA 주석 으로 표시하여 적용 순서를 결정합니다. 레이블이 지정된 추가 매니페스트는 ConfigMap 오브젝트로 래핑되고, Lifecycle Agent에서 피벗 후 사용하는 ImageBasedUpgrade CR에서 참조합니다.

대상 클러스터에서 사용자 정의 카탈로그 소스를 사용하는 경우 올바른 릴리스 버전을 가리키는 추가 매니페스트로 포함해야 합니다.

중요

다음 항목을 추가 매니페스트로 적용할 수 없습니다.

  • MachineConfig 오브젝트
  • OLM Operator 서브스크립션

15.2.1. 이미지 기반 업그레이드를 위한 공유 컨테이너 파티션 구성

이미지 기반 업그레이드를 위해 단일 노드 OpenShift 클러스터에는 공유 /var/lib/containers 파티션이 있어야 합니다. 이 작업은 설치 시에 수행할 수 있습니다.

15.2.1.1. ostree stateroots 간의 공유 컨테이너 파티션 구성

설치 중에 시드 클러스터와 대상 클러스터 모두에 MachineConfig를 적용하여 별도의 파티션을 만들고 업그레이드 프로세스 중에 사용될 두 개의 ostree stateroot 간에 /var/lib/containers 파티션을 공유합니다.

중요

이 절차는 설치 시 완료해야 합니다.

프로세스

  • MachineConfig를 적용하여 별도의 파티션을 만듭니다.

    apiVersion: machineconfiguration.openshift.io/v1
    kind: MachineConfig
    metadata:
      labels:
        machineconfiguration.openshift.io/role: master
      name: 98-var-lib-containers-partitioned
    spec:
      config:
        ignition:
          version: 3.2.0
        storage:
          disks:
            - device: /dev/disk/by-path/pci-<root_disk> 
    1
    
              partitions:
                - label: var-lib-containers
                  startMiB: <start_of_partition> 
    2
    
                  sizeMiB: <partition_size> 
    3
    
          filesystems:
            - device: /dev/disk/by-partlabel/var-lib-containers
              format: xfs
              mountOptions:
                - defaults
                - prjquota
              path: /var/lib/containers
              wipeFilesystem: true
        systemd:
          units:
            - contents: |-
                # Generated by Butane
                [Unit]
                Before=local-fs.target
                Requires=systemd-fsck@dev-disk-by\x2dpartlabel-var\x2dlib\x2dcontainers.service
                After=systemd-fsck@dev-disk-by\x2dpartlabel-var\x2dlib\x2dcontainers.service
    
                [Mount]
                Where=/var/lib/containers
                What=/dev/disk/by-partlabel/var-lib-containers
                Type=xfs
                Options=defaults,prjquota
    
                [Install]
                RequiredBy=local-fs.target
              enabled: true
              name: var-lib-containers.mount
    Copy to Clipboard Toggle word wrap
    1
    root 디스크를 지정합니다.
    2
    파티션의 시작을 MiB 단위로 지정합니다. 값이 너무 작으면 설치가 실패합니다.
    3
    사전 캐시된 이미지에 대한 충분한 디스크 공간을 확보하려면 파티션의 최소 크기를 500GB로 지정하세요. 값이 너무 작으면 설치 후 배포가 실패합니다.

GitOps Zero Touch Provisioning(ZTP) 워크플로를 사용하는 경우 다음 절차에 따라 시드 및 대상 클러스터에 별도의 디스크 파티션을 만들고 /var/lib/containers 파티션을 공유합니다.

중요

이 절차는 설치 시 완료해야 합니다.

사전 요구 사항

  • Butane이 설치되어 있습니다. 자세한 내용은 "부탄 설치"를 참조하세요.

프로세스

  1. storage.bu 파일을 만듭니다.

    variant: fcos
    version: 1.3.0
    storage:
      disks:
      - device: /dev/disk/by-path/pci-<root_disk> 
    1
    
        wipe_table: false
        partitions:
        - label: var-lib-containers
          start_mib: <start_of_partition> 
    2
    
          size_mib: <partition_size> 
    3
    
      filesystems:
        - path: /var/lib/containers
          device: /dev/disk/by-partlabel/var-lib-containers
          format: xfs
          wipe_filesystem: true
          with_mount_unit: true
          mount_options:
            - defaults
            - prjquota
    Copy to Clipboard Toggle word wrap
    1
    root 디스크를 지정합니다.
    2
    파티션의 시작을 MiB 단위로 지정합니다. 값이 너무 작으면 설치가 실패합니다.
    3
    사전 캐시된 이미지에 대한 충분한 디스크 공간을 확보하려면 파티션의 최소 크기를 500GB로 지정하세요. 값이 너무 작으면 설치 후 배포가 실패합니다.
  2. 다음 명령을 실행하여 storage.bu를 Ignition 파일로 변환합니다.

    $ butane storage.bu
    Copy to Clipboard Toggle word wrap

    출력 예

    {"ignition":{"version":"3.2.0"},"storage":{"disks":[{"device":"/dev/disk/by-path/pci-0000:00:17.0-ata-1.0","partitions":[{"label":"var-lib-containers","sizeMiB":0,"startMiB":250000}],"wipeTable":false}],"filesystems":[{"device":"/dev/disk/by-partlabel/var-lib-containers","format":"xfs","mountOptions":["defaults","prjquota"],"path":"/var/lib/containers","wipeFilesystem":true}]},"systemd":{"units":[{"contents":"# Generated by Butane\n[Unit]\nRequires=systemd-fsck@dev-disk-by\\x2dpartlabel-var\\x2dlib\\x2dcontainers.service\nAfter=systemd-fsck@dev-disk-by\\x2dpartlabel-var\\x2dlib\\x2dcontainers.service\n\n[Mount]\nWhere=/var/lib/containers\nWhat=/dev/disk/by-partlabel/var-lib-containers\nType=xfs\nOptions=defaults,prjquota\n\n[Install]\nRequiredBy=local-fs.target","enabled":true,"name":"var-lib-containers.mount"}]}}
    Copy to Clipboard Toggle word wrap

  3. SiteConfig CR의 .spec.clusters.nodes.ignitionConfigOverride 필드에 출력을 복사합니다.

    [...]
    spec:
      clusters:
        - nodes:
            - hostName: <name>
              ignitionConfigOverride: '{"ignition":{"version":"3.2.0"},"storage":{"disks":[{"device":"/dev/disk/by-path/pci-0000:00:17.0-ata-1.0","partitions":[{"label":"var-lib-containers","sizeMiB":0,"startMiB":250000}],"wipeTable":false}],"filesystems":[{"device":"/dev/disk/by-partlabel/var-lib-containers","format":"xfs","mountOptions":["defaults","prjquota"],"path":"/var/lib/containers","wipeFilesystem":true}]},"systemd":{"units":[{"contents":"# Generated by Butane\n[Unit]\nRequires=systemd-fsck@dev-disk-by\\x2dpartlabel-var\\x2dlib\\x2dcontainers.service\nAfter=systemd-fsck@dev-disk-by\\x2dpartlabel-var\\x2dlib\\x2dcontainers.service\n\n[Mount]\nWhere=/var/lib/containers\nWhat=/dev/disk/by-partlabel/var-lib-containers\nType=xfs\nOptions=defaults,prjquota\n\n[Install]\nRequiredBy=local-fs.target","enabled":true,"name":"var-lib-containers.mount"}]}}'
    [...]
    Copy to Clipboard Toggle word wrap

검증

  1. 설치 중 또는 설치 후에 다음 명령을 실행하여 허브 클러스터에서 BareMetalHost 개체에 주석이 표시되는지 확인합니다.

    $ oc get bmh -n my-sno-ns my-sno -ojson | jq '.metadata.annotations["bmac.agent-install.openshift.io/ignition-config-overrides"]'
    Copy to Clipboard Toggle word wrap

    출력 예

    "{\"ignition\":{\"version\":\"3.2.0\"},\"storage\":{\"disks\":[{\"device\":\"/dev/disk/by-path/pci-0000:00:17.0-ata-1.0\",\"partitions\":[{\"label\":\"var-lib-containers\",\"sizeMiB\":0,\"startMiB\":250000}],\"wipeTable\":false}],\"filesystems\":[{\"device\":\"/dev/disk/by-partlabel/var-lib-containers\",\"format\":\"xfs\",\"mountOptions\":[\"defaults\",\"prjquota\"],\"path\":\"/var/lib/containers\",\"wipeFilesystem\":true}]},\"systemd\":{\"units\":[{\"contents\":\"# Generated by Butane\\n[Unit]\\nRequires=systemd-fsck@dev-disk-by\\\\x2dpartlabel-var\\\\x2dlib\\\\x2dcontainers.service\\nAfter=systemd-fsck@dev-disk-by\\\\x2dpartlabel-var\\\\x2dlib\\\\x2dcontainers.service\\n\\n[Mount]\\nWhere=/var/lib/containers\\nWhat=/dev/disk/by-partlabel/var-lib-containers\\nType=xfs\\nOptions=defaults,prjquota\\n\\n[Install]\\nRequiredBy=local-fs.target\",\"enabled\":true,\"name\":\"var-lib-containers.mount\"}]}}"
    Copy to Clipboard Toggle word wrap

  2. 설치 후 다음 명령을 실행하여 단일 노드 OpenShift 디스크 상태를 확인하세요.

    # lsblk
    Copy to Clipboard Toggle word wrap

    출력 예

    NAME   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINTS
    sda      8:0    0 446.6G  0 disk
    ├─sda1   8:1    0     1M  0 part
    ├─sda2   8:2    0   127M  0 part
    ├─sda3   8:3    0   384M  0 part /boot
    ├─sda4   8:4    0 243.6G  0 part /var
    │                                /sysroot/ostree/deploy/rhcos/var
    │                                /usr
    │                                /etc
    │                                /
    │                                /sysroot
    └─sda5   8:5    0 202.5G  0 part /var/lib/containers
    Copy to Clipboard Toggle word wrap

    # df -h
    Copy to Clipboard Toggle word wrap

    출력 예

    Filesystem      Size  Used Avail Use% Mounted on
    devtmpfs        4.0M     0  4.0M   0% /dev
    tmpfs           126G   84K  126G   1% /dev/shm
    tmpfs            51G   93M   51G   1% /run
    /dev/sda4       244G  5.2G  239G   3% /sysroot
    tmpfs           126G  4.0K  126G   1% /tmp
    /dev/sda5       203G  119G   85G  59% /var/lib/containers
    /dev/sda3       350M  110M  218M  34% /boot
    tmpfs            26G     0   26G   0% /run/user/1000
    Copy to Clipboard Toggle word wrap

15.2.2. 이미지 기반 업그레이드를 위한 운영자 설치

Lifecycle Agent와 OADP Operator를 설치하여 클러스터를 업그레이드에 대비하세요.

GitOps가 아닌 방법으로 OADP Operator를 설치하려면 "OADP Operator 설치"를 참조하세요.

15.2.2.1. CLI를 사용하여 Lifecycle Agent 설치

OpenShift CLI( oc )를 사용하여 Lifecycle Agent를 설치할 수 있습니다.

사전 요구 사항

  • OpenShift CLI(oc)가 설치되어 있습니다.
  • 클러스터 관리자 권한이 있는 사용자로 로그인했습니다.

프로세스

  1. Lifecycle Agent에 대한 네임스페이스 개체 YAML 파일을 만듭니다.

    apiVersion: v1
    kind: Namespace
    metadata:
      name: openshift-lifecycle-agent
      annotations:
        workload.openshift.io/allowed: management
    Copy to Clipboard Toggle word wrap
    1. 다음 명령을 실행하여 네임스페이스 CR을 만듭니다.

      $ oc create -f <namespace_filename>.yaml
      Copy to Clipboard Toggle word wrap
  2. Lifecycle Agent에 대한 OperatorGroup 개체 YAML 파일을 만듭니다.

    apiVersion: operators.coreos.com/v1
    kind: OperatorGroup
    metadata:
      name: openshift-lifecycle-agent
      namespace: openshift-lifecycle-agent
    spec:
      targetNamespaces:
      - openshift-lifecycle-agent
    Copy to Clipboard Toggle word wrap
    1. 다음 명령을 실행하여 OperatorGroup CR을 생성합니다.

      $ oc create -f <operatorgroup_filename>.yaml
      Copy to Clipboard Toggle word wrap
  3. Lifecycle Agent에 대한 구독 CR을 만듭니다.

    apiVersion: operators.coreos.com/v1alpha1
    kind: Subscription
    metadata:
      name: openshift-lifecycle-agent-subscription
      namespace: openshift-lifecycle-agent
    spec:
      channel: "stable"
      name: lifecycle-agent
      source: redhat-operators
      sourceNamespace: openshift-marketplace
    Copy to Clipboard Toggle word wrap
    1. 다음 명령을 실행하여 구독 CR을 만듭니다.

      $ oc create -f <subscription_filename>.yaml
      Copy to Clipboard Toggle word wrap

검증

  1. 설치가 성공했는지 확인하려면 다음 명령을 실행하여 CSV 리소스를 검사하세요.

    $ oc get csv -n openshift-lifecycle-agent
    Copy to Clipboard Toggle word wrap

    출력 예

    NAME                              DISPLAY                     VERSION               REPLACES                           PHASE
    lifecycle-agent.v4.19.0           Openshift Lifecycle Agent   4.19.0                Succeeded
    Copy to Clipboard Toggle word wrap

  2. 다음 명령을 실행하여 Lifecycle Agent가 실행 중인지 확인하세요.

    $ oc get deploy -n openshift-lifecycle-agent
    Copy to Clipboard Toggle word wrap

    출력 예

    NAME                                 READY   UP-TO-DATE   AVAILABLE   AGE
    lifecycle-agent-controller-manager   1/1     1            1           14s
    Copy to Clipboard Toggle word wrap

15.2.2.2. 웹 콘솔을 사용하여 Lifecycle Agent 설치

OpenShift Container Platform 웹 콘솔을 사용하여 Lifecycle Agent를 설치할 수 있습니다.

사전 요구 사항

  • 클러스터 관리자 권한이 있는 사용자로 로그인했습니다.

프로세스

  1. OpenShift Container Platform 웹 콘솔에서 OperatorOperatorHub로 이동합니다.
  2. 사용 가능한 운영자 목록에서 Lifecycle Agent를 검색한 다음 설치를 클릭합니다.
  3. Install Operator 페이지에서 클러스터의 특정 네임스페이스 아래에서 openshift-lifecycle-agent를 선택합니다.
  4. 설치를 클릭합니다.

검증

  1. 설치에 성공했는지 확인하려면 다음을 수행하십시오.

    1. Operators설치된 Operators를 클릭합니다.
    2. Lifecycle Agent가 openshift-lifecycle-agent 프로젝트에 InstallSucceeded Status 로 나열되어 있는지 확인하세요.

      참고

      설치 중에 Operator는 실패 상태를 표시할 수 있습니다. 나중에 InstallSucceeded 메시지와 함께 설치에 성공하면 이 실패 메시지를 무시할 수 있습니다.

Operator가 성공적으로 설치되지 않은 경우 다음을 수행하십시오.

  1. 운영자설치된 운영자를 클릭하고 운영자 구독설치 계획 탭을 검사하여 상태 아래에 오류나 실패가 있는지 확인하세요.
  2. 워크로드Pod를 클릭하고 openshift-lifecycle-agent 프로젝트의 Pod에 대한 로그를 확인합니다.
15.2.2.3. GitOps ZTP를 사용하여 Lifecycle Agent 설치

이미지 기반 업그레이드를 수행하려면 GitOps Zero Touch Provisioning(ZTP)을 사용하여 Lifecycle Agent를 설치합니다.

프로세스

  1. ztp-site-generate 컨테이너 이미지에서 다음 CR을 추출하여 source-cr 디렉토리에 푸시합니다.

    LcaSubscriptionNS.yaml 파일 예시

    apiVersion: v1
    kind: Namespace
    metadata:
      name: openshift-lifecycle-agent
      annotations:
        workload.openshift.io/allowed: management
        ran.openshift.io/ztp-deploy-wave: "2"
      labels:
        kubernetes.io/metadata.name: openshift-lifecycle-agent
    Copy to Clipboard Toggle word wrap

    LcaSubscriptionOperGroup.yaml 파일 예시

    apiVersion: operators.coreos.com/v1
    kind: OperatorGroup
    metadata:
      name: lifecycle-agent-operatorgroup
      namespace: openshift-lifecycle-agent
      annotations:
        ran.openshift.io/ztp-deploy-wave: "2"
    spec:
      targetNamespaces:
        - openshift-lifecycle-agent
    Copy to Clipboard Toggle word wrap

    LcaSubscription.yaml 파일 예시

    apiVersion: operators.coreos.com/v1alpha1
    kind: Subscription
    metadata:
      name: lifecycle-agent
      namespace: openshift-lifecycle-agent
      annotations:
        ran.openshift.io/ztp-deploy-wave: "2"
    spec:
      channel: "stable"
      name: lifecycle-agent
      source: redhat-operators
      sourceNamespace: openshift-marketplace
      installPlanApproval: Manual
    status:
      state: AtLatestKnown
    Copy to Clipboard Toggle word wrap

    디렉터리 구조의 예

    ├── kustomization.yaml
    ├── sno
    │   ├── example-cnf.yaml
    │   ├── common-ranGen.yaml
    │   ├── group-du-sno-ranGen.yaml
    │   ├── group-du-sno-validator-ranGen.yaml
    │   └── ns.yaml
    ├── source-crs
    │   ├── LcaSubscriptionNS.yaml
    │   ├── LcaSubscriptionOperGroup.yaml
    │   ├── LcaSubscription.yaml
    Copy to Clipboard Toggle word wrap

  2. 공통 PolicyGenerator에 CR을 추가합니다.

    apiVersion: policy.open-cluster-management.io/v1
    kind: PolicyGenerator
    metadata:
      name: common-latest
    placementBindingDefaults:
      name: common-placement-binding
    policyDefaults:
      namespace: ztp-common
      placement:
        labelSelector:
          common: "true"
          du-profile: "latest"
      remediationAction: inform
      severity: low
      namespaceSelector:
        exclude:
          - kube-*
        include:
          - '*'
      evaluationInterval:
        compliant: 10m
        noncompliant: 10s
    policies:
    - name: common-latest-subscriptions-policy
      policyAnnotations:
        ran.openshift.io/ztp-deploy-wave: "2"
      manifests:
        - path: source-crs/LcaSubscriptionNS.yaml
        - path: source-crs/LcaSubscriptionOperGroup.yaml
        - path: source-crs/LcaSubscription.yaml
    [...]
    Copy to Clipboard Toggle word wrap
15.2.2.4. GitOps ZTP를 사용하여 OADP Operator 설치 및 구성

업그레이드를 시작하기 전에 GitOps ZTP로 OADP Operator를 설치하고 구성합니다.

프로세스

  1. ztp-site-generate 컨테이너 이미지에서 다음 CR을 추출하여 source-cr 디렉토리에 푸시합니다.

    OadpSubscriptionNS.yaml 파일 예시

    apiVersion: v1
    kind: Namespace
    metadata:
      name: openshift-adp
      annotations:
        ran.openshift.io/ztp-deploy-wave: "2"
      labels:
        kubernetes.io/metadata.name: openshift-adp
    Copy to Clipboard Toggle word wrap

    Example OadpSubscriptionOperGroup.yaml file

    apiVersion: operators.coreos.com/v1
    kind: OperatorGroup
    metadata:
      name: redhat-oadp-operator
      namespace: openshift-adp
      annotations:
        ran.openshift.io/ztp-deploy-wave: "2"
    spec:
      targetNamespaces:
      - openshift-adp
    Copy to Clipboard Toggle word wrap

    OadpSubscription.yaml 파일 예시

    apiVersion: operators.coreos.com/v1alpha1
    kind: Subscription
    metadata:
      name: redhat-oadp-operator
      namespace: openshift-adp
      annotations:
        ran.openshift.io/ztp-deploy-wave: "2"
    spec:
      channel: stable-1.4
      name: redhat-oadp-operator
      source: redhat-operators
      sourceNamespace: openshift-marketplace
      installPlanApproval: Manual
    status:
      state: AtLatestKnown
    Copy to Clipboard Toggle word wrap

    OadpOperatorStatus.yaml 파일 예시

    apiVersion: operators.coreos.com/v1
    kind: Operator
    metadata:
      name: redhat-oadp-operator.openshift-adp
      annotations:
        ran.openshift.io/ztp-deploy-wave: "2"
    status:
      components:
        refs:
        - kind: Subscription
          namespace: openshift-adp
          conditions:
          - type: CatalogSourcesUnhealthy
            status: "False"
        - kind: InstallPlan
          namespace: openshift-adp
          conditions:
          - type: Installed
            status: "True"
        - kind: ClusterServiceVersion
          namespace: openshift-adp
          conditions:
          - type: Succeeded
            status: "True"
            reason: InstallSucceeded
    Copy to Clipboard Toggle word wrap

    디렉터리 구조의 예

    ├── kustomization.yaml
    ├── sno
    │   ├── example-cnf.yaml
    │   ├── common-ranGen.yaml
    │   ├── group-du-sno-ranGen.yaml
    │   ├── group-du-sno-validator-ranGen.yaml
    │   └── ns.yaml
    ├── source-crs
    │   ├── OadpSubscriptionNS.yaml
    │   ├── OadpSubscriptionOperGroup.yaml
    │   ├── OadpSubscription.yaml
    │   ├── OadpOperatorStatus.yaml
    Copy to Clipboard Toggle word wrap

  2. 공통 PolicyGenTemplate 에 CR을 추가합니다.

    apiVersion: ran.openshift.io/v1
    kind: PolicyGenTemplate
    metadata:
      name: "example-common-latest"
      namespace: "ztp-common"
    spec:
      bindingRules:
        common: "true"
        du-profile: "latest"
      sourceFiles:
        - fileName: OadpSubscriptionNS.yaml
          policyName: "subscriptions-policy"
        - fileName: OadpSubscriptionOperGroup.yaml
          policyName: "subscriptions-policy"
        - fileName: OadpSubscription.yaml
          policyName: "subscriptions-policy"
        - fileName: OadpOperatorStatus.yaml
          policyName: "subscriptions-policy"
    [...]
    Copy to Clipboard Toggle word wrap
  3. 대상 클러스터에 대해서만 DataProtectionApplication CR과 S3 비밀을 생성합니다.

    1. ztp-site-generate 컨테이너 이미지에서 다음 CR을 추출하여 source-cr 디렉토리에 푸시합니다.

      OadpDataProtectionApplication.yaml 파일 예시

      apiVersion: oadp.openshift.io/v1alpha1
      kind: DataProtectionApplication
      metadata:
        name: dataprotectionapplication
        namespace: openshift-adp
        annotations:
          ran.openshift.io/ztp-deploy-wave: "100"
      spec:
        configuration:
          restic:
            enable: false 
      1
      
          velero:
            defaultPlugins:
              - aws
              - openshift
            resourceTimeout: 10m
        backupLocations:
          - velero:
              config:
                profile: "default"
                region: minio
                s3Url: $url
                insecureSkipTLSVerify: "true"
                s3ForcePathStyle: "true"
              provider: aws
              default: true
              credential:
                key: cloud
                name: cloud-credentials
              objectStorage:
                bucket: $bucketName 
      2
      
                prefix: $prefixName 
      3
      
      status:
        conditions:
        - reason: Complete
          status: "True"
          type: Reconciled
      Copy to Clipboard Toggle word wrap

      1
      이미지 기반 업그레이드의 경우 spec.configuration.restic.enable 필드를 false 로 설정해야 합니다. 그 이유는 영구 볼륨 내용이 유지되고 업그레이드 후에도 재사용되기 때문입니다.
      2 3
      버킷은 S3 백엔드에서 생성되는 버킷 이름을 정의합니다. 접두사는 버킷에 자동으로 생성되는 하위 디렉토리의 이름을 정의합니다. 버킷과 접두사의 조합은 각 대상 클러스터마다 고유해야 서로 간섭을 피할 수 있습니다. 각 대상 클러스터에 고유한 저장 디렉토리를 보장하려면 Red Hat Advanced Cluster Management 허브 템플릿 함수를 사용할 수 있습니다(예: 접두사: {{hub .ManagedClusterName hub}}) .

      OadpSecret.yaml 파일 예

      apiVersion: v1
      kind: Secret
      metadata:
        name: cloud-credentials
        namespace: openshift-adp
        annotations:
          ran.openshift.io/ztp-deploy-wave: "100"
      type: Opaque
      Copy to Clipboard Toggle word wrap

      OadpBackupStorageLocationStatus.yaml 파일 예시

      apiVersion: velero.io/v1
      kind: BackupStorageLocation
      metadata:
        name: dataprotectionapplication-1 
      1
      
        namespace: openshift-adp
        annotations:
          ran.openshift.io/ztp-deploy-wave: "100"
      status:
        phase: Available
      Copy to Clipboard Toggle word wrap

      1
      BackupStorageLocation 리소스의 이름 값은 <DataProtectionApplication.metadata.name>-<index> 패턴을 따라야 합니다. <index>DataProtectionApplication 리소스의 spec.backupLocations 필드에 있는 해당 backupLocations 항목의 위치를 나타냅니다. 위치는 1 부터 시작합니다. OadpDataProtectionApplication.yaml 파일에서 DataProtectionApplication 리소스의 metadata.name 값이 변경되면 BackupStorageLocation 리소스의 metadata.name 필드도 그에 따라 업데이트합니다.

      OadpBackupStorageLocationStatus.yaml CR은 OADP에서 생성한 백업 스토리지 위치의 가용성을 확인합니다.

    2. 사이트 PolicyGenTemplate 에 CR을 재정의하여 추가합니다.

      apiVersion: ran.openshift.io/v1
      kind: PolicyGenTemplate
      metadata:
        name: "example-cnf"
        namespace: "ztp-site"
      spec:
        bindingRules:
          sites: "example-cnf"
          du-profile: "latest"
        mcp: "master"
        sourceFiles:
          ...
          - fileName: OadpSecret.yaml
            policyName: "config-policy"
            data:
              cloud: <your_credentials> 
      1
      
          - fileName: OadpDataProtectionApplication.yaml 
      2
      
            policyName: "config-policy"
            spec:
              backupLocations:
                - velero:
                    config:
                      region: minio
                      s3Url: <your_S3_URL> 
      3
      
                      profile: "default"
                      insecureSkipTLSVerify: "true"
                      s3ForcePathStyle: "true"
                    provider: aws
                    default: true
                    credential:
                      key: cloud
                      name: cloud-credentials
                    objectStorage:
                      bucket: <your_bucket_name> 
      4
      
                      prefix: <cluster_name> 
      5
      
          - fileName: OadpBackupStorageLocationStatus.yaml
            policyName: "config-policy"
      Copy to Clipboard Toggle word wrap
      1
      S3 스토리지 백엔드에 대한 자격 증명을 지정하세요.
      2
      OadpDataProtectionApplication CR에 두 개 이상의 backupLocations 항목이 정의된 경우 상태 추적을 위해 각 위치에 해당 OadpBackupStorageLocation CR이 추가되어 있는지 확인하세요. 예제 OadpBackupStorageLocationStatus.yaml 파일에 설명된 대로 각 추가 OadpBackupStorageLocation CR의 이름이 올바른 인덱스로 재정의되었는지 확인하세요.
      3
      S3 호환 버킷의 URL을 지정하세요.
      4 5
      버킷은 S3 백엔드에서 생성되는 버킷 이름을 정의합니다. 접두사는 버킷 에 자동으로 생성되는 하위 디렉토리의 이름을 정의합니다. 버킷접두사 의 조합은 각 대상 클러스터마다 고유해야 서로 간섭을 피할 수 있습니다. 각 대상 클러스터에 고유한 저장 디렉토리를 보장하려면 Red Hat Advanced Cluster Management 허브 템플릿 함수를 사용할 수 있습니다(예: 접두사: {{hub .ManagedClusterName hub}}) .

Lifecycle Agent를 사용하여 SeedGenerator CR(사용자 정의 리소스)으로 시드 이미지를 생성합니다.

15.2.3.1. 시드 이미지 구성

시드 이미지는 동일한 하드웨어와 유사한 구성을 갖춘 단일 노드 OpenShift 클러스터 세트를 대상으로 합니다. 즉, 시드 이미지에는 시드 클러스터가 대상 클러스터와 공유하는 모든 구성 요소와 구성이 있어야 합니다. 따라서 시드 클러스터에서 생성된 시드 이미지에는 클러스터별 구성이 포함될 수 없습니다.

다음 표는 시드 이미지에 포함해야 하는 구성 요소, 리소스 및 구성과 포함하지 않아야 하는 구성 요소, 리소스 및 구성을 나열합니다.

Expand
표 15.2. 시드 이미지 구성
클러스터 구성시드 이미지에 포함

성과 프로필

제공됨

대상 클러스터에 대한 MachineConfig 리소스

제공됨

IP 버전 [1]

제공됨

Lifecycle Agent 및 OADP Operator를 포함한 Day 2 Operator 세트

제공됨

연결이 끊긴 레지스트리 구성 [2]

제공됨

유효한 프록시 구성 [3]

제공됨

FIPS 구성

제공됨

대상 클러스터의 크기와 일치하는 컨테이너 스토리지를 위한 기본 디스크의 전용 파티션

제공됨

로컬 볼륨

  • LSO의 LocalVolume 에서 사용되는 StorageClass
  • LSO용 LocalVolume
  • LVMS용 LVMCluster CR

없음

OADP 데이터 보호 애플리케이션 CR

없음

  1. 이 릴리스에서는 듀얼 스택 네트워킹이 지원되지 않습니다.
  2. 시드 클러스터가 연결이 끊긴 환경에 설치된 경우 대상 클러스터도 연결이 끊긴 환경에 설치해야 합니다.
  3. 프록시 구성은 시드 클러스터와 대상 클러스터 모두에서 활성화하거나 비활성화해야 합니다. 하지만 클러스터에 구성된 프록시 서버는 일치할 필요가 없습니다.
15.2.3.1.1. RAN DU 프로필을 사용한 시드 이미지 구성

다음 표는 RAN DU 프로필을 사용할 때 시드 이미지에 포함해야 하는 구성 요소, 리소스 및 구성과 포함하지 않아야 하는 구성 요소, 리소스 및 구성을 나열합니다.

Expand
표 15.3. RAN DU 프로파일을 사용한 시드 이미지 구성
리소스시드 이미지에 포함

Day 0 설치의 일부로 적용되는 모든 추가 매니페스트

제공됨

모든 Day 2 Operator 서브스크립션

제공됨

DisableOLMPprof.yaml

제공됨

TunedPerformancePatch.yaml

제공됨

PerformanceProfile.yaml

제공됨

SriovOperatorConfig.yaml

제공됨

DisableSnoNetworkDiag.yaml

제공됨

StorageClass.yaml

아니요, StorageLV.yaml 에서 사용하는 경우에는 그렇습니다.

StorageLV.yaml

없음

StorageLVMCluster.yaml

없음

Expand
표 15.4. 추가 매니페스트를 위한 RAN DU 프로파일이 포함된 시드 이미지 구성
리소스추가 매니페스트로 신청하세요

ClusterLogForwarder.yaml

제공됨

참고

DU 프로필에는 클러스터 로깅 운영자가 포함되어 있지만, 해당 프로필은 클러스터 로깅 운영자 CR을 구성하거나 적용하지 않습니다. 로그 전달을 활성화하려면 ClusterLogForwarder.yaml CR을 추가 매니페스트로 포함합니다. 추가 매니페스트는 이미지 기반 업그레이드 프로세스 중에 대상 단일 노드 OpenShift 클러스터에 적용됩니다.

ReduceMonitoringFootprint.yaml

제공됨

SriovFecClusterConfig.yaml

제공됨

PtpOperatorConfigForEvent.yaml

제공됨

DefaultCatsrc.yaml

제공됨

PtpConfig.yaml

대상 클러스터의 인터페이스가 시드 클러스터와 공통인 경우 시드 이미지에 포함할 수 있습니다. 그렇지 않은 경우 추가 매니페스트로 적용하세요.

SriovNetwork.yamlSriovNetworkNodePolicy.yaml

네임스페이스를 포함한 구성이 시드 클러스터와 대상 클러스터에서 정확히 동일한 경우 시드 이미지에 포함할 수 있습니다. 그렇지 않은 경우 추가 매니페스트로 적용하세요.

15.2.3.2. Lifecycle Agent를 사용하여 시드 이미지 생성

Lifecycle Agent를 사용하여 관리되는 클러스터에서 시드 이미지를 생성합니다. 운영자는 필요한 시스템 구성을 확인하고, 시드 이미지를 생성하기 전에 필요한 시스템 정리를 수행하고, 이미지 생성을 시작합니다. 시드 이미지 생성에는 다음 작업이 포함됩니다.

  • 클러스터 운영자 중지
  • 시드 이미지 구성 준비
  • SeedGenerator CR에 지정된 이미지 저장소에 시드 이미지를 생성하고 푸시합니다.
  • 클러스터 운영자 복원
  • 만료되는 시드 클러스터 인증서
  • 시드 클러스터에 대한 새 인증서 생성
  • 시드 클러스터에서 SeedGenerator CR 복원 및 업데이트

사전 요구 사항

  • Kubernetes Operator용 RHACM 및 멀티클러스터 엔진이 시드 클러스터에 설치되지 않았습니다.
  • 시드 클러스터에 공유 컨테이너 디렉토리를 구성했습니다.
  • 시드 클러스터에 OADP Operator와 Lifecycle Agent의 최소 버전을 설치했습니다.
  • 시드 클러스터에 영구 볼륨이 구성되지 않았는지 확인하세요.
  • Local Storage Operator를 사용하는 경우 시드 클러스터에 LocalVolume CR이 존재하지 않는지 확인하세요.
  • LVM 스토리지를 사용하는 경우 시드 클러스터에 LVMCluster CR이 없는지 확인하세요.
  • OADP를 사용하는 경우 시드 클러스터에 DataProtectionApplication CR이 존재하지 않는지 확인하세요.

프로세스

  1. 시드 이미지에 포함되어서는 안 되는 시드 클러스터의 RHACM 관련 리소스를 삭제하려면 허브에서 관리되는 클러스터를 분리합니다.

    1. 다음 명령을 실행하여 시드 클러스터를 수동으로 분리합니다.

      $ oc delete managedcluster sno-worker-example
      Copy to Clipboard Toggle word wrap
      1. 관리되는 클러스터가 제거될 때까지 기다리세요. 클러스터를 제거한 후 적절한 SeedGenerator CR을 생성합니다. Lifecycle Agent는 RHACM 아티팩트를 정리합니다.
    2. GitOps ZTP를 사용하는 경우 kustomization.yaml 에서 시드 클러스터의 SiteConfig CR을 제거하여 클러스터를 분리합니다.

      1. 여러 SiteConfig CR을 참조하는 kustomization.yaml 파일이 있는 경우 kustomization.yaml 에서 시드 클러스터의 SiteConfig CR을 제거하세요.

        apiVersion: kustomize.config.k8s.io/v1beta1
        kind: Kustomization
        
        generators:
        #- example-seed-sno1.yaml
        - example-target-sno2.yaml
        - example-target-sno3.yaml
        Copy to Clipboard Toggle word wrap
      2. SiteConfig CR 하나를 참조하는 kustomization.yaml 이 있는 경우 kustomization.yaml 에서 시드 클러스터의 SiteConfig CR을 제거하고 generators: {} 줄을 추가합니다.

        apiVersion: kustomize.config.k8s.io/v1beta1
        kind: Kustomization
        
        generators: {}
        Copy to Clipboard Toggle word wrap
      3. Git 저장소에 kustomization.yaml 변경 사항을 커밋하고 저장소에 변경 사항을 푸시합니다.

        ArgoCD 파이프라인은 변경 사항을 감지하고 관리되는 클러스터를 제거합니다.

  2. 레지스트리에 시드 이미지를 푸시할 수 있도록 Secret 객체를 만듭니다.

    1. 다음 명령을 실행하여 인증 파일을 만듭니다.

      $ MY_USER=myuserid
      $ AUTHFILE=/tmp/my-auth.json
      $ podman login --authfile ${AUTHFILE} -u ${MY_USER} quay.io/${MY_USER}
      Copy to Clipboard Toggle word wrap
      $ base64 -w 0 ${AUTHFILE} ; echo
      Copy to Clipboard Toggle word wrap
    2. openshift-lifecycle-agent 네임스페이스의 seedgen 이라는 Secret YAML 파일에 있는 seedAuth 필드에 출력을 복사합니다.

      apiVersion: v1
      kind: Secret
      metadata:
        name: seedgen 
      1
      
        namespace: openshift-lifecycle-agent
      type: Opaque
      data:
        seedAuth: <encoded_AUTHFILE> 
      2
      Copy to Clipboard Toggle word wrap
      1
      비밀 리소스에는 name: seedgennamespace: openshift-lifecycle-agent 필드가 있어야 합니다.
      2
      생성된 시드 이미지를 푸시하기 위해 레지스트리에 대한 쓰기 액세스를 위한 base64로 인코딩된 인증 파일을 지정합니다.
    3. 다음 명령을 실행하여 Secret을 적용합니다.

      $ oc apply -f secretseedgenerator.yaml
      Copy to Clipboard Toggle word wrap
  3. SeedGenerator CR을 생성합니다.

    apiVersion: lca.openshift.io/v1
    kind: SeedGenerator
    metadata:
      name: seedimage 
    1
    
    spec:
      seedImage: <seed_container_image> 
    2
    Copy to Clipboard Toggle word wrap
    1
    SeedGenerator CR의 이름은 seedimage 여야 합니다.
    2
    컨테이너 이미지 URL을 지정합니다(예: quay.io/example/seed-container-image:<tag> ) . <seed_cluster_name>:<ocp_version> 형식을 사용하는 것이 좋습니다.
  4. 다음 명령을 실행하여 시드 이미지를 생성합니다.

    $ oc apply -f seedgenerator.yaml
    Copy to Clipboard Toggle word wrap
    중요

    Lifecycle Agent가 시드 이미지를 생성하는 동안 클러스터가 재부팅되고 API 기능이 손실됩니다. SeedGenerator CR을 적용하면 kubelet 과 CRI-O 작업이 중지되고 이미지 생성이 시작됩니다.

더 많은 시드 이미지를 생성하려면 시드 이미지를 생성하려는 버전으로 새로운 시드 클러스터를 프로비저닝해야 합니다.

검증

  • 클러스터가 복구되어 사용 가능해지면 다음 명령을 실행하여 SeedGenerator CR의 상태를 확인할 수 있습니다.

    $ oc get seedgenerator -o yaml
    Copy to Clipboard Toggle word wrap

    출력 예

    status:
      conditions:
      - lastTransitionTime: "2024-02-13T21:24:26Z"
        message: Seed Generation completed
        observedGeneration: 1
        reason: Completed
        status: "False"
        type: SeedGenInProgress
      - lastTransitionTime: "2024-02-13T21:24:26Z"
        message: Seed Generation completed
        observedGeneration: 1
        reason: Completed
        status: "True"
        type: SeedGenCompleted 
    1
    
      observedGeneration: 1
    Copy to Clipboard Toggle word wrap

    1
    시드 이미지 생성이 완료되었습니다.

Lifecycle Agent는 이미지 기반 업그레이드를 처리하기 위해 ConfigMap 객체에 래핑된 모든 OADP 리소스, 추가 매니페스트 및 사용자 정의 카탈로그 소스가 필요합니다.

업그레이드 중에 리소스를 백업하고 복원하는 데 사용되는 OADP 리소스를 만듭니다.

사전 요구 사항

  • 호환되는 시드 클러스터에서 시드 이미지를 생성했습니다.
  • OADP 백업 및 복원 리소스를 생성했습니다.
  • stateroots 간에 공유되는 컨테이너 이미지에 대해 대상 클러스터에 별도의 파티션을 생성했습니다. 자세한 내용은 "이미지 기반 업그레이드를 위한 공유 컨테이너 파티션 구성"을 참조하세요.
  • 시드 이미지와 함께 사용된 버전과 호환되는 Lifecycle Agent 버전을 배포했습니다.
  • 대상 클러스터에 OADP Operator, DataProtectionApplication CR 및 해당 비밀번호를 설치했습니다.
  • S3 호환 스토리지 솔루션을 만들었고, 적절한 자격 증명을 구성하여 바로 사용할 수 있는 버킷을 만들었습니다. 자세한 내용은 "OADP 설치에 관하여"를 참조하세요.

프로세스

  1. OADP Operator가 설치된 동일한 네임스페이스 (openshift-adp) 에서 플랫폼 아티팩트에 대한 OADP 백업복원 CR을 만듭니다.

    1. 대상 클러스터가 RHACM에서 관리되는 경우 RHACM 아티팩트를 백업하고 복원하기 위해 다음 YAML 파일을 추가합니다.

      RHACM용 PlatformBackupRestore.yaml

      apiVersion: velero.io/v1
      kind: Backup
      metadata:
        name: acm-klusterlet
        annotations:
          lca.openshift.io/apply-label: "apps/v1/deployments/open-cluster-management-agent/klusterlet,v1/secrets/open-cluster-management-agent/bootstrap-hub-kubeconfig,rbac.authorization.k8s.io/v1/clusterroles/klusterlet,v1/serviceaccounts/open-cluster-management-agent/klusterlet,scheduling.k8s.io/v1/priorityclasses/klusterlet-critical,rbac.authorization.k8s.io/v1/clusterroles/open-cluster-management:klusterlet-admin-aggregate-clusterrole,rbac.authorization.k8s.io/v1/clusterrolebindings/klusterlet,operator.open-cluster-management.io/v1/klusterlets/klusterlet,apiextensions.k8s.io/v1/customresourcedefinitions/klusterlets.operator.open-cluster-management.io,v1/secrets/open-cluster-management-agent/open-cluster-management-image-pull-credentials" 
      1
      
        labels:
          velero.io/storage-location: default
        namespace: openshift-adp
      spec:
        includedNamespaces:
        - open-cluster-management-agent
        includedClusterScopedResources:
        - klusterlets.operator.open-cluster-management.io
        - clusterroles.rbac.authorization.k8s.io
        - clusterrolebindings.rbac.authorization.k8s.io
        - priorityclasses.scheduling.k8s.io
        includedNamespaceScopedResources:
        - deployments
        - serviceaccounts
        - secrets
        excludedNamespaceScopedResources: []
      ---
      apiVersion: velero.io/v1
      kind: Restore
      metadata:
        name: acm-klusterlet
        namespace: openshift-adp
        labels:
          velero.io/storage-location: default
        annotations:
          lca.openshift.io/apply-wave: "1"
      spec:
        backupName:
          acm-klusterlet
      Copy to Clipboard Toggle word wrap

      1
      multiclusterHub CR에 .spec.imagePullSecret 이 정의되어 있지 않고 허브 클러스터의 open-cluster-management-agent 네임스페이스에 비밀이 없는 경우 v1/secrets/open-cluster-management-agent/open-cluster-management-image-pull-credentials를 제거합니다.
    2. LVM 저장소를 통해 클러스터에 영구 볼륨을 생성한 경우 LVM 저장소 아티팩트에 대한 다음 YAML 파일을 추가합니다.

      LVM 스토리지용 PlatformBackupRestoreLvms.yaml

      apiVersion: velero.io/v1
      kind: Backup
      metadata:
        labels:
          velero.io/storage-location: default
        name: lvmcluster
        namespace: openshift-adp
      spec:
        includedNamespaces:
          - openshift-storage
        includedNamespaceScopedResources:
          - lvmclusters
          - lvmvolumegroups
          - lvmvolumegroupnodestatuses
      ---
      apiVersion: velero.io/v1
      kind: Restore
      metadata:
        name: lvmcluster
        namespace: openshift-adp
        labels:
          velero.io/storage-location: default
        annotations:
          lca.openshift.io/apply-wave: "2" 
      1
      
      spec:
        backupName:
          lvmcluster
      Copy to Clipboard Toggle word wrap

      1
      lca.openshift.io/apply-wave 값은 애플리케이션 복원 CR에 지정된 값보다 낮아야 합니다.
  2. 업그레이드 후 애플리케이션을 복원해야 하는 경우 openshift-adp 네임스페이스에서 애플리케이션에 대한 OADP 백업복원 CR을 만듭니다.

    1. openshift-adp 네임스페이스에서 클러스터 범위 애플리케이션 아티팩트에 대한 OADP CR을 만듭니다.

      LSO 및 LVM 스토리지에 대한 클러스터 범위 애플리케이션 아티팩트에 대한 OADP CR 예시

      apiVersion: velero.io/v1
      kind: Backup
      metadata:
        annotations:
          lca.openshift.io/apply-label: "apiextensions.k8s.io/v1/customresourcedefinitions/test.example.com,security.openshift.io/v1/securitycontextconstraints/test,rbac.authorization.k8s.io/v1/clusterroles/test-role,rbac.authorization.k8s.io/v1/clusterrolebindings/system:openshift:scc:test" 
      1
      
        name: backup-app-cluster-resources
        labels:
          velero.io/storage-location: default
        namespace: openshift-adp
      spec:
        includedClusterScopedResources:
        - customresourcedefinitions
        - securitycontextconstraints
        - clusterrolebindings
        - clusterroles
        excludedClusterScopedResources:
        - Namespace
      ---
      apiVersion: velero.io/v1
      kind: Restore
      metadata:
        name: test-app-cluster-resources
        namespace: openshift-adp
        labels:
          velero.io/storage-location: default
        annotations:
          lca.openshift.io/apply-wave: "3" 
      2
      
      spec:
        backupName:
          backup-app-cluster-resources
      Copy to Clipboard Toggle word wrap

      1
      예시 리소스 이름을 실제 리소스로 바꾸세요.
      2
      lca.openshift.io/apply-wave 값은 플랫폼 복원 CR의 값보다 높아야 하고 애플리케이션 네임스페이스 범위 복원 CR의 값보다 낮아야 합니다.
    2. 네임스페이스 범위 애플리케이션 아티팩트에 대한 OADP CR을 만듭니다.

      LSO가 사용될 때 OADP CR 네임스페이스 범위 애플리케이션 아티팩트의 예

      apiVersion: velero.io/v1
      kind: Backup
      metadata:
        labels:
          velero.io/storage-location: default
        name: backup-app
        namespace: openshift-adp
      spec:
        includedNamespaces:
        - test
        includedNamespaceScopedResources:
        - secrets
        - persistentvolumeclaims
        - deployments
        - statefulsets
        - configmaps
        - cronjobs
        - services
        - job
        - poddisruptionbudgets
        - <application_custom_resources> 
      1
      
        excludedClusterScopedResources:
        - persistentVolumes
      ---
      apiVersion: velero.io/v1
      kind: Restore
      metadata:
        name: test-app
        namespace: openshift-adp
        labels:
          velero.io/storage-location: default
        annotations:
          lca.openshift.io/apply-wave: "4"
      spec:
        backupName:
          backup-app
      Copy to Clipboard Toggle word wrap

      1
      애플리케이션에 맞는 사용자 정의 리소스를 정의합니다.

      LVM 스토리지가 사용될 때 OADP CR 네임스페이스 범위 애플리케이션 아티팩트의 예

      apiVersion: velero.io/v1
      kind: Backup
      metadata:
        labels:
          velero.io/storage-location: default
        name: backup-app
        namespace: openshift-adp
      spec:
        includedNamespaces:
        - test
        includedNamespaceScopedResources:
        - secrets
        - persistentvolumeclaims
        - deployments
        - statefulsets
        - configmaps
        - cronjobs
        - services
        - job
        - poddisruptionbudgets
        - <application_custom_resources> 
      1
      
        includedClusterScopedResources:
        - persistentVolumes 
      2
      
        - logicalvolumes.topolvm.io 
      3
      
        - volumesnapshotcontents 
      4
      
      ---
      apiVersion: velero.io/v1
      kind: Restore
      metadata:
        name: test-app
        namespace: openshift-adp
        labels:
          velero.io/storage-location: default
        annotations:
          lca.openshift.io/apply-wave: "4"
      spec:
        backupName:
          backup-app
        restorePVs: true
        restoreStatus:
          includedResources:
          - logicalvolumes 
      5
      Copy to Clipboard Toggle word wrap

      1
      애플리케이션에 맞는 사용자 정의 리소스를 정의합니다.
      2
      필수 입력 항목입니다.
      3
      필수 입력 항목
      4
      LVM 스토리지 볼륨 스냅샷을 사용하는 경우 선택 사항입니다.
      5
      필수 입력 항목입니다.
      중요

      동일한 버전의 애플리케이션은 OpenShift Container Platform의 현재 릴리스와 대상 릴리스 모두에서 작동해야 합니다.

  3. 다음 명령을 실행하여 OADP CR에 대한 ConfigMap 객체를 만듭니다.

    $ oc create configmap oadp-cm-example --from-file=example-oadp-resources.yaml=<path_to_oadp_crs> -n openshift-adp
    Copy to Clipboard Toggle word wrap
  4. 다음 명령을 실행하여 ImageBasedUpgrade CR에 패치를 적용하세요.

    $ oc patch imagebasedupgrades.lca.openshift.io upgrade \
      -p='{"spec": {"oadpContent": [{"name": "oadp-cm-example", "namespace": "openshift-adp"}]}}' \
      --type=merge -n openshift-lifecycle-agent
    Copy to Clipboard Toggle word wrap

대상 클러스터에 적용하려는 추가 매니페스트를 만듭니다.

참고

두 개 이상의 매니페스트를 추가하고 매니페스트를 특정 순서로 적용해야 하는 경우, 매니페스트 파일 이름 앞에 필요한 순서를 나타내는 숫자를 접두사로 붙여야 합니다. 예를 들어, 00-namespace.yaml , 01-sriov-extra-manifest.yaml 등입니다.

프로세스

  1. SR-IOV와 같은 추가 매니페스트를 포함하는 YAML 파일을 만듭니다.

    SR-IOV 리소스 예시

    apiVersion: sriovnetwork.openshift.io/v1
    kind: SriovNetworkNodePolicy
    metadata:
      name: "example-sriov-node-policy"
      namespace: openshift-sriov-network-operator
    spec:
      deviceType: vfio-pci
      isRdma: false
      nicSelector:
        pfNames: [ens1f0]
      nodeSelector:
        node-role.kubernetes.io/master: ""
      mtu: 1500
      numVfs: 8
      priority: 99
      resourceName: example-sriov-node-policy
    ---
    apiVersion: sriovnetwork.openshift.io/v1
    kind: SriovNetwork
    metadata:
      name: "example-sriov-network"
      namespace: openshift-sriov-network-operator
    spec:
      ipam: |-
        {
        }
      linkState: auto
      networkNamespace: sriov-namespace
      resourceName: example-sriov-node-policy
      spoofChk: "on"
      trust: "off"
    Copy to Clipboard Toggle word wrap

  2. 다음 명령을 실행하여 ConfigMap 객체를 만듭니다.

    $ oc create configmap example-extra-manifests-cm --from-file=example-extra-manifests.yaml=<path_to_extramanifest> -n openshift-lifecycle-agent
    Copy to Clipboard Toggle word wrap
  3. 다음 명령을 실행하여 ImageBasedUpgrade CR에 패치를 적용하세요.

    $ oc patch imagebasedupgrades.lca.openshift.io upgrade \
      -p='{"spec": {"extraManifests": [{"name": "example-extra-manifests-cm", "namespace": "openshift-lifecycle-agent"}]}}' \
      --type=merge -n openshift-lifecycle-agent
    Copy to Clipboard Toggle word wrap

카탈로그 소스에 대한 ConfigMap 객체를 생성하고 이를 ImageBasedUpgrade CR의 spec.extraManifest 필드에 추가하면 업그레이드 후에도 사용자 정의 카탈로그 소스를 유지할 수 있습니다. 카탈로그 소스에 대한 자세한 내용은 "카탈로그 소스"를 참조하세요.

프로세스

  1. CatalogSource CR을 포함하는 YAML 파일을 만듭니다.

    apiVersion: operators.coreos.com/v1
    kind: CatalogSource
    metadata:
      name: example-catalogsources
      namespace: openshift-marketplace
    spec:
      sourceType: grpc
      displayName: disconnected-redhat-operators
      image: quay.io/example-org/example-catalog:v1
    Copy to Clipboard Toggle word wrap
  2. 다음 명령을 실행하여 ConfigMap 객체를 만듭니다.

    $ oc create configmap example-catalogsources-cm --from-file=example-catalogsources.yaml=<path_to_catalogsource_cr> -n openshift-lifecycle-agent
    Copy to Clipboard Toggle word wrap
  3. 다음 명령을 실행하여 ImageBasedUpgrade CR에 패치를 적용하세요.

    $ oc patch imagebasedupgrades.lca.openshift.io upgrade \
      -p='{"spec": {"extraManifests": [{"name": "example-catalogsources-cm", "namespace": "openshift-lifecycle-agent"}]}}' \
      --type=merge -n openshift-lifecycle-agent
    Copy to Clipboard Toggle word wrap

이미지 기반 업그레이드를 준비하기 위해 ConfigMap 오브젝트로 래핑된 추가 매니페스트 및 사용자 정의 카탈로그 소스를 생성합니다.

업그레이드 후 애플리케이션을 복원하기 위해 OADP 리소스를 준비하세요.

사전 요구 사항

  • GitOps ZTP를 사용하여 하나 이상의 관리형 클러스터를 프로비저닝했습니다.
  • 클러스터 관리자 권한이 있는 사용자로 로그인했습니다.
  • 호환되는 시드 클러스터에서 시드 이미지를 생성했습니다.
  • stateroots 간에 공유되는 컨테이너 이미지에 대해 대상 클러스터에 별도의 파티션을 생성했습니다. 자세한 내용은 "GitOps ZTP를 사용할 때 ostree stateroot 간 공유 컨테이너 파티션 구성"을 참조하세요.
  • 시드 이미지와 함께 사용된 버전과 호환되는 Lifecycle Agent 버전을 배포했습니다.
  • 대상 클러스터에 OADP Operator, DataProtectionApplication CR 및 해당 비밀번호를 설치했습니다.
  • S3 호환 스토리지 솔루션을 만들었고, 적절한 자격 증명을 구성하여 바로 사용할 수 있는 버킷을 만들었습니다. 자세한 내용은 "GitOps ZTP로 OADP Operator 설치 및 구성"을 참조하세요.
  • OADP ConfigMap 개체에 대한 openshift-adp 네임스페이스는 모든 관리형 클러스터에 존재해야 하며, OADP ConfigMap이 생성되어 클러스터에 복사될 허브도 있어야 합니다.

프로세스

  1. ArgoCD 정책 애플리케이션과 함께 사용하는 Git 저장소에 다음 디렉토리 구조가 포함되어 있는지 확인하세요.

    ├── source-crs/
    │   ├── ibu/
    │   │    ├── ImageBasedUpgrade.yaml
    │   │    ├── PlatformBackupRestore.yaml
    │   │    ├── PlatformBackupRestoreLvms.yaml
    │   │    ├── PlatformBackupRestoreWithIBGU.yaml
    ├── ...
    ├── kustomization.yaml
    Copy to Clipboard Toggle word wrap

    source-crs/ibu/PlatformBackupRestoreWithIBGU.yaml 파일은 ZTP 컨테이너 이미지에 제공됩니다.

    PlatformBackupRestoreWithIBGU.yaml

    apiVersion: velero.io/v1
    kind: Backup
    metadata:
      name: acm-klusterlet
      annotations:
        lca.openshift.io/apply-label: "apps/v1/deployments/open-cluster-management-agent/klusterlet,v1/secrets/open-cluster-management-agent/bootstrap-hub-kubeconfig,rbac.authorization.k8s.io/v1/clusterroles/klusterlet,v1/serviceaccounts/open-cluster-management-agent/klusterlet,scheduling.k8s.io/v1/priorityclasses/klusterlet-critical,rbac.authorization.k8s.io/v1/clusterroles/open-cluster-management:klusterlet-work:ibu-role,rbac.authorization.k8s.io/v1/clusterroles/open-cluster-management:klusterlet-admin-aggregate-clusterrole,rbac.authorization.k8s.io/v1/clusterrolebindings/klusterlet,operator.open-cluster-management.io/v1/klusterlets/klusterlet,apiextensions.k8s.io/v1/customresourcedefinitions/klusterlets.operator.open-cluster-management.io,v1/secrets/open-cluster-management-agent/open-cluster-management-image-pull-credentials" 
    1
    
      labels:
        velero.io/storage-location: default
      namespace: openshift-adp
    spec:
      includedNamespaces:
      - open-cluster-management-agent
      includedClusterScopedResources:
      - klusterlets.operator.open-cluster-management.io
      - clusterroles.rbac.authorization.k8s.io
      - clusterrolebindings.rbac.authorization.k8s.io
      - priorityclasses.scheduling.k8s.io
      includedNamespaceScopedResources:
      - deployments
      - serviceaccounts
      - secrets
      excludedNamespaceScopedResources: []
    ---
    apiVersion: velero.io/v1
    kind: Restore
    metadata:
      name: acm-klusterlet
      namespace: openshift-adp
      labels:
        velero.io/storage-location: default
      annotations:
        lca.openshift.io/apply-wave: "1"
    spec:
      backupName:
        acm-klusterlet
    Copy to Clipboard Toggle word wrap

    1
    multiclusterHub CR에 .spec.imagePullSecret 이 정의되어 있지 않고 허브 클러스터의 open-cluster-management-agent 네임스페이스에 비밀이 없는 경우 v1/secrets/open-cluster-management-agent/open-cluster-management-image-pull-credentials를 제거합니다.
    참고

    관리형 클러스터에서 이미지 기반 업그레이드를 직접 수행하는 경우 PlatformBackupRestore.yaml 파일을 사용합니다.

    LVM 스토리지를 사용하여 영구 볼륨을 생성하는 경우 ZTP 컨테이너 이미지에 제공된 source-crs/ibu/PlatformBackupRestoreLvms.yaml을 사용하여 LVM 스토리지 리소스를 백업할 수 있습니다.

    PlatformBackupRestoreLvms.yaml

    apiVersion: velero.io/v1
    kind: Backup
    metadata:
      labels:
        velero.io/storage-location: default
      name: lvmcluster
      namespace: openshift-adp
    spec:
      includedNamespaces:
        - openshift-storage
      includedNamespaceScopedResources:
        - lvmclusters
        - lvmvolumegroups
        - lvmvolumegroupnodestatuses
    ---
    apiVersion: velero.io/v1
    kind: Restore
    metadata:
      name: lvmcluster
      namespace: openshift-adp
      labels:
        velero.io/storage-location: default
      annotations:
        lca.openshift.io/apply-wave: "2" 
    1
    
    spec:
      backupName:
        lvmcluster
    Copy to Clipboard Toggle word wrap

    1
    lca.openshift.io/apply-wave 값은 애플리케이션 복원 CR에 지정된 값보다 낮아야 합니다.
  2. 업그레이드 후 애플리케이션을 복원해야 하는 경우 openshift-adp 네임스페이스에서 애플리케이션에 대한 OADP 백업복원 CR을 만듭니다.

    1. openshift-adp 네임스페이스에서 클러스터 범위 애플리케이션 아티팩트에 대한 OADP CR을 만듭니다.

      LSO 및 LVM 스토리지에 대한 클러스터 범위 애플리케이션 아티팩트에 대한 OADP CR 예시

      apiVersion: velero.io/v1
      kind: Backup
      metadata:
        annotations:
          lca.openshift.io/apply-label: "apiextensions.k8s.io/v1/customresourcedefinitions/test.example.com,security.openshift.io/v1/securitycontextconstraints/test,rbac.authorization.k8s.io/v1/clusterroles/test-role,rbac.authorization.k8s.io/v1/clusterrolebindings/system:openshift:scc:test" 
      1
      
        name: backup-app-cluster-resources
        labels:
          velero.io/storage-location: default
        namespace: openshift-adp
      spec:
        includedClusterScopedResources:
        - customresourcedefinitions
        - securitycontextconstraints
        - clusterrolebindings
        - clusterroles
        excludedClusterScopedResources:
        - Namespace
      ---
      apiVersion: velero.io/v1
      kind: Restore
      metadata:
        name: test-app-cluster-resources
        namespace: openshift-adp
        labels:
          velero.io/storage-location: default
        annotations:
          lca.openshift.io/apply-wave: "3" 
      2
      
      spec:
        backupName:
          backup-app-cluster-resources
      Copy to Clipboard Toggle word wrap

      1
      예시 리소스 이름을 실제 리소스로 바꾸세요.
      2
      lca.openshift.io/apply-wave 값은 플랫폼 복원 CR의 값보다 높아야 하고 애플리케이션 네임스페이스 범위 복원 CR의 값보다 낮아야 합니다.
    2. source-crs/custom-crs 디렉터리에서 네임스페이스 범위 애플리케이션 아티팩트에 대한 OADP CR을 만듭니다.

      LSO가 사용될 때 OADP CR 네임스페이스 범위 애플리케이션 아티팩트의 예

      apiVersion: velero.io/v1
      kind: Backup
      metadata:
        labels:
          velero.io/storage-location: default
        name: backup-app
        namespace: openshift-adp
      spec:
        includedNamespaces:
        - test
        includedNamespaceScopedResources:
        - secrets
        - persistentvolumeclaims
        - deployments
        - statefulsets
        - configmaps
        - cronjobs
        - services
        - job
        - poddisruptionbudgets
        - <application_custom_resources> 
      1
      
        excludedClusterScopedResources:
        - persistentVolumes
      ---
      apiVersion: velero.io/v1
      kind: Restore
      metadata:
        name: test-app
        namespace: openshift-adp
        labels:
          velero.io/storage-location: default
        annotations:
          lca.openshift.io/apply-wave: "4"
      spec:
        backupName:
          backup-app
      Copy to Clipboard Toggle word wrap

      1
      애플리케이션에 맞는 사용자 정의 리소스를 정의합니다.

      LVM 스토리지가 사용될 때 OADP CR 네임스페이스 범위 애플리케이션 아티팩트의 예

      apiVersion: velero.io/v1
      kind: Backup
      metadata:
        labels:
          velero.io/storage-location: default
        name: backup-app
        namespace: openshift-adp
      spec:
        includedNamespaces:
        - test
        includedNamespaceScopedResources:
        - secrets
        - persistentvolumeclaims
        - deployments
        - statefulsets
        - configmaps
        - cronjobs
        - services
        - job
        - poddisruptionbudgets
        - <application_custom_resources> 
      1
      
        includedClusterScopedResources:
        - persistentVolumes 
      2
      
        - logicalvolumes.topolvm.io 
      3
      
        - volumesnapshotcontents 
      4
      
      ---
      apiVersion: velero.io/v1
      kind: Restore
      metadata:
        name: test-app
        namespace: openshift-adp
        labels:
          velero.io/storage-location: default
        annotations:
          lca.openshift.io/apply-wave: "4"
      spec:
        backupName:
          backup-app
        restorePVs: true
        restoreStatus:
          includedResources:
          - logicalvolumes 
      5
      Copy to Clipboard Toggle word wrap

      1
      애플리케이션에 맞는 사용자 정의 리소스를 정의합니다.
      2
      필수 입력 항목입니다.
      3
      필수 입력 항목
      4
      LVM 스토리지 볼륨 스냅샷을 사용하는 경우 선택 사항입니다.
      5
      필수 입력 항목입니다.
      중요

      동일한 버전의 애플리케이션은 OpenShift Container Platform의 현재 릴리스와 대상 릴리스 모두에서 작동해야 합니다.

  3. 다음 내용으로 kustomization.yaml을 만듭니다.

    apiVersion: kustomize.config.k8s.io/v1beta1
    kind: Kustomization
    
    configMapGenerator: 
    1
    
    - files:
      - source-crs/ibu/PlatformBackupRestoreWithIBGU.yaml
      #- source-crs/custom-crs/ApplicationClusterScopedBackupRestore.yaml
      #- source-crs/custom-crs/ApplicationApplicationBackupRestoreLso.yaml
      name: oadp-cm
      namespace: openshift-adp 
    2
    
    generatorOptions:
      disableNameSuffixHash: true
    Copy to Clipboard Toggle word wrap
    1
    백업복원 CR을 사용하여 허브 클러스터에 oadp-cm ConfigMap 객체를 생성합니다.
    2
    네임스페이스는 모든 관리형 클러스터에 존재해야 하며, OADP ConfigMap을 생성하여 클러스터에 복사할 허브도 있어야 합니다.
  4. 변경 사항을 Git 저장소에 푸시합니다.

추가 매니페스트에 레이블을 지정하면 Lifecycle Agent가 lca.openshift.io/target-ocp-version: <target_version> 레이블이 지정된 리소스를 추출할 수 있습니다.

사전 요구 사항

  • GitOps ZTP를 사용하여 하나 이상의 관리형 클러스터를 프로비저닝했습니다.
  • 클러스터 관리자 권한이 있는 사용자로 로그인했습니다.
  • 호환되는 시드 클러스터에서 시드 이미지를 생성했습니다.
  • stateroots 간에 공유되는 컨테이너 이미지에 대해 대상 클러스터에 별도의 파티션을 생성했습니다. 자세한 내용은 "GitOps ZTP를 사용할 때 ostree stateroots 간에 공유 컨테이너 디렉터리 구성"을 참조하세요.
  • 시드 이미지와 함께 사용된 버전과 호환되는 Lifecycle Agent 버전을 배포했습니다.

프로세스

  1. 기존 사이트 PolicyGenTemplate CR에서 lca.openshift.io/target-ocp-version: <target_version> 레이블을 사용하여 필요한 추가 매니페스트에 레이블을 지정합니다.

    apiVersion: ran.openshift.io/v1
    kind: PolicyGenTemplate
    metadata:
      name: example-sno
    spec:
      bindingRules:
        sites: "example-sno"
        du-profile: "4.15"
      mcp: "master"
      sourceFiles:
        - fileName: SriovNetwork.yaml
          policyName: "config-policy"
          metadata:
            name: "sriov-nw-du-fh"
            labels:
              lca.openshift.io/target-ocp-version: "4.15" 
    1
    
          spec:
            resourceName: du_fh
            vlan: 140
        - fileName: SriovNetworkNodePolicy.yaml
          policyName: "config-policy"
          metadata:
            name: "sriov-nnp-du-fh"
            labels:
              lca.openshift.io/target-ocp-version: "4.15"
          spec:
            deviceType: netdevice
            isRdma: false
            nicSelector:
              pfNames: ["ens5f0"]
            numVfs: 8
            priority: 10
            resourceName: du_fh
        - fileName: SriovNetwork.yaml
          policyName: "config-policy"
          metadata:
            name: "sriov-nw-du-mh"
            labels:
              lca.openshift.io/target-ocp-version: "4.15"
          spec:
            resourceName: du_mh
            vlan: 150
        - fileName: SriovNetworkNodePolicy.yaml
          policyName: "config-policy"
          metadata:
            name: "sriov-nnp-du-mh"
            labels:
              lca.openshift.io/target-ocp-version: "4.15"
          spec:
            deviceType: vfio-pci
            isRdma: false
            nicSelector:
              pfNames: ["ens7f0"]
            numVfs: 8
            priority: 10
            resourceName: du_mh
        - fileName: DefaultCatsrc.yaml 
    2
    
          policyName: "config-policy"
          metadata:
            name: default-cat-source
            namespace: openshift-marketplace
            labels:
                lca.openshift.io/target-ocp-version: "4.15"
          spec:
              displayName: default-cat-source
              image: quay.io/example-org/example-catalog:v1
    Copy to Clipboard Toggle word wrap
    1
    lca.openshift.io/target-ocp-version 레이블이 ImageBasedUpgrade CR의 spec.seedImageRef.version 필드에 지정된 대상 OpenShift Container Platform 버전의 y-스트림 또는 z-스트림과 일치하는지 확인하세요. Lifecycle Agent는 지정된 버전과 일치하는 CR만 적용합니다.
    2
    사용자 정의 카탈로그 소스를 사용하지 않으려면 이 항목을 제거하세요.
  2. 변경 사항을 Git 저장소에 푸시합니다.

15.2.6. 컨테이너 스토리지 디스크의 자동 이미지 정리 구성

주석을 통해 사용 가능한 저장 공간에 대한 최소 임계값을 설정하여 Lifecycle Agent가 준비 단계에서 고정 해제된 이미지를 정리하는 시기를 구성합니다. 기본 컨테이너 스토리지 디스크 사용 임계값은 50%입니다.

Lifecycle Agent는 CRI-O에 고정된 이미지나 현재 사용 중인 이미지를 삭제하지 않습니다. 운영자는 먼저 매달린 이미지부터 삭제하고, 이미지 생성 타임스탬프를 기준으로 가장 오래된 이미지부터 가장 최근 이미지 순으로 정렬합니다.

15.2.6.1. 컨테이너 스토리지 디스크의 자동 이미지 정리 구성

주석을 통해 사용 가능한 저장 공간에 대한 최소 임계값을 구성합니다.

사전 요구 사항

  • ImageBasedUpgrade CR을 생성했습니다.

프로세스

  1. 다음 명령을 실행하여 임계값을 Cryostat로 늘립니다.

    $ oc -n openshift-lifecycle-agent annotate ibu upgrade image-cleanup.lca.openshift.io/disk-usage-threshold-percent='65'
    Copy to Clipboard Toggle word wrap
  2. (선택 사항) 다음 명령을 실행하여 임계값 재정의를 제거합니다.

    $ oc -n  openshift-lifecycle-agent annotate ibu upgrade image-cleanup.lca.openshift.io/disk-usage-threshold-percent-
    Copy to Clipboard Toggle word wrap

자동 이미지 정리 임계값을 비활성화합니다.

프로세스

  1. 다음 명령을 실행하여 자동 이미지 정리를 비활성화합니다.

    $ oc -n openshift-lifecycle-agent annotate ibu upgrade image-cleanup.lca.openshift.io/on-prep='Disabled'
    Copy to Clipboard Toggle word wrap
  2. (선택 사항) 다음 명령을 실행하여 자동 이미지 정리를 다시 활성화합니다.

    $ oc -n  openshift-lifecycle-agent annotate ibu upgrade image-cleanup.lca.openshift.io/on-prep-
    Copy to Clipboard Toggle word wrap

Lifecycle Agent를 사용하면 단일 노드 OpenShift 클러스터의 수동 이미지 기반 업그레이드를 수행할 수 있습니다.

클러스터에 Lifecycle Agent를 배포하면 ImageBasedUpgrade CR이 자동으로 생성됩니다. 이 CR을 업데이트하여 시드 이미지의 이미지 저장소를 지정하고 각 단계를 진행합니다.

클러스터에 Lifecycle Agent를 배포하면 ImageBasedUpgrade 사용자 정의 리소스(CR)가 자동으로 생성됩니다.

업그레이드 중에 필요한 모든 리소스를 만든 후 준비 단계로 넘어갈 수 있습니다. 자세한 내용은 "Lifecycle Agent를 사용한 이미지 기반 업그레이드를 위한 ConfigMap 객체 생성" 섹션을 참조하세요.

참고

연결이 끊긴 환경에서 시드 클러스터의 릴리스 이미지 레지스트리가 대상 클러스터의 릴리스 이미지 레지스트리와 다른 경우 대체 미러링된 저장소 위치를 구성하기 위해 ImageDigestMirrorSet (IDMS) 리소스를 만들어야 합니다. 자세한 내용은 "이미지 레지스트리 저장소 미러링 구성"을 참조하십시오.

다음 명령을 실행하면 시드 이미지에 사용된 릴리스 레지스트리를 검색할 수 있습니다.

$ skopeo inspect docker://<imagename> | jq -r '.Labels."com.openshift.lifecycle-agent.seed_cluster_info" | fromjson | .release_registry'
Copy to Clipboard Toggle word wrap

사전 요구 사항

  • 클러스터를 백업하고 복원하기 위한 리소스를 생성했습니다.

프로세스

  1. ImageBasedUpgrade CR에 패치가 적용되었는지 확인하세요.

    apiVersion: lca.openshift.io/v1
    kind: ImageBasedUpgrade
    metadata:
      name: upgrade
    spec:
      stage: Idle
      seedImageRef:
        version: 4.15.2 
    1
    
        image: <seed_container_image> 
    2
    
        pullSecretRef: <seed_pull_secret> 
    3
    
      autoRollbackOnFailure: {}
    #    initMonitorTimeoutSeconds: 1800 
    4
    
      extraManifests: 
    5
    
      - name: example-extra-manifests-cm
        namespace: openshift-lifecycle-agent
      - name: example-catalogsources-cm
        namespace: openshift-lifecycle-agent
      oadpContent: 
    6
    
      - name: oadp-cm-example
        namespace: openshift-adp
    Copy to Clipboard Toggle word wrap
    1
    대상 플랫폼 버전. 값은 시드 이미지의 버전과 일치해야 합니다.
    2
    대상 클러스터가 시드 이미지를 가져올 수 있는 저장소입니다.
    3
    이미지가 개인 레지스트리에 있는 경우 컨테이너 이미지를 가져오기 위한 자격 증명이 포함된 비밀에 대한 참조입니다.
    4
    선택 사항: 첫 번째 재부팅 후 해당 시간 내에 업그레이드가 완료되지 않을 경우 롤백할 시간(초)입니다. 정의되지 않았거나 0 으로 설정된 경우 기본값인 1800 초(30분)가 사용됩니다.
    5
    선택 사항: 업그레이드 후에도 보관할 사용자 정의 카탈로그 소스와 시드 이미지에 포함되지 않은 대상 클러스터에 적용할 추가 매니페스트가 포함된 ConfigMap 리소스 목록입니다.
    6
    OADP 백업복원 CR이 포함된 ConfigMap 리소스 목록입니다.
  2. Prep 단계를 시작하려면 다음 명령을 실행하여 ImageBasedUpgrade CR에서 stage 필드 값을 Prep 으로 변경합니다.

    $ oc patch imagebasedupgrades.lca.openshift.io upgrade -p='{"spec": {"stage": "Prep"}}' --type=merge -n openshift-lifecycle-agent
    Copy to Clipboard Toggle word wrap

    OADP 리소스와 추가 매니페스트에 대한 ConfigMap 객체를 제공하는 경우 Lifecycle Agent는 준비 단계에서 지정된 ConfigMap 객체의 유효성을 검사합니다. 다음과 같은 문제가 발생할 수 있습니다.

    • Lifecycle Agent가 extraManifests 매개변수에 문제가 있는 경우 유효성 검사 경고 또는 오류가 발생합니다.
    • Lifecycle Agent가 oadpContent 매개변수에 문제가 있는 경우 검증 오류가 발생합니다.

    유효성 검사 경고는 업그레이드 단계를 차단하지 않지만 업그레이드를 진행하는 것이 안전한지 여부를 결정해야 합니다. 이러한 경고(CRD 누락, 네임스페이스 또는 드라이런 실패 등)는 ImageBasedUpgrade CR의 준비 단계 및 주석 필드에 대한 status.conditions 를 경고에 대한 세부 정보로 업데이트합니다.

    예제 유효성 검사 경고

    # ...
    metadata:
    annotations:
      extra-manifest.lca.openshift.io/validation-warning: '...'
    # ...
    Copy to Clipboard Toggle word wrap

    그러나 MachineConfig 또는 Operator 매니페스트를 추가 매니페스트에 추가하는 등의 유효성 검사 오류가 발생하면 준비 단계가 실패하고 업그레이드 단계가 차단됩니다.

    검증을 통과하면 클러스터는 새로운 ostree stateroot를 만듭니다. 여기에는 시드 이미지를 끌어와 압축 해제하고 호스트 수준 명령을 실행하는 작업이 포함됩니다. 마지막으로, 필요한 모든 이미지가 대상 클러스터에 미리 캐시됩니다.

검증

  • 다음 명령을 실행하여 ImageBasedUpgrade CR의 상태를 확인하세요.

    $ oc get ibu -o yaml
    Copy to Clipboard Toggle word wrap

    출력 예

      conditions:
      - lastTransitionTime: "2024-01-01T09:00:00Z"
        message: In progress
        observedGeneration: 13
        reason: InProgress
        status: "False"
        type: Idle
      - lastTransitionTime: "2024-01-01T09:00:00Z"
        message: Prep completed
        observedGeneration: 13
        reason: Completed
        status: "False"
        type: PrepInProgress
      - lastTransitionTime: "2024-01-01T09:00:00Z"
        message: Prep stage completed successfully
        observedGeneration: 13
        reason: Completed
        status: "True"
        type: PrepCompleted
      observedGeneration: 13
      validNextStages:
      - Idle
      - Upgrade
    Copy to Clipboard Toggle word wrap

시드 이미지를 생성하고 준비 단계를 완료한 후 대상 클러스터를 업그레이드할 수 있습니다. 업그레이드 프로세스 동안 OADP 운영자는 OADP 사용자 정의 리소스(CR)에 지정된 아티팩트의 백업을 생성한 다음, 수명 주기 에이전트가 클러스터를 업그레이드합니다.

업그레이드가 실패하거나 중지되면 자동 롤백이 시작됩니다. 업그레이드 후 문제가 발생하면 수동 롤백을 시작할 수 있습니다. 수동 롤백에 대한 자세한 내용은 "Lifecycle Agent를 사용하여 이미지 기반 업그레이드의 롤백 단계로 이동"을 참조하세요.

사전 요구 사항

  • 준비 단계를 완료했습니다.

프로세스

  1. 업그레이드 단계로 이동하려면 다음 명령을 실행하여 ImageBasedUpgrade CR에서 stage 필드 값을 Upgrade 로 변경합니다.

    $ oc patch imagebasedupgrades.lca.openshift.io upgrade -p='{"spec": {"stage": "Upgrade"}}' --type=merge
    Copy to Clipboard Toggle word wrap
  2. 다음 명령을 실행하여 ImageBasedUpgrade CR의 상태를 확인하세요.

    $ oc get ibu -o yaml
    Copy to Clipboard Toggle word wrap

    출력 예

    status:
      conditions:
      - lastTransitionTime: "2024-01-01T09:00:00Z"
        message: In progress
        observedGeneration: 5
        reason: InProgress
        status: "False"
        type: Idle
      - lastTransitionTime: "2024-01-01T09:00:00Z"
        message: Prep completed
        observedGeneration: 5
        reason: Completed
        status: "False"
        type: PrepInProgress
      - lastTransitionTime: "2024-01-01T09:00:00Z"
        message: Prep completed successfully
        observedGeneration: 5
        reason: Completed
        status: "True"
        type: PrepCompleted
      - lastTransitionTime: "2024-01-01T09:00:00Z"
        message: |-
          Waiting for system to stabilize: one or more health checks failed
            - one or more ClusterOperators not yet ready: authentication
            - one or more MachineConfigPools not yet ready: master
            - one or more ClusterServiceVersions not yet ready: sriov-fec.v2.8.0
        observedGeneration: 1
        reason: InProgress
        status: "True"
        type: UpgradeInProgress
      observedGeneration: 1
      rollbackAvailabilityExpiration: "2024-05-19T14:01:52Z"
      validNextStages:
      - Rollback
    Copy to Clipboard Toggle word wrap

    OADP 운영자는 OADP 백업복원 CR에 지정된 데이터의 백업을 생성하고 대상 클러스터가 재부팅됩니다.

  3. 다음 명령을 실행하여 CR 상태를 모니터링합니다.

    $ oc get ibu -o yaml
    Copy to Clipboard Toggle word wrap
  4. 업그레이드에 만족한다면 다음 명령을 실행하여 ImageBasedUpgrade CR에서 stage 필드 값을 Idle 로 패치하여 변경 사항을 마무리합니다.

    $ oc patch imagebasedupgrades.lca.openshift.io upgrade -p='{"spec": {"stage": "Idle"}}' --type=merge
    Copy to Clipboard Toggle word wrap
    중요

    업그레이드 후 유휴 단계로 이동하면 변경 사항을 롤백할 수 없습니다.

    라이프사이클 에이전트는 업그레이드 프로세스 중에 생성된 모든 리소스를 삭제합니다.

  5. 업그레이드가 성공적으로 완료되면 OADP Operator와 구성 파일을 제거할 수 있습니다. 자세한 내용은 "클러스터에서 Operator 삭제"를 참조하십시오.

검증

  1. 다음 명령을 실행하여 ImageBasedUpgrade CR의 상태를 확인하세요.

    $ oc get ibu -o yaml
    Copy to Clipboard Toggle word wrap

    출력 예

    status:
      conditions:
      - lastTransitionTime: "2024-01-01T09:00:00Z"
        message: In progress
        observedGeneration: 5
        reason: InProgress
        status: "False"
        type: Idle
      - lastTransitionTime: "2024-01-01T09:00:00Z"
        message: Prep completed
        observedGeneration: 5
        reason: Completed
        status: "False"
        type: PrepInProgress
      - lastTransitionTime: "2024-01-01T09:00:00Z"
        message: Prep completed successfully
        observedGeneration: 5
        reason: Completed
        status: "True"
        type: PrepCompleted
      - lastTransitionTime: "2024-01-01T09:00:00Z"
        message: Upgrade completed
        observedGeneration: 1
        reason: Completed
        status: "False"
        type: UpgradeInProgress
      - lastTransitionTime: "2024-01-01T09:00:00Z"
        message: Upgrade completed
        observedGeneration: 1
        reason: Completed
        status: "True"
        type: UpgradeCompleted
      observedGeneration: 1
      rollbackAvailabilityExpiration: "2024-01-01T09:00:00Z"
      validNextStages:
      - Idle
      - Rollback
    Copy to Clipboard Toggle word wrap

  2. 다음 명령을 실행하여 클러스터 복원 상태를 확인하세요.

    $ oc get restores -n openshift-adp -o custom-columns=NAME:.metadata.name,Status:.status.phase,Reason:.status.failureReason
    Copy to Clipboard Toggle word wrap

    출력 예

    NAME             Status      Reason
    acm-klusterlet   Completed   <none> 
    1
    
    apache-app       Completed   <none>
    localvolume      Completed   <none>
    Copy to Clipboard Toggle word wrap

    1
    acm-klusterlet 은 RHACM 환경에만 적용됩니다.

재부팅 후 initMonitorTimeoutSeconds 필드에 지정된 시간 프레임 내에 업그레이드가 완료되지 않으면 자동 롤백이 시작됩니다.

ImageBasedUpgrade CR 예시

apiVersion: lca.openshift.io/v1
kind: ImageBasedUpgrade
metadata:
  name: upgrade
spec:
  stage: Idle
  seedImageRef:
    version: 4.15.2
    image: <seed_container_image>
  autoRollbackOnFailure: {}
#    initMonitorTimeoutSeconds: 1800 
1

# ...
Copy to Clipboard Toggle word wrap

1
선택 사항: 첫 번째 재부팅 후 해당 시간 프레임 내에 업그레이드가 완료되지 않을 경우 롤백할 시간 프레임(초)입니다. 정의되지 않았거나 0 으로 설정된 경우 기본값인 1800 초(30분)가 사용됩니다.

업그레이드 후 해결할 수 없는 문제가 발생하면 수동으로 변경 사항을 롤백할 수 있습니다.

사전 요구 사항

  • cluster-admin 권한이 있는 사용자로 hub 클러스터에 로그인했습니다.
  • 원래 stateroot의 컨트롤 플레인 인증서가 유효한지 확인했습니다. 인증서가 만료된 경우 "종료된 컨트롤 플레인 인증서에서 복구"를 참조하십시오.

프로세스

  1. 롤백 단계로 이동하려면 다음 명령을 실행하여 stage 필드의 값을 ImageBasedUpgrade CR의 롤백 에 패치합니다.

    $ oc patch imagebasedupgrades.lca.openshift.io upgrade -p='{"spec": {"stage": "Rollback"}}' --type=merge
    Copy to Clipboard Toggle word wrap

    Lifecycle Agent는 이전에 설치한 OpenShift Container Platform 버전으로 클러스터를 재부팅하고 애플리케이션을 복원합니다.

  2. 변경 사항에 만족하는 경우 다음 명령을 실행하여 ImageBasedUpgrade CR의 stage 필드 값을 Idle 에 패치하여 롤백을 완료합니다.

    $ oc patch imagebasedupgrades.lca.openshift.io upgrade -p='{"spec": {"stage": "Idle"}}' --type=merge -n openshift-lifecycle-agent
    Copy to Clipboard Toggle word wrap
    주의

    롤백 후 Idle 단계로 이동하는 경우 Lifecycle Agent는 업그레이드 실패 문제를 해결하는 데 사용할 수 있는 리소스를 정리합니다.

15.3.4. Lifecycle Agent를 사용하여 이미지 기반 업그레이드 문제 해결

문제의 영향을 받는 관리 클러스터에서 문제 해결 단계를 수행합니다.

중요

ImageBasedGroupUpgrade CR을 사용하여 클러스터를 업그레이드하는 경우 관리되는 클러스터에서 문제 해결 또는 복구 단계를 수행한 후 lcm.openshift.io/ibgu-<stage>-completed 또는 lcm.openshift.io/ibgu-<stage>-failed 클러스터 레이블이 제대로 업데이트되었는지 확인하세요. 이렇게 하면 TALM에서 클러스터의 이미지 기반 업그레이드를 계속 관리합니다.

15.3.4.1. 로그 수집

oc adm must-gather CLI를 사용하여 디버깅 및 문제 해결을 위한 정보를 수집할 수 있습니다.

프로세스

  • 다음 명령을 실행하여 Operator에 대한 데이터를 수집합니다.

    $  oc adm must-gather \
      --dest-dir=must-gather/tmp \
      --image=$(oc -n openshift-lifecycle-agent get deployment.apps/lifecycle-agent-controller-manager -o jsonpath='{.spec.template.spec.containers[?(@.name == "manager")].image}') \
      --image=quay.io/konveyor/oadp-must-gather:latest \// 
    1
    
      --image=quay.io/openshift/origin-must-gather:latest 
    2
    Copy to Clipboard Toggle word wrap
    1
    선택 사항: OADP Operator에서 자세한 정보를 수집해야 하는 경우 이 옵션을 추가합니다.
    2
    선택 사항: SR-IOV Operator에서 자세한 정보를 수집해야 하는 경우 이 옵션을 추가합니다.
15.3.4.2. AbortFailed 또는 CryostatFailed 오류
문제

마무리 단계 또는 준비 단계에서 프로세스를 중지하면 Lifecycle Agent는 다음 리소스를 정리합니다.

  • 더 이상 필요하지 않은 Stateroot
  • 리소스 사전 처리
  • OADP CR
  • ImageBasedUpgrade CR

라이프 사이클 에이전트가 위의 단계를 수행하지 못하면 AbortFailed 또는 FinalizeFailed 상태로 전환됩니다. 조건 메시지와 로그는 어떤 단계가 실패했는지 보여줍니다.

오류 메시지의 예

message: failed to delete all the backup CRs. Perform cleanup manually then add 'lca.openshift.io/manual-cleanup-done' annotation to ibu CR to transition back to Idle
      observedGeneration: 5
      reason: AbortFailed
      status: "False"
      type: Idle
Copy to Clipboard Toggle word wrap

해결
  1. 로그를 검사하여 실패가 발생한 이유를 확인하세요.
  2. Lifecycle Agent가 정리를 다시 시도하도록 하려면 ImageBasedUpgrade CR에 lca.openshift.io/manual-cleanup-done 주석을 추가합니다.

    이 주석을 관찰한 후 Lifecycle Agent는 정리를 다시 시도하고, 성공하면 ImageBasedUpgrade 단계가 Idle 로 전환됩니다.

    정리가 다시 실패하면 리소스를 수동으로 정리할 수 있습니다.

15.3.4.2.1. stateroot 수동 정리
문제
준비 단계에서 멈추고 Lifecycle Agent는 새로운 stateroot를 정리합니다. 업그레이드나 롤백을 성공적으로 마친 후, Lifecycle Agent는 이전 stateroot를 정리합니다. 이 단계가 실패하면 로그를 검사하여 실패 원인을 확인하는 것이 좋습니다.
해결
  1. 다음 명령을 실행하여 stateroot에 기존 배포가 있는지 확인합니다.

    $ ostree admin status
    Copy to Clipboard Toggle word wrap
  2. 기존 배포가 있는 경우 다음 명령을 실행하여 기존 배포를 정리합니다.

    $ ostree admin undeploy <index_of_deployment>
    Copy to Clipboard Toggle word wrap
  3. stateroot의 모든 배포를 정리한 후 다음 명령을 실행하여 stateroot 디렉터리를 지웁니다.

    주의

    부팅된 배포가 이 stateroot에 있지 않은지 확인하세요.

    $ stateroot="<stateroot_to_delete>"
    Copy to Clipboard Toggle word wrap
    $ unshare -m /bin/sh -c "mount -o remount,rw /sysroot && rm -rf /sysroot/ostree/deploy/${stateroot}"
    Copy to Clipboard Toggle word wrap
15.3.4.2.2. OADP 리소스 수동 정리
문제
Lifecycle Agent와 S3 백엔드 간의 연결 문제로 인해 OADP 리소스의 자동 정리가 실패할 수 있습니다. 연결을 복구하고 lca.openshift.io/manual-cleanup-done 주석을 추가하면 Lifecycle Agent가 백업 리소스를 성공적으로 정리할 수 있습니다.
해결
  1. 다음 명령을 실행하여 백엔드 연결을 확인하세요.

    $ oc get backupstoragelocations.velero.io -n openshift-adp
    Copy to Clipboard Toggle word wrap

    출력 예

    NAME                          PHASE       LAST VALIDATED   AGE   DEFAULT
    dataprotectionapplication-1   Available   33s              8d    true
    Copy to Clipboard Toggle word wrap

  2. 모든 백업 리소스를 제거한 다음 ImageBasedUpgrade CR에 lca.openshift.io/manual-cleanup-done 주석을 추가합니다.
15.3.4.3. LVM 스토리지 볼륨 내용이 복구되지 않았습니다.

LVM 스토리지를 사용하여 동적 영구 볼륨 스토리지를 제공하는 경우, LVM 스토리지가 잘못 구성된 경우 영구 볼륨 내용을 복원하지 못할 수 있습니다.

15.3.4.3.1. 백업 CR에 LVM 저장소 관련 필드가 없습니다.
문제

백업 CR에 영구 볼륨을 복원하는 데 필요한 필드가 누락되었을 수 있습니다. 다음을 실행하여 애플리케이션 포드에서 이벤트를 확인하여 이 문제가 있는지 확인할 수 있습니다.

$ oc describe pod <your_app_name>
Copy to Clipboard Toggle word wrap

백업 CR에서 누락된 LVM 저장소 관련 필드를 보여주는 예제 출력

Events:
  Type     Reason            Age                From               Message
  ----     ------            ----               ----               -------
  Warning  FailedScheduling  58s (x2 over 66s)  default-scheduler  0/1 nodes are available: pod has unbound immediate PersistentVolumeClaims. preemption: 0/1 nodes are available: 1 Preemption is not helpful for scheduling..
  Normal   Scheduled         56s                default-scheduler  Successfully assigned default/db-1234 to sno1.example.lab
  Warning  FailedMount       24s (x7 over 55s)  kubelet            MountVolume.SetUp failed for volume "pvc-1234" : rpc error: code = Unknown desc = VolumeID is not found
Copy to Clipboard Toggle word wrap

해결

애플리케이션 백업 CR에 logicalvolumes.topolvm.io를 포함해야 합니다. 이 리소스가 없으면 애플리케이션은 영구 볼륨 클레임을 복원하고 영구 볼륨이 올바르게 나타나지만 이 영구 볼륨과 연결된 논리 볼륨은 피벗 후 올바르게 복원되지 않습니다.

백업 CR 예시

apiVersion: velero.io/v1
kind: Backup
metadata:
  labels:
    velero.io/storage-location: default
  name: small-app
  namespace: openshift-adp
spec:
  includedNamespaces:
  - test
  includedNamespaceScopedResources:
  - secrets
  - persistentvolumeclaims
  - deployments
  - statefulsets
  includedClusterScopedResources: 
1

  - persistentVolumes
  - volumesnapshotcontents
  - logicalvolumes.topolvm.io
Copy to Clipboard Toggle word wrap

1
애플리케이션의 영구 볼륨을 복원하려면 표시된 대로 이 섹션을 구성해야 합니다.
15.3.4.3.2. Restore CR에서 LVM 저장소 관련 필드가 누락됨
문제

업그레이드 후 애플리케이션에 대한 예상 리소스는 복구되지만 영구 볼륨 내용은 보존되지 않습니다.

  1. 피벗 전에 다음 명령을 실행하여 애플리케이션의 영구 볼륨을 나열하세요.

    $ oc get pv,pvc,logicalvolumes.topolvm.io -A
    Copy to Clipboard Toggle word wrap

    피벗 전의 출력 예

    NAME                        CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM            STORAGECLASS   REASON   AGE
    persistentvolume/pvc-1234   1Gi        RWO            Retain           Bound    default/pvc-db   lvms-vg1                4h45m
    
    NAMESPACE   NAME                           STATUS   VOLUME     CAPACITY   ACCESS MODES   STORAGECLASS   AGE
    default     persistentvolumeclaim/pvc-db   Bound    pvc-1234   1Gi        RWO            lvms-vg1       4h45m
    
    NAMESPACE   NAME                                AGE
                logicalvolume.topolvm.io/pvc-1234   4h45m
    Copy to Clipboard Toggle word wrap

  2. 다음 명령을 피벗한 후 실행하여 애플리케이션의 영구 볼륨을 나열하세요.

    $ oc get pv,pvc,logicalvolumes.topolvm.io -A
    Copy to Clipboard Toggle word wrap

    피벗 후의 출력 예

    NAME                        CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM            STORAGECLASS   REASON   AGE
    persistentvolume/pvc-1234   1Gi        RWO            Delete           Bound    default/pvc-db   lvms-vg1                19s
    
    NAMESPACE   NAME                           STATUS   VOLUME     CAPACITY   ACCESS MODES   STORAGECLASS   AGE
    default     persistentvolumeclaim/pvc-db   Bound    pvc-1234   1Gi        RWO            lvms-vg1       19s
    
    NAMESPACE   NAME                                AGE
                logicalvolume.topolvm.io/pvc-1234   18s
    Copy to Clipboard Toggle word wrap

해결

이 문제가 발생하는 이유는 논리 볼륨 상태가 복원 CR에서 보존되지 않기 때문입니다. 이 상태는 Velero가 피벗 후에 보존해야 하는 볼륨을 참조하는 데 필요하기 때문에 중요합니다. Restore CR 애플리케이션에는 다음 필드를 포함해야 합니다.

예제 CR 복원

apiVersion: velero.io/v1
kind: Restore
metadata:
  name: sample-vote-app
  namespace: openshift-adp
  labels:
    velero.io/storage-location: default
  annotations:
    lca.openshift.io/apply-wave: "3"
spec:
  backupName:
    sample-vote-app
  restorePVs: true 
1

  restoreStatus: 
2

    includedResources:
      - logicalvolumes
Copy to Clipboard Toggle word wrap

1
애플리케이션의 영구 볼륨을 보존하려면 restorePVs를 true 로 설정해야 합니다.
2
애플리케이션의 영구 볼륨을 보존하려면 표시된 대로 이 섹션을 구성해야 합니다.
15.3.4.4. 실패한 백업 및 복원 CR 디버깅
문제
아티팩트의 백업이나 복원이 실패했습니다.
해결

Velero CLI 도구를 사용하면 백업복원 CR을 디버깅하고 로그를 검색할 수 있습니다. Velero CLI 툴은 OpenShift CLI 툴보다 자세한 정보를 제공합니다.

  1. 다음 명령을 실행하여 오류가 포함된 백업 CR을 설명합니다.

    $ oc exec -n openshift-adp velero-7c87d58c7b-sw6fc -c velero -- ./velero describe backup -n openshift-adp backup-acm-klusterlet --details
    Copy to Clipboard Toggle word wrap
  2. 다음 명령을 실행하여 오류가 포함된 CR 복원을 설명합니다.

    $ oc exec -n openshift-adp velero-7c87d58c7b-sw6fc -c velero -- ./velero describe restore -n openshift-adp restore-acm-klusterlet --details
    Copy to Clipboard Toggle word wrap
  3. 다음 명령을 실행하여 백업된 리소스를 로컬 디렉토리에 다운로드합니다.

    $ oc exec -n openshift-adp velero-7c87d58c7b-sw6fc -c velero -- ./velero backup download -n openshift-adp backup-acm-klusterlet -o ~/backup-acm-klusterlet.tar.gz
    Copy to Clipboard Toggle word wrap

허브 클러스터의 단일 리소스인 ImageBasedGroupUpgrade 사용자 정의 리소스(CR)를 사용하여 모든 단계에 걸쳐 선택된 관리 클러스터 그룹에서 이미지 기반 업그레이드를 관리할 수 있습니다. TALM(Topology Aware Lifecycle Manager)은 ImageBasedGroupUpgrade CR을 조정하고 정의된 단계 전환을 완료하기 위한 기반 리소스를 생성합니다. 이는 수동으로 제어되거나 완전히 자동화된 업그레이드 흐름에서 이루어집니다.

이미지 기반 업그레이드에 대한 자세한 내용은 "단일 노드 OpenShift 클러스터에 대한 이미지 기반 업그레이드 이해"를 참조하세요.

ImageBasedGroupUpgrade CR은 ImageBasedUpgradeClusterGroupUpgrade API를 결합합니다. 예를 들어, ClusterGroupUpgrade API와 같은 방식으로 ImageBasedGroupUpgrade API를 사용하여 클러스터 선택 및 롤아웃 전략을 정의할 수 있습니다. 스테이지 전환은 ImageBasedUpgrade API와 다릅니다. ImageBasedGroupUpgrade API를 사용하면 여러 단계 전환(작업이라고도 함)을 하나의 단계로 결합하여 하나의 롤아웃 전략을 공유할 수 있습니다.

Example ImageBasedGroupUpgrade.yaml

apiVersion: lcm.openshift.io/v1alpha1
kind: ImageBasedGroupUpgrade
metadata:
  name: <filename>
  namespace: default
spec:
  clusterLabelSelectors: 
1

    - matchExpressions:
      - key: name
        operator: In
        values:
        - spoke1
        - spoke4
        - spoke6
  ibuSpec:
    seedImageRef: 
2

      image: quay.io/seed/image:4.19.0-rc.1
      version: 4.19.0-rc.1
      pullSecretRef:
        name: "<seed_pull_secret>"
    extraManifests: 
3

      - name: example-extra-manifests
        namespace: openshift-lifecycle-agent
    oadpContent: 
4

      - name: oadp-cm
        namespace: openshift-adp
  plan: 
5

    - actions: ["Prep", "Upgrade", "FinalizeUpgrade"]
      rolloutStrategy:
        maxConcurrency: 200 
6

        timeout: 2400 
7
Copy to Clipboard Toggle word wrap

1
업그레이드할 클러스터.
2
대상 플랫폼 버전, 사용할 시드 이미지, 이미지에 액세스하는 데 필요한 비밀번호입니다.
참고

허브 클러스터에 ImageBasedGroupUpgrade 리소스와 동일한 네임스페이스에서 시드 이미지 풀 시크릿을 추가하면 해당 시크릿이 준비 단계의 매니페스트 목록에 추가됩니다. 비밀은 openshift-lifecycle-agent 네임스페이스의 각 스포크 클러스터에서 다시 생성됩니다.

3
선택 사항: 시드 이미지에 없는 추가 매니페스트를 대상 클러스터에 적용합니다. 사용자 정의 카탈로그 소스에 ConfigMap 오브젝트도 적용합니다.
4
OADP 백업복원 CR이 포함된 ConfigMap 리소스입니다.
5
업그레이드 계획 세부 정보.
6
일괄 처리로 업데이트할 클러스터 수입니다.
7
작업을 완료하는 데 걸리는 시간 제한(분)입니다.
15.4.1.1. 지원되는 작업 조합

작업은 TALM이 선택된 클러스터 그룹에 대한 업그레이드 계획의 단계에서 완료하는 단계 전환 목록입니다. ImageBasedGroupUpgrade CR의 각 작업 항목은 별도의 단계이며, 각 단계에는 동일한 롤아웃 전략을 공유하는 하나 이상의 작업이 포함됩니다. 작업을 단계별로 구분하면 각 작업에 대한 출시 전략을 더욱 효과적으로 제어할 수 있습니다.

이러한 작업은 업그레이드 계획에서 다르게 결합할 수 있으며 나중에 후속 단계를 추가할 수 있습니다. 이전 단계가 완료되거나 실패할 때까지 기다린 후에 계획에 단계를 추가하세요. 이전 단계에 실패한 클러스터의 경우 추가된 단계의 첫 번째 동작은 중단 또는 롤백 중 하나여야 합니다.

중요

진행 중인 계획에서 작업이나 단계를 제거할 수 없습니다.

다음 표는 출시 전략에 대한 다양한 수준의 제어를 위한 계획의 예를 보여줍니다.

Expand
표 15.5. 업그레이드 계획 예시
예시 계획설명
plan:
- actions: ["Prep", "Upgrade", "FinalizeUpgrade"]
  rolloutStrategy:
    maxConcurrency: 200
    timeout: 60
Copy to Clipboard Toggle word wrap

모든 작업은 동일한 전략을 공유합니다.

plan:
- actions: ["Prep", "Upgrade"]
  rolloutStrategy:
    maxConcurrency: 200
    timeout: 60
- actions: ["FinalizeUpgrade"]
  rolloutStrategy:
    maxConcurrency: 500
    timeout: 10
Copy to Clipboard Toggle word wrap

일부 작업은 동일한 전략을 공유합니다.

plan:
- actions: ["Prep"]
  rolloutStrategy:
    maxConcurrency: 200
    timeout: 60
- actions: ["Upgrade"]
  rolloutStrategy:
    maxConcurrency: 200
    timeout: 20
- actions: ["FinalizeUpgrade"]
  rolloutStrategy:
    maxConcurrency: 500
    timeout: 10
Copy to Clipboard Toggle word wrap

모든 행동에는 서로 다른 전략이 있습니다

중요

작업 중 하나가 실패한 클러스터는 같은 단계의 나머지 작업을 건너뜁니다.

ImageBasedGroupUpgrade API는 다음 작업을 허용합니다.

예습
준비 단계로 이동하여 업그레이드 리소스 준비를 시작하세요.
업그레이드
업그레이드 단계로 이동하여 업그레이드를 시작하세요.
FinalizeUpgrade
업그레이드 작업을 완료한 선택된 클러스터에서 유휴 단계로 이동하여 업그레이드를 마무리합니다.
롤백
롤백 단계로 이동하여 성공적으로 업그레이드된 클러스터에서만 롤백을 시작합니다.
FinalizeRollback
유휴 단계로 이동하여 롤백을 완료합니다.
AbortOnFailure
준비 또는 업그레이드 작업에 실패한 선택된 클러스터의 업그레이드를 취소하려면 유휴 단계로 이동합니다.
Abort
아직 업그레이드되지 않은 클러스터에서만 진행 중인 업그레이드를 취소하려면 유휴 단계로 이동합니다.

다음과 같은 동작 조합이 지원됩니다. 괄호 한 쌍은 계획 섹션의 한 단계를 나타냅니다.

  • ["Prep"], ["Abort"]
  • ["Prep", "Upgrade", "FinalizeUpgrade"]
  • ["준비"] , ["AbortOnFailure"] , ["업그레이드"] , ["AbortOnFailure"] , ["FinalizeUpgrade"]
  • ["Rollback", "FinalizeRollback"]

완전히 새로운 ImageBasedGroupUpgrade CR에서 진행 중인 업그레이드를 재개하거나 취소해야 하는 경우 다음 조합 중 하나를 사용하세요.

  • ["Upgrade","FinalizeUpgrade"]
  • ["FinalizeUpgrade"]
  • ["FinalizeRollback"]
  • ["Abort"]
  • ["AbortOnFailure"]
15.4.1.2. 클러스터 선택을 위한 라벨링

초기 클러스터 선택을 위해 spec.clusterLabelSelectors 필드를 사용합니다. 또한 TALM은 마지막 단계 전환 결과에 따라 관리 클러스터에 레이블을 지정합니다.

단계가 완료되거나 실패하면 TALM은 다음 레이블로 관련 클러스터를 표시합니다.

  • lcm.openshift.io/ibgu-<stage>-completed
  • lcm.openshift.io/ibgu-<stage>-failed

문제를 해결한 후 클러스터 그룹의 업그레이드를 취소하거나 롤백하려면 이러한 클러스터 레이블을 사용합니다.

중요

ImageBasedGroupUpgrade CR을 사용하여 클러스터를 업그레이드하는 경우 관리되는 클러스터에서 문제 해결 또는 복구 단계를 수행한 후 lcm.openshift.io/ibgu-<stage>-completed 또는 lcm.openshift.io/ibgu-<stage>-failed 클러스터 레이블이 제대로 업데이트되었는지 확인하세요. 이를 통해 TALM이 클러스터의 이미지 기반 업그레이드를 계속 관리할 수 있습니다.

예를 들어, 업그레이드를 성공적으로 완료한 클러스터를 제외한 모든 관리 클러스터에 대한 업그레이드를 취소하려면 계획에 중단 작업을 추가할 수 있습니다. 중단 작업은 ImageBasedUpgrade CR을 유휴 단계로 되돌려 아직 업그레이드되지 않은 클러스터의 업그레이드를 취소합니다. 별도의 중단 작업을 추가하면 TALM이 lcm.openshift.io/ibgu-upgrade-completed 레이블이 있는 클러스터에서 중단 작업을 수행하지 않습니다.

업그레이드를 성공적으로 취소하거나 완료하면 클러스터 레이블이 제거됩니다.

15.4.1.3. 상태 모니터링

ImageBasedGroupUpgrade CR은 모든 클러스터에 대한 포괄적인 상태 보고서를 한곳에 집계하여 더 나은 모니터링 환경을 보장합니다. 다음 작업을 모니터링할 수 있습니다.

status.clusters.completedActions
계획 섹션에 정의된 모든 완료된 작업을 표시합니다.
status.clusters.currentAction
현재 진행 중인 모든 작업을 표시합니다.
status.clusters.failedActions
실패한 모든 작업을 자세한 오류 메시지와 함께 표시합니다.

업그레이드로 인해 서비스가 중단되는 경우를 보다 효과적으로 제어해야 하는 경우 이전 단계가 완료된 후 작업을 추가하여 ImageBasedGroupUpgrade CR을 사용하여 관리되는 클러스터 세트를 업그레이드할 수 있습니다. 이전 단계의 결과를 평가한 후 다음 업그레이드 단계로 넘어가거나 절차 전반에 걸쳐 실패한 단계의 문제를 해결할 수 있습니다.

중요

일부 동작 조합만 지원되며 지원되는 동작 조합 에 나열되어 있습니다.

사전 요구 사항

  • cluster-admin 권한이 있는 사용자로 허브 클러스터에 로그인했습니다.
  • 이미지 기반 업그레이드에 사용되는 리소스에 대한 정책 및 ConfigMap 오브젝트가 생성되어 있습니다.
  • 허브 클러스터를 통해 모든 관리형 클러스터에 Lifecycle Agent와 OADP Operators를 설치했습니다.

프로세스

  1. ImageBasedGroupUpgrade CR이 포함된 허브 클러스터에 YAML 파일을 만듭니다.

    apiVersion: lcm.openshift.io/v1alpha1
    kind: ImageBasedGroupUpgrade
    metadata:
      name: <filename>
      namespace: default
    spec:
      clusterLabelSelectors: 
    1
    
        - matchExpressions:
          - key: name
            operator: In
            values:
            - spoke1
            - spoke4
            - spoke6
      ibuSpec:
        seedImageRef: 
    2
    
          image: quay.io/seed/image:4.16.0-rc.1
          version: 4.16.0-rc.1
          pullSecretRef:
            name: "<seed_pull_secret>"
        extraManifests: 
    3
    
          - name: example-extra-manifests
            namespace: openshift-lifecycle-agent
        oadpContent: 
    4
    
          - name: oadp-cm
            namespace: openshift-adp
      plan: 
    5
    
        - actions: ["Prep"]
          rolloutStrategy:
            maxConcurrency: 2
            timeout: 2400
    Copy to Clipboard Toggle word wrap
    1
    업그레이드할 클러스터.
    2
    대상 플랫폼 버전, 사용할 시드 이미지, 이미지에 액세스하는 데 필요한 비밀번호입니다.
    참고

    허브 클러스터에 ImageBasedGroupUpgrade 리소스와 동일한 네임스페이스에서 시드 이미지 풀 시크릿을 추가하면 해당 시크릿이 준비 단계의 매니페스트 목록에 추가됩니다. 비밀은 openshift-lifecycle-agent 네임스페이스의 각 스포크 클러스터에서 다시 생성됩니다.

    3
    선택 사항: 시드 이미지에 없는 추가 매니페스트를 대상 클러스터에 적용합니다. 사용자 정의 카탈로그 소스에 ConfigMap 오브젝트도 적용합니다.
    4
    OADP 백업복원 CR이 포함된 ConfigMap 리소스 목록입니다.
    5
    업그레이드 계획 세부 정보.
  2. 허브 클러스터에서 다음 명령을 실행하여 생성된 파일을 적용합니다.

    $ oc apply -f <filename>.yaml
    Copy to Clipboard Toggle word wrap
  3. 허브 클러스터에서 다음 명령을 실행하여 상태 업데이트를 모니터링합니다.

    $ oc get ibgu -o yaml
    Copy to Clipboard Toggle word wrap

    출력 예

    # ...
    status:
      clusters:
      - completedActions:
        - action: Prep
        name: spoke1
      - completedActions:
        - action: Prep
        name: spoke4
      - failedActions:
        - action: Prep
        name: spoke6
    # ...
    Copy to Clipboard Toggle word wrap

    이전 예제 계획의 출력은 준비 단계에서만 시작하며, 이전 단계의 결과에 따라 계획에 작업을 추가합니다. TALM은 업그레이드가 성공했는지 실패했는지를 표시하기 위해 클러스터에 레이블을 추가합니다. 예를 들어, lcm.openshift.io/ibgu-prep-failed준비 단계에서 실패한 클러스터에 적용됩니다.

    실패를 조사한 후 업그레이드 계획에 AbortOnFailure 단계를 추가할 수 있습니다. lcm.openshift.io/ibgu-<action>-failed 로 라벨이 지정된 클러스터를 다시 유휴 단계로 이동합니다. 선택한 클러스터의 업그레이드와 관련된 모든 리소스가 삭제됩니다.

  4. 선택 사항: 다음 명령을 실행하여 기존 ImageBasedGroupUpgrade CR에 AbortOnFailure 작업을 추가합니다.

    $ oc patch ibgu <filename> --type=json -p \
    '[{"op": "add", "path": "/spec/plan/-", "value": {"actions": ["AbortOnFailure"], "rolloutStrategy": {"maxConcurrency": 5, "timeout": 10}}}]'
    Copy to Clipboard Toggle word wrap
    1. 다음 명령을 실행하여 상태 업데이트를 계속 모니터링합니다.

      $ oc get ibgu -o yaml
      Copy to Clipboard Toggle word wrap
  5. 다음 명령을 실행하여 기존 ImageBasedGroupUpgrade CR에 작업을 추가합니다.

    $ oc patch ibgu <filename> --type=json -p \
    '[{"op": "add", "path": "/spec/plan/-", "value": {"actions": ["Upgrade"], "rolloutStrategy": {"maxConcurrency": 2, "timeout": 30}}}]'
    Copy to Clipboard Toggle word wrap
  6. 선택 사항: 다음 명령을 실행하여 기존 ImageBasedGroupUpgrade CR에 AbortOnFailure 작업을 추가합니다.

    $ oc patch ibgu <filename> --type=json -p \
    '[{"op": "add", "path": "/spec/plan/-", "value": {"actions": ["AbortOnFailure"], "rolloutStrategy": {"maxConcurrency": 5, "timeout": 10}}}]'
    Copy to Clipboard Toggle word wrap
    1. 다음 명령을 실행하여 상태 업데이트를 계속 모니터링합니다.

      $ oc get ibgu -o yaml
      Copy to Clipboard Toggle word wrap
  7. 다음 명령을 실행하여 기존 ImageBasedGroupUpgrade CR에 작업을 추가합니다.

    $ oc patch ibgu <filename> --type=json -p \
    '[{"op": "add", "path": "/spec/plan/-", "value": {"actions": ["FinalizeUpgrade"], "rolloutStrategy": {"maxConcurrency": 10, "timeout": 3}}}]'
    Copy to Clipboard Toggle word wrap

검증

  • 다음 명령을 실행하여 상태 업데이트를 모니터링하세요.

    $ oc get ibgu -o yaml
    Copy to Clipboard Toggle word wrap

    출력 예

    # ...
    status:
      clusters:
      - completedActions:
        - action: Prep
        - action: AbortOnFailure
        failedActions:
        - action: Upgrade
        name: spoke1
      - completedActions:
        - action: Prep
        - action: Upgrade
        - action: FinalizeUpgrade
        name: spoke4
      - completedActions:
        - action: AbortOnFailure
        failedActions:
        - action: Prep
        name: spoke6
    # ...
    Copy to Clipboard Toggle word wrap

서비스 중단이 문제가 되지 않는 사용 사례에서는 하나의 롤아웃 전략으로 여러 작업을 한 단계로 결합한 ImageBasedGroupUpgrade CR을 사용하여 관리형 클러스터 세트를 업그레이드할 수 있습니다. 하나의 롤아웃 전략을 사용하면 업그레이드 시간을 줄일 수 있지만, 업그레이드 계획이 완료된 후에만 실패한 클러스터의 문제를 해결할 수 있습니다.

사전 요구 사항

  • cluster-admin 권한이 있는 사용자로 허브 클러스터에 로그인했습니다.
  • 이미지 기반 업그레이드에 사용되는 리소스에 대한 정책 및 ConfigMap 오브젝트가 생성되어 있습니다.
  • 허브 클러스터를 통해 모든 관리형 클러스터에 Lifecycle Agent와 OADP Operators를 설치했습니다.

프로세스

  1. ImageBasedGroupUpgrade CR이 포함된 허브 클러스터에 YAML 파일을 만듭니다.

    apiVersion: lcm.openshift.io/v1alpha1
    kind: ImageBasedGroupUpgrade
    metadata:
      name: <filename>
      namespace: default
    spec:
      clusterLabelSelectors: 
    1
    
        - matchExpressions:
          - key: name
            operator: In
            values:
            - spoke1
            - spoke4
            - spoke6
      ibuSpec:
        seedImageRef: 
    2
    
          image: quay.io/seed/image:4.19.0-rc.1
          version: 4.19.0-rc.1
          pullSecretRef:
            name: "<seed_pull_secret>"
        extraManifests: 
    3
    
          - name: example-extra-manifests
            namespace: openshift-lifecycle-agent
        oadpContent: 
    4
    
          - name: oadp-cm
            namespace: openshift-adp
      plan: 
    5
    
        - actions: ["Prep", "Upgrade", "FinalizeUpgrade"]
          rolloutStrategy:
            maxConcurrency: 200 
    6
    
            timeout: 2400 
    7
    Copy to Clipboard Toggle word wrap
    1
    업그레이드할 클러스터.
    2
    대상 플랫폼 버전, 사용할 시드 이미지, 이미지에 액세스하는 데 필요한 비밀번호입니다.
    참고

    허브 클러스터에 ImageBasedGroupUpgrade 리소스와 동일한 네임스페이스에서 시드 이미지 풀 시크릿을 추가하면 해당 시크릿이 준비 단계의 매니페스트 목록에 추가됩니다. 비밀은 openshift-lifecycle-agent 네임스페이스의 각 스포크 클러스터에서 다시 생성됩니다.

    3
    선택 사항: 시드 이미지에 없는 추가 매니페스트를 대상 클러스터에 적용합니다. 사용자 정의 카탈로그 소스에 ConfigMap 오브젝트도 적용합니다.
    4
    OADP 백업복원 CR이 포함된 ConfigMap 리소스입니다.
    5
    업그레이드 계획 세부 정보.
    6
    일괄 처리로 업데이트할 클러스터 수입니다.
    7
    작업을 완료하는 데 걸리는 시간 제한(분)입니다.
  2. 허브 클러스터에서 다음 명령을 실행하여 생성된 파일을 적용합니다.

    $ oc apply -f <filename>.yaml
    Copy to Clipboard Toggle word wrap

검증

  • 다음 명령을 실행하여 상태 업데이트를 모니터링하세요.

    $ oc get ibgu -o yaml
    Copy to Clipboard Toggle word wrap

    출력 예

    # ...
    status:
      clusters:
      - completedActions:
        - action: Prep
        failedActions:
        - action: Upgrade
        name: spoke1
      - completedActions:
        - action: Prep
        - action: Upgrade
        - action: FinalizeUpgrade
        name: spoke4
      - failedActions:
        - action: Prep
        name: spoke6
    # ...
    Copy to Clipboard Toggle word wrap

15.4.4. 규모에 따라 관리 클러스터에서 이미지 기반 업그레이드 취소

준비 단계를 완료한 관리형 클러스터 세트에서 업그레이드를 취소할 수 있습니다.

중요

일부 동작 조합만 지원되며 지원되는 동작 조합 에 나열되어 있습니다.

사전 요구 사항

  • cluster-admin 권한이 있는 사용자로 허브 클러스터에 로그인했습니다.

프로세스

  1. ImageBasedGroupUpgrade CR이 포함된 허브 클러스터에 별도의 YAML 파일을 만듭니다.

    apiVersion: lcm.openshift.io/v1alpha1
    kind: ImageBasedGroupUpgrade
    metadata:
      name: <filename>
      namespace: default
    spec:
      clusterLabelSelectors:
        - matchExpressions:
          - key: name
            operator: In
            values:
            - spoke4
      ibuSpec:
        seedImageRef:
          image: quay.io/seed/image:4.16.0-rc.1
          version: 4.16.0-rc.1
          pullSecretRef:
            name: "<seed_pull_secret>"
        extraManifests:
          - name: example-extra-manifests
            namespace: openshift-lifecycle-agent
        oadpContent:
          - name: oadp-cm
            namespace: openshift-adp
      plan:
        - actions: ["Abort"]
          rolloutStrategy:
            maxConcurrency: 5
            timeout: 10
    Copy to Clipboard Toggle word wrap

    준비 단계를 완료한 모든 관리 클러스터는 유휴 단계로 돌아갑니다.

  2. 허브 클러스터에서 다음 명령을 실행하여 생성된 파일을 적용합니다.

    $ oc apply -f <filename>.yaml
    Copy to Clipboard Toggle word wrap

검증

  • 다음 명령을 실행하여 상태 업데이트를 모니터링하세요.

    $ oc get ibgu -o yaml
    Copy to Clipboard Toggle word wrap

    출력 예

    # ...
    status:
      clusters:
      - completedActions:
        - action: Prep
        currentActions:
        - action: Abort
        name: spoke4
    # ...
    Copy to Clipboard Toggle word wrap

15.4.5. 대규모 관리형 클러스터에서 이미지 기반 업그레이드 롤백

성공적인 업그레이드 후 해결할 수 없는 문제가 발생하면 관리되는 클러스터 세트에서 변경 사항을 롤백합니다. 별도의 ImageBasedGroupUpgrade CR을 만들고 롤백하려는 관리 클러스터 세트를 정의해야 합니다.

중요

일부 동작 조합만 지원되며 지원되는 동작 조합 에 나열되어 있습니다.

사전 요구 사항

  • cluster-admin 권한이 있는 사용자로 허브 클러스터에 로그인했습니다.

프로세스

  1. ImageBasedGroupUpgrade CR이 포함된 허브 클러스터에 별도의 YAML 파일을 만듭니다.

    apiVersion: lcm.openshift.io/v1alpha1
    kind: ImageBasedGroupUpgrade
    metadata:
      name: <filename>
      namespace: default
    spec:
      clusterLabelSelectors:
        - matchExpressions:
          - key: name
            operator: In
            values:
            - spoke4
      ibuSpec:
        seedImageRef:
          image: quay.io/seed/image:4.19.0-rc.1
          version: 4.19.0-rc.1
          pullSecretRef:
            name: "<seed_pull_secret>"
        extraManifests:
          - name: example-extra-manifests
            namespace: openshift-lifecycle-agent
        oadpContent:
          - name: oadp-cm
            namespace: openshift-adp
      plan:
        - actions: ["Rollback", "FinalizeRollback"]
          rolloutStrategy:
            maxConcurrency: 200
            timeout: 2400
    Copy to Clipboard Toggle word wrap
  2. 허브 클러스터에서 다음 명령을 실행하여 생성된 파일을 적용합니다.

    $ oc apply -f <filename>.yaml
    Copy to Clipboard Toggle word wrap

    정의된 레이블과 일치하는 모든 관리 클러스터는 롤백 단계 로 이동한 다음 유휴 단계로 이동하여 롤백을 완료합니다.

검증

  • 다음 명령을 실행하여 상태 업데이트를 모니터링하세요.

    $ oc get ibgu -o yaml
    Copy to Clipboard Toggle word wrap

    출력 예

    # ...
    status:
      clusters:
      - completedActions:
        - action: Rollback
        - action: FinalizeRollback
        name: spoke4
    # ...
    Copy to Clipboard Toggle word wrap

15.4.6. Lifecycle Agent를 사용한 이미지 기반 업그레이드 문제 해결

문제의 영향을 받는 관리되는 클러스터에서 문제 해결 단계를 수행합니다.

중요

ImageBasedGroupUpgrade CR을 사용하여 클러스터를 업그레이드하는 경우 관리되는 클러스터에서 문제 해결 또는 복구 단계를 수행한 후 lcm.openshift.io/ibgu-<stage>-completed 또는 lcm.openshift.io/ibgu-<stage>-failed 클러스터 레이블이 제대로 업데이트되었는지 확인하세요. 이를 통해 TALM이 클러스터의 이미지 기반 업그레이드를 계속 관리할 수 있습니다.

15.4.6.1. 로그 수집

oc adm must-gather CLI를 사용하면 디버깅 및 문제 해결을 위한 정보를 수집할 수 있습니다.

프로세스

  • 다음 명령을 실행하여 운영자에 대한 데이터를 수집합니다.

    $  oc adm must-gather \
      --dest-dir=must-gather/tmp \
      --image=$(oc -n openshift-lifecycle-agent get deployment.apps/lifecycle-agent-controller-manager -o jsonpath='{.spec.template.spec.containers[?(@.name == "manager")].image}') \
      --image=quay.io/konveyor/oadp-must-gather:latest \// 
    1
    
      --image=quay.io/openshift/origin-must-gather:latest 
    2
    Copy to Clipboard Toggle word wrap
    1
    선택 사항: OADP 운영자로부터 추가 정보를 수집해야 하는 경우 이 옵션을 추가하세요.
    2
    선택 사항: SR-IOV 운영자로부터 추가 정보를 수집해야 하는 경우 이 옵션을 추가합니다.
15.4.6.2. AbortFailed 또는 FinalizeFailed 오류
문제

마무리 단계 또는 준비 단계에서 프로세스를 중지하면 Lifecycle Agent는 다음 리소스를 정리합니다.

  • 더 이상 필요하지 않은 Stateroot
  • 리소스 사전 캐싱
  • OADP CR
  • ImageBasedUpgrade CR

라이프 사이클 에이전트가 위의 단계를 수행하지 못하면 AbortFailed 또는 FinalizeFailed 상태로 전환됩니다. 조건 메시지와 로그는 어떤 단계가 실패했는지 보여줍니다.

오류 메시지의 예

message: failed to delete all the backup CRs. Perform cleanup manually then add 'lca.openshift.io/manual-cleanup-done' annotation to ibu CR to transition back to Idle
      observedGeneration: 5
      reason: AbortFailed
      status: "False"
      type: Idle
Copy to Clipboard Toggle word wrap

해결
  1. 로그를 검사하여 실패가 발생한 이유를 확인하세요.
  2. Lifecycle Agent가 정리를 다시 시도하도록 하려면 ImageBasedUpgrade CR에 lca.openshift.io/manual-cleanup-done 주석을 추가합니다.

    이 주석을 관찰한 후 Lifecycle Agent는 정리를 다시 시도하고, 성공하면 ImageBasedUpgrade 단계가 Idle 로 전환됩니다.

    정리가 다시 실패하면 리소스를 수동으로 정리할 수 있습니다.

15.4.6.2.1. stateroot 수동 정리
문제
준비 단계에서 멈추고 Lifecycle Agent는 새로운 stateroot를 정리합니다. 업그레이드나 롤백을 성공적으로 마친 후, Lifecycle Agent는 이전 stateroot를 정리합니다. 이 단계가 실패하면 로그를 검사하여 실패 원인을 확인하는 것이 좋습니다.
해결
  1. 다음 명령을 실행하여 stateroot에 기존 배포가 있는지 확인합니다.

    $ ostree admin status
    Copy to Clipboard Toggle word wrap
  2. 기존 배포가 있는 경우 다음 명령을 실행하여 기존 배포를 정리합니다.

    $ ostree admin undeploy <index_of_deployment>
    Copy to Clipboard Toggle word wrap
  3. stateroot의 모든 배포를 정리한 후 다음 명령을 실행하여 stateroot 디렉터리를 지웁니다.

    주의

    부팅된 배포가 이 stateroot에 있지 않은지 확인하세요.

    $ stateroot="<stateroot_to_delete>"
    Copy to Clipboard Toggle word wrap
    $ unshare -m /bin/sh -c "mount -o remount,rw /sysroot && rm -rf /sysroot/ostree/deploy/${stateroot}"
    Copy to Clipboard Toggle word wrap
15.4.6.2.2. OADP 리소스 수동 정리
문제
Lifecycle Agent와 S3 백엔드 간의 연결 문제로 인해 OADP 리소스의 자동 정리가 실패할 수 있습니다. 연결을 복구하고 lca.openshift.io/manual-cleanup-done 주석을 추가하면 Lifecycle Agent가 백업 리소스를 성공적으로 정리할 수 있습니다.
해결
  1. 다음 명령을 실행하여 백엔드 연결을 확인하세요.

    $ oc get backupstoragelocations.velero.io -n openshift-adp
    Copy to Clipboard Toggle word wrap

    출력 예

    NAME                          PHASE       LAST VALIDATED   AGE   DEFAULT
    dataprotectionapplication-1   Available   33s              8d    true
    Copy to Clipboard Toggle word wrap

  2. 모든 백업 리소스를 제거한 다음 ImageBasedUpgrade CR에 lca.openshift.io/manual-cleanup-done 주석을 추가합니다.
15.4.6.3. LVM 스토리지 볼륨 내용이 복구되지 않았습니다.

LVM 스토리지를 사용하여 동적 영구 볼륨 스토리지를 제공하는 경우, LVM 스토리지가 잘못 구성된 경우 영구 볼륨 내용을 복원하지 못할 수 있습니다.

15.4.6.3.1. 백업 CR에 LVM 저장소 관련 필드가 없습니다.
문제

백업 CR에 영구 볼륨을 복원하는 데 필요한 필드가 누락되었을 수 있습니다. 다음을 실행하여 애플리케이션 포드에서 이벤트를 확인하여 이 문제가 있는지 확인할 수 있습니다.

$ oc describe pod <your_app_name>
Copy to Clipboard Toggle word wrap

백업 CR에서 누락된 LVM 저장소 관련 필드를 보여주는 예제 출력

Events:
  Type     Reason            Age                From               Message
  ----     ------            ----               ----               -------
  Warning  FailedScheduling  58s (x2 over 66s)  default-scheduler  0/1 nodes are available: pod has unbound immediate PersistentVolumeClaims. preemption: 0/1 nodes are available: 1 Preemption is not helpful for scheduling..
  Normal   Scheduled         56s                default-scheduler  Successfully assigned default/db-1234 to sno1.example.lab
  Warning  FailedMount       24s (x7 over 55s)  kubelet            MountVolume.SetUp failed for volume "pvc-1234" : rpc error: code = Unknown desc = VolumeID is not found
Copy to Clipboard Toggle word wrap

해결

애플리케이션 백업 CR에 logicalvolumes.topolvm.io를 포함해야 합니다. 이 리소스가 없으면 애플리케이션은 영구 볼륨 클레임을 복원하고 영구 볼륨이 올바르게 나타나지만 이 영구 볼륨과 연결된 논리 볼륨은 피벗 후 올바르게 복원되지 않습니다.

백업 CR 예시

apiVersion: velero.io/v1
kind: Backup
metadata:
  labels:
    velero.io/storage-location: default
  name: small-app
  namespace: openshift-adp
spec:
  includedNamespaces:
  - test
  includedNamespaceScopedResources:
  - secrets
  - persistentvolumeclaims
  - deployments
  - statefulsets
  includedClusterScopedResources: 
1

  - persistentVolumes
  - volumesnapshotcontents
  - logicalvolumes.topolvm.io
Copy to Clipboard Toggle word wrap

1
애플리케이션의 영구 볼륨을 복원하려면 표시된 대로 이 섹션을 구성해야 합니다.
15.4.6.3.2. Restore CR에서 LVM 저장소 관련 필드가 누락됨
문제

업그레이드 후 애플리케이션에 대한 예상 리소스는 복구되지만 영구 볼륨 내용은 보존되지 않습니다.

  1. 피벗 전에 다음 명령을 실행하여 애플리케이션의 영구 볼륨을 나열하세요.

    $ oc get pv,pvc,logicalvolumes.topolvm.io -A
    Copy to Clipboard Toggle word wrap

    피벗 전의 출력 예

    NAME                        CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM            STORAGECLASS   REASON   AGE
    persistentvolume/pvc-1234   1Gi        RWO            Retain           Bound    default/pvc-db   lvms-vg1                4h45m
    
    NAMESPACE   NAME                           STATUS   VOLUME     CAPACITY   ACCESS MODES   STORAGECLASS   AGE
    default     persistentvolumeclaim/pvc-db   Bound    pvc-1234   1Gi        RWO            lvms-vg1       4h45m
    
    NAMESPACE   NAME                                AGE
                logicalvolume.topolvm.io/pvc-1234   4h45m
    Copy to Clipboard Toggle word wrap

  2. 다음 명령을 피벗한 후 실행하여 애플리케이션의 영구 볼륨을 나열하세요.

    $ oc get pv,pvc,logicalvolumes.topolvm.io -A
    Copy to Clipboard Toggle word wrap

    피벗 후의 출력 예

    NAME                        CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM            STORAGECLASS   REASON   AGE
    persistentvolume/pvc-1234   1Gi        RWO            Delete           Bound    default/pvc-db   lvms-vg1                19s
    
    NAMESPACE   NAME                           STATUS   VOLUME     CAPACITY   ACCESS MODES   STORAGECLASS   AGE
    default     persistentvolumeclaim/pvc-db   Bound    pvc-1234   1Gi        RWO            lvms-vg1       19s
    
    NAMESPACE   NAME                                AGE
                logicalvolume.topolvm.io/pvc-1234   18s
    Copy to Clipboard Toggle word wrap

해결

이 문제가 발생하는 이유는 논리 볼륨 상태가 복원 CR에서 보존되지 않기 때문입니다. 이 상태는 Velero가 피벗 후에 보존해야 하는 볼륨을 참조하는 데 필요하기 때문에 중요합니다. Restore CR 애플리케이션에는 다음 필드를 포함해야 합니다.

예제 CR 복원

apiVersion: velero.io/v1
kind: Restore
metadata:
  name: sample-vote-app
  namespace: openshift-adp
  labels:
    velero.io/storage-location: default
  annotations:
    lca.openshift.io/apply-wave: "3"
spec:
  backupName:
    sample-vote-app
  restorePVs: true 
1

  restoreStatus: 
2

    includedResources:
      - logicalvolumes
Copy to Clipboard Toggle word wrap

1
애플리케이션의 영구 볼륨을 보존하려면 restorePVs를 true 로 설정해야 합니다.
2
애플리케이션의 영구 볼륨을 보존하려면 표시된 대로 이 섹션을 구성해야 합니다.
15.4.6.4. 실패한 백업 및 복원 CR 디버깅
문제
아티팩트의 백업이나 복원이 실패했습니다.
해결

Velero CLI 도구를 사용하면 백업복원 CR을 디버깅하고 로그를 검색할 수 있습니다. Velero CLI 툴은 OpenShift CLI 툴보다 자세한 정보를 제공합니다.

  1. 다음 명령을 실행하여 오류가 포함된 백업 CR을 설명합니다.

    $ oc exec -n openshift-adp velero-7c87d58c7b-sw6fc -c velero -- ./velero describe backup -n openshift-adp backup-acm-klusterlet --details
    Copy to Clipboard Toggle word wrap
  2. 다음 명령을 실행하여 오류가 포함된 CR 복원을 설명합니다.

    $ oc exec -n openshift-adp velero-7c87d58c7b-sw6fc -c velero -- ./velero describe restore -n openshift-adp restore-acm-klusterlet --details
    Copy to Clipboard Toggle word wrap
  3. 다음 명령을 실행하여 백업된 리소스를 로컬 디렉토리에 다운로드합니다.

    $ oc exec -n openshift-adp velero-7c87d58c7b-sw6fc -c velero -- ./velero backup download -n openshift-adp backup-acm-klusterlet -o ~/backup-acm-klusterlet.tar.gz
    Copy to Clipboard Toggle word wrap

16장. 단일 노드 OpenShift를 위한 이미지 기반 설치

16.1. 단일 노드 OpenShift에 대한 이미지 기반 설치 및 배포 이해

이미지 기반 설치는 설치 프로세스를 간소화하여 단일 노드 OpenShift 클러스터의 배포 시간을 크게 줄여줍니다.

이 방법을 사용하면 대상 호스트에 단일 노드 OpenShift의 구성 및 검증된 인스턴스를 사전 설치할 수 있습니다. 사전 설치된 호스트는 최소한의 개입으로 연결이 끊긴 환경을 포함하여 네트워크의 가장 먼 가장자리에서 신속하게 재구성하고 배포할 수 있습니다.

참고

GitOps Zero Touch Provisioning(ZTP)과 함께 이미지 기반 접근 방식을 사용하여 관리형 클러스터를 배포하려면 SiteConfig 연산자를 사용할 수 있습니다. 자세한 내용은 SiteConfig 연산자를 참조하세요.

네트워크의 가장 먼 가장자리에 인프라를 구축하는 것은 대역폭이 낮고 지연 시간이 길며 연결이 끊긴 환경을 가진 서비스 제공자에게 과제를 안겨줍니다. 단일 노드 OpenShift 클러스터를 설치하고 배포하는 데는 비용과 시간이 많이 소요됩니다.

네트워크의 가장 먼 가장자리에 단일 노드 OpenShift 클러스터를 설치하고 배포하기 위한 이미지 기반 접근 방식은 설치 및 배포 단계를 분리하여 이러한 과제를 극복합니다.

그림 16.1. 관리형 단일 노드 OpenShift 클러스터에 대한 이미지 기반 설치 및 배포 개요

이미지 기반 설치
서비스 창고나 공장과 같은 중앙 사이트에 단일 노드 OpenShift를 사용하여 여러 호스트를 사전 설치합니다. 그런 다음 이러한 호스트에 대한 기본 구성을 검증하고 이미지 기반 접근 방식을 활용하여 단일 라이브 설치 ISO를 사용하여 대규모로 재현 가능한 공장 설치를 수행합니다.
이미지 기반 배포
사전 설치 및 검증된 호스트를 원격 사이트로 배송하고 구성 ISO를 사용하여 몇 분 만에 클러스터를 빠르게 재구성하고 배포합니다.

SNO 클러스터를 사전 설치하고 구성하는 데는 두 가지 방법 중에서 선택할 수 있습니다.

openshift-install 프로그램 사용
단일 노드 OpenShift 클러스터의 경우 openshift-install 프로그램을 사용하여 모든 호스트에 공통적인 라이브 설치 ISO를 수동으로 생성하세요. 그런 다음, 해당 프로그램을 다시 사용하여 호스트가 고유한지 확인하는 구성 ISO를 만듭니다. 자세한 내용은 “openshift-install 프로그램을 사용하여 관리형 단일 노드 OpenShift 배포”를 참조하세요.
IBI 연산자 사용
관리형 단일 노드 OpenShift 클러스터의 경우, 이미지 기반 설치(IBI) 연산자와 함께 openshift-install을 사용하여 작업을 확장할 수 있습니다. 이 프로그램은 라이브 설치 ISO를 생성한 다음 IBI Operator가 각 호스트에 대해 하나의 구성 ISO를 생성합니다. 자세한 내용은 "IBI Operator를 사용하여 단일 노드 OpenShift 배포"를 참조하세요.
16.1.1.1. 단일 노드 OpenShift 클러스터를 위한 이미지 기반 설치

Lifecycle Agent를 사용하면 단일 노드 OpenShift 클러스터 인스턴스를 캡슐화하는 OCI 컨테이너 이미지를 생성할 수 있습니다. 이 이미지는 대상 OpenShift Container Platform 버전으로 구성할 수 있는 전용 클러스터에서 파생되었습니다.

라이브 설치 ISO에서 이 이미지를 참조하여 단일 노드 OpenShift의 구성 및 검증된 인스턴스를 여러 호스트에 일관되게 사전 설치할 수 있습니다. 이러한 접근 방식을 사용하면 사전 설치된 호스트를 원격 사이트로 배송하여 신속하게 재구성하고 배포하기 전에 공장이나 서비스 창고와 같은 중앙 위치에서 호스트를 준비할 수 있습니다. 호스트를 사전 설치하는 방법에 대한 지침은 openshift-install 프로그램만 사용하여 호스트를 배포하든, IBI Operator와 함께 프로그램을 사용하든 동일합니다.

이미지 기반 설치 프로세스에 대한 간략한 개요는 다음과 같습니다.

  1. 단일 노드 OpenShift 클러스터에서 이미지를 생성합니다.
  2. openshift-install 프로그램을 사용하여 시드 이미지 URL과 기타 설치 아티팩트를 라이브 설치 ISO에 포함합니다.
  3. 라이브 설치 ISO를 사용하여 호스트를 사전 설치하여 호스트를 시작합니다.

    이 과정에서 openshift-install 프로그램은 Red Hat Enterprise Linux CoreOS(RHCOS)를 디스크에 설치하고, 생성한 이미지를 가져오고, 릴리스 컨테이너 이미지를 디스크에 미리 캐시합니다.

  4. 설치가 완료되면 호스트는 신속한 재구성 및 배포를 위해 원격 사이트로 전송될 준비가 됩니다.
16.1.1.2. 단일 노드 OpenShift 클러스터를 위한 이미지 기반 배포

openshift-install 프로그램이나 IBI Operator를 사용하여 이미지 기반 설치로 사전 설치한 호스트를 구성하고 배포할 수 있습니다.

단일 노드 OpenShift 클러스터 배포

openshift-install 프로그램을 사용하여 사이트별 세부 정보로 대상 호스트를 구성하려면 다음 리소스를 만들어야 합니다.

  • install-config.yaml 설치 매니페스트
  • image-based-config.yaml 매니페스트

openshift-install 프로그램은 이러한 리소스를 사용하여 사전 설치된 대상 호스트에 첨부하여 배포를 완료하는 구성 ISO를 생성합니다.

관리형 단일 노드 OpenShift 클러스터 배포

Red Hat Advanced Cluster Management(RHACM)와 Kubernetes Operator(MCE)용 멀티클러스터 엔진은 허브 앤 스포크 아키텍처를 사용하여 여러 사이트에 걸쳐 단일 노드 OpenShift 클러스터를 관리하고 배포합니다. 이러한 접근 방식을 사용하면 허브 클러스터는 스포크 클러스터를 관리하는 중앙 제어 평면 역할을 하는데, 스포크 클러스터는 대개 네트워크의 가장 먼 가장자리에 배치된 원격 단일 노드 OpenShift 클러스터입니다.

허브 클러스터에서 이미지 기반 배포에 대한 사이트별 구성 리소스를 정의할 수 있습니다. IBI 운영자는 이러한 구성 리소스를 사용하여 원격 사이트에 사전 설치된 호스트를 재구성하고 호스트를 관리형 단일 노드 OpenShift 클러스터로 배포합니다. 이러한 접근 방식은 광범위하고 분산된 인프라를 보유한 통신 서비스 제공업체 및 기타 서비스 제공업체에 특히 유용합니다. 원격 사이트에서 엔드투엔드 설치를 수행하는 데는 시간과 비용이 많이 들기 때문입니다.

다음은 이미지 기반 설치가 사전 설치된 호스트의 이미지 기반 배포 프로세스에 대한 간략한 개요입니다.

  • 허브 클러스터에 사전 설치된 호스트에 대한 사이트별 구성 리소스를 정의합니다.
  • 허브 클러스터에 이러한 리소스를 적용합니다. 이렇게 하면 배포 프로세스가 시작됩니다.
  • IBI 운영자는 구성 ISO를 생성합니다.
  • IBI Operator는 구성 ISO가 첨부된 대상 사전 설치 호스트를 부팅합니다.
  • 호스트는 구성 ISO를 마운트하고 재구성 프로세스를 시작합니다.
  • 재구성이 완료되면 단일 노드 OpenShift 클러스터가 준비됩니다.

호스트는 이미 이미지 기반 설치를 통해 사전 설치되어 있으므로 기술자는 몇 분 안에 호스트를 재구성하고 배포할 수 있습니다.

16.1.2. 이미지 기반 설치 및 배포 구성 요소

다음 내용은 이미지 기반 설치 및 배포의 구성 요소를 설명합니다.

씨앗 이미지
대상 OpenShift Container Platform 버전을 사용하여 전용 클러스터에서 생성된 OCI 컨테이너 이미지입니다.
씨앗 클러스터
시드 이미지를 만드는 데 사용하고 대상 OpenShift Container Platform 버전과 함께 배포되는 전용 단일 노드 OpenShift 클러스터입니다.
라이프사이클 에이전트
시드 이미지를 생성합니다.
이미지 기반 설치(IBI) 운영자
관리형 클러스터를 배포할 때 IBI Operator는 허브 클러스터에서 정의한 사이트별 리소스에서 구성 ISO를 생성하고 베어 메탈 프로비저닝 서비스를 사용하여 구성 ISO를 사전 설치된 호스트에 연결합니다.
openshift-install 프로그램
설치 및 구성 ISO를 생성하고, 라이브 설치 ISO에 시드 이미지 URL을 포함합니다. IBI Operator를 사용하지 않는 경우 배포를 완료하려면 구성 ISO를 사전 설치된 호스트에 수동으로 연결해야 합니다.

16.1.3. 이미지 기반 설치 및 배포를 위한 클러스터 가이드라인

성공적인 이미지 기반 설치 및 배포를 위해서는 다음 지침을 참조하세요.

16.1.3.1. 클러스터 가이드라인
  • Red Hat Advanced Cluster Management(RHACM)를 사용하는 경우 시드 이미지에 RHACM 리소스가 포함되지 않도록 하려면 시드 이미지를 생성하기 전에 모든 선택적 RHACM 추가 기능을 비활성화해야 합니다.
16.1.3.2. 씨앗 클러스터 지침
  • 네트워크 가장자리에 클러스터를 배포할 때 프록시 구성이 필요한 경우 프록시 구성을 갖춘 시드 클러스터에서 시드 이미지를 만들어야 합니다. 프록시 구성이 일치할 필요는 없습니다.
  • 시드 클러스터의 clusterNetworkserviceNetwork 네트워크 구성은 배포된 클러스터에 유지됩니다. 라이프사이클 에이전트는 이러한 설정을 시드 이미지에 포함합니다. 나중에 이미지 기반 설치 및 배포 프로세스에서는 이러한 설정을 변경할 수 없습니다.
  • 시드 클러스터에서 최대 전송 단위(MTU)를 설정한 경우 이미지 기반 구성 ISO에 대한 정적 네트워크 구성에서도 동일한 MTU 값을 설정해야 합니다.
  • 단일 노드 OpenShift 시드 클러스터에는 이미지 기반 설치 중에 이미지를 사전 캐싱하기 위한 공유 /var/lib/containers 디렉토리가 있어야 합니다. 자세한 내용은 "ostree stateroots 간 공유 컨테이너 파티션 구성"을 참조하세요.
  • 대상 베어 메탈 호스트와 동일한 하드웨어를 사용하는 단일 노드 OpenShift 클러스터에서 시드 이미지를 만듭니다. 시드 클러스터는 다음 항목에 대한 대상 클러스터 구성을 반영해야 합니다.

    • CPU 토폴로지

      • CPU 아키텍처
      • CPU 코어 수
      • 예약된 CPU 수와 같은 조정된 성능 구성
    • IP 버전

      참고

      이 릴리스에서는 듀얼 스택 네트워킹이 지원되지 않습니다.

    • 연결이 끊긴 레지스트리

      참고

      대상 클러스터가 연결이 끊긴 레지스트리를 사용하는 경우 시드 클러스터도 연결이 끊긴 레지스트리를 사용해야 합니다. 등록기관은 동일할 필요는 없습니다.

    • FIPS 구성

16.1.4. 이미지 기반 설치 및 배포를 위한 소프트웨어 필수 구성 요소

이미지 기반 설치 및 배포에는 이러한 필수 구성 요소에 대한 최소 소프트웨어 버전이 필요합니다.

Expand
표 16.1. 최소 소프트웨어 요구 사항
Component소프트웨어 버전

관리형 클러스터 버전

4.17

hub 클러스터 버전

4.16

Red Hat 고급 클러스터 관리(RHACM)

2.12

라이프사이클 에이전트

4.16 이상

이미지 기반 설치 운영자

4.17

openshift-install 프로그램

4.17

16.2. 단일 노드 OpenShift 클러스터에 대한 이미지 기반 설치 준비

단일 노드 OpenShift 클러스터에 대한 이미지 기반 설치를 준비하려면 다음 작업을 완료해야 합니다.

  • Lifecycle Agent를 사용하여 시드 이미지를 만듭니다.
  • 모든 소프트웨어 구성 요소가 필수 버전을 충족하는지 확인합니다. 자세한 내용은 "이미지 기반 설치 및 배포를 위한 소프트웨어 필수 구성 요소"를 참조하세요.

16.2.1. Lifecycle Agent 설치

Lifecycle Agent를 사용하여 시드 클러스터에서 시드 이미지를 생성합니다. OpenShift CLI( oc ) 또는 웹 콘솔을 사용하여 Lifecycle Agent를 설치할 수 있습니다.

16.2.1.1. CLI를 사용하여 Lifecycle Agent 설치

OpenShift CLI( oc )를 사용하여 Lifecycle Agent를 설치할 수 있습니다.

사전 요구 사항

  • OpenShift CLI(oc)가 설치되어 있습니다.
  • 클러스터 관리자 권한이 있는 사용자로 로그인했습니다.

프로세스

  1. Lifecycle Agent에 대한 네임스페이스 개체 YAML 파일을 만듭니다.

    apiVersion: v1
    kind: Namespace
    metadata:
      name: openshift-lifecycle-agent
      annotations:
        workload.openshift.io/allowed: management
    Copy to Clipboard Toggle word wrap
    1. 다음 명령을 실행하여 네임스페이스 CR을 만듭니다.

      $ oc create -f <namespace_filename>.yaml
      Copy to Clipboard Toggle word wrap
  2. Lifecycle Agent에 대한 OperatorGroup 개체 YAML 파일을 만듭니다.

    apiVersion: operators.coreos.com/v1
    kind: OperatorGroup
    metadata:
      name: openshift-lifecycle-agent
      namespace: openshift-lifecycle-agent
    spec:
      targetNamespaces:
      - openshift-lifecycle-agent
    Copy to Clipboard Toggle word wrap
    1. 다음 명령을 실행하여 OperatorGroup CR을 생성합니다.

      $ oc create -f <operatorgroup_filename>.yaml
      Copy to Clipboard Toggle word wrap
  3. Lifecycle Agent에 대한 구독 CR을 만듭니다.

    apiVersion: operators.coreos.com/v1alpha1
    kind: Subscription
    metadata:
      name: openshift-lifecycle-agent-subscription
      namespace: openshift-lifecycle-agent
    spec:
      channel: "stable"
      name: lifecycle-agent
      source: redhat-operators
      sourceNamespace: openshift-marketplace
    Copy to Clipboard Toggle word wrap
    1. 다음 명령을 실행하여 구독 CR을 만듭니다.

      $ oc create -f <subscription_filename>.yaml
      Copy to Clipboard Toggle word wrap

검증

  1. 설치가 성공했는지 확인하려면 다음 명령을 실행하여 CSV 리소스를 검사하세요.

    $ oc get csv -n openshift-lifecycle-agent
    Copy to Clipboard Toggle word wrap

    출력 예

    NAME                              DISPLAY                     VERSION               REPLACES                           PHASE
    lifecycle-agent.v4.19.0           Openshift Lifecycle Agent   4.19.0                Succeeded
    Copy to Clipboard Toggle word wrap

  2. 다음 명령을 실행하여 Lifecycle Agent가 실행 중인지 확인하세요.

    $ oc get deploy -n openshift-lifecycle-agent
    Copy to Clipboard Toggle word wrap

    출력 예

    NAME                                 READY   UP-TO-DATE   AVAILABLE   AGE
    lifecycle-agent-controller-manager   1/1     1            1           14s
    Copy to Clipboard Toggle word wrap

16.2.1.2. 웹 콘솔을 사용하여 라이프사이클 에이전트 설치

OpenShift Container Platform 웹 콘솔을 사용하여 Lifecycle Agent를 설치할 수 있습니다.

사전 요구 사항

  • cluster-admin 권한이 있는 사용자로 로그인했습니다.

프로세스

  1. OpenShift Container Platform 웹 콘솔에서 OperatorOperatorHub로 이동합니다.
  2. 사용 가능한 Operator 목록에서 Lifecycle Agent 를 검색한 다음 설치를 클릭합니다.
  3. Operator 설치 페이지의 클러스터의 특정 네임스페이스에서 openshift-ptp를 선택합니다.
  4. 설치를 클릭합니다.

검증

  1. 설치에 성공했는지 확인하려면 다음을 수행하십시오.

    1. Operators설치된 Operators를 클릭합니다.
    2. Lifecycle Agent가 openshift-lifecycle-agent 프로젝트에 InstallSucceeded Status 로 나열되어 있는지 확인하세요.

      참고

      설치 중에 Operator는 실패 상태를 표시할 수 있습니다. 나중에 InstallSucceeded 메시지와 함께 설치에 성공하면 이 실패 메시지를 무시할 수 있습니다.

Operator가 성공적으로 설치되지 않은 경우 다음을 수행하십시오.

  1. 운영자설치된 운영자를 클릭하고 운영자 구독설치 계획 탭을 검사하여 상태 아래에 오류나 실패가 있는지 확인하세요.
  2. 워크로드Pod를 클릭하고 openshift-lifecycle-agent 프로젝트의 Pod에 대한 로그를 확인합니다.

16.2.2. ostree stateroots 간의 공유 컨테이너 파티션 구성

중요

이 절차는 설치 시 완료해야 합니다.

시드 클러스터에 MachineConfig를 적용하여 별도의 파티션을 만들고 사전 설치 프로세스 중에 사용될 두 개의 ostree stateroot 간에 /var/lib/containers 파티션을 공유합니다.

프로세스

  • MachineConfig를 적용하여 별도의 파티션을 만듭니다.

    apiVersion: machineconfiguration.openshift.io/v1
    kind: MachineConfig
    metadata:
      labels:
        machineconfiguration.openshift.io/role: master
      name: 98-var-lib-containers-partitioned
    spec:
      config:
        ignition:
          version: 3.2.0
        storage:
          disks:
            - device: /dev/disk/by-path/pci-<root_disk> 
    1
    
              partitions:
                - label: var-lib-containers
                  startMiB: <start_of_partition> 
    2
    
                  sizeMiB: <partition_size> 
    3
    
          filesystems:
            - device: /dev/disk/by-partlabel/var-lib-containers
              format: xfs
              mountOptions:
                - defaults
                - prjquota
              path: /var/lib/containers
              wipeFilesystem: true
        systemd:
          units:
            - contents: |-
                # Generated by Butane
                [Unit]
                Before=local-fs.target
                Requires=systemd-fsck@dev-disk-by\x2dpartlabel-var\x2dlib\x2dcontainers.service
                After=systemd-fsck@dev-disk-by\x2dpartlabel-var\x2dlib\x2dcontainers.service
    
                [Mount]
                Where=/var/lib/containers
                What=/dev/disk/by-partlabel/var-lib-containers
                Type=xfs
                Options=defaults,prjquota
    
                [Install]
                RequiredBy=local-fs.target
              enabled: true
              name: var-lib-containers.mount
    Copy to Clipboard Toggle word wrap
    1
    root 디스크를 지정합니다.
    2
    파티션의 시작을 MiB 단위로 지정합니다. 값이 너무 작으면 설치가 실패합니다.
    3
    사전 캐시된 이미지에 대한 충분한 디스크 공간을 확보하려면 파티션의 최소 크기를 500GB로 지정하세요. 값이 너무 작으면 설치 후 배포가 실패합니다.

16.2.3. 시드 이미지 구성

베어 메탈 호스트와 동일한 하드웨어, 유사한 대상 클러스터 구성을 사용하여 단일 노드 OpenShift 클러스터에서 시드 이미지를 만들 수 있습니다. 하지만 시드 클러스터에서 생성된 시드 이미지에는 클러스터별 구성이 포함될 수 없습니다.

다음 표는 시드 이미지에 포함해야 하는 구성 요소, 리소스 및 구성과 포함하지 않아야 하는 구성 요소, 리소스 및 구성을 나열합니다.

Expand
표 16.2. 시드 이미지 구성
클러스터 구성시드 이미지에 포함

성과 프로필

제공됨

대상 클러스터에 대한 MachineConfig 리소스

제공됨

IP 버전 [1]

제공됨

Lifecycle Agent 및 OADP Operator를 포함한 Day 2 Operator 세트

제공됨

연결이 끊긴 레지스트리 구성 [2]

제공됨

유효한 프록시 구성 [3]

제공됨

FIPS 구성

제공됨

대상 클러스터의 크기와 일치하는 컨테이너 스토리지를 위한 기본 디스크의 전용 파티션

제공됨

로컬 볼륨

  • LSO의 LocalVolume 에서 사용되는 StorageClass
  • LSO용 LocalVolume
  • LVMS용 LVMCluster CR

없음

  1. 이 릴리스에서는 듀얼 스택 네트워킹이 지원되지 않습니다.
  2. 시드 클러스터가 연결이 끊긴 환경에 설치된 경우 대상 클러스터도 연결이 끊긴 환경에 설치해야 합니다.
  3. 프록시 구성은 시드 클러스터와 대상 클러스터 모두에서 활성화하거나 비활성화해야 합니다. 하지만 클러스터에 구성된 프록시 서버는 일치할 필요가 없습니다.
16.2.3.1. RAN DU 프로필을 사용한 시드 이미지 구성

다음 표는 RAN DU 프로필을 사용할 때 시드 이미지에 포함해야 하는 구성 요소, 리소스 및 구성과 포함하지 않아야 하는 구성 요소, 리소스 및 구성을 나열합니다.

Expand
표 16.3. RAN DU 프로파일을 사용한 시드 이미지 구성
리소스시드 이미지에 포함

Day 0 설치의 일부로 적용되는 모든 추가 매니페스트

제공됨

모든 Day 2 Operator 서브스크립션

제공됨

DisableOLMPprof.yaml

제공됨

TunedPerformancePatch.yaml

제공됨

PerformanceProfile.yaml

제공됨

SriovOperatorConfig.yaml

제공됨

DisableSnoNetworkDiag.yaml

제공됨

StorageClass.yaml

아니요, StorageLV.yaml 에서 사용하는 경우에는 그렇습니다.

StorageLV.yaml

없음

StorageLVMCluster.yaml

없음

다음 리소스 및 구성 목록은 추가 매니페스트로 적용하거나 RHACM 정책을 사용하여 적용할 수 있습니다.

  • ClusterLogForwarder.yaml
  • ReduceMonitoringFootprint.yaml
  • SriovFecClusterConfig.yaml
  • PtpOperatorConfigForEvent.yaml
  • DefaultCatsrc.yaml
  • PtpConfig.yaml
  • SriovNetwork.yaml
중요

GitOps ZTP를 사용하는 경우 RHACM 정책을 사용하여 이러한 리소스를 활성화하면 클러스터 수명 주기 전체에서 구성 변경 사항을 적용할 수 있습니다.

16.2.4. Lifecycle Agent를 사용하여 시드 이미지 생성

Lifecycle Agent를 사용하여 관리되는 클러스터에서 시드 이미지를 생성합니다. 운영자는 필요한 시스템 구성을 확인하고, 시드 이미지를 생성하기 전에 필요한 시스템 정리를 수행하고, 이미지 생성을 시작합니다. 시드 이미지 생성에는 다음 작업이 포함됩니다.

  • 클러스터 운영자 중지
  • 시드 이미지 구성 준비
  • SeedGenerator CR에 지정된 이미지 저장소에 시드 이미지를 생성하고 푸시합니다.
  • 클러스터 운영자 복원
  • 만료되는 시드 클러스터 인증서
  • 시드 클러스터에 대한 새 인증서 생성
  • 시드 클러스터에서 SeedGenerator CR 복원 및 업데이트

사전 요구 사항

  • Kubernetes Operator용 RHACM 및 멀티클러스터 엔진이 시드 클러스터에 설치되지 않았습니다.
  • 시드 클러스터에 공유 컨테이너 디렉토리를 구성했습니다.
  • 시드 클러스터에 OADP Operator와 Lifecycle Agent의 최소 버전을 설치했습니다.
  • 시드 클러스터에 영구 볼륨이 구성되지 않았는지 확인하세요.
  • Local Storage Operator를 사용하는 경우 시드 클러스터에 LocalVolume CR이 존재하지 않는지 확인하세요.
  • LVM 스토리지를 사용하는 경우 시드 클러스터에 LVMCluster CR이 없는지 확인하세요.
  • OADP를 사용하는 경우 시드 클러스터에 DataProtectionApplication CR이 존재하지 않는지 확인하세요.

프로세스

  1. 시드 이미지에 포함되어서는 안 되는 시드 클러스터의 RHACM 관련 리소스를 삭제하려면 허브에서 관리되는 클러스터를 분리합니다.

    1. 다음 명령을 실행하여 시드 클러스터를 수동으로 분리합니다.

      $ oc delete managedcluster sno-worker-example
      Copy to Clipboard Toggle word wrap
      1. 관리되는 클러스터가 제거될 때까지 기다리세요. 클러스터를 제거한 후 적절한 SeedGenerator CR을 생성합니다. Lifecycle Agent는 RHACM 아티팩트를 정리합니다.
    2. GitOps ZTP를 사용하는 경우 kustomization.yaml 에서 시드 클러스터의 SiteConfig CR을 제거하여 클러스터를 분리합니다.

      1. 여러 SiteConfig CR을 참조하는 kustomization.yaml 파일이 있는 경우 kustomization.yaml 에서 시드 클러스터의 SiteConfig CR을 제거하세요.

        apiVersion: kustomize.config.k8s.io/v1beta1
        kind: Kustomization
        
        generators:
        #- example-seed-sno1.yaml
        - example-target-sno2.yaml
        - example-target-sno3.yaml
        Copy to Clipboard Toggle word wrap
      2. SiteConfig CR 하나를 참조하는 kustomization.yaml 이 있는 경우 kustomization.yaml 에서 시드 클러스터의 SiteConfig CR을 제거하고 generators: {} 줄을 추가합니다.

        apiVersion: kustomize.config.k8s.io/v1beta1
        kind: Kustomization
        
        generators: {}
        Copy to Clipboard Toggle word wrap
      3. Git 저장소에 kustomization.yaml 변경 사항을 커밋하고 저장소에 변경 사항을 푸시합니다.

        ArgoCD 파이프라인은 변경 사항을 감지하고 관리되는 클러스터를 제거합니다.

  2. 레지스트리에 시드 이미지를 푸시할 수 있도록 Secret 객체를 만듭니다.

    1. 다음 명령을 실행하여 인증 파일을 만듭니다.

      $ MY_USER=myuserid
      $ AUTHFILE=/tmp/my-auth.json
      $ podman login --authfile ${AUTHFILE} -u ${MY_USER} quay.io/${MY_USER}
      Copy to Clipboard Toggle word wrap
      $ base64 -w 0 ${AUTHFILE} ; echo
      Copy to Clipboard Toggle word wrap
    2. openshift-lifecycle-agent 네임스페이스의 seedgen 이라는 Secret YAML 파일에 있는 seedAuth 필드에 출력을 복사합니다.

      apiVersion: v1
      kind: Secret
      metadata:
        name: seedgen 
      1
      
        namespace: openshift-lifecycle-agent
      type: Opaque
      data:
        seedAuth: <encoded_AUTHFILE> 
      2
      Copy to Clipboard Toggle word wrap
      1
      비밀 리소스에는 name: seedgennamespace: openshift-lifecycle-agent 필드가 있어야 합니다.
      2
      생성된 시드 이미지를 푸시하기 위해 레지스트리에 대한 쓰기 액세스를 위한 base64로 인코딩된 인증 파일을 지정합니다.
    3. 다음 명령을 실행하여 Secret을 적용합니다.

      $ oc apply -f secretseedgenerator.yaml
      Copy to Clipboard Toggle word wrap
  3. SeedGenerator CR을 생성합니다.

    apiVersion: lca.openshift.io/v1
    kind: SeedGenerator
    metadata:
      name: seedimage 
    1
    
    spec:
      seedImage: <seed_container_image> 
    2
    Copy to Clipboard Toggle word wrap
    1
    SeedGenerator CR의 이름은 seedimage 여야 합니다.
    2
    컨테이너 이미지 URL을 지정합니다(예: quay.io/example/seed-container-image:<tag> ) . <seed_cluster_name>:<ocp_version> 형식을 사용하는 것이 좋습니다.
  4. 다음 명령을 실행하여 시드 이미지를 생성합니다.

    $ oc apply -f seedgenerator.yaml
    Copy to Clipboard Toggle word wrap
    중요

    Lifecycle Agent가 시드 이미지를 생성하는 동안 클러스터가 재부팅되고 API 기능이 손실됩니다. SeedGenerator CR을 적용하면 kubelet 과 CRI-O 작업이 중지되고 이미지 생성이 시작됩니다.

더 많은 시드 이미지를 생성하려면 시드 이미지를 생성하려는 버전으로 새로운 시드 클러스터를 프로비저닝해야 합니다.

검증

  • 클러스터가 복구되어 사용 가능해지면 다음 명령을 실행하여 SeedGenerator CR의 상태를 확인할 수 있습니다.

    $ oc get seedgenerator -o yaml
    Copy to Clipboard Toggle word wrap

    출력 예

    status:
      conditions:
      - lastTransitionTime: "2024-02-13T21:24:26Z"
        message: Seed Generation completed
        observedGeneration: 1
        reason: Completed
        status: "False"
        type: SeedGenInProgress
      - lastTransitionTime: "2024-02-13T21:24:26Z"
        message: Seed Generation completed
        observedGeneration: 1
        reason: Completed
        status: "True"
        type: SeedGenCompleted 
    1
    
      observedGeneration: 1
    Copy to Clipboard Toggle word wrap

    1
    시드 이미지 생성이 완료되었습니다.

16.3. 이미지 기반 설치를 사용하여 단일 노드 OpenShift 사전 설치

openshift-install 프로그램을 사용하여 베어 메탈 호스트에 단일 노드 OpenShift를 사전 설치하기 위한 라이브 설치 ISO를 만듭니다. 설치 프로그램을 다운로드하는 방법에 대한 자세한 내용은 "추가 리소스" 섹션의 "설치 프로세스"를 참조하십시오.

설치 프로그램은 시드 이미지 URL과 시드 이미지의 릴리스 버전, 설치 프로세스에 사용할 디스크 등의 기타 입력을 받아서 라이브 설치 ISO를 만듭니다. 그런 다음 라이브 설치 ISO를 사용하여 호스트를 시작하여 사전 설치를 시작할 수 있습니다. 사전 설치가 완료되면 호스트는 최종 사이트별 구성 및 배포를 위해 원격 사이트로 배송될 준비가 됩니다.

이미지 기반 설치를 사용하여 단일 노드 OpenShift 클러스터를 사전 설치하는 간단한 단계는 다음과 같습니다.

  • 시드 이미지를 생성합니다.
  • openshift-install 설치 프로그램을 사용하여 라이브 설치 ISO를 만듭니다.
  • 호스트를 사전 설치하려면 라이브 설치 ISO를 사용하여 호스트를 부팅합니다.

openshift-install 프로그램을 사용하면 단일 노드 OpenShift 시드 이미지 URL과 기타 설치 아티팩트를 라이브 설치 ISO에 내장할 수 있습니다.

참고

image-based-installation-config.yaml 매니페스트 사양에 대한 자세한 내용은 " image-based-installation-config.yaml 매니페스트에 대한 참조 사양" 섹션을 참조하세요.

사전 요구 사항

  • 단일 노드 OpenShift 시드 클러스터에서 시드 이미지를 생성했습니다.
  • openshift-install 프로그램을 다운로드했습니다. openshift-install 프로그램의 버전은 시드 이미지의 OpenShift Container Platform 버전과 일치해야 합니다.
  • 대상 호스트는 시드 이미지 URL과 다른 모든 설치 아티팩트에 대한 네트워크 액세스 권한을 갖습니다.
  • 정적 네트워킹이 필요한 경우 라이브 설치 ISO를 만드는 호스트에 nmstatectl 라이브러리를 설치해야 합니다.

프로세스

  1. 라이브 설치 ISO를 만들고 단일 노드 OpenShift 시드 이미지 URL과 기타 설치 아티팩트를 포함합니다.

    1. 다음을 실행하여 작업 디렉토리를 만듭니다.

      $ mkdir ibi-iso-workdir 
      1
      Copy to Clipboard Toggle word wrap
      1
      ibi-iso-workdir을 작업 디렉토리의 이름으로 바꾸세요.
    2. 선택 사항입니다. ImageBasedInstallationConfig 리소스를 구성할 때 참조로 사용할 설치 구성 템플릿을 만듭니다.

      $ openshift-install image-based create image-config-template --dir ibi-iso-workdir 
      1
      Copy to Clipboard Toggle word wrap
      1
      작업 디렉토리를 지정하지 않으면 명령은 현재 디렉토리를 사용합니다.

      출력 예

      INFO Image-Config-Template created in: ibi-iso-workdir
      Copy to Clipboard Toggle word wrap

      이 명령은 대상 디렉토리에 image-based-installation-config.yaml 설치 구성 템플릿을 생성합니다.

      #
      # Note: This is a sample ImageBasedInstallationConfig file showing
      # which fields are available to aid you in creating your
      # own image-based-installation-config.yaml file.
      #
      apiVersion: v1beta1
      kind: ImageBasedInstallationConfig
      metadata:
        name: example-image-based-installation-config
      # The following fields are required
      seedImage: quay.io/openshift-kni/seed-image:4.19.0
      seedVersion: 4.19.0
      installationDisk: /dev/vda
      pullSecret: '<your_pull_secret>'
      # networkConfig is optional and contains the network configuration for the host in NMState format.
      # See https://nmstate.io/examples.html for examples.
      # networkConfig:
      #   interfaces:
      #     - name: eth0
      #       type: ethernet
      #       state: up
      #       mac-address: 00:00:00:00:00:00
      #       ipv4:
      #         enabled: true
      #         address:
      #           - ip: 192.168.122.2
      #             prefix-length: 23
      #         dhcp: false
      Copy to Clipboard Toggle word wrap
    3. 설치 구성 파일을 편집하세요.

      image-based-installation-config.yaml 파일 예시

      apiVersion: v1beta1
      kind: ImageBasedInstallationConfig
      metadata:
        name: example-image-based-installation-config
      seedImage: quay.io/repo-id/seed:latest
      seedVersion: "4.19.0"
      extraPartitionStart: "-240G"
      installationDisk: /dev/disk/by-id/wwn-0x62c...
      sshKey: 'ssh-ed25519 AAAA...'
      pullSecret: '{"auths": ...}'
      networkConfig:
          interfaces:
            - name: ens1f0
              type: ethernet
              state: up
              ipv4:
                enabled: true
                dhcp: false
                auto-dns: false
                address:
                  - ip: 192.168.200.25
                    prefix-length: 24
              ipv6:
                enabled: false
          dns-resolver:
            config:
              server:
                - 192.168.15.47
                - 192.168.15.48
          routes:
            config:
            - destination: 0.0.0.0/0
              metric: 150
              next-hop-address: 192.168.200.254
              next-hop-interface: ens1f0
      Copy to Clipboard Toggle word wrap

    4. 다음 명령을 실행하여 라이브 설치 ISO를 만듭니다.

      $ openshift-install image-based create image --dir ibi-iso-workdir
      Copy to Clipboard Toggle word wrap

      출력 예

      INFO Consuming Image-based Installation ISO Config from target directory
      INFO Creating Image-based Installation ISO with embedded ignition
      Copy to Clipboard Toggle word wrap

검증

  • 작업 디렉토리에서 출력을 확인하세요.

    ibi-iso-workdir/
      └── rhcos-ibi.iso
    Copy to Clipboard Toggle word wrap
16.3.1.1. 대상 호스트에 추가 파티션 구성

설치 ISO는 이미지 기반 설치 프로세스의 일부로 /var/lib/containers 디렉토리에 대한 파티션을 만듭니다.

coreosInstallerArgs 사양을 사용하여 추가 파티션을 만들 수 있습니다. 예를 들어, 충분한 저장 공간이 있는 하드 디스크의 경우 LVM(Logical Volume Manager) 스토리지와 같은 저장 옵션을 위한 추가 파티션이 필요할 수 있습니다.

참고

/var/lib/containers 파티션에는 사전 캐시된 이미지에 대한 충분한 디스크 공간을 확보하기 위해 최소 500GB가 필요합니다. /var/lib/containers 파티션보다 큰 시작 위치로 추가 파티션을 만들어야 합니다.

프로세스

  1. image-based-installation-config.yaml 파일을 편집하여 추가 파티션을 구성합니다.

    image-based-installation-config.yaml 파일 예시

    apiVersion: v1beta1
    kind: ImageBasedInstallationConfig
    metadata:
      name: example-extra-partition
    seedImage: quay.io/repo-id/seed:latest
    seedVersion: "4.19.0"
    installationDisk: /dev/sda
    pullSecret: '{"auths": ...}'
    # ...
    skipDiskCleanup: true 
    1
    
    coreosInstallerArgs:
       - "--save-partindex" 
    2
    
       - "6" 
    3
    
    ignitionConfigOverride: |
      {
        "ignition": {
          "version": "3.2.0"
        },
        "storage": {
          "disks": [
            {
              "device": "/dev/sda", 
    4
    
              "partitions": [
                {
                  "label": "storage", 
    5
    
                  "number": 6, 
    6
    
                  "sizeMiB": 380000, 
    7
    
                  "startMiB": 500000 
    8
    
                }
              ]
            }
          ]
        }
      }
    Copy to Clipboard Toggle word wrap

    1
    설치 프로세스 중에 디스크 형식을 건너뛰려면 true 를 지정합니다.
    2
    파티션을 보존하려면 이 인수를 지정하세요.
    3
    라이브 설치 ISO에는 5개의 파티션이 필요합니다. 보존할 추가 파티션을 식별하려면 5보다 큰 숫자를 지정합니다.
    4
    대상 호스트에 설치 디스크를 지정합니다.
    5
    파티션의 레이블을 지정합니다.
    6
    파티션의 번호를 지정합니다.
    7
    파티션 크기를 MiB 단위로 지정합니다.
    8
    추가 파티션에 대한 디스크의 시작 위치를 MiB 단위로 지정합니다. var/lib/containers 의 파티션보다 큰 시작점을 지정해야 합니다.

검증

  • 라이브 설치 ISO로 호스트의 사전 설치를 완료하면 대상 호스트에 로그인하고 다음 명령을 실행하여 파티션을 확인합니다.

    $ lsblk
    Copy to Clipboard Toggle word wrap

    출력 예

    sda    8:0    0  140G  0 disk
    ├─sda1 8:1    0    1M  0 part
    ├─sda2 8:2    0  127M  0 part
    ├─sda3 8:3    0  384M  0 part /var/mnt/boot
    ├─sda4 8:4    0  120G  0 part /var/mnt
    ├─sda5 8:5    0  500G  0 part /var/lib/containers
    └─sda6 8:6    0  380G  0 part
    Copy to Clipboard Toggle word wrap

16.3.2. 호스트에 라이브 설치 ISO 프로비저닝

원하는 방법을 사용하여 rhcos-ibi.iso 라이브 설치 ISO에서 대상 베어 메탈 호스트를 부팅하여 단일 노드 OpenShift를 사전 설치합니다.

검증

  1. 대상 호스트에 로그인합니다.
  2. 다음 명령을 실행하여 시스템 로그를 확인하세요.

    $ journalctl -b
    Copy to Clipboard Toggle word wrap

    출력 예

    Aug 13 17:01:44 10.46.26.129 install-rhcos-and-restore-seed.sh[2876]: time="2024-08-13T17:01:44Z" level=info msg="All the precaching threads have finished."
    Aug 13 17:01:44 10.46.26.129 install-rhcos-and-restore-seed.sh[2876]: time="2024-08-13T17:01:44Z" level=info msg="Total Images: 125"
    Aug 13 17:01:44 10.46.26.129 install-rhcos-and-restore-seed.sh[2876]: time="2024-08-13T17:01:44Z" level=info msg="Images Pulled Successfully: 125"
    Aug 13 17:01:44 10.46.26.129 install-rhcos-and-restore-seed.sh[2876]: time="2024-08-13T17:01:44Z" level=info msg="Images Failed to Pull: 0"
    Aug 13 17:01:44 10.46.26.129 install-rhcos-and-restore-seed.sh[2876]: time="2024-08-13T17:01:44Z" level=info msg="Completed executing pre-caching"
    Aug 13 17:01:44 10.46.26.129 install-rhcos-and-restore-seed.sh[2876]: time="2024-08-13T17:01:44Z" level=info msg="Pre-cached images successfully."
    Aug 13 17:01:44 10.46.26.129 install-rhcos-and-restore-seed.sh[2876]: time="2024-08-13 17:01:44" level=info msg="Skipping shutdown"
    Aug 13 17:01:44 10.46.26.129 install-rhcos-and-restore-seed.sh[2876]: time="2024-08-13 17:01:44" level=info msg="IBI preparation process finished successfully!"
    Aug 13 17:01:44 10.46.26.129 systemd[1]: var-lib-containers-storage-overlay.mount: Deactivated successfully.
    Aug 13 17:01:44 10.46.26.129 systemd[1]: Finished SNO Image-based Installation.
    Aug 13 17:01:44 10.46.26.129 systemd[1]: Reached target Multi-User System.
    Aug 13 17:01:44 10.46.26.129 systemd[1]: Reached target Graphical Interface.
    Copy to Clipboard Toggle word wrap

16.3.3. image-based-installation-config.yaml 매니페스트에 대한 참조 사양

다음 내용은 image-based-installation-config.yaml 매니페스트에 대한 사양을 설명합니다.

openshift-install 프로그램은 image-based-installation-config.yaml 매니페스트를 사용하여 단일 노드 OpenShift의 이미지 기반 설치를 위한 라이브 설치 ISO를 만듭니다.

Expand
표 16.4. 필수 사양
사양유형설명

seedImage

string

ISO 생성 프로세스에 사용할 시드 이미지를 지정합니다.

seedVersion

string

시드 이미지의 OpenShift 컨테이너 플랫폼 릴리스 버전을 지정합니다. 시드 이미지의 릴리스 버전은 seedVersion 필드에 지정한 릴리스 버전과 일치해야 합니다.

installationDisk

string

설치 과정에 사용될 디스크를 지정합니다.

디스크 검색 순서가 보장되지 않으므로 여러 디스크가 있는 시스템의 부팅 옵션에 따라 디스크의 커널 이름이 변경될 수 있습니다. 예를 들어, /dev/sda는 /dev/sdb 가 되고 그 반대의 경우도 마찬가지입니다. 이 문제를 방지하려면 디스크 World Wide Name(WWN)과 같은 영구 디스크 속성을 사용해야 합니다(예: /dev/disk/by-id/wwn-<disk-id> ).

pullSecret

string

사전 캐시 프로세스 중에 사용할 풀 시크릿을 지정합니다. 풀 시크릿에는 컨테이너 레지스트리에서 릴리스 페이로드 이미지를 풀하기 위한 인증 자격 증명이 포함되어 있습니다.

시드 이미지에 별도의 개인 레지스트리 인증이 필요한 경우 풀 시크릿에 인증 세부 정보를 추가합니다.

Expand
표 16.5. 선택 사양
사양유형설명

shutdown

boolean

설치 프로세스가 완료된 후 호스트를 종료할지 여부를 지정합니다. 기본값은 false입니다.

extraPartitionStart

string

/var/lib/containers 에 사용되는 추가 파티션의 시작을 지정합니다. 기본값은 -40G 로, 이는 파티션 크기가 정확히 40GiB이고 디스크 끝에서부터 40GiB 공간을 사용한다는 것을 의미합니다. 양수 값을 지정하면 파티션이 디스크의 해당 위치에서 시작하여 디스크 끝까지 확장됩니다.

extraPartitionLabel

string

/var/lib/containers 에 사용하는 추가 파티션의 레이블입니다. 기본 파티션 레이블은 var-lib-containers 입니다.

참고

설치 ISO의 파티션 레이블이 시드 이미지의 머신 구성에 설정된 파티션 레이블과 일치하는지 확인해야 합니다. 파티션 레이블이 다르면 호스트에 설치하는 동안 파티션 마운트가 실패합니다. 자세한 내용은 "ostree stateroots 간 공유 컨테이너 파티션 구성"을 참조하세요.

extraPartitionNumber

부호 없는 정수

/var/lib/containers 에 사용하는 추가 파티션의 번호입니다. 기본 숫자는 5 입니다.

skipDiskCleanup

boolean

설치 과정에서는 호스트의 디스크가 포맷됩니다. 이 단계를 건너뛰려면 이 사양을 'true'로 설정하세요. 기본값은 false입니다.

networkConfig

string

호스트에 대한 네트워킹 구성을 지정합니다(예:

networkConfig:
    interfaces:
      - name: ens1f0
        type: ethernet
        state: up
        ...
Copy to Clipboard Toggle word wrap

정적 네트워킹이 필요한 경우 라이브 설치 ISO를 만드는 호스트에 nmstatectl 라이브러리를 설치해야 합니다. nmstate를 사용하여 네트워크 구성을 정의하는 방법에 대한 자세한 내용은 nmstate.io를 참조하세요.

중요

인터페이스 이름은 운영 체제에 표시되는 실제 NIC 이름과 일치해야 합니다.

proxy

string

설치 ISO 생성 중에 사용할 프록시 설정을 지정합니다(예:

proxy:
  httpProxy: "http://proxy.example.com:8080"
  httpsProxy: "http://proxy.example.com:8080"
  noProxy: "no_proxy.example.com"
Copy to Clipboard Toggle word wrap

imageDigestSources

string

릴리스 이미지 콘텐츠에 대한 소스 또는 저장소를 지정합니다(예:

imageDigestSources:
  - mirrors:
      - "registry.example.com:5000/ocp4/openshift4"
    source: "quay.io/openshift-release-dev/ocp-release"
Copy to Clipboard Toggle word wrap

additionalTrustBundle

string

PEM으로 인코딩된 X.509 인증서 번들을 지정합니다. 설치 프로그램은 이를 설치 ISO의 /etc/pki/ca-trust/source/anchors/ 디렉토리에 추가합니다.

additionalTrustBundle: |
  -----BEGIN CERTIFICATE-----
  MTICLDCCAdKgAwfBAgIBAGAKBggqhkjOPQRDAjB9MQswCQYRVEQGE
  ...
  l2wOuDwKQa+upc4GftXE7C//4mKBNBC6Ty01gUaTIpo=
  -----END CERTIFICATE-----
Copy to Clipboard Toggle word wrap

sshKey

string

호스트에 대한 액세스를 인증하기 위한 SSH 키를 지정합니다.

ignitionConfigOverride

string

Ignition 구성에 대한 사용자 재정의를 포함하는 JSON 문자열을 지정합니다. 구성은 설치 프로그램에서 생성된 Ignition 구성 파일과 병합됩니다. 이 기능을 사용하려면 Ignition 버전이 3.2 이상이어야 합니다.

coreosInstallerArgs

string

커널 인수와 디스크 분할 옵션을 구성하는 데 사용할 수 있는 coreos-install 명령에 대한 사용자 정의 인수를 지정합니다.

16.4. 단일 노드 OpenShift 클러스터 배포

16.4.1. 관리형 단일 노드 OpenShift에 대한 이미지 기반 배포 정보

이미지 기반 설치를 사용하여 단일 노드 OpenShift가 사전 설치된 호스트가 원격 사이트에 도착하면 기술자는 몇 분 만에 호스트를 쉽게 재구성하고 배포할 수 있습니다.

허브 앤 스포크 아키텍처를 사용하는 클러스터의 경우 사전 설치된 호스트의 배포를 완료하려면 먼저 각 호스트에 대한 허브 클러스터에서 사이트별 구성 리소스를 정의해야 합니다. 이러한 리소스에는 베어 메탈 호스트 속성, 인증 세부 정보, 기타 배포 및 네트워킹 정보와 같은 구성 정보가 포함되어 있습니다.

IBI(이미지 기반 설치) 운영자는 이러한 리소스에서 구성 ISO를 생성한 다음 구성 ISO가 첨부된 호스트를 부팅합니다. 호스트는 구성 ISO를 마운트하고 재구성 프로세스를 실행합니다. 재구성이 완료되면 단일 노드 OpenShift 클러스터가 준비됩니다.

참고

각 베어 메탈 호스트에 대해 별도의 구성 리소스를 만들어야 합니다.

허브 앤 스포크 아키텍처를 사용하는 클러스터에 사전 설치된 호스트를 배포하려면 다음의 고급 단계를 참조하세요.

  1. 허브 클러스터에 IBI Operator를 설치합니다.
  2. 각 호스트의 허브 클러스터에서 사이트별 구성 리소스를 만듭니다.
  3. IBI 운영자는 이러한 리소스에서 구성 ISO를 생성하고 구성 ISO가 첨부된 대상 호스트를 부팅합니다.
  4. 호스트는 구성 ISO를 마운트하고 재구성 프로세스를 실행합니다. 재구성이 완료되면 단일 노드 OpenShift 클러스터가 준비됩니다.
참고

또는 허브 클러스터를 사용하지 않고 클러스터에 사전 설치된 호스트를 수동으로 배포할 수 있습니다. ImageBasedConfig 리소스와 설치 매니페스트를 정의하고 이를 openshift-install 설치 프로그램에 입력으로 제공해야 합니다. 자세한 내용은 " openshift-install 프로그램을 사용하여 단일 노드 OpenShift 클러스터 배포"를 참조하세요.

16.4.1.1. 이미지 기반 설치 운영자 설치

이미지 기반 설치(IBI) 연산자는 베어 메탈 호스트에 사전 설치된 단일 노드 OpenShift에 대한 이미지 기반 배포 워크플로의 일부입니다.

참고

IBI Operator는 MCE 버전 2.7의 Kubernetes Operator용 멀티클러스터 엔진의 일부입니다.

사전 요구 사항

  • cluster-admin 권한이 있는 사용자로 로그인했습니다.
  • Red Hat Advanced Cluster Management(RHACM) 허브 클러스터를 배포했거나 Kubernetes Operator에 대한 멀티클러스터 엔진을 배포했습니다.
  • "이미지 기반 설치를 위한 소프트웨어 필수 구성 요소" 섹션에서 소프트웨어 구성 요소의 필수 버전을 검토했습니다.

프로세스

  • 다음 명령을 실행하여 MultiClusterEngine 리소스의 image-based-install-operator 구성 요소에 대한 활성화된 사양을 true 로 설정합니다.

    $ oc patch multiclusterengines.multicluster.openshift.io multiclusterengine --type json \
    --patch '[{"op": "add", "path":"/spec/overrides/components/-", "value": {"name":"image-based-install-operator","enabled": true}}]'
    Copy to Clipboard Toggle word wrap

검증

  • 다음 명령을 실행하여 Image Based Install Operator Pod가 실행 중인지 확인하세요.

    $ oc get pods -A | grep image-based
    Copy to Clipboard Toggle word wrap

    출력 예

    multicluster-engine             image-based-install-operator-57fb8sc423-bxdj8             2/2     Running     0               5m
    Copy to Clipboard Toggle word wrap

사전 설치된 호스트의 이미지 기반 배포를 시작하려면 허브 클러스터에서 사이트별 구성 리소스를 만듭니다.

허브 클러스터에서 이러한 구성 리소스를 생성하면 이미지 기반 설치(IBI) 운영자가 구성 ISO를 생성하고 대상 호스트에 연결하여 사이트별 구성 프로세스를 시작합니다. 구성 프로세스가 완료되면 단일 노드 OpenShift 클러스터가 준비됩니다.

참고

허브 클러스터에서 구성해야 하는 구성 리소스에 대한 자세한 내용은 "사전 설치된 호스트 배포를 위한 클러스터 구성 리소스"를 참조하세요.

사전 요구 사항

  • 이미지 기반 설치를 사용하여 단일 노드 OpenShift가 있는 호스트를 사전 설치했습니다.
  • cluster-admin 권한이 있는 사용자로 로그인했습니다.
  • Red Hat Advanced Cluster Management(RHACM) 허브 클러스터를 배포했거나 Kubernetes 운영자(MCE)용 멀티클러스터 엔진을 배포했습니다.
  • 허브 클러스터에 IBI Operator를 설치했습니다.
  • 풀 리퀘스트를 인증하기 위해 풀 시크릿을 생성했습니다. 자세한 내용은 "이미지 풀 시크릿 사용"을 참조하세요.

프로세스

  1. 다음 명령을 실행하여 ibi-ns 네임스페이스를 만듭니다.

    $ oc create namespace ibi-ns
    Copy to Clipboard Toggle word wrap
  2. 이미지 레지스트리에 대한 Secret 리소스를 생성합니다.

    1. 이미지 레지스트리의 비밀 리소스를 정의하는 YAML 파일을 만듭니다.

      secret-image-registry.yaml 파일 예시

      apiVersion: v1
      kind: Secret
      metadata:
        name: ibi-image-pull-secret
        namespace: ibi-ns
      stringData:
        .dockerconfigjson: <base64-docker-auth-code> 
      1
      
      type: kubernetes.io/dockerconfigjson
      Copy to Clipboard Toggle word wrap

      1
      base64로 인코딩된 자격 증명 세부 정보를 제공해야 합니다. 이미지 풀 시크릿 사용에 대한 자세한 내용은 "추가 리소스" 섹션을 참조하세요.
    2. 다음 명령을 실행하여 이미지 레지스트리에 대한 비밀 리소스를 만듭니다.

      $ oc create -f secret-image-registry.yaml
      Copy to Clipboard Toggle word wrap
  3. 선택 사항: 호스트에 대한 정적 네트워킹을 구성합니다.

    1. nmstate 형식으로 정적 네트워크 구성을 포함하는 비밀 리소스를 만듭니다.

      host-network-config-secret.yaml 파일 예시

      apiVersion: v1
      kind: Secret
      metadata:
       name: host-network-config-secret 
      1
      
       namespace: ibi-ns
      type: Opaque
      stringData:
       nmstate: | 
      2
      
        interfaces:
          - name: ens1f0 
      3
      
            type: ethernet
            state: up
            ipv4:
              enabled: true
              address:
                - ip: 192.168.200.25
                  prefix-length: 24
              dhcp: false 
      4
      
            ipv6:
              enabled: false
        dns-resolver:
          config:
            server:
              - 192.168.15.47 
      5
      
              - 192.168.15.48
        routes:
          config: 
      6
      
            - destination: 0.0.0.0/0
              metric: 150
              next-hop-address: 192.168.200.254
              next-hop-interface: ens1f0
              table-id: 254
      Copy to Clipboard Toggle word wrap

      1
      비밀 리소스의 이름을 지정합니다.
      2
      nmstate 형식으로 정적 네트워크 구성을 정의합니다.
      3
      호스트의 인터페이스 이름을 지정합니다. 인터페이스 이름은 운영 체제에 표시되는 실제 NIC 이름과 일치해야 합니다. NIC 매칭에 MAC 주소를 사용하려면 식별자 필드를 mac-address 로 설정합니다.
      4
      nmstate가 인터페이스에 정적 IP 주소를 할당하도록 하려면 dhcp: false를 지정해야 합니다.
      5
      시스템이 도메인 이름을 확인하는 데 사용할 하나 이상의 DNS 서버를 지정합니다.
      6
      이 예에서 기본 경로는 ens1f0 인터페이스를 통해 다음 홉 IP 주소 192.168.200.254 로 구성됩니다.
  4. BareMetalHostSecret 리소스를 만듭니다.

    1. BareMetalHostSecret 리소스를 정의하는 YAML 파일을 만듭니다.

      ibi-bmh.yaml 파일 예시

      apiVersion: metal3.io/v1alpha1
      kind: BareMetalHost
      metadata:
        name: ibi-bmh 
      1
      
        namespace: ibi-ns
      spec:
        online: false 
      2
      
        bootMACAddress: 00:a5:12:55:62:64 
      3
      
        bmc:
          address: redfish-virtualmedia+http://192.168.111.1:8000/redfish/v1/Systems/8a5babac-94d0-4c20-b282-50dc3a0a32b5 
      4
      
          credentialsName: ibi-bmh-bmc-secret 
      5
      
        preprovisioningNetworkDataName: host-network-config-secret 
      6
      
        automatedCleaningMode: disabled 
      7
      
        externallyProvisioned: true 
      8
      
      ---
      apiVersion: v1
      kind: Secret
      metadata:
        name: ibi-bmh-secret 
      9
      
        namespace: ibi-ns
      type: Opaque
      data:
        username: <user_name> 
      10
      
        password: <password> 
      11
      Copy to Clipboard Toggle word wrap

      1
      BareMetalHost 리소스의 이름을 지정합니다.
      2
      호스트가 온라인이어야 하는지 여부를 지정합니다.
      3
      호스트 부팅 MAC 주소를 지정합니다.
      4
      BMC 주소를 지정하세요. 예를 들어 redfish-virtualmedia 및 idrac-virtualmedia와 같이 가상 미디어 네트워킹 부팅을 지원하는 베어 메탈 호스트 드라이버만 사용할 수 있습니다.
      5
      베어 메탈 호스트 Secret 리소스의 이름을 지정합니다.
      6
      선택 사항: 호스트에 대한 정적 네트워크 구성이 필요한 경우 구성이 포함된 비밀 리소스의 이름을 지정합니다.
      7
      디스크 검사 중에 프로비저닝 서비스가 시드 이미지와 같은 모든 사전 설치 아티팩트를 삭제하지 못하도록 하려면 automatedCleaningMode:disabled를 지정해야 합니다.
      8
      호스트가 구성 ISO 대신 사전 설치된 디스크에서 부팅할 수 있도록 하려면 externallyProvisioned: true를 지정해야 합니다.
      9
      비밀 리소스의 이름을 지정합니다.
      10
      사용자 이름을 지정하세요.
      11
      비밀번호를 입력하세요.
    2. 다음 명령을 실행하여 BareMetalHostSecret 리소스를 만듭니다.

      $ oc create -f ibi-bmh.yaml
      Copy to Clipboard Toggle word wrap
  5. ClusterImageSet 리소스를 만듭니다.

    1. ClusterImageSet 리소스를 정의하는 YAML 파일을 만듭니다.

      ibi-cluster-image-set.yaml 파일 예시

      apiVersion: hive.openshift.io/v1
      kind: ClusterImageSet
      metadata:
        name: ibi-img-version-arch 
      1
      
      spec:
        releaseImage: ibi.example.com:path/to/release/images:version-arch 
      2
      Copy to Clipboard Toggle word wrap

      1
      ClusterImageSet 리소스의 이름을 지정합니다.
      2
      배포에 사용할 릴리스 이미지의 주소를 지정합니다. 시드 이미지 생성 중에 사용된 이미지 레지스트리와 다른 이미지 레지스트리를 사용하는 경우 릴리스 이미지의 OpenShift Container Platform 버전이 동일하게 유지되는지 확인하세요.
    2. 다음 명령을 실행하여 ClusterImageSet 리소스를 만듭니다.

      $ oc apply -f ibi-cluster-image-set.yaml
      Copy to Clipboard Toggle word wrap
  6. ImageClusterInstall 리소스를 만듭니다.

    1. ImageClusterInstall 리소스를 정의하는 YAML 파일을 만듭니다.

      ibi-image-cluster-install.yaml 파일 예시

      apiVersion: extensions.hive.openshift.io/v1alpha1
      kind: ImageClusterInstall
      metadata:
        name: ibi-image-install 
      1
      
        namespace: ibi-ns
      spec:
        bareMetalHostRef:
          name: ibi-bmh 
      2
      
          namespace: ibi-ns
        clusterDeploymentRef:
          name: ibi-cluster-deployment 
      3
      
        hostname: ibi-host 
      4
      
        imageSetRef:
          name: ibi-img-version-arch 
      5
      
        machineNetwork: 10.0.0.0/24 
      6
      
        proxy: 
      7
      
          httpProxy: "http://proxy.example.com:8080"
          #httpsProxy: "http://proxy.example.com:8080"
          #noProxy: "no_proxy.example.com"
      Copy to Clipboard Toggle word wrap

      1
      ImageClusterInstall 리소스의 이름을 지정합니다.
      2
      이미지 기반 설치의 대상으로 지정할 BareMetalHost 리소스를 지정합니다.
      3
      대상 호스트의 이미지 기반 설치에 사용할 ClusterDeployment 리소스의 이름을 지정합니다.
      4
      클러스터의 호스트 이름을 지정합니다.
      5
      배포에 사용할 컨테이너 릴리스 이미지를 정의하는 데 사용된 ClusterImageSet 리소스의 이름을 지정합니다.
      6
      외부 네트워크의 공개 CIDR(Classless Inter-Domain Routing)을 지정합니다.
      7
      선택 사항: 클러스터 배포에 사용할 프록시를 지정합니다.
      중요

      클러스터 배포에 프록시 구성이 필요한 경우 다음을 수행해야 합니다.

      • 프록시 구성을 특징으로 하는 시드 클러스터에서 시드 이미지를 만듭니다. 프록시 구성이 일치할 필요는 없습니다.
      • 설치 매니페스트에서 machineNetwork 필드를 구성합니다.
    2. 다음 명령을 실행하여 ImageClusterInstall 리소스를 만듭니다.

      $ oc create -f ibi-image-cluster-install.yaml
      Copy to Clipboard Toggle word wrap
  7. ClusterDeployment 리소스를 만듭니다.

    1. ClusterDeployment 리소스를 정의하는 YAML 파일을 만듭니다.

      ibi-cluster-deployment.yaml 파일 예시

      apiVersion: hive.openshift.io/v1
      kind: ClusterDeployment
      metadata:
        name: ibi-cluster-deployment 
      1
      
        namespace: ibi-ns 
      2
      
      spec:
        baseDomain: example.com 
      3
      
        clusterInstallRef:
          group: extensions.hive.openshift.io
          kind: ImageClusterInstall
          name: ibi-image-install 
      4
      
          version: v1alpha1
        clusterName: ibi-cluster 
      5
      
        platform:
          none: {}
        pullSecretRef:
          name: ibi-image-pull-secret 
      6
      Copy to Clipboard Toggle word wrap

      1
      ClusterDeployment 리소스의 이름을 지정합니다.
      2
      ClusterDeployment 리소스에 대한 네임스페이스를 지정합니다.
      3
      클러스터가 속해야 하는 기본 도메인을 지정합니다.
      4
      대상 호스트의 이미지 기반 설치에 사용할 컨테이너 이미지를 정의한 ImageClusterInstall 의 이름을 지정합니다.
      5
      클러스터의 이름을 지정합니다.
      6
      이미지 레지스트리에서 이미지를 가져올 때 사용할 비밀번호를 지정합니다.
    2. 다음 명령을 실행하여 ClusterDeployment 리소스를 만듭니다.

      $ oc apply -f ibi-cluster-deployment.yaml
      Copy to Clipboard Toggle word wrap
  8. ManagedCluster 리소스를 만듭니다.

    1. ManagedCluster 리소스를 정의하는 YAML 파일을 만듭니다.

      ibi-managed.yaml 파일 예시

      apiVersion: cluster.open-cluster-management.io/v1
      kind: ManagedCluster
      metadata:
        name: sno-ibi 
      1
      
      spec:
        hubAcceptsClient: true 
      2
      Copy to Clipboard Toggle word wrap

      1
      ManagedCluster 리소스의 이름을 지정합니다.
      2
      RHACM이 클러스터를 관리할 수 있도록 하려면 true를 지정합니다.
    2. 다음 명령을 실행하여 ManagedCluster 리소스를 만듭니다.

      $ oc apply -f ibi-managed.yaml
      Copy to Clipboard Toggle word wrap

검증

  1. 다음 명령을 실행하여 허브 클러스터의 ImageClusterInstall 상태를 확인하고 대상 호스트 설치 진행 상황을 모니터링합니다.

    $ oc get imageclusterinstall
    Copy to Clipboard Toggle word wrap

    출력 예

    NAME       REQUIREMENTSMET           COMPLETED                     BAREMETALHOSTREF
    target-0   HostValidationSucceeded   ClusterInstallationSucceeded  ibi-bmh
    Copy to Clipboard Toggle word wrap

    주의

    ImageClusterInstall 리소스가 삭제되면 IBI Operator는 BareMetalHost 리소스를 다시 연결하고 머신을 재부팅합니다.

  2. 설치가 완료되면 다음 명령을 실행하여 관리되는 클러스터에 로그인하기 위한 kubeconfig 비밀번호를 검색할 수 있습니다.

    $ oc extract secret/<cluster_name>-admin-kubeconfig -n <cluster_namespace>  --to - > <directory>/<cluster_name>-kubeconfig
    Copy to Clipboard Toggle word wrap
    • <cluster_name> 은 클러스터의 이름입니다.
    • <cluster_namespace> 는 클러스터의 네임스페이스입니다.
    • <directory>는 파일을 생성할 디렉터리입니다.
16.4.1.2.1. 사전 설치된 호스트를 배포하기 위한 클러스터 구성 리소스

원격 사이트에 사전 설치된 호스트에 대한 배포를 완료하려면 각 베어 메탈 호스트의 허브 클러스터에서 다음과 같은 사이트별 클러스터 구성 리소스를 구성해야 합니다.

Expand
표 16.6. 클러스터 구성 리소스 참조
리소스설명

네임스페이스

관리되는 단일 노드 OpenShift 클러스터에 대한 네임스페이스입니다.

BareMetalHost

물리적 호스트와 해당 속성(프로비저닝 및 하드웨어 구성 등)을 설명합니다.

베어메탈 호스트에 대한 비밀

호스트 BMC에 대한 자격 증명.

베어메탈 호스트 정적 네트워크 구성을 위한 비밀

선택 사항: 대상 호스트에 대한 정적 네트워크 구성을 설명합니다.

이미지 레지스트리의 비밀

이미지 레지스트리에 대한 자격 증명. 이미지 레지스트리의 비밀은 kubernetes.io/dockerconfigjson 유형이어야 합니다.

ImageClusterInstall

베어 메탈 호스트, 배포 및 이미지 세트 리소스를 참조합니다.

ClusterImageSet

클러스터에 사용할 릴리스 이미지를 설명합니다.

ClusterDeployment

네트워킹, 인증 및 플랫폼별 설정을 설명합니다.

ManagedCluster

Red Hat Advanced Cluster Management(RHACM)가 등록하고 관리할 수 있도록 클러스터 세부 정보를 설명합니다.

ConfigMap

선택 사항: 클러스터 서비스에 대한 신뢰할 수 있는 통신을 보장하기 위해 호스트에 대한 신뢰할 수 있는 인증서 번들을 추가하는 등 클러스터 배포에 대한 추가 구성을 설명합니다.

16.4.1.2.2. ImageClusterInstall 리소스 API 사양

다음 콘텐츠는 ImageClusterInstall 리소스의 API 사양을 설명합니다. 이 리소스는 이미지 기반 설치 운영자의 엔드포인트입니다.

Expand
표 16.7. 필수 사양
사양유형설명

imageSetRef

string

배포에 대한 릴리스 이미지를 정의하는 ClusterImageSet 리소스의 이름을 지정합니다.

hostname

string

클러스터의 호스트 이름을 지정합니다.

sshKey

string

대상 호스트에 SSH 액세스를 제공하려면 SSH 키를 지정하세요.

Expand
표 16.8. 선택 사양
사양유형설명

clusterDeploymentRef

string

대상 호스트의 이미지 기반 설치에 사용할 ClusterDeployment 리소스의 이름을 지정합니다.

clusterMetadata

string

배포가 완료되면 이 사양에는 클러스터에 대한 메타데이터 정보가 자동으로 채워집니다. 여기에는 클러스터에 로그인하기 위한 cluster-admin kubeconfig 자격 증명이 포함됩니다.

imageDigestSources

string

릴리스 이미지 콘텐츠에 대한 소스 또는 저장소를 지정합니다(예:

imageDigestSources:
  - mirrors:
      - "registry.example.com:5000/ocp4/openshift4"
    source: "quay.io/openshift-release-dev/ocp-release"
Copy to Clipboard Toggle word wrap

extraManifestsRefs

string

대상 클러스터에 적용할 추가 매니페스트를 포함하는 ConfigMap 리소스를 지정합니다.

bareMetalHostRef

string

클러스터 배포에 사용할 bareMetalHost 리소스 지정

machineNetwork

string

외부 네트워크의 공개 CIDR(Classless Inter-Domain Routing)을 지정합니다.

proxy

string

클러스터에 대한 프록시 설정을 지정합니다(예:

proxy:
  httpProxy: "http://proxy.example.com:8080"
  httpsProxy: "http://proxy.example.com:8080"
  noProxy: "no_proxy.example.com"
Copy to Clipboard Toggle word wrap

caBundleRef

string

호스트에 대한 신뢰할 수 있는 인증서의 새 번들을 포함하는 ConfigMap 리소스를 지정합니다.

16.4.1.3. 추가 매니페스트에 대한 ConfigMap 리소스

관리형 단일 노드 OpenShift 클러스터에 대한 이미지 기반 배포에서 추가 매니페스트를 정의하기 위해 ConfigMap 리소스를 선택적으로 만들 수 있습니다.

ConfigMap 리소스를 만든 후 ImageClusterInstall 리소스에서 해당 리소스를 참조하세요. 배포 중에 IBI 운영자는 배포에 추가 매니페스트를 포함시킵니다.

ConfigMap 리소스를 사용하여 단일 노드 OpenShift 클러스터의 이미지 기반 배포에 추가 매니페스트를 추가할 수 있습니다.

다음 예제에서는 배포에 단일 루트 I/O 가상화(SR-IOV) 네트워크를 추가합니다.

참고

추가 매니페스트의 파일 이름은 30자를 초과해서는 안 됩니다. 파일 이름이 길면 배포에 실패할 수 있습니다.

사전 요구 사항

  • 이미지 기반 설치를 사용하여 단일 노드 OpenShift가 있는 호스트를 사전 설치했습니다.
  • cluster-admin 권한이 있는 사용자로 로그인했습니다.

프로세스

  1. SriovNetworkNodePolicySriovNetwork 리소스를 생성합니다.

    1. 리소스를 정의하는 YAML 파일을 생성합니다.

      sriov-extra-manifest.yaml 파일의 예

      apiVersion: sriovnetwork.openshift.io/v1
      kind: SriovNetworkNodePolicy
      metadata:
        name: "example-sriov-node-policy"
        namespace: openshift-sriov-network-operator
      spec:
        deviceType: vfio-pci
        isRdma: false
        nicSelector:
          pfNames: [ens1f0]
        nodeSelector:
          node-role.kubernetes.io/master: ""
        mtu: 1500
        numVfs: 8
        priority: 99
        resourceName: example-sriov-node-policy
      ---
      apiVersion: sriovnetwork.openshift.io/v1
      kind: SriovNetwork
      metadata:
        name: "example-sriov-network"
        namespace: openshift-sriov-network-operator
      spec:
        ipam: |-
          {
          }
        linkState: auto
        networkNamespace: sriov-namespace
        resourceName: example-sriov-node-policy
        spoofChk: "on"
        trust: "off"
      Copy to Clipboard Toggle word wrap

    2. 다음 명령을 실행하여 ConfigMap 리소스를 생성합니다.

      $ oc create configmap sr-iov-extra-manifest --from-file=sriov-extra-manifest.yaml -n ibi-ns 
      1
      Copy to Clipboard Toggle word wrap
      1
      ImageClusterInstall 리소스가 있는 네임스페이스를 지정합니다.

      출력 예

      configmap/sr-iov-extra-manifest created
      Copy to Clipboard Toggle word wrap

      참고

      둘 이상의 추가 매니페스트를 추가하고 매니페스트를 특정 순서로 적용해야 하는 경우 매니페스트 파일 이름 앞에 필요한 순서를 나타내는 숫자로 붙여야 합니다. 예를 들면 00-namespace.yaml,01-sriov-extra-manifest.yaml 등입니다.

  2. ImageClusterInstall 리소스의 spec.extraManifestsRefs 필드에서 ConfigMap 리소스를 참조합니다.

    #...
      spec:
        extraManifestsRefs:
        - name: sr-iov-extra-manifest
    #...
    Copy to Clipboard Toggle word wrap
16.4.1.3.2. 이미지 기반 배포에 CA 번들을 추가하는 ConfigMap 리소스 생성

ConfigMap 리소스를 사용하여 호스트에 CA(인증 기관) 번들을 추가하여 클러스터 서비스에 대한 신뢰할 수 있는 통신을 보장할 수 있습니다.

ConfigMap 리소스를 생성한 후 ImageClusterInstall 리소스의 spec.caBundleRef 필드에서 참조합니다.

사전 요구 사항

  • 이미지 기반 설치를 사용하여 단일 노드 OpenShift로 호스트를 사전 설치했습니다.
  • cluster-admin 권한이 있는 사용자로 로그인했습니다.

프로세스

  1. tls-ca-bundle.pem 이라는 CA 번들 파일을 만듭니다.

    tls-ca-bundle.pem 파일 예시

    -----BEGIN CERTIFICATE-----
    MIIDXTCCAkWgAwIBAgIJAKmjYKJbIyz3MA0GCSqGSIb3DQEBCwUAMEUxCzAJBgNV
    ...Custom CA certificate bundle...
    4WPl0Qb27Sb1xZyAsy1ww6MYb98EovazUSfjYr2EVF6ThcAPu4/sMxUV7He2J6Jd
    cA8SMRwpUbz3LXY=
    -----END CERTIFICATE-----
    Copy to Clipboard Toggle word wrap

  2. 다음 명령을 실행하여 ConfigMap 객체를 만듭니다.

    $ oc create configmap custom-ca --from-file=tls-ca-bundle.pem -n ibi-ns
    Copy to Clipboard Toggle word wrap
    • custom-ca는 ConfigMap 리소스의 이름을 지정합니다.
    • tls-ca-bundle.pem은 ConfigMap 리소스의 데이터 입력에 대한 키를 정의합니다. tls-ca-bundle.pem 키에 데이터 항목을 포함해야 합니다.
    • ibi-ns는 ImageClusterInstall 리소스가 있는 네임스페이스를 지정합니다.

      출력 예

      configmap/custom-ca created
      Copy to Clipboard Toggle word wrap

  3. ImageClusterInstall 리소스의 spec.caBundleRef 필드에서 ConfigMap 리소스를 참조하세요.

    #...
      spec:
        caBundleRef:
          name: custom-ca
    #...
    Copy to Clipboard Toggle word wrap

16.4.2. 단일 노드 OpenShift에 대한 이미지 기반 배포에 관하여

openshift-install 프로그램을 사용하여 구성 ISO를 수동으로 생성할 수 있습니다. 배포를 완료하려면 사전 설치된 대상 호스트에 구성 ISO를 첨부하세요.

openshift-install 프로그램을 사용하면 이미지 기반 설치로 사전 설치한 호스트를 구성하고 배포할 수 있습니다. 사이트별 세부 정보로 대상 호스트를 구성하려면 다음 리소스를 만들어야 합니다.

  • install-config.yaml 설치 매니페스트
  • image-based-config.yaml 매니페스트

openshift-install 프로그램은 이러한 리소스를 사용하여 사전 설치된 대상 호스트에 첨부하여 배포를 완료하는 구성 ISO를 생성합니다.

참고

image-based-config.yaml 매니페스트 사양에 대한 자세한 내용은 "image-based-config.yaml 매니페스트에 대한 참조 사양"을 참조하세요.

사전 요구 사항

  • 이미지 기반 설치를 사용하여 단일 노드 OpenShift가 있는 호스트를 사전 설치했습니다.
  • openshift-install 프로그램의 최신 버전을 다운로드했습니다.
  • 풀 리퀘스트를 인증하기 위해 풀 시크릿을 생성했습니다. 자세한 내용은 "이미지 풀 시크릿 사용"을 참조하세요.

프로세스

  1. 다음을 실행하여 작업 디렉토리를 만듭니다.

    $ mkdir ibi-config-iso-workdir 
    1
    Copy to Clipboard Toggle word wrap
    1
    ibi-config-iso-workdir을 작업 디렉토리의 이름으로 바꾸세요.
  2. 설치 매니페스트를 만듭니다.

    1. install-config 매니페스트를 정의하는 YAML 파일을 만듭니다.

      install-config.yaml 파일 예시

      apiVersion: v1
      metadata:
        name: sno-cluster-name
      baseDomain: host.example.com
      compute:
        - architecture: amd64
          hyperthreading: Enabled
          name: worker
          replicas: 0
      controlPlane:
        architecture: amd64
        hyperthreading: Enabled
        name: master
        replicas: 1
      networking:
        machineNetwork:
        - cidr: 192.168.200.0/24
      platform:
        none: {}
      fips: false
      cpuPartitioningMode: "AllNodes"
      pullSecret: '{"auths":{"<your_pull_secret>"}}}'
      sshKey: 'ssh-rsa <your_ssh_pub_key>'
      Copy to Clipboard Toggle word wrap

      중요

      클러스터 배포에 프록시 구성이 필요한 경우 다음을 수행해야 합니다.

      • 프록시 구성을 특징으로 하는 시드 클러스터에서 시드 이미지를 만듭니다. 프록시 구성이 일치할 필요는 없습니다.
      • 설치 매니페스트에서 machineNetwork 필드를 구성합니다.
    2. 작업 디렉토리에 파일을 저장합니다.
  3. 선택 사항입니다. 다음 명령을 실행하여 작업 디렉토리에 구성 템플릿을 만듭니다.

    $ openshift-install image-based create config-template --dir ibi-config-iso-workdir/
    Copy to Clipboard Toggle word wrap

    출력 예

    INFO Config-Template created in: ibi-config-iso-workdir
    Copy to Clipboard Toggle word wrap

    이 명령은 작업 디렉토리에 image-based-config.yaml 구성 템플릿을 생성합니다.

    #
    # Note: This is a sample ImageBasedConfig file showing
    # which fields are available to aid you in creating your
    # own image-based-config.yaml file.
    #
    apiVersion: v1beta1
    kind: ImageBasedConfig
    metadata:
      name: example-image-based-config
    additionalNTPSources:
      - 0.rhel.pool.ntp.org
      - 1.rhel.pool.ntp.org
    hostname: change-to-hostname
    releaseRegistry: quay.io
    # networkConfig contains the network configuration for the host in NMState format.
    # See https://nmstate.io/examples.html for examples.
    networkConfig:
      interfaces:
        - name: eth0
          type: ethernet
          state: up
          mac-address: 00:00:00:00:00:00
          ipv4:
            enabled: true
            address:
              - ip: 192.168.122.2
                prefix-length: 23
            dhcp: false
    Copy to Clipboard Toggle word wrap
  4. 구성 파일을 편집하세요.

    image-based-config.yaml 파일 예시

    #
    # Note: This is a sample ImageBasedConfig file showing
    # which fields are available to aid you in creating your
    # own image-based-config.yaml file.
    #
    apiVersion: v1beta1
    kind: ImageBasedConfig
    metadata:
      name: sno-cluster-name
    additionalNTPSources:
      - 0.rhel.pool.ntp.org
      - 1.rhel.pool.ntp.org
    hostname: host.example.com
    releaseRegistry: quay.io
    # networkConfig contains the network configuration for the host in NMState format.
    # See https://nmstate.io/examples.html for examples.
    networkConfig:
        interfaces:
          - name: ens1f0
            type: ethernet
            state: up
            ipv4:
              enabled: true
              dhcp: false
              auto-dns: false
              address:
                - ip: 192.168.200.25
                  prefix-length: 24
            ipv6:
              enabled: false
        dns-resolver:
          config:
            server:
              - 192.168.15.47
              - 192.168.15.48
        routes:
          config:
          - destination: 0.0.0.0/0
            metric: 150
            next-hop-address: 192.168.200.254
            next-hop-interface: ens1f0
    Copy to Clipboard Toggle word wrap

  5. 다음 명령을 실행하여 작업 디렉토리에 구성 ISO를 만듭니다.

    $ openshift-install image-based create config-image --dir ibi-config-iso-workdir/
    Copy to Clipboard Toggle word wrap

    출력 예

    INFO Adding NMConnection file <ens1f0.nmconnection>
    INFO Consuming Install Config from target directory
    INFO Consuming Image-based Config ISO configuration from target directory
    INFO Config-Image created in: ibi-config-iso-workdir/auth
    Copy to Clipboard Toggle word wrap

    작업 디렉토리에서 출력을 확인하세요.

    출력 예

    ibi-config-iso-workdir/
    ├── auth
    │   ├── kubeadmin-password
    │   └── kubeconfig
    └── imagebasedconfig.iso
    Copy to Clipboard Toggle word wrap

  6. 원하는 방법을 사용하여 imagebasedconfig.iso 를 사전 설치된 호스트에 연결하고 호스트를 다시 시작하여 구성 프로세스를 완료하고 클러스터를 배포합니다.

검증

호스트에서 구성 프로세스가 완료되면 클러스터에 액세스하여 상태를 확인합니다.

  1. 다음 명령을 실행하여 kubeconfig 환경 변수를 kubeconfig 파일에 내보냅니다.

    $ export KUBECONFIG=ibi-config-iso-workdir/auth/kubeconfig
    Copy to Clipboard Toggle word wrap
  2. 다음 명령을 실행하여 클러스터가 응답하는지 확인하세요.

    $ oc get nodes
    Copy to Clipboard Toggle word wrap

    출력 예

    NAME                                         STATUS   ROLES                  AGE     VERSION
    node/sno-cluster-name.host.example.com       Ready    control-plane,master   5h15m   v1.32.3
    Copy to Clipboard Toggle word wrap

16.4.2.1.1. image-based-config.yaml 매니페스트에 대한 참조 사양

다음 내용은 image-based-config.yaml 매니페스트에 대한 사양을 설명합니다.

openshift-install 프로그램은 image-based-config.yaml 매니페스트를 사용하여 단일 노드 OpenShift의 이미지 기반 배포를 위한 사이트별 구성 ISO를 만듭니다.

Expand
표 16.9. 필수 사양
사양유형설명

hostname

string

단일 노드 OpenShift 클러스터의 노드 이름을 정의합니다.

Expand
표 16.10. 선택 사양
사양유형설명

networkConfig

string

호스트에 대한 네트워킹 구성을 지정합니다(예:

networkConfig:
    interfaces:
      - name: ens1f0
        type: ethernet
        state: up
        ...
Copy to Clipboard Toggle word wrap

정적 네트워킹이 필요한 경우 라이브 설치 ISO를 만드는 호스트에 nmstatectl 라이브러리를 설치해야 합니다. nmstate를 사용하여 네트워크 구성을 정의하는 방법에 대한 자세한 내용은 nmstate.io를 참조하세요.

중요

인터페이스 이름은 운영 체제에 표시되는 실제 NIC 이름과 일치해야 합니다.

additionalNTPSources

string

모든 클러스터 호스트의 NTP 소스 목록을 지정합니다. 이러한 NTP 소스는 클러스터의 기존 NTP 소스에 추가됩니다. NTP 소스에 호스트 이름이나 IP 주소를 사용할 수 있습니다.

releaseRegistry

string

시드 클러스터의 릴리스 이미지에 사용한 컨테이너 이미지 레지스트리를 지정합니다.

nodeLabels

map[string]string

단일 노드 OpenShift 노드에 대한 사용자 정의 노드 레이블을 지정합니다(예:

nodeLabels:
  node-role.kubernetes.io/edge: true
  environment: production
Copy to Clipboard Toggle word wrap
16.4.2.2. 추가 매니페스트에 대한 리소스 구성

단일 노드 OpenShift 클러스터의 이미지 기반 배포에서 추가 리소스를 선택적으로 정의할 수 있습니다.

install-config.yamlimage-based-config.yaml 매니페스트가 있는 동일한 작업 디렉토리의 extra-manifests 폴더에 추가 리소스를 만듭니다.

참고

extra-manifests 디렉토리의 추가 리소스에 대한 파일 이름은 30자를 넘을 수 없습니다. 파일 이름이 길면 배포에 실패할 수 있습니다.

16.4.2.2.1. extra-manifests 폴더에 리소스 생성

작업 디렉토리의 extra-manifests 폴더에 리소스를 만들어 단일 노드 OpenShift 클러스터의 이미지 기반 배포에 추가 매니페스트를 추가할 수 있습니다.

다음 예제에서는 배포에 단일 루트 I/O 가상화(SR-IOV) 네트워크를 추가합니다.

참고

두 개 이상의 매니페스트를 추가하고 매니페스트를 특정 순서로 적용해야 하는 경우, 매니페스트 파일 이름 앞에 필요한 순서를 나타내는 숫자를 접두사로 붙여야 합니다. 예를 들어, 00-namespace.yaml , 01-sriov-extra-manifest.yaml 등입니다.

사전 요구 사항

  • install-config.yamlimage-based-config.yaml 매니페스트를 사용하여 작업 디렉터리를 생성했습니다.

프로세스

  1. 작업 디렉토리로 이동하여 다음 명령을 실행하여 extra-manifests 폴더를 만듭니다.

    $ mkdir extra-manifests
    Copy to Clipboard Toggle word wrap
  2. extra-manifests 폴더에 SriovNetworkNodePolicySriovNetwork 리소스를 만듭니다.

    1. 리소스를 정의하는 YAML 파일을 만듭니다.

      sriov-extra-manifest.yaml 파일 예시

      apiVersion: sriovnetwork.openshift.io/v1
      kind: SriovNetworkNodePolicy
      metadata:
        name: "example-sriov-node-policy"
        namespace: openshift-sriov-network-operator
      spec:
        deviceType: vfio-pci
        isRdma: false
        nicSelector:
          pfNames: [ens1f0]
        nodeSelector:
          node-role.kubernetes.io/master: ""
        mtu: 1500
        numVfs: 8
        priority: 99
        resourceName: example-sriov-node-policy
      ---
      apiVersion: sriovnetwork.openshift.io/v1
      kind: SriovNetwork
      metadata:
        name: "example-sriov-network"
        namespace: openshift-sriov-network-operator
      spec:
        ipam: |-
          {
          }
        linkState: auto
        networkNamespace: sriov-namespace
        resourceName: example-sriov-node-policy
        spoofChk: "on"
        trust: "off"
      Copy to Clipboard Toggle word wrap

검증

  • 구성 ISO를 생성하면 작업 디렉토리의 .openshift_install_state.json 파일에서 추가 매니페스트에 대한 참조를 볼 수 있습니다.

     "*configimage.ExtraManifests": {
            "FileList": [
                {
                    "Filename": "extra-manifests/sriov-extra-manifest.yaml",
                    "Data": "YXBFDFFD..."
                }
            ]
        }
    Copy to Clipboard Toggle word wrap

17장. 통신사 핵심 CNF 클러스터를 위한 2일차 운영

17.1. 통신사 핵심 CNF 클러스터를 위한 2일차 운영

다음의 2일차 작업을 사용하여 통신사 핵심 CNF 클러스터를 관리할 수 있습니다.

통신사 핵심 CNF 클러스터 업데이트
클러스터를 업데이트하는 것은 버그와 잠재적인 보안 취약점이 패치되었는지 확인하는 중요한 작업입니다. 자세한 내용은 통신사 핵심 CNF 클러스터 업데이트를 참조하세요.
통신사 핵심 CNF 클러스터 문제 해결 및 유지 관리
고대역폭 네트워크 처리량이 필요한 베어 메탈 환경을 유지 관리하고 문제를 해결하려면 통신사 핵심 CNF 클러스터 문제 해결 및 유지 관리를 참조하세요.
통신사 핵심 CNF 클러스터의 관찰성
OpenShift Container Platform은 플랫폼과 해당 플랫폼에서 실행되는 워크로드의 성능 지표 및 로그 등 많은 양의 데이터를 생성합니다. 관리자는 도구를 사용하여 사용 가능한 데이터를 수집하고 분석할 수 있습니다. 자세한 내용은 통신사 핵심 CNF 클러스터의 관찰성을 참조하세요.
보안
다음과 같은 주요 보안 고려 사항에 따라 통신 환경에서 대역폭이 높은 네트워크 배포에 대한 보안을 강화할 수 있습니다. 자세한 내용은 보안 기본 사항을 참조하세요.

17.2. 통신사 핵심 CNF 클러스터 업그레이드

17.2.1. 통신사 핵심 CNF 클러스터 업데이트

OpenShift Container Platform은 모든 릴리스와 EUS 릴리스 간 업데이트 경로에 대해 장기 지원 또는 확장 업데이트 지원(EUS)을 제공합니다. 한 EUS 버전에서 다음 EUS 버전으로 업데이트할 수 있습니다. y-stream과 z-stream 버전 간에 업데이트하는 것도 가능합니다.

17.2.1.1. 통신사 핵심 CNF 클러스터에 대한 클러스터 업데이트

클러스터를 업데이트하는 것은 버그와 잠재적인 보안 취약점이 패치되었는지 확인하는 중요한 작업입니다. 종종 클라우드 기반 네트워크 기능(CNF)을 업데이트하려면 클러스터 버전을 업데이트할 때 제공되는 플랫폼의 추가 기능이 필요합니다. 또한 클러스터 플랫폼 버전이 지원되는지 확인하려면 클러스터를 주기적으로 업데이트해야 합니다.

EUS 릴리스를 최신 상태로 유지하고 중요한 z-stream 릴리스로만 업그레이드하면 업데이트를 적용하는 데 필요한 노력을 최소화할 수 있습니다.

참고

클러스터의 업데이트 경로는 클러스터의 크기와 토폴로지에 따라 달라질 수 있습니다. 여기에 설명된 업데이트 절차는 3노드 클러스터부터 통신사 규모 팀에서 인증한 가장 큰 규모의 클러스터까지 대부분의 클러스터에 유효합니다. 여기에는 혼합 작업 부하 클러스터에 대한 몇 가지 시나리오가 포함됩니다.

다음 업데이트 시나리오는 다음과 같습니다.

  • 제어 평면만 업데이트
  • Y-스트림 업데이트
  • Z-스트림 업데이트
중요

제어 평면 전용 업데이트는 이전에는 EUS-EUS 업데이트로 알려져 있었습니다. Control Plane Only 업데이트는 OpenShift Container Platform의 짝수 번째 마이너 버전 간에만 실행 가능합니다.

17.2.2. 업데이트 버전 간 클러스터 API 버전 확인

구성 요소가 업데이트됨에 따라 API는 시간이 지남에 따라 변경됩니다. 업데이트된 클러스터 버전과 클라우드 기반 네트워크 기능(CNF) API가 호환되는지 확인하는 것이 중요합니다.

17.2.2.1. OpenShift 컨테이너 플랫폼 API 호환성

새로운 y-stream 업데이트의 일부로 어떤 z-stream 릴리스로 업데이트할지 고려할 때, 이전 z-stream 버전에 있는 모든 패치가 새로운 z-stream 버전에 있는지 확인해야 합니다. 업데이트한 버전에 필요한 패치가 모두 포함되어 있지 않으면 Kubernetes의 기본 호환성이 손상됩니다.

예를 들어, 클러스터 버전이 4.15.32인 경우 4.15.32에 적용된 모든 패치가 포함된 4.16 z-stream 릴리스로 업데이트해야 합니다.

17.2.2.1.1. Kubernetes 버전 왜곡에 관하여

각 클러스터 Operator는 특정 API 버전을 지원합니다. Kubernetes API는 시간이 지남에 따라 발전하며, 최신 버전은 더 이상 사용되지 않거나 기존 API를 변경할 수 있습니다. 이것을 "버전 왜곡"이라고 합니다. 새로운 릴리스가 나올 때마다 API 변경 사항을 검토해야 합니다. API는 여러 Operator 릴리스 간에 호환될 수 있지만 호환성은 보장되지 않습니다. 버전 불균형으로 인해 발생하는 문제를 완화하려면 명확하게 정의된 업데이트 전략을 따르세요.

17.2.2.2. 클러스터 버전 업데이트 경로 결정

Red Hat OpenShift Container Platform Update Graph 도구를 사용하여 업데이트하려는 z-stream 릴리스에 대한 경로가 유효한지 확인합니다. 업데이트 경로가 통신사 구현에 유효한지 확인하려면 Red Hat 기술 계정 관리자에게 업데이트를 확인하세요.

중요

업데이트하는 <4.y+1.z> 또는 <4.y+2.z> 버전은 업데이트하려는 <4.yz> 릴리스와 동일한 패치 레벨을 가져야 합니다.

OpenShift 업데이트 프로세스에서는 특정 <4.yz> 릴리스에 수정 사항이 있는 경우 해당 수정 사항이 업데이트 대상 <4.y+1.z> 릴리스에도 있어야 한다고 규정하고 있습니다.

그림 17.1. 버그 수정 백포팅 및 업데이트 그래프

중요

OpenShift 개발에는 회귀를 방지하는 엄격한 백포트 정책이 있습니다. 예를 들어, 버그는 4.15.z에서 수정되기 전에 4.16.z에서 수정되어야 합니다. 즉, 업데이트 그래프는 하위 버전이 더 높더라도(예: 4.15.24에서 4.16.2로 업데이트) 시간순으로 더 오래된 릴리스로의 업데이트를 허용하지 않습니다.

17.2.2.3. 대상 릴리스 선택

Red Hat OpenShift Container Platform 업데이트 그래프 또는 cincinnati-graph-data 저장소를 사용하여 업데이트할 릴리스를 확인하세요.

17.2.2.3.1. 사용 가능한 z-stream 업데이트 확인

새로운 z-stream 릴리스로 업데이트하기 전에 어떤 버전을 사용할 수 있는지 알아야 합니다.

참고

z-stream 업데이트를 수행할 때 채널을 변경할 필요는 없습니다.

프로세스

  1. 어떤 z-stream 릴리스가 사용 가능한지 확인하세요. 다음 명령을 실행합니다.

    $ oc adm upgrade
    Copy to Clipboard Toggle word wrap

    출력 예

    Cluster version is 4.14.34
    
    Upstream is unset, so the cluster will use an appropriate default.
    Channel: stable-4.14 (available channels: candidate-4.14, candidate-4.15, eus-4.14, eus-4.16, fast-4.14, fast-4.15, stable-4.14, stable-4.15)
    
    Recommended updates:
    
      VERSION     IMAGE
      4.14.37     quay.io/openshift-release-dev/ocp-release@sha256:14e6ba3975e6c73b659fa55af25084b20ab38a543772ca70e184b903db73092b
      4.14.36     quay.io/openshift-release-dev/ocp-release@sha256:4bc4925e8028158e3f313aa83e59e181c94d88b4aa82a3b00202d6f354e8dfed
      4.14.35     quay.io/openshift-release-dev/ocp-release@sha256:883088e3e6efa7443b0ac28cd7682c2fdbda889b576edad626769bf956ac0858
    Copy to Clipboard Toggle word wrap

17.2.2.3.2. 제어 평면 전용 업데이트에 대한 채널 변경

Control Plane Only 업데이트를 위해서는 채널을 필요한 버전으로 변경해야 합니다.

참고

z-stream 업데이트를 수행할 때 채널을 변경할 필요는 없습니다.

프로세스

  1. 현재 구성된 업데이트 채널을 확인하세요.

    $ oc get clusterversion -o=jsonpath='{.items[*].spec}' | jq
    Copy to Clipboard Toggle word wrap

    출력 예

    {
      "channel": "stable-4.14",
      "clusterID": "01eb9a57-2bfb-4f50-9d37-dc04bd5bac75"
    }
    Copy to Clipboard Toggle word wrap

  2. 업데이트하려는 새 채널을 가리키도록 채널을 변경하세요.

    $ oc adm upgrade channel eus-4.16
    Copy to Clipboard Toggle word wrap
  3. 업데이트된 채널을 확인하세요.

    $ oc get clusterversion -o=jsonpath='{.items[*].spec}' | jq
    Copy to Clipboard Toggle word wrap

    출력 예

    {
      "channel": "eus-4.16",
      "clusterID": "01eb9a57-2bfb-4f50-9d37-dc04bd5bac75"
    }
    Copy to Clipboard Toggle word wrap

17.2.2.3.2.1. 조기 EUS 업데이트를 위한 채널 변경

OpenShift Container Platform의 새로운 릴리스에 대한 업데이트 경로는 사소한 릴리스의 최초 GA 이후 45~90일이 지나야 EUS 채널이나 안정적인 채널에서 사용할 수 있습니다.

새로운 릴리스에 대한 업데이트 테스트를 시작하려면 빠른 채널을 사용할 수 있습니다.

프로세스

  1. 채널을 fast-<y+1> 로 변경합니다. 예를 들어 다음 명령을 실행합니다.

    $ oc adm upgrade channel fast-4.16
    Copy to Clipboard Toggle word wrap
  2. 새로운 채널에서 업데이트 경로를 확인하세요. 다음 명령을 실행합니다.

    $ oc adm upgrade
    Copy to Clipboard Toggle word wrap
    Cluster version is 4.15.33
    
    Upgradeable=False
    
      Reason: AdminAckRequired
      Message: Kubernetes 1.28 and therefore OpenShift 4.16 remove several APIs which require admin consideration. Please see the knowledge article https://access.redhat.com/articles/6958394 for details and instructions.
    
    Upstream is unset, so the cluster will use an appropriate default.
    Channel: fast-4.16 (available channels: candidate-4.15, candidate-4.16, eus-4.15, eus-4.16, fast-4.15, fast-4.16, stable-4.15, stable-4.16)
    
    Recommended updates:
    
      VERSION     IMAGE
      4.16.14     quay.io/openshift-release-dev/ocp-release@sha256:6618dd3c0f5
      4.16.13     quay.io/openshift-release-dev/ocp-release@sha256:7a72abc3
      4.16.12     quay.io/openshift-release-dev/ocp-release@sha256:1c8359fc2
      4.16.11     quay.io/openshift-release-dev/ocp-release@sha256:bc9006febfe
      4.16.10     quay.io/openshift-release-dev/ocp-release@sha256:dece7b61b1
      4.15.36     quay.io/openshift-release-dev/ocp-release@sha256:c31a56d19
      4.15.35     quay.io/openshift-release-dev/ocp-release@sha256:f21253
      4.15.34     quay.io/openshift-release-dev/ocp-release@sha256:2dd69c5
    Copy to Clipboard Toggle word wrap
  3. 버전 4.16으로 업데이트하려면 업데이트 절차를 따르세요(버전 4.15에서 <y+1>)

    참고

    빠른 채널을 사용하는 경우에도 EUS 릴리스 사이에 작업자 노드를 일시 중지할 수 있습니다.

  4. 필요한 <y+1> 릴리스에 도달하면 채널을 다시 변경하고 이번에는 fast-<y+2> 로 변경합니다.
  5. 필요한 <y+2> 릴리스를 받으려면 EUS 업데이트 절차를 따르세요.
17.2.2.3.3. y-스트림 업데이트를 위한 채널 변경

y-stream 업데이트에서는 채널을 다음 릴리스 채널로 변경합니다.

참고

프로덕션 클러스터에는 안정적인 릴리스 채널이나 EUS 릴리스 채널을 사용하세요.

프로세스

  1. 업데이트 채널 변경:

    $ oc adm upgrade channel stable-4.15
    Copy to Clipboard Toggle word wrap
  2. 새로운 채널에서 업데이트 경로를 확인하세요. 다음 명령을 실행합니다.

    $ oc adm upgrade
    Copy to Clipboard Toggle word wrap

    출력 예

    Cluster version is 4.14.34
    
    Upgradeable=False
    
      Reason: AdminAckRequired
      Message: Kubernetes 1.27 and therefore OpenShift 4.15 remove several APIs which require admin consideration. Please see the knowledge article https://access.redhat.com/articles/6958394 for details and instructions.
    
    Upstream is unset, so the cluster will use an appropriate default.
    Channel: stable-4.15 (available channels: candidate-4.14, candidate-4.15, eus-4.14, eus-4.15, fast-4.14, fast-4.15, stable-4.14, stable-4.15)
    
    Recommended updates:
    
      VERSION     IMAGE
      4.15.33     quay.io/openshift-release-dev/ocp-release@sha256:7142dd4b560
      4.15.32     quay.io/openshift-release-dev/ocp-release@sha256:cda8ea5b13dc9
      4.15.31     quay.io/openshift-release-dev/ocp-release@sha256:07cf61e67d3eeee
      4.15.30     quay.io/openshift-release-dev/ocp-release@sha256:6618dd3c0f5
      4.15.29     quay.io/openshift-release-dev/ocp-release@sha256:7a72abc3
      4.15.28     quay.io/openshift-release-dev/ocp-release@sha256:1c8359fc2
      4.15.27     quay.io/openshift-release-dev/ocp-release@sha256:bc9006febfe
      4.15.26     quay.io/openshift-release-dev/ocp-release@sha256:dece7b61b1
      4.14.38     quay.io/openshift-release-dev/ocp-release@sha256:c93914c62d7
      4.14.37     quay.io/openshift-release-dev/ocp-release@sha256:c31a56d19
      4.14.36     quay.io/openshift-release-dev/ocp-release@sha256:f21253
      4.14.35     quay.io/openshift-release-dev/ocp-release@sha256:2dd69c5
    Copy to Clipboard Toggle word wrap

17.2.3. 업데이트를 위한 통신사 핵심 클러스터 플랫폼 준비

일반적으로 통신사 클러스터는 베어메탈 하드웨어에서 실행됩니다. 종종 중요한 보안 문제를 해결하거나, 새로운 기능을 추가하거나, OpenShift Container Platform의 새로운 릴리스와의 호환성을 유지하기 위해 펌웨어를 업데이트해야 합니다.

17.2.3.1. 호스트 펌웨어가 업데이트와 호환되는지 확인

클러스터에서 실행하는 펌웨어 버전에 대한 책임은 사용자에게 있습니다. 호스트 펌웨어 업데이트는 OpenShift Container Platform 업데이트 프로세스의 일부가 아닙니다. OpenShift Container Platform 버전과 함께 펌웨어를 업데이트하는 것은 권장되지 않습니다.

중요

하드웨어 공급업체에서는 현재 사용 중인 특정 하드웨어에 대해 최신 인증 펌웨어 버전을 적용하는 것이 가장 좋다고 조언합니다. 통신용 사례의 경우 프로덕션 환경에서 적용하기 전에 항상 테스트 환경에서 펌웨어 업데이트를 확인합니다. 통신 CNF 워크로드의 높은 처리량은 최적의 호스트 펌웨어의 영향을 받지 않을 수 있습니다.

현재 버전의 OpenShift Container Platform에서 예상대로 작동하는지 확인하려면 새로운 펌웨어 업데이트를 철저히 테스트해야 합니다. 대상 OpenShift Container Platform 업데이트 버전을 사용하여 최신 펌웨어 버전을 테스트하는 것이 좋습니다.

17.2.3.2. 계층형 제품이 업데이트와 호환되는지 확인

업데이트를 시작하기 전에 모든 계층화된 제품이 업데이트하려는 OpenShift Container Platform 버전에서 실행되는지 확인하세요. 여기에는 일반적으로 모든 운영자가 포함됩니다.

프로세스

  1. 클러스터에 현재 설치된 운영자를 확인합니다. 예를 들어 다음 명령을 실행합니다.

    $ oc get csv -A
    Copy to Clipboard Toggle word wrap

    출력 예

    NAMESPACE                              NAME            DISPLAY          VERSION   REPLACES                             PHASE
    gitlab-operator-kubernetes.v0.17.2     GitLab                           0.17.2    gitlab-operator-kubernetes.v0.17.1   Succeeded
    openshift-operator-lifecycle-manager   packageserver   Package Server   0.19.0                                         Succeeded
    Copy to Clipboard Toggle word wrap

  2. OLM과 함께 설치한 운영자가 업데이트 버전과 호환되는지 확인하세요.

    Operator Lifecycle Manager(OLM)와 함께 설치된 운영자는 표준 클러스터 운영자 세트에 포함되지 않습니다.

    운영자 업데이트 정보 검사기를 사용하여 y-스트림을 업데이트할 때마다 운영자를 업데이트해야 하는지, 아니면 다음 EUS 릴리스로 완전히 업데이트할 때까지 기다려도 되는지 확인하세요.

    작은 정보

    또한 Operator Update Information Checker를 사용하여 특정 Operator 릴리스와 호환되는 OpenShift Container Platform 버전을 확인할 수 있습니다.

  3. OLM 외부에 설치한 운영자가 업데이트 버전과 호환되는지 확인하세요.

    Red Hat에서 직접 지원하지 않는 모든 OLM 설치 Operator의 경우, Operator 공급업체에 문의하여 릴리스 호환성을 확인하세요.

    • 일부 운영자는 OpenShift Container Platform의 여러 릴리스와 호환됩니다. 클러스터 업데이트를 완료하기 전까지는 운영자를 업데이트하지 않아도 될 수도 있습니다. 자세한 내용은 "워커 노드 업데이트"를 참조하세요.
    • 첫 번째 y-stream 컨트롤 플레인 업데이트를 수행한 후 Operator를 업데이트하는 방법에 대한 정보는 "모든 OLM Operator 업그레이드"를 참조하십시오.
17.2.3.3. 업데이트 전에 노드에 MachineConfigPool 레이블 적용

대략 8~10개의 노드로 구성된 그룹으로 노드를 그룹화하기 위해 MachineConfigPool ( mcp ) 노드 레이블을 준비합니다. mcp 그룹을 사용하면 클러스터의 나머지 부분과 별도로 노드 그룹을 재부팅할 수 있습니다.

업데이트 프로세스 중에 노드 세트를 일시 중지하거나 일시 중지를 해제하려면 mcp 노드 레이블을 사용하면 원하는 시간에 업데이트를 수행하고 재부팅할 수 있습니다.

17.2.3.3.1. 클러스터 업데이트 단계적 진행

업데이트 중에 문제가 발생하는 경우가 있습니다. 종종 문제는 하드웨어 오류나 노드 재설정 필요성과 관련이 있습니다. MCP 노드 레이블을 사용하면 중요한 순간에 업데이트를 일시 중지하고, 진행하면서 일시 중지된 노드와 일시 중지 해제된 노드를 추적하여 단계적으로 노드를 업데이트할 수 있습니다. 문제가 발생하면 일시 중지되지 않은 상태의 노드를 사용하여 모든 애플리케이션 포드가 계속 실행될 수 있도록 충분한 노드가 실행되고 있는지 확인합니다.

17.2.3.3.2. 작업자 노드를 MachineConfigPool 그룹으로 나누기

워커 노드를 MCP 그룹으로 나누는 방법은 클러스터에 있는 노드 수나 노드 역할에 할당한 노드 수에 따라 달라질 수 있습니다. 기본적으로 클러스터의 두 가지 역할은 제어 평면과 작업자입니다.

통신사 워크로드를 실행하는 클러스터에서는 CNF 제어 평면과 CNF 데이터 평면 역할 간에 작업자 노드를 추가로 분할할 수 있습니다. 작업자 노드를 두 그룹으로 분할하는 mcp 역할 레이블을 추가합니다.

참고

대규모 클러스터는 CNF 제어 평면 역할에 최대 100개의 작업자 노드를 가질 수 있습니다. 클러스터에 노드가 몇 개 있든 각 MachineConfigPool 그룹의 노드 수는 약 10개로 유지하세요. 이를 통해 한 번에 얼마나 많은 노드를 제거할지 제어할 수 있습니다. 여러 MachineConfigPool 그룹을 사용하면 여러 그룹의 일시 중지를 동시에 해제하여 업데이트를 가속화하거나 2개 이상의 유지 관리 창에 걸쳐 업데이트를 분할할 수 있습니다.

15개의 작업자 노드가 있는 클러스터 예

15개의 작업자 노드가 있는 클러스터를 생각해 보세요.

  • 10개의 워커 노드는 CNF 제어 평면 노드입니다.
  • 5개의 워커 노드는 CNF 데이터 플레인 노드입니다.

CNF 제어 평면과 데이터 평면 작업자 노드 역할을 각각 최소 2개의 mcp 그룹으로 분할합니다. 역할당 2개의 MCP 그룹이 있다는 것은 업데이트의 영향을 받지 않는 노드 세트를 하나만 가질 수 있다는 것을 의미합니다.

6개의 작업자 노드가 있는 클러스터 예

6개의 작업자 노드가 있는 클러스터를 생각해 보세요.

  • 워커 노드를 각각 2개의 노드로 구성된 3개의 MCP 그룹으로 나눕니다.

mcp 그룹 중 하나를 업그레이드합니다. 다른 4개 노드에서 업데이트를 완료하기 전에 CNF 호환성을 검증할 수 있도록 업데이트된 노드를 하루 동안 기다리세요.

중요

MCP 그룹의 일시 중지를 해제하는 프로세스와 속도는 CNF 애플리케이션과 구성에 따라 결정됩니다.

CNF 포드가 클러스터의 노드 전반에 걸쳐 스케줄링을 처리할 수 있다면, 여러 MCP 그룹의 일시 중지를 한 번에 해제하고 MCP 사용자 정의 리소스(CR)의 MaxUnavailable 을 최대 50%까지 설정할 수 있습니다. 이를 통해 mcp 그룹의 노드 중 최대 절반을 다시 시작하고 업데이트할 수 있습니다.

17.2.3.3.3. 구성된 클러스터 MachineConfigPool 역할 검토

클러스터에서 현재 구성된 MachineConfigPool 역할을 검토합니다.

프로세스

  1. 클러스터에 현재 구성된 mcp 그룹을 가져옵니다.

    $ oc get mcp
    Copy to Clipboard Toggle word wrap

    출력 예

    NAME     CONFIG                   UPDATED   UPDATING   DEGRADED   MACHINECOUNT   READYMACHINECOUNT   UPDATEDMACHINECOUNT   DEGRADEDMACHINECOUNT   AGE
    master   rendered-master-bere83   True      False      False      3              3                   3                     0                      25d
    worker   rendered-worker-245c4f   True      False      False      2              2                   2                     0                      25d
    Copy to Clipboard Toggle word wrap

  2. mcp 역할 목록을 클러스터의 노드 목록과 비교하세요.

    $ oc get nodes
    Copy to Clipboard Toggle word wrap

    출력 예

    NAME           STATUS   ROLES                  AGE   VERSION
    ctrl-plane-0   Ready    control-plane,master   39d   v1.27.15+6147456
    ctrl-plane-1   Ready    control-plane,master   39d   v1.27.15+6147456
    ctrl-plane-2   Ready    control-plane,master   39d   v1.27.15+6147456
    worker-0       Ready    worker                 39d   v1.27.15+6147456
    worker-1       Ready    worker                 39d   v1.27.15+6147456
    Copy to Clipboard Toggle word wrap

    참고

    mcp 그룹 변경을 적용하면 노드 역할이 업데이트됩니다.

    워커 노드를 MCP 그룹으로 분리하는 방법을 결정합니다.

17.2.3.3.4. 클러스터에 대한 MachineConfigPool 그룹 생성

mcp 그룹을 만드는 것은 2단계 프로세스입니다.

  1. 클러스터의 노드에 mcp 레이블을 추가합니다.
  2. 레이블을 기준으로 노드를 구성하는 클러스터에 mcp CR을 적용합니다.

프로세스

  1. 노드에 레이블을 지정하여 mcp 그룹에 넣을 수 있도록 합니다. 다음 명령을 실행하세요.

    $ oc label node worker-0 node-role.kubernetes.io/mcp-1=
    Copy to Clipboard Toggle word wrap
    $ oc label node worker-1 node-role.kubernetes.io/mcp-2=
    Copy to Clipboard Toggle word wrap

    mcp-1mcp-2 라벨이 노드에 적용됩니다. 예를 들면 다음과 같습니다.

    출력 예

    NAME           STATUS   ROLES                  AGE   VERSION
    ctrl-plane-0   Ready    control-plane,master   39d   v1.27.15+6147456
    ctrl-plane-1   Ready    control-plane,master   39d   v1.27.15+6147456
    ctrl-plane-2   Ready    control-plane,master   39d   v1.27.15+6147456
    worker-0       Ready    mcp-1,worker           39d   v1.27.15+6147456
    worker-1       Ready    mcp-2,worker           39d   v1.27.15+6147456
    Copy to Clipboard Toggle word wrap

  2. 클러스터에서 레이블을 mcp CR로 적용하는 YAML 사용자 정의 리소스(CR)를 만듭니다. 다음 YAML을 mcps.yaml 파일에 저장합니다.

    ---
    apiVersion: machineconfiguration.openshift.io/v1
    kind: MachineConfigPool
    metadata:
      name: mcp-2
    spec:
      machineConfigSelector:
        matchExpressions:
          - {
             key: machineconfiguration.openshift.io/role,
             operator: In,
             values: [worker,mcp-2]
            }
      nodeSelector:
        matchLabels:
          node-role.kubernetes.io/mcp-2: ""
    ---
    apiVersion: machineconfiguration.openshift.io/v1
    kind: MachineConfigPool
    metadata:
      name: mcp-1
    spec:
      machineConfigSelector:
        matchExpressions:
          - {
             key: machineconfiguration.openshift.io/role,
             operator: In,
             values: [worker,mcp-1]
            }
      nodeSelector:
        matchLabels:
          node-role.kubernetes.io/mcp-1: ""
    Copy to Clipboard Toggle word wrap
  3. MachineConfigPool 리소스를 만듭니다.

    $ oc apply -f mcps.yaml
    Copy to Clipboard Toggle word wrap

    출력 예

    machineconfigpool.machineconfiguration.openshift.io/mcp-2 created
    Copy to Clipboard Toggle word wrap

검증

클러스터에 적용되는 MachineConfigPool 리소스를 모니터링합니다. mcp 리소스를 적용하면 노드가 새 머신 구성 풀에 추가됩니다. 이 작업에는 몇 분 정도 걸립니다.

참고

노드는 mcp 그룹에 추가되는 동안 재부팅되지 않습니다. 원래의 작업자 및 마스터 MCP 그룹은 변경되지 않습니다.

  • 새로운 mcp 리소스의 상태를 확인하세요.

    $ oc get mcp
    Copy to Clipboard Toggle word wrap

    출력 예

    NAME     CONFIG                   UPDATED   UPDATING   DEGRADED   MACHINECOUNT   READYMACHINECOUNT UPDATEDMACHINECOUNT   DEGRADEDMACHINECOUNT   AGE
    master   rendered-master-be3e83   True      False      False      3              3                 3                     0                      25d
    mcp-1    rendered-mcp-1-2f4c4f    False     True       True       1              0                 0                     0                      10s
    mcp-2    rendered-mcp-2-2r4s1f    False     True       True       1              0                 0                     0                      10s
    worker   rendered-worker-23fc4f   False     True       True       0              0                 0                     2                      25d
    Copy to Clipboard Toggle word wrap

    결국, 리소스가 완전히 적용됩니다.

    NAME     CONFIG                   UPDATED   UPDATING   DEGRADED   MACHINECOUNT   READYMACHINECOUNT UPDATEDMACHINECOUNT   DEGRADEDMACHINECOUNT   AGE
    master   rendered-master-be3e83   True      False      False      3              3                 3                     0                      25d
    mcp-1    rendered-mcp-1-2f4c4f    True      False      False      1              1                 1                     0                      7m33s
    mcp-2    rendered-mcp-2-2r4s1f    True      False      False      1              1                 1                     0                      51s
    worker   rendered-worker-23fc4f   True      False      False      0              0                 0                     0                      25d
    Copy to Clipboard Toggle word wrap
17.2.3.4. 통신사 배포 환경 고려 사항

통신 환경에서 대부분의 클러스터는 연결이 끊긴 네트워크에 있습니다. 이러한 환경에서 클러스터를 업데이트하려면 오프라인 이미지 저장소를 업데이트해야 합니다.

17.2.3.5. 클러스터 플랫폼 업데이트를 위한 준비

클러스터를 업데이트하기 전에 몇 가지 기본 검사와 검증을 수행하여 클러스터가 업데이트할 준비가 되었는지 확인하세요.

프로세스

  1. 다음 명령을 실행하여 클러스터에 실패했거나 진행 중인 포드가 없는지 확인하세요.

    $ oc get pods -A | grep -E -vi 'complete|running'
    Copy to Clipboard Toggle word wrap
    참고

    보류 상태의 포드가 있는 경우 이 명령을 두 번 이상 실행해야 할 수도 있습니다.

  2. 클러스터의 모든 노드를 사용할 수 있는지 확인합니다.

    $ oc get nodes
    Copy to Clipboard Toggle word wrap

    출력 예

    NAME           STATUS   ROLES                  AGE   VERSION
    ctrl-plane-0   Ready    control-plane,master   32d   v1.27.15+6147456
    ctrl-plane-1   Ready    control-plane,master   32d   v1.27.15+6147456
    ctrl-plane-2   Ready    control-plane,master   32d   v1.27.15+6147456
    worker-0       Ready    mcp-1,worker           32d   v1.27.15+6147456
    worker-1       Ready    mcp-2,worker           32d   v1.27.15+6147456
    Copy to Clipboard Toggle word wrap

  3. 모든 베어 메탈 노드가 프로비저닝되고 준비되었는지 확인합니다.

    $ oc get bmh -n openshift-machine-api
    Copy to Clipboard Toggle word wrap

    출력 예

    NAME           STATE         CONSUMER                   ONLINE   ERROR   AGE
    ctrl-plane-0   unmanaged     cnf-58879-master-0         true             33d
    ctrl-plane-1   unmanaged     cnf-58879-master-1         true             33d
    ctrl-plane-2   unmanaged     cnf-58879-master-2         true             33d
    worker-0       unmanaged     cnf-58879-worker-0-45879   true             33d
    worker-1       progressing   cnf-58879-worker-0-dszsh   false            1d 
    1
    Copy to Clipboard Toggle word wrap

    1
    Worker-1 노드를 프로비저닝하는 동안 오류가 발생했습니다.

검증

  • 모든 클러스터 운영자가 준비되었는지 확인하세요.

    $ oc get co
    Copy to Clipboard Toggle word wrap

    출력 예

    NAME                                       VERSION   AVAILABLE   PROGRESSING   DEGRADED   SINCE   MESSAGE
    authentication                             4.14.34   True        False         False      17h
    baremetal                                  4.14.34   True        False         False      32d
    
    ...
    
    service-ca                                 4.14.34   True        False         False      32d
    storage                                    4.14.34   True        False         False      32d
    Copy to Clipboard Toggle word wrap

17.2.4. 통신사 핵심 CNF 클러스터를 업데이트하기 전에 CNF 포드 구성

업데이트 중에 클러스터가 Pod를 예약할 수 있도록 클라우드 기반 네트워크 기능(CNF)을 개발할 때 Kubernetes에 대한 Red Hat 모범 사례 의 지침을 따르세요.

중요

항상 배포 리소스를 사용하여 그룹으로 포드를 배포합니다. 배포 리소스는 사용 가능한 모든 포드에 작업 부하를 분산시켜 단일 장애 지점이 없도록 보장합니다. 배포 리소스에서 관리하는 Pod가 삭제되면 새 Pod가 자동으로 해당 자리를 대신합니다.

PodDisruptionBudget 사용자 정의 리소스(CR)에서 포드 중단 예산을 설정하여 CNF 워크로드가 중단 없이 실행될 수 있도록 배포에서 최소한의 포드 수를 구성할 수 있습니다. 이 값을 설정할 때는 주의하세요. 잘못 설정하면 업데이트가 실패할 수 있습니다.

예를 들어, 배포에 4개의 포드가 있고 포드 중단 예산을 4로 설정하면 클러스터 스케줄러는 항상 4개의 포드를 계속 실행합니다. 즉, 포드를 축소할 수 없습니다.

대신, 포드 중단 예산을 2로 설정하여 4개의 포드 중 2개가 중단으로 예약되도록 합니다. 그런 다음 해당 포드가 위치한 워커 노드를 재부팅할 수 있습니다.

참고

포드 중단 예산을 2로 설정한다고 해서 배포가 일정 기간(예: 업데이트 중) 동안 2개의 포드에서만 실행된다는 의미는 아닙니다. 클러스터 스케줄러는 2개의 기존 Pod를 대체하기 위해 2개의 새로운 Pod를 생성합니다. 하지만 새로운 포드가 온라인에 올라오고 기존 포드가 삭제되는 사이에는 짧은 시간 간격이 있습니다.

17.2.4.2. 포드가 동일한 클러스터 노드에서 실행되지 않도록 보장

쿠버네티스에서 고가용성을 구현하려면 클러스터의 별도 노드에서 복제 프로세스를 실행해야 합니다. 이렇게 하면 한 노드를 사용할 수 없게 되더라도 애플리케이션이 계속 실행됩니다. OpenShift Container Platform에서는 배포 시 프로세스를 별도의 Pod에 자동으로 복제할 수 있습니다. 배포 내의 포드가 동일한 클러스터 노드에서 실행되지 않도록 하려면 Pod 사양에서 반친화성을 구성합니다.

업데이트 중에 Pod 반친화성을 설정하면 Pod가 클러스터의 노드에 균등하게 분산됩니다. 즉, 업데이트 중에 노드를 재부팅하는 것이 더 쉬워집니다. 예를 들어, 노드에 단일 배포로 인해 4개의 Pod가 있고 Pod 중단 예산이 한 번에 1개의 Pod만 삭제되도록 설정된 경우, 해당 노드를 재부팅하는 데 4배 더 오랜 시간이 걸립니다. Pod 반친화성을 설정하면 Pod가 클러스터 전체에 퍼져서 이런 일이 발생하지 않습니다.

17.2.4.3. 애플리케이션 활성 상태, 준비 상태 및 시작 프로브

업데이트를 예약하기 전에 활성, 준비 및 시작 프로브를 사용하여 활성 애플리케이션 컨테이너의 상태를 확인할 수 있습니다. 이러한 도구는 애플리케이션 컨테이너의 상태를 유지하는 데 의존하는 포드와 함께 사용할 때 매우 유용합니다.

활성 상태 점검
컨테이너가 실행 중인지 확인합니다. 컨테이너의 활성 프로브가 실패하면 포드는 재시작 정책에 따라 응답합니다.
Readiness 프로브
컨테이너가 서비스 요청을 수락할 준비가 되었는지 확인합니다. 컨테이너에 대한 준비 프로브가 실패하면 kubelet은 사용 가능한 서비스 엔드포인트 목록에서 컨테이너를 제거합니다.
Startup 프로브
시작 프로브는 컨테이너 내의 애플리케이션이 시작되었는지 여부를 나타냅니다. 기타 모든 프로브는 시작 프로브가 성공할 때까지 비활성화됩니다. 시작 프로브가 성공하지 못하면 kubelet은 컨테이너를 종료하고 컨테이너는 pod restartPolicy 설정의 적용을 받습니다.

17.2.5. Telco Core CNF 클러스터를 업데이트하기 전에

클러스터 업데이트를 시작하기 전에 작업자 노드를 일시 중지하고, etcd 데이터베이스를 백업하고, 진행하기 전에 최종 클러스터 상태 확인을 수행해야 합니다.

17.2.5.1. 업데이트 전에 작업자 노드 일시 중지

업데이트를 진행하기 전에 작업자 노드를 일시 중지해야 합니다. 다음 예에서는 mcp-1mcp-2라는 2개의 mcp 그룹이 있습니다. 이러한 각 MachineConfigPool 그룹에 대해 spec.paused 필드를 true 로 패치합니다.

프로세스

  1. 다음 명령을 실행하여 mcp CR에 패치를 적용하여 노드를 일시 중지하고 해당 노드에서 포드를 비우고 제거합니다.

    $ oc patch mcp/mcp-1 --type merge --patch '{"spec":{"paused":true}}'
    Copy to Clipboard Toggle word wrap
    $ oc patch mcp/mcp-2 --type merge --patch '{"spec":{"paused":true}}'
    Copy to Clipboard Toggle word wrap
  2. 일시 중지된 mcp 그룹의 상태를 가져옵니다.

    $ oc get mcp -o json | jq -r '["MCP","Paused"], ["---","------"], (.items[] | [(.metadata.name), (.spec.paused)]) | @tsv' | grep -v worker
    Copy to Clipboard Toggle word wrap

    출력 예

    MCP     Paused
    ---     ------
    master  false
    mcp-1   true
    mcp-2   true
    Copy to Clipboard Toggle word wrap

참고

기본 제어 평면과 작업자 MCP 그룹은 업데이트 중에 변경되지 않습니다.

17.2.5.2. 업데이트를 진행하기 전에 etcd 데이터베이스를 백업하세요.

업데이트를 진행하기 전에 etcd 데이터베이스를 백업해야 합니다.

17.2.5.2.1. etcd 데이터 백업

다음 단계에 따라 etcd 스냅샷을 작성하고 정적 pod의 리소스를 백업하여 etcd 데이터를 백업합니다. 이 백업을 저장하여 etcd를 복원해야하는 경우 나중에 사용할 수 있습니다.

중요

단일 컨트롤 플레인 호스트의 백업만 저장합니다. 클러스터의 각 컨트롤 플레인 호스트에서 백업을 수행하지 마십시오.

사전 요구 사항

  • cluster-admin 역할의 사용자로 클러스터에 액세스할 수 있어야 합니다.
  • 클러스터 전체의 프록시가 활성화되어 있는지 확인해야 합니다.

    작은 정보

    oc get proxy cluster -o yaml의 출력을 확인하여 프록시가 사용 가능한지 여부를 확인할 수 있습니다. httpProxy, httpsProxynoProxy 필드에 값이 설정되어 있으면 프록시가 사용됩니다.

프로세스

  1. 제어 평면 노드의 루트로 디버그 세션을 시작합니다.

    $ oc debug --as-root node/<node_name>
    Copy to Clipboard Toggle word wrap
  2. 디버그 셸에서 루트 디렉토리를 /host 로 변경하세요.

    sh-4.4# chroot /host
    Copy to Clipboard Toggle word wrap
  3. 클러스터 전체 프록시가 활성화된 경우 다음 명령을 실행하여 NO_PROXY , HTTP_PROXYHTTPS_PROXY 환경 변수를 내보냅니다.

    $ export HTTP_PROXY=http://<your_proxy.example.com>:8080
    Copy to Clipboard Toggle word wrap
    $ export HTTPS_PROXY=https://<your_proxy.example.com>:8080
    Copy to Clipboard Toggle word wrap
    $ export NO_PROXY=<example.com>
    Copy to Clipboard Toggle word wrap
  4. 디버그 셸에서 cluster-backup.sh 스크립트를 실행하고 백업을 저장할 위치를 전달합니다.

    작은 정보

    cluster-backup.sh 스크립트는 etcd Cluster Operator의 구성 요소로 유지 관리되며 etcdctl snapshot save 명령 관련 래퍼입니다.

    sh-4.4# /usr/local/bin/cluster-backup.sh /home/core/assets/backup
    Copy to Clipboard Toggle word wrap

    스크립트 출력 예

    found latest kube-apiserver: /etc/kubernetes/static-pod-resources/kube-apiserver-pod-6
    found latest kube-controller-manager: /etc/kubernetes/static-pod-resources/kube-controller-manager-pod-7
    found latest kube-scheduler: /etc/kubernetes/static-pod-resources/kube-scheduler-pod-6
    found latest etcd: /etc/kubernetes/static-pod-resources/etcd-pod-3
    ede95fe6b88b87ba86a03c15e669fb4aa5bf0991c180d3c6895ce72eaade54a1
    etcdctl version: 3.4.14
    API version: 3.4
    {"level":"info","ts":1624647639.0188997,"caller":"snapshot/v3_snapshot.go:119","msg":"created temporary db file","path":"/home/core/assets/backup/snapshot_2021-06-25_190035.db.part"}
    {"level":"info","ts":"2021-06-25T19:00:39.030Z","caller":"clientv3/maintenance.go:200","msg":"opened snapshot stream; downloading"}
    {"level":"info","ts":1624647639.0301006,"caller":"snapshot/v3_snapshot.go:127","msg":"fetching snapshot","endpoint":"https://10.0.0.5:2379"}
    {"level":"info","ts":"2021-06-25T19:00:40.215Z","caller":"clientv3/maintenance.go:208","msg":"completed snapshot read; closing"}
    {"level":"info","ts":1624647640.6032252,"caller":"snapshot/v3_snapshot.go:142","msg":"fetched snapshot","endpoint":"https://10.0.0.5:2379","size":"114 MB","took":1.584090459}
    {"level":"info","ts":1624647640.6047094,"caller":"snapshot/v3_snapshot.go:152","msg":"saved","path":"/home/core/assets/backup/snapshot_2021-06-25_190035.db"}
    Snapshot saved at /home/core/assets/backup/snapshot_2021-06-25_190035.db
    {"hash":3866667823,"revision":31407,"totalKey":12828,"totalSize":114446336}
    snapshot db and kube resources are successfully saved to /home/core/assets/backup
    Copy to Clipboard Toggle word wrap

    이 예제에서는 컨트롤 플레인 호스트의 /home/core/assets/backup/ 디렉토리에 두 개의 파일이 생성됩니다.

    • snapshot_<datetimestamp>.db:이 파일은 etcd 스냅샷입니다. cluster-backup.sh 스크립트는 유효성을 확인합니다.
    • static_kuberesources_<datetimestamp>.tar.gz: 이 파일에는 정적 pod 리소스가 포함되어 있습니다. etcd 암호화가 활성화되어 있는 경우 etcd 스냅 샷의 암호화 키도 포함됩니다.

      참고

      etcd 암호화가 활성화되어 있는 경우 보안상의 이유로 이 두 번째 파일을 etcd 스냅 샷과 별도로 저장하는 것이 좋습니다. 그러나 이 파일은 etcd 스냅 샷에서 복원하는데 필요합니다.

      etcd 암호화는 키가 아닌 값만 암호화합니다. 즉, 리소스 유형, 네임 스페이스 및 개체 이름은 암호화되지 않습니다.

17.2.5.2.2. 단일 자동화된 etcd 백업 생성

다음 단계에 따라 CR(사용자 정의 리소스)을 생성하고 적용하여 단일 etcd 백업을 생성합니다.

사전 요구 사항

  • cluster-admin 역할의 사용자로 클러스터에 액세스할 수 있어야 합니다.
  • OpenShift CLI(oc)에 액세스할 수 있습니다.

프로세스

  • 동적으로 프로비저닝된 스토리지를 사용할 수 있는 경우 다음 단계를 완료하여 단일 자동화된 etcd 백업을 만듭니다.

    1. 다음 예와 같은 콘텐츠를 사용하여 etcd-backup-pvc.yaml 이라는 PVC(영구 볼륨 클레임)를 생성합니다.

      kind: PersistentVolumeClaim
      apiVersion: v1
      metadata:
        name: etcd-backup-pvc
        namespace: openshift-etcd
      spec:
        accessModes:
          - ReadWriteOnce
        resources:
          requests:
            storage: 200Gi 
      1
      
        volumeMode: Filesystem
      Copy to Clipboard Toggle word wrap
      1
      PVC에서 사용할 수 있는 스토리지 용량입니다. 요구 사항에 맞게 이 값을 조정합니다.
    2. 다음 명령을 실행하여 PVC를 적용합니다.

      $ oc apply -f etcd-backup-pvc.yaml
      Copy to Clipboard Toggle word wrap
    3. 다음 명령을 실행하여 PVC 생성을 확인합니다.

      $ oc get pvc
      Copy to Clipboard Toggle word wrap

      출력 예

      NAME              STATUS    VOLUME   CAPACITY   ACCESS MODES   STORAGECLASS   AGE
      etcd-backup-pvc   Bound                                                       51s
      Copy to Clipboard Toggle word wrap

      참고

      동적 PVC는 마운트될 때까지 Pending 상태로 유지됩니다.

    4. 다음 예와 같은 콘텐츠를 사용하여 etcd-single-backup.yaml 이라는 CR 파일을 만듭니다.

      apiVersion: operator.openshift.io/v1alpha1
      kind: EtcdBackup
      metadata:
        name: etcd-single-backup
        namespace: openshift-etcd
      spec:
        pvcName: etcd-backup-pvc 
      1
      Copy to Clipboard Toggle word wrap
      1
      백업을 저장할 PVC의 이름입니다. 환경에 따라 이 값을 조정합니다.
    5. CR을 적용하여 단일 백업을 시작합니다.

      $ oc apply -f etcd-single-backup.yaml
      Copy to Clipboard Toggle word wrap
  • 동적으로 프로비저닝된 스토리지를 사용할 수 없는 경우 다음 단계를 완료하여 단일 자동화된 etcd 백업을 만듭니다.

    1. 다음 콘텐츠를 사용하여 etcd-backup-local-storage.yaml 이라는 StorageClass CR 파일을 만듭니다.

      apiVersion: storage.k8s.io/v1
      kind: StorageClass
      metadata:
        name: etcd-backup-local-storage
      provisioner: kubernetes.io/no-provisioner
      volumeBindingMode: Immediate
      Copy to Clipboard Toggle word wrap
    2. 다음 명령을 실행하여 StorageClass CR을 적용합니다.

      $ oc apply -f etcd-backup-local-storage.yaml
      Copy to Clipboard Toggle word wrap
    3. 다음 예시와 같은 내용으로 etcd-backup-pv-fs.yaml 이라는 PV를 만듭니다.

      apiVersion: v1
      kind: PersistentVolume
      metadata:
        name: etcd-backup-pv-fs
      spec:
        capacity:
          storage: 100Gi 
      1
      
        volumeMode: Filesystem
        accessModes:
        - ReadWriteOnce
        persistentVolumeReclaimPolicy: Retain
        storageClassName: etcd-backup-local-storage
        local:
          path: /mnt
        nodeAffinity:
          required:
            nodeSelectorTerms:
            - matchExpressions:
            - key: kubernetes.io/hostname
               operator: In
               values:
               - <example_master_node> 
      2
      Copy to Clipboard Toggle word wrap
      1
      PV에서 사용할 수 있는 저장 용량입니다. 요구 사항에 맞게 이 값을 조정합니다.
      2
      이 값을 이 PV를 연결할 노드로 바꾸세요.
    4. 다음 명령을 실행하여 PV 생성을 확인합니다.

      $ oc get pv
      Copy to Clipboard Toggle word wrap

      출력 예

      NAME                    CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS      CLAIM   STORAGECLASS                REASON   AGE
      etcd-backup-pv-fs       100Gi      RWO            Retain           Available           etcd-backup-local-storage            10s
      Copy to Clipboard Toggle word wrap

    5. 다음 예와 같은 콘텐츠를 사용하여 etcd-backup-pvc.yaml 이라는 PVC를 만듭니다.

      kind: PersistentVolumeClaim
      apiVersion: v1
      metadata:
        name: etcd-backup-pvc
        namespace: openshift-etcd
      spec:
        accessModes:
        - ReadWriteOnce
        volumeMode: Filesystem
        resources:
          requests:
            storage: 10Gi 
      1
      Copy to Clipboard Toggle word wrap
      1
      PVC에서 사용할 수 있는 스토리지 용량입니다. 요구 사항에 맞게 이 값을 조정합니다.
    6. 다음 명령을 실행하여 PVC를 적용합니다.

      $ oc apply -f etcd-backup-pvc.yaml
      Copy to Clipboard Toggle word wrap
    7. 다음 예와 같은 콘텐츠를 사용하여 etcd-single-backup.yaml 이라는 CR 파일을 만듭니다.

      apiVersion: operator.openshift.io/v1alpha1
      kind: EtcdBackup
      metadata:
        name: etcd-single-backup
        namespace: openshift-etcd
      spec:
        pvcName: etcd-backup-pvc 
      1
      Copy to Clipboard Toggle word wrap
      1
      백업을 저장할 영구 볼륨 클레임(PVC)의 이름입니다. 환경에 따라 이 값을 조정합니다.
    8. CR을 적용하여 단일 백업을 시작합니다.

      $ oc apply -f etcd-single-backup.yaml
      Copy to Clipboard Toggle word wrap
17.2.5.3. 클러스터 상태 확인

업데이트하는 동안 클러스터 상태를 자주 확인해야 합니다. 노드 상태, 클러스터 운영자 상태 및 실패한 Pod를 확인합니다.

프로세스

  1. 다음 명령을 실행하여 클러스터 운영자의 상태를 확인하세요.

    $ oc get co
    Copy to Clipboard Toggle word wrap

    출력 예

    NAME                                       VERSION   AVAILABLE   PROGRESSING   DEGRADED   SINCE   MESSAGE
    authentication                             4.14.34   True        False         False      4d22h
    baremetal                                  4.14.34   True        False         False      4d22h
    cloud-controller-manager                   4.14.34   True        False         False      4d23h
    cloud-credential                           4.14.34   True        False         False      4d23h
    cluster-autoscaler                         4.14.34   True        False         False      4d22h
    config-operator                            4.14.34   True        False         False      4d22h
    console                                    4.14.34   True        False         False      4d22h
    ...
    service-ca                                 4.14.34   True        False         False      4d22h
    storage                                    4.14.34   True        False         False      4d22h
    Copy to Clipboard Toggle word wrap

  2. 클러스터 노드의 상태를 확인하세요.

    $ oc get nodes
    Copy to Clipboard Toggle word wrap

    출력 예

    NAME           STATUS   ROLES                  AGE     VERSION
    ctrl-plane-0   Ready    control-plane,master   4d22h   v1.27.15+6147456
    ctrl-plane-1   Ready    control-plane,master   4d22h   v1.27.15+6147456
    ctrl-plane-2   Ready    control-plane,master   4d22h   v1.27.15+6147456
    worker-0       Ready    mcp-1,worker           4d22h   v1.27.15+6147456
    worker-1       Ready    mcp-2,worker           4d22h   v1.27.15+6147456
    Copy to Clipboard Toggle word wrap

  3. 진행 중인 포드나 실패한 포드가 없는지 확인하세요. 다음 명령을 실행하면 아무 포드도 반환되지 않아야 합니다.

    $ oc get po -A | grep -E -iv 'running|complete'
    Copy to Clipboard Toggle word wrap

17.2.6. 제어 평면 전용 클러스터 업데이트 완료

다음 단계에 따라 제어 평면 전용 클러스터 업데이트를 수행하고 업데이트가 완료될 때까지 모니터링합니다.

중요

제어 평면 전용 업데이트는 이전에는 EUS-EUS 업데이트로 알려져 있었습니다. Control Plane Only 업데이트는 OpenShift Container Platform의 짝수 번째 마이너 버전 간에만 실행 가능합니다.

17.2.6.1. 제어 평면 전용 또는 y-스트림 업데이트 확인

4.11 이상 버전의 모든 버전으로 업데이트하는 경우 업데이트를 계속할 수 있음을 수동으로 확인해야 합니다.

중요

업데이트를 확인하기 전에 업데이트하려는 버전에서 제거된 Kubernetes API를 사용하고 있지 않은지 확인하세요. 예를 들어, OpenShift Container Platform 4.17에서는 API가 제거되지 않았습니다. 자세한 내용은 "Kubernetes API 제거"를 참조하세요.

사전 요구 사항

  • 클러스터에서 실행되는 모든 애플리케이션의 API가 OpenShift Container Platform의 다음 Y-stream 릴리스와 호환되는지 확인했습니다. 호환성에 대한 자세한 내용은 "업데이트 버전 간 클러스터 API 버전 확인"을 참조하세요.

프로세스

  • 다음 명령을 실행하여 클러스터 업데이트를 시작하기 위한 관리 승인을 완료합니다.

    $ oc adm upgrade
    Copy to Clipboard Toggle word wrap

    클러스터 업데이트가 성공적으로 완료되지 않으면 업데이트 실패에 대한 자세한 내용은 이유메시지 섹션에 제공됩니다.

    출력 예

    Cluster version is 4.15.45
    
    Upgradeable=False
    
      Reason: MultipleReasons
      Message: Cluster should not be upgraded between minor versions for multiple reasons: AdminAckRequired,ResourceDeletesInProgress
      * Kubernetes 1.29 and therefore OpenShift 4.16 remove several APIs which require admin consideration. Please see the knowledge article https://access.redhat.com/articles/7031404 for details and instructions.
      * Cluster minor level upgrades are not allowed while resource deletions are in progress; resources=PrometheusRule "openshift-kube-apiserver/kube-apiserver-recording-rules"
    
    ReleaseAccepted=False
    
      Reason: PreconditionChecks
      Message: Preconditions failed for payload loaded version="4.16.34" image="quay.io/openshift-release-dev/ocp-release@sha256:41bb08c560f6db5039ccdf242e590e8b23049b5eb31e1c4f6021d1d520b353b8": Precondition "ClusterVersionUpgradeable" failed because of "MultipleReasons": Cluster should not be upgraded between minor versions for multiple reasons: AdminAckRequired,ResourceDeletesInProgress
      * Kubernetes 1.29 and therefore OpenShift 4.16 remove several APIs which require admin consideration. Please see the knowledge article https://access.redhat.com/articles/7031404 for details and instructions.
      * Cluster minor level upgrades are not allowed while resource deletions are in progress; resources=PrometheusRule "openshift-kube-apiserver/kube-apiserver-recording-rules"
    
    Upstream is unset, so the cluster will use an appropriate default.
    Channel: eus-4.16 (available channels: candidate-4.15, candidate-4.16, eus-4.16, fast-4.15, fast-4.16, stable-4.15, stable-4.16)
    
    Recommended updates:
    
      VERSION     IMAGE
      4.16.34     quay.io/openshift-release-dev/ocp-release@sha256:41bb08c560f6db5039ccdf242e590e8b23049b5eb31e1c4f6021d1d520b353b8
    Copy to Clipboard Toggle word wrap

    참고

    이 예에서 링크된 Red Hat Knowledgebase 문서( OpenShift Container Platform 4.16으로 업그레이드 준비 )에서는 릴리스 간 API 호환성을 확인하는 방법에 대한 자세한 내용을 제공합니다.

검증

  • 다음 명령을 실행하여 업데이트를 확인하세요.

    $ oc get configmap admin-acks -n openshift-config -o json | jq .data
    Copy to Clipboard Toggle word wrap

    출력 예

    {
      "ack-4.14-kube-1.28-api-removals-in-4.15": "true",
      "ack-4.15-kube-1.29-api-removals-in-4.16": "true"
    }
    Copy to Clipboard Toggle word wrap

    참고

    이 예에서 클러스터는 버전 4.14에서 4.15로 업데이트되고, 그런 다음 Control Plane Only 업데이트에서 버전 4.15에서 4.16으로 업데이트됩니다.

17.2.6.2. 클러스터 업데이트 시작

한 y-stream 릴리스에서 다음 릴리스로 업데이트할 때 중간 z-stream 릴리스도 호환되는지 확인해야 합니다.

참고

oc adm upgrade 명령을 실행하여 실행 가능한 릴리스로 업데이트하고 있는지 확인할 수 있습니다. oc adm upgrade 명령은 호환되는 업데이트 릴리스를 나열합니다.

프로세스

  1. 업데이트를 시작합니다:

    $ oc adm upgrade --to=4.15.33
    Copy to Clipboard Toggle word wrap
    중요
    • 제어 평면 전용 업데이트 : 임시 <y+1> 릴리스 경로를 가리키도록 하세요.
    • Y-stream 업데이트 - Kubernetes 버전 스큐 정책을 따르는 올바른 <yz> 릴리스를 사용해야 합니다.
    • Z-stream 업데이트 - 해당 릴리스로 이동하는 데 문제가 없는지 확인하세요.

    출력 예

    Requested update to 4.15.33 
    1
    Copy to Clipboard Toggle word wrap

    1
    요청된 업데이트 값은 특정 업데이트에 따라 변경됩니다.
17.2.6.3. 클러스터 업데이트 모니터링

업데이트하는 동안 클러스터 상태를 자주 확인해야 합니다. 노드 상태, 클러스터 운영자 상태 및 실패한 Pod를 확인합니다.

프로세스

  • 클러스터 업데이트를 모니터링합니다. 예를 들어, 버전 4.14에서 4.15로의 클러스터 업데이트를 모니터링하려면 다음 명령을 실행합니다.

    $ watch "oc get clusterversion; echo; oc get co | head -1; oc get co | grep 4.14; oc get co | grep 4.15; echo; oc get no; echo; oc get po -A | grep -E -iv 'running|complete'"
    Copy to Clipboard Toggle word wrap

    출력 예

    NAME      VERSION   AVAILABLE   PROGRESSING   SINCE   STATUS
    version   4.14.34   True        True          4m6s    Working towards 4.15.33: 111 of 873 done (12% complete), waiting on kube-apiserver
    
    NAME                           VERSION   AVAILABLE   PROGRESSING   DEGRADED   SINCE   MESSAGE
    authentication                 4.14.34   True        False         False      4d22h
    baremetal                      4.14.34   True        False         False      4d23h
    cloud-controller-manager       4.14.34   True        False         False      4d23h
    cloud-credential               4.14.34   True        False         False      4d23h
    cluster-autoscaler             4.14.34   True        False         False      4d23h
    console                        4.14.34   True        False         False      4d22h
    
    ...
    
    storage                        4.14.34   True        False         False      4d23h
    config-operator                4.15.33   True        False         False      4d23h
    etcd                           4.15.33   True        False         False      4d23h
    
    NAME           STATUS   ROLES                  AGE     VERSION
    ctrl-plane-0   Ready    control-plane,master   4d23h   v1.27.15+6147456
    ctrl-plane-1   Ready    control-plane,master   4d23h   v1.27.15+6147456
    ctrl-plane-2   Ready    control-plane,master   4d23h   v1.27.15+6147456
    worker-0       Ready    mcp-1,worker           4d23h   v1.27.15+6147456
    worker-1       Ready    mcp-2,worker           4d23h   v1.27.15+6147456
    
    NAMESPACE               NAME                       READY   STATUS              RESTARTS   AGE
    openshift-marketplace   redhat-marketplace-rf86t   0/1     ContainerCreating   0          0s
    Copy to Clipboard Toggle word wrap

검증

업데이트 중에 watch 명령은 한 번에 하나 이상의 클러스터 운영자를 순환하며 MESSAGE 열에 운영자 업데이트 상태를 제공합니다.

클러스터 운영자 업데이트 프로세스가 완료되면 각 제어 평면 노드가 한 번에 하나씩 재부팅됩니다.

참고

이 업데이트 부분에서는 상태 클러스터 운영자가 다시 업데이트 중이거나 성능이 저하되었다는 메시지가 보고됩니다. 이는 노드를 재부팅하는 동안 제어 평면 노드가 오프라인 상태이기 때문입니다.

마지막 제어 평면 노드 재부팅이 완료되면 클러스터 버전이 업데이트된 것으로 표시됩니다.

제어 평면 업데이트가 완료되면 다음과 같은 메시지가 표시됩니다. 이 예에서는 중간 y-스트림 릴리스에 완료된 업데이트를 보여줍니다.

NAME      VERSION   AVAILABLE   PROGRESSING   SINCE   STATUS
version   4.15.33   True        False         28m     Cluster version is 4.15.33

NAME                         VERSION   AVAILABLE   PROGRESSING   DEGRADED   SINCE   MESSAGE
authentication               4.15.33   True        False         False	  5d
baremetal                    4.15.33   True        False         False	  5d
cloud-controller-manager     4.15.33   True        False         False	  5d1h
cloud-credential             4.15.33   True        False         False	  5d1h
cluster-autoscaler           4.15.33   True        False         False	  5d
config-operator              4.15.33   True        False         False	  5d
console                      4.15.33   True        False         False	  5d

...

service-ca                   4.15.33   True        False         False	  5d
storage                      4.15.33   True        False         False	  5d

NAME           STATUS   ROLES                  AGE   VERSION
ctrl-plane-0   Ready    control-plane,master   5d    v1.28.13+2ca1a23
ctrl-plane-1   Ready    control-plane,master   5d    v1.28.13+2ca1a23
ctrl-plane-2   Ready    control-plane,master   5d    v1.28.13+2ca1a23
worker-0       Ready    mcp-1,worker           5d    v1.28.13+2ca1a23
worker-1       Ready    mcp-2,worker           5d    v1.28.13+2ca1a23
Copy to Clipboard Toggle word wrap
17.2.6.4. OLM 운영자 업데이트

통신 환경에서는 소프트웨어를 프로덕션 클러스터에 로드하기 전에 검증해야 합니다. 프로덕션 클러스터도 연결이 끊긴 네트워크에 구성되므로 항상 인터넷에 직접 연결되어 있지는 않습니다. 클러스터가 연결되지 않은 네트워크에 있기 때문에 OpenShift Operator는 설치 중에 수동 업데이트가 가능하도록 구성되어 새 버전을 클러스터별로 관리할 수 있습니다. 다음 절차에 따라 Operator를 최신 버전으로 옮기세요.

프로세스

  1. 어떤 운영자를 업데이트해야 하는지 확인하세요.

    $ oc get installplan -A | grep -E 'APPROVED|false'
    Copy to Clipboard Toggle word wrap

    출력 예

    NAMESPACE           NAME            CSV                                               APPROVAL   APPROVED
    metallb-system      install-nwjnh   metallb-operator.v4.16.0-202409202304             Manual     false
    openshift-nmstate   install-5r7wr   kubernetes-nmstate-operator.4.16.0-202409251605   Manual     false
    Copy to Clipboard Toggle word wrap

  2. 다음 운영자에 대한 InstallPlan 리소스를 패치합니다.

    $ oc patch installplan -n metallb-system install-nwjnh --type merge --patch \
    '{"spec":{"approved":true}}'
    Copy to Clipboard Toggle word wrap

    출력 예

    installplan.operators.coreos.com/install-nwjnh patched
    Copy to Clipboard Toggle word wrap

  3. 다음 명령을 실행하여 네임스페이스를 모니터링합니다.

    $ oc get all -n metallb-system
    Copy to Clipboard Toggle word wrap

    출력 예

    NAME                                                       READY   STATUS              RESTARTS   AGE
    pod/metallb-operator-controller-manager-69b5f884c-8bp22    0/1     ContainerCreating   0          4s
    pod/metallb-operator-controller-manager-77895bdb46-bqjdx   1/1     Running             0          4m1s
    pod/metallb-operator-webhook-server-5d9b968896-vnbhk       0/1     ContainerCreating   0          4s
    pod/metallb-operator-webhook-server-d76f9c6c8-57r4w        1/1     Running             0          4m1s
    
    ...
    
    NAME                                                             DESIRED   CURRENT   READY   AGE
    replicaset.apps/metallb-operator-controller-manager-69b5f884c    1         1         0       4s
    replicaset.apps/metallb-operator-controller-manager-77895bdb46   1         1         1       4m1s
    replicaset.apps/metallb-operator-controller-manager-99b76f88     0         0         0       4m40s
    replicaset.apps/metallb-operator-webhook-server-5d9b968896       1         1         0       4s
    replicaset.apps/metallb-operator-webhook-server-6f7dbfdb88       0         0         0       4m40s
    replicaset.apps/metallb-operator-webhook-server-d76f9c6c8        1         1         1       4m1s
    Copy to Clipboard Toggle word wrap

    업데이트가 완료되면 필요한 포드가 실행 상태가 되고 필요한 ReplicaSet 리소스가 준비되어야 합니다.

    NAME                                                      READY   STATUS    RESTARTS   AGE
    pod/metallb-operator-controller-manager-69b5f884c-8bp22   1/1     Running   0          25s
    pod/metallb-operator-webhook-server-5d9b968896-vnbhk      1/1     Running   0          25s
    
    ...
    
    NAME                                                             DESIRED   CURRENT   READY   AGE
    replicaset.apps/metallb-operator-controller-manager-69b5f884c    1         1         1       25s
    replicaset.apps/metallb-operator-controller-manager-77895bdb46   0         0         0       4m22s
    replicaset.apps/metallb-operator-webhook-server-5d9b968896       1         1         1       25s
    replicaset.apps/metallb-operator-webhook-server-d76f9c6c8        0         0         0       4m22s
    Copy to Clipboard Toggle word wrap

검증

  • 운영자를 두 번째로 업데이트할 필요가 없는지 확인하세요.

    $ oc get installplan -A | grep -E 'APPROVED|false'
    Copy to Clipboard Toggle word wrap

    반환된 출력이 없어야 합니다.

    참고

    일부 운영자가 최종 버전에 앞서 설치해야 하는 임시 z-stream 릴리스 버전을 보유하고 있기 때문에 업데이트를 두 번 승인해야 하는 경우가 있습니다.

17.2.6.4.1. 두 번째 y-스트림 업데이트 수행

첫 번째 y-stream 업데이트를 완료한 후에는 y-stream 제어 평면 버전을 새로운 EUS 버전으로 업데이트해야 합니다.

프로세스

  1. 선택한 <4.yz> 릴리스가 여전히 이동할 수 있는 좋은 채널로 나열되어 있는지 확인하세요.

    $ oc adm upgrade
    Copy to Clipboard Toggle word wrap

    출력 예

    Cluster version is 4.15.33
    
    Upgradeable=False
    
      Reason: AdminAckRequired
      Message: Kubernetes 1.29 and therefore OpenShift 4.16 remove several APIs which require admin consideration. Please see the knowledge article https://access.redhat.com/articles/7031404 for details and instructions.
    
    Upstream is unset, so the cluster will use an appropriate default.
    Channel: eus-4.16 (available channels: candidate-4.15, candidate-4.16, eus-4.16, fast-4.15, fast-4.16, stable-4.15, stable-4.16)
    
    Recommended updates:
    
      VERSION     IMAGE
      4.16.14     quay.io/openshift-release-dev/ocp-release@sha256:0521a0f1acd2d1b77f76259cb9bae9c743c60c37d9903806a3372c1414253658
      4.16.13     quay.io/openshift-release-dev/ocp-release@sha256:6078cb4ae197b5b0c526910363b8aff540343bfac62ecb1ead9e068d541da27b
      4.15.34     quay.io/openshift-release-dev/ocp-release@sha256:f2e0c593f6ed81250c11d0bac94dbaf63656223477b7e8693a652f933056af6e
    Copy to Clipboard Toggle word wrap

    참고

    새로운 Y-스트림 릴리스의 최초 GA 직후에 업데이트를 수행하는 경우 oc adm upgrade 명령을 실행하면 사용 가능한 새로운 Y-스트림 릴리스가 표시되지 않을 수 있습니다.

  2. 선택 사항: 권장되지 않는 잠재적인 업데이트 릴리스를 확인합니다. 다음 명령을 실행합니다.

    $ oc adm upgrade --include-not-recommended
    Copy to Clipboard Toggle word wrap

    출력 예

    Cluster version is 4.15.33
    
    Upgradeable=False
    
      Reason: AdminAckRequired
      Message: Kubernetes 1.29 and therefore OpenShift 4.16 remove several APIs which require admin consideration. Please see the knowledge article https://access.redhat.com/articles/7031404 for details and instructions.
    
    Upstream is unset, so the cluster will use an appropriate default.Channel: eus-4.16 (available channels: candidate-4.15, candidate-4.16, eus-4.16, fast-4.15, fast-4.16, stable-4.15, stable-4.16)
    
    Recommended updates:
    
      VERSION     IMAGE
      4.16.14     quay.io/openshift-release-dev/ocp-release@sha256:0521a0f1acd2d1b77f76259cb9bae9c743c60c37d9903806a3372c1414253658
      4.16.13     quay.io/openshift-release-dev/ocp-release@sha256:6078cb4ae197b5b0c526910363b8aff540343bfac62ecb1ead9e068d541da27b
      4.15.34     quay.io/openshift-release-dev/ocp-release@sha256:f2e0c593f6ed81250c11d0bac94dbaf63656223477b7e8693a652f933056af6e
    
    Supported but not recommended updates:
    
      Version: 4.16.15
      Image: quay.io/openshift-release-dev/ocp-release@sha256:671bc35e
      Recommended: Unknown
      Reason: EvaluationFailed
      Message: Exposure to AzureRegistryImagePreservation is unknown due to an evaluation failure: invalid PromQL result length must be one, but is 0
      In Azure clusters, the in-cluster image registry may fail to preserve images on update. https://issues.redhat.com/browse/IR-461
    Copy to Clipboard Toggle word wrap

    참고

    이 예제는 Microsoft Azure에 호스팅된 클러스터에 영향을 줄 수 있는 잠재적 오류를 보여줍니다. 베어 메탈 클러스터의 위험은 보여주지 않습니다.

17.2.6.4.2. y-stream 릴리스 업데이트 확인

y-stream 릴리스 간에 전환할 때는 패치 명령을 실행하여 업데이트를 명시적으로 확인해야 합니다. oc adm upgrade 명령의 출력에는 실행할 특정 명령을 보여주는 URL이 제공됩니다.

중요

업데이트를 확인하기 전에 업데이트하려는 버전에서 제거된 Kubernetes API를 사용하고 있지 않은지 확인하세요. 예를 들어, OpenShift Container Platform 4.17에서는 API가 제거되지 않았습니다. 자세한 내용은 "Kubernetes API 제거"를 참조하세요.

사전 요구 사항

  • 클러스터에서 실행되는 모든 애플리케이션의 API가 OpenShift Container Platform의 다음 Y-stream 릴리스와 호환되는지 확인했습니다. 호환성에 대한 자세한 내용은 "업데이트 버전 간 클러스터 API 버전 확인"을 참조하세요.

프로세스

  • 다음 명령을 실행하여 클러스터 업데이트를 시작하기 위한 관리 승인을 완료합니다.

    $ oc adm upgrade
    Copy to Clipboard Toggle word wrap

    클러스터 업데이트가 성공적으로 완료되지 않으면 업데이트 실패에 대한 자세한 내용은 이유메시지 섹션에 제공됩니다.

    출력 예

    Cluster version is 4.15.45
    
    Upgradeable=False
    
      Reason: MultipleReasons
      Message: Cluster should not be upgraded between minor versions for multiple reasons: AdminAckRequired,ResourceDeletesInProgress
      * Kubernetes 1.29 and therefore OpenShift 4.16 remove several APIs which require admin consideration. Please see the knowledge article https://access.redhat.com/articles/7031404 for details and instructions.
      * Cluster minor level upgrades are not allowed while resource deletions are in progress; resources=PrometheusRule "openshift-kube-apiserver/kube-apiserver-recording-rules"
    
    ReleaseAccepted=False
    
      Reason: PreconditionChecks
      Message: Preconditions failed for payload loaded version="4.16.34" image="quay.io/openshift-release-dev/ocp-release@sha256:41bb08c560f6db5039ccdf242e590e8b23049b5eb31e1c4f6021d1d520b353b8": Precondition "ClusterVersionUpgradeable" failed because of "MultipleReasons": Cluster should not be upgraded between minor versions for multiple reasons: AdminAckRequired,ResourceDeletesInProgress
      * Kubernetes 1.29 and therefore OpenShift 4.16 remove several APIs which require admin consideration. Please see the knowledge article https://access.redhat.com/articles/7031404 for details and instructions.
      * Cluster minor level upgrades are not allowed while resource deletions are in progress; resources=PrometheusRule "openshift-kube-apiserver/kube-apiserver-recording-rules"
    
    Upstream is unset, so the cluster will use an appropriate default.
    Channel: eus-4.16 (available channels: candidate-4.15, candidate-4.16, eus-4.16, fast-4.15, fast-4.16, stable-4.15, stable-4.16)
    
    Recommended updates:
    
      VERSION     IMAGE
      4.16.34     quay.io/openshift-release-dev/ocp-release@sha256:41bb08c560f6db5039ccdf242e590e8b23049b5eb31e1c4f6021d1d520b353b8
    Copy to Clipboard Toggle word wrap

    참고

    이 예에서 링크된 Red Hat Knowledgebase 문서( OpenShift Container Platform 4.16으로 업그레이드 준비 )에서는 릴리스 간 API 호환성을 확인하는 방법에 대한 자세한 내용을 제공합니다.

검증

  • 다음 명령을 실행하여 업데이트를 확인하세요.

    $ oc get configmap admin-acks -n openshift-config -o json | jq .data
    Copy to Clipboard Toggle word wrap

    출력 예

    {
      "ack-4.14-kube-1.28-api-removals-in-4.15": "true",
      "ack-4.15-kube-1.29-api-removals-in-4.16": "true"
    }
    Copy to Clipboard Toggle word wrap

    참고

    이 예에서 클러스터는 버전 4.14에서 4.15로 업데이트되고, 그런 다음 Control Plane Only 업데이트에서 버전 4.15에서 4.16으로 업데이트됩니다.

17.2.6.5. y-stream 제어 평면 업데이트 시작

이동할 새 릴리스 전체를 확인한 후 oc adm upgrade –to=xyz 명령을 실행할 수 있습니다.

프로세스

  • y-stream 제어 평면 업데이트를 시작합니다. 예를 들어 다음 명령을 실행합니다.

    $ oc adm upgrade --to=4.16.14
    Copy to Clipboard Toggle word wrap

    출력 예

    Requested update to 4.16.14
    Copy to Clipboard Toggle word wrap

    현재 실행 중인 플랫폼 외의 다른 플랫폼에서 잠재적으로 문제가 발생할 수 있는 z-stream 릴리스로 전환할 수도 있습니다. 다음 예는 Microsoft Azure의 클러스터 업데이트에 발생할 수 있는 문제를 보여줍니다.

    $ oc adm upgrade --to=4.16.15
    Copy to Clipboard Toggle word wrap

    출력 예

    error: the update 4.16.15 is not one of the recommended updates, but is available as a conditional update. To accept the Recommended=Unknown risk and to proceed with update use --allow-not-recommended.
      Reason: EvaluationFailed
      Message: Exposure to AzureRegistryImagePreservation is unknown due to an evaluation failure: invalid PromQL result length must be one, but is 0
      In Azure clusters, the in-cluster image registry may fail to preserve images on update. https://issues.redhat.com/browse/IR-461
    Copy to Clipboard Toggle word wrap

    참고

    이 예제는 Microsoft Azure에 호스팅된 클러스터에 영향을 줄 수 있는 잠재적 오류를 보여줍니다. 베어 메탈 클러스터의 위험은 보여주지 않습니다.

    $ oc adm upgrade --to=4.16.15 --allow-not-recommended
    Copy to Clipboard Toggle word wrap

    출력 예

    warning: with --allow-not-recommended you have accepted the risks with 4.14.11 and bypassed Recommended=Unknown EvaluationFailed: Exposure to AzureRegistryImagePreservation is unknown due to an evaluation failure: invalid PromQL result length must be one, but is 0
    In Azure clusters, the in-cluster image registry may fail to preserve images on update. https://issues.redhat.com/browse/IR-461
    
    Requested update to 4.16.15
    Copy to Clipboard Toggle word wrap

17.2.6.6. 클러스터 업데이트의 두 번째 부분 모니터링

<y+1> 버전에 대한 클러스터 업데이트의 두 번째 부분을 모니터링합니다.

프로세스

  • <y+1> 업데이트의 두 번째 부분의 진행 상황을 모니터링합니다. 예를 들어, 4.15에서 4.16으로의 업데이트를 모니터링하려면 다음 명령을 실행합니다.

    $ watch "oc get clusterversion; echo; oc get co | head -1; oc get co | grep 4.15; oc get co | grep 4.16; echo; oc get no; echo; oc get po -A | grep -E -iv 'running|complete'"
    Copy to Clipboard Toggle word wrap

    출력 예

    NAME      VERSION   AVAILABLE   PROGRESSING   SINCE   STATUS
    version   4.15.33   True        True          10m     Working towards 4.16.14: 132 of 903 done (14% complete), waiting on kube-controller-manager, kube-scheduler
    
    NAME                         VERSION   AVAILABLE   PROGRESSING   DEGRADED   SINCE   MESSAGE
    authentication               4.15.33   True        False         False      5d3h
    baremetal                    4.15.33   True        False         False      5d4h
    cloud-controller-manager     4.15.33   True        False         False      5d4h
    cloud-credential             4.15.33   True        False         False      5d4h
    cluster-autoscaler           4.15.33   True        False         False      5d4h
    console                      4.15.33   True        False         False      5d3h
    ...
    config-operator              4.16.14   True        False         False      5d4h
    etcd                         4.16.14   True        False         False      5d4h
    kube-apiserver               4.16.14   True        True          False      5d4h    NodeInstallerProgressing: 1 node is at revision 15; 2 nodes are at revision 17
    
    NAME           STATUS   ROLES                  AGE    VERSION
    ctrl-plane-0   Ready    control-plane,master   5d4h   v1.28.13+2ca1a23
    ctrl-plane-1   Ready    control-plane,master   5d4h   v1.28.13+2ca1a23
    ctrl-plane-2   Ready    control-plane,master   5d4h   v1.28.13+2ca1a23
    worker-0       Ready    mcp-1,worker           5d4h   v1.27.15+6147456
    worker-1       Ready    mcp-2,worker           5d4h   v1.27.15+6147456
    
    NAMESPACE                                          NAME                                                              READY   STATUS      RESTARTS       AGE
    openshift-kube-apiserver                           kube-apiserver-ctrl-plane-0                                       0/5     Pending     0              <invalid>
    Copy to Clipboard Toggle word wrap

    마지막 제어 평면 노드가 완료되는 즉시 클러스터 버전이 새로운 EUS 릴리스로 업데이트됩니다. 예를 들면 다음과 같습니다.

    NAME      VERSION   AVAILABLE   PROGRESSING   SINCE   STATUS
    version   4.16.14   True        False         123m    Cluster version is 4.16.14
    
    NAME                                       VERSION   AVAILABLE   PROGRESSING   DEGRADED   SINCE   MESSAGE
    authentication                             4.16.14   True        False         False	  5d6h
    baremetal                                  4.16.14   True        False         False	  5d7h
    cloud-controller-manager                   4.16.14   True        False         False	  5d7h
    cloud-credential                           4.16.14   True        False         False	  5d7h
    cluster-autoscaler                         4.16.14   True        False         False	  5d7h
    config-operator                            4.16.14   True        False         False	  5d7h
    console                                    4.16.14   True        False         False	  5d6h
    #...
    operator-lifecycle-manager-packageserver   4.16.14   True        False         False	  5d7h
    service-ca                                 4.16.14   True        False         False	  5d7h
    storage                                    4.16.14   True        False         False	  5d7h
    
    NAME           STATUS   ROLES                  AGE     VERSION
    ctrl-plane-0   Ready    control-plane,master   5d7h    v1.29.8+f10c92d
    ctrl-plane-1   Ready    control-plane,master   5d7h    v1.29.8+f10c92d
    ctrl-plane-2   Ready    control-plane,master   5d7h    v1.29.8+f10c92d
    worker-0       Ready    mcp-1,worker           5d7h    v1.27.15+6147456
    worker-1       Ready    mcp-2,worker           5d7h    v1.27.15+6147456
    Copy to Clipboard Toggle word wrap
17.2.6.7. 모든 OLM 운영자 업데이트

다중 버전 업그레이드의 두 번째 단계에서는 모든 운영자를 승인해야 하며, 업그레이드하려는 다른 운영자에 대한 설치 계획을 추가해야 합니다.

"OLM 운영자 업데이트"에 설명된 것과 동일한 절차를 따르세요. 필요에 따라 OLM이 아닌 운영자도 업데이트해야 합니다.

프로세스

  1. 클러스터 업데이트를 모니터링합니다. 예를 들어, 버전 4.14에서 4.15로의 클러스터 업데이트를 모니터링하려면 다음 명령을 실행합니다.

    $ watch "oc get clusterversion; echo; oc get co | head -1; oc get co | grep 4.14; oc get co | grep 4.15; echo; oc get no; echo; oc get po -A | grep -E -iv 'running|complete'"
    Copy to Clipboard Toggle word wrap
  2. 어떤 운영자를 업데이트해야 하는지 확인하세요.

    $ oc get installplan -A | grep -E 'APPROVED|false'
    Copy to Clipboard Toggle word wrap
  3. 다음 운영자에 대한 InstallPlan 리소스를 패치합니다.

    $ oc patch installplan -n metallb-system install-nwjnh --type merge --patch \
    '{"spec":{"approved":true}}'
    Copy to Clipboard Toggle word wrap
  4. 다음 명령을 실행하여 네임스페이스를 모니터링합니다.

    $ oc get all -n metallb-system
    Copy to Clipboard Toggle word wrap

    업데이트가 완료되면 필요한 포드가 실행 상태가 되고, 필요한 ReplicaSet 리소스가 준비됩니다.

검증

업데이트 중에 watch 명령은 한 번에 하나 이상의 클러스터 운영자를 순환하며 MESSAGE 열에 운영자 업데이트 상태를 제공합니다.

클러스터 운영자 업데이트 프로세스가 완료되면 각 제어 평면 노드가 한 번에 하나씩 재부팅됩니다.

참고

이 업데이트 부분에서는 상태 클러스터 운영자가 다시 업데이트 중이거나 성능이 저하되었다는 메시지가 보고됩니다. 이는 노드를 재부팅하는 동안 제어 평면 노드가 오프라인 상태이기 때문입니다.

17.2.6.8. 작업자 노드 업데이트

관련 MCP 그룹의 일시 중지를 해제하여 제어 평면을 업데이트한 후 작업자 노드를 업그레이드합니다. mcp 그룹의 일시 중지를 해제하면 해당 그룹의 작업자 노드에 대한 업그레이드 프로세스가 시작됩니다. 클러스터의 각 워커 노드는 필요에 따라 새로운 EUS, y-stream 또는 z-stream 버전으로 업그레이드하기 위해 재부팅됩니다.

Control Plane Only 업그레이드의 경우, 워커 노드가 업데이트되면 한 번만 재부팅하고 <y+2>-릴리스 버전으로 넘어갑니다. 이 기능은 대규모 베어 메탈 클러스터를 업그레이드하는 데 걸리는 시간을 줄이기 위해 추가되었습니다.

중요

이곳은 잠재적인 보류 지점입니다. 작업자 노드가 <y-2>-릴리스 버전인 동안 제어 평면이 새로운 EUS 릴리스로 업데이트되어 프로덕션에서 실행되도록 완벽하게 지원되는 클러스터 버전을 가질 수 있습니다. 이를 통해 대규모 클러스터를 여러 유지 관리 창에 걸쳐 단계적으로 업그레이드할 수 있습니다.

  1. mcp 그룹에서 관리되는 노드의 수를 확인할 수 있습니다. 다음 명령을 실행하여 mcp 그룹 목록을 가져옵니다.

    $ oc get mcp
    Copy to Clipboard Toggle word wrap

    출력 예

    NAME     CONFIG                                             UPDATED   UPDATING   DEGRADED   MACHINECOUNT   READYMACHINECOUNT   UPDATEDMACHINECOUNT   DEGRADEDMACHINECOUNT   AGE
    master   rendered-master-c9a52144456dbff9c9af9c5a37d1b614   True      False      False      3              3                   3                     0                      36d
    mcp-1    rendered-mcp-1-07fe50b9ad51fae43ed212e84e1dcc8e    False     False      False      1              0                   0                     0                      47h
    mcp-2    rendered-mcp-2-07fe50b9ad51fae43ed212e84e1dcc8e    False     False      False      1              0                   0                     0                      47h
    worker   rendered-worker-f1ab7b9a768e1b0ac9290a18817f60f0   True      False      False      0              0                   0                     0                      36d
    Copy to Clipboard Toggle word wrap

    참고

    한 번에 얼마나 많은 MCP 그룹을 업그레이드할지 결정합니다. 이는 한 번에 얼마나 많은 CNF 포드를 제거할 수 있는지, 그리고 포드 중단 예산과 안티-어피니티 설정이 어떻게 구성되어 있는지에 따라 달라집니다.

  2. 클러스터의 노드 목록을 가져옵니다.

    $ oc get nodes
    Copy to Clipboard Toggle word wrap

    출력 예

    NAME           STATUS   ROLES                  AGE    VERSION
    ctrl-plane-0   Ready    control-plane,master   5d8h   v1.29.8+f10c92d
    ctrl-plane-1   Ready    control-plane,master   5d8h   v1.29.8+f10c92d
    ctrl-plane-2   Ready    control-plane,master   5d8h   v1.29.8+f10c92d
    worker-0       Ready    mcp-1,worker           5d8h   v1.27.15+6147456
    worker-1       Ready    mcp-2,worker           5d8h   v1.27.15+6147456
    Copy to Clipboard Toggle word wrap

  3. 일시 중지된 MachineConfigPool 그룹을 확인하세요.

    $ oc get mcp -o json | jq -r '["MCP","Paused"], ["---","------"], (.items[] | [(.metadata.name), (.spec.paused)]) | @tsv' | grep -v worker
    Copy to Clipboard Toggle word wrap

    출력 예

    MCP     Paused
    ---     ------
    master  false
    mcp-1   true
    mcp-2   true
    Copy to Clipboard Toggle word wrap

    참고

    MachineConfigPool은 독립적으로 일시 중지를 해제할 수 있습니다. 따라서 유지 관리 기간이 끝나더라도 다른 MCP의 일시 중지를 즉시 해제할 필요는 없습니다. 클러스터는 일부 작업자 노드가 여전히 <y-2>-릴리스 버전인 상태에서 실행되도록 지원됩니다.

  4. 업그레이드를 시작하려면 필요한 mcp 그룹의 일시 중지를 해제하세요.

    $ oc patch mcp/mcp-1 --type merge --patch '{"spec":{"paused":false}}'
    Copy to Clipboard Toggle word wrap

    출력 예

    machineconfigpool.machineconfiguration.openshift.io/mcp-1 patched
    Copy to Clipboard Toggle word wrap

  5. 필수 mcp 그룹이 일시 중지 해제되었는지 확인하세요.

    $ oc get mcp -o json | jq -r '["MCP","Paused"], ["---","------"], (.items[] | [(.metadata.name), (.spec.paused)]) | @tsv' | grep -v worker
    Copy to Clipboard Toggle word wrap

    출력 예

    MCP     Paused
    ---     ------
    master  false
    mcp-1   false
    mcp-2   true
    Copy to Clipboard Toggle word wrap

  6. mcp 그룹이 업그레이드되면 일시 중지를 계속 해제하고 나머지 노드를 업그레이드합니다.

    $ oc get nodes
    Copy to Clipboard Toggle word wrap

    출력 예

    NAME           STATUS                        ROLES                  AGE    VERSION
    ctrl-plane-0   Ready                         control-plane,master   5d8h   v1.29.8+f10c92d
    ctrl-plane-1   Ready                         control-plane,master   5d8h   v1.29.8+f10c92d
    ctrl-plane-2   Ready                         control-plane,master   5d8h   v1.29.8+f10c92d
    worker-0       Ready                         mcp-1,worker           5d8h   v1.29.8+f10c92d
    worker-1       NotReady,SchedulingDisabled   mcp-2,worker           5d8h   v1.27.15+6147456
    Copy to Clipboard Toggle word wrap

17.2.6.9. 새로 업데이트된 클러스터의 상태 확인

클러스터를 업데이트한 후 다음 명령을 실행하여 클러스터가 다시 백업되고 실행 중인지 확인하세요.

프로세스

  1. 다음 명령을 실행하여 클러스터 버전을 확인하세요.

    $ oc get clusterversion
    Copy to Clipboard Toggle word wrap

    출력 예

    NAME      VERSION   AVAILABLE   PROGRESSING   SINCE   STATUS
    version   4.16.14   True        False         4h38m   Cluster version is 4.16.14
    Copy to Clipboard Toggle word wrap

    이렇게 하면 새로운 클러스터 버전이 반환되고 PROGRESSING 열은 False를 반환해야 합니다.

  2. 모든 노드가 준비되었는지 확인하세요.

    $ oc get nodes
    Copy to Clipboard Toggle word wrap

    출력 예

    NAME           STATUS   ROLES                  AGE    VERSION
    ctrl-plane-0   Ready    control-plane,master   5d9h   v1.29.8+f10c92d
    ctrl-plane-1   Ready    control-plane,master   5d9h   v1.29.8+f10c92d
    ctrl-plane-2   Ready    control-plane,master   5d9h   v1.29.8+f10c92d
    worker-0       Ready    mcp-1,worker           5d9h   v1.29.8+f10c92d
    worker-1       Ready    mcp-2,worker           5d9h   v1.29.8+f10c92d
    Copy to Clipboard Toggle word wrap

    클러스터의 모든 노드는 준비 상태여야 하며 동일한 버전을 실행해야 합니다.

  3. 클러스터에 일시 중지된 mcp 리소스가 없는지 확인합니다.

    $ oc get mcp -o json | jq -r '["MCP","Paused"], ["---","------"], (.items[] | [(.metadata.name), (.spec.paused)]) | @tsv' | grep -v worker
    Copy to Clipboard Toggle word wrap

    출력 예

    MCP     Paused
    ---     ------
    master  false
    mcp-1   false
    mcp-2   false
    Copy to Clipboard Toggle word wrap

  4. 모든 클러스터 운영자가 사용 가능한지 확인하세요.

    $ oc get co
    Copy to Clipboard Toggle word wrap

    출력 예

    NAME                                       VERSION   AVAILABLE   PROGRESSING   DEGRADED   SINCE   MESSAGE
    authentication                             4.16.14   True        False         False      5d9h
    baremetal                                  4.16.14   True        False         False      5d9h
    cloud-controller-manager                   4.16.14   True        False         False      5d10h
    cloud-credential                           4.16.14   True        False         False      5d10h
    cluster-autoscaler                         4.16.14   True        False         False      5d9h
    config-operator                            4.16.14   True        False         False      5d9h
    console                                    4.16.14   True        False         False      5d9h
    control-plane-machine-set                  4.16.14   True        False         False      5d9h
    csi-snapshot-controller                    4.16.14   True        False         False      5d9h
    dns                                        4.16.14   True        False         False      5d9h
    etcd                                       4.16.14   True        False         False      5d9h
    image-registry                             4.16.14   True        False         False      85m
    ingress                                    4.16.14   True        False         False      5d9h
    insights                                   4.16.14   True        False         False      5d9h
    kube-apiserver                             4.16.14   True        False         False      5d9h
    kube-controller-manager                    4.16.14   True        False         False      5d9h
    kube-scheduler                             4.16.14   True        False         False      5d9h
    kube-storage-version-migrator              4.16.14   True        False         False      4h48m
    machine-api                                4.16.14   True        False         False      5d9h
    machine-approver                           4.16.14   True        False         False      5d9h
    machine-config                             4.16.14   True        False         False      5d9h
    marketplace                                4.16.14   True        False         False      5d9h
    monitoring                                 4.16.14   True        False         False      5d9h
    network                                    4.16.14   True        False         False      5d9h
    node-tuning                                4.16.14   True        False         False      5d7h
    openshift-apiserver                        4.16.14   True        False         False      5d9h
    openshift-controller-manager               4.16.14   True        False         False      5d9h
    openshift-samples                          4.16.14   True        False         False      5h24m
    operator-lifecycle-manager                 4.16.14   True        False         False      5d9h
    operator-lifecycle-manager-catalog         4.16.14   True        False         False      5d9h
    operator-lifecycle-manager-packageserver   4.16.14   True        False         False      5d9h
    service-ca                                 4.16.14   True        False         False      5d9h
    storage                                    4.16.14   True        False         False      5d9h
    Copy to Clipboard Toggle word wrap

    모든 클러스터 운영자는 AVAILABLE 열에 True를 보고해야 합니다.

  5. 모든 포드가 건강한지 확인하세요.

    $ oc get po -A | grep -E -iv 'complete|running'
    Copy to Clipboard Toggle word wrap

    이렇게 하면 포드가 반환되지 않습니다.

    참고

    업데이트 후에도 몇몇 포드가 계속 움직이는 것을 볼 수 있습니다. 잠시 지켜보면서 모든 포드가 비워졌는지 확인하세요.

17.2.7. y-stream 클러스터 업데이트 완료

다음 단계에 따라 y-stream 클러스터 업데이트를 수행하고 업데이트가 완료될 때까지 모니터링하세요. y-스트림 업데이트를 완료하는 것은 제어 평면 전용 업데이트보다 더 간단합니다.

17.2.7.1. 제어 평면 전용 또는 y-스트림 업데이트 확인

4.11 이상 버전의 모든 버전으로 업데이트하는 경우 업데이트를 계속할 수 있음을 수동으로 확인해야 합니다.

중요

업데이트를 확인하기 전에 업데이트하려는 버전에서 제거된 Kubernetes API를 사용하고 있지 않은지 확인하세요. 예를 들어, OpenShift Container Platform 4.17에서는 API가 제거되지 않았습니다. 자세한 내용은 "Kubernetes API 제거"를 참조하세요.

사전 요구 사항

  • 클러스터에서 실행되는 모든 애플리케이션의 API가 OpenShift Container Platform의 다음 Y-stream 릴리스와 호환되는지 확인했습니다. 호환성에 대한 자세한 내용은 "업데이트 버전 간 클러스터 API 버전 확인"을 참조하세요.

프로세스

  • 다음 명령을 실행하여 클러스터 업데이트를 시작하기 위한 관리 승인을 완료합니다.

    $ oc adm upgrade
    Copy to Clipboard Toggle word wrap

    클러스터 업데이트가 성공적으로 완료되지 않으면 업데이트 실패에 대한 자세한 내용은 이유메시지 섹션에 제공됩니다.

    출력 예

    Cluster version is 4.15.45
    
    Upgradeable=False
    
      Reason: MultipleReasons
      Message: Cluster should not be upgraded between minor versions for multiple reasons: AdminAckRequired,ResourceDeletesInProgress
      * Kubernetes 1.29 and therefore OpenShift 4.16 remove several APIs which require admin consideration. Please see the knowledge article https://access.redhat.com/articles/7031404 for details and instructions.
      * Cluster minor level upgrades are not allowed while resource deletions are in progress; resources=PrometheusRule "openshift-kube-apiserver/kube-apiserver-recording-rules"
    
    ReleaseAccepted=False
    
      Reason: PreconditionChecks
      Message: Preconditions failed for payload loaded version="4.16.34" image="quay.io/openshift-release-dev/ocp-release@sha256:41bb08c560f6db5039ccdf242e590e8b23049b5eb31e1c4f6021d1d520b353b8": Precondition "ClusterVersionUpgradeable" failed because of "MultipleReasons": Cluster should not be upgraded between minor versions for multiple reasons: AdminAckRequired,ResourceDeletesInProgress
      * Kubernetes 1.29 and therefore OpenShift 4.16 remove several APIs which require admin consideration. Please see the knowledge article https://access.redhat.com/articles/7031404 for details and instructions.
      * Cluster minor level upgrades are not allowed while resource deletions are in progress; resources=PrometheusRule "openshift-kube-apiserver/kube-apiserver-recording-rules"
    
    Upstream is unset, so the cluster will use an appropriate default.
    Channel: eus-4.16 (available channels: candidate-4.15, candidate-4.16, eus-4.16, fast-4.15, fast-4.16, stable-4.15, stable-4.16)
    
    Recommended updates:
    
      VERSION     IMAGE
      4.16.34     quay.io/openshift-release-dev/ocp-release@sha256:41bb08c560f6db5039ccdf242e590e8b23049b5eb31e1c4f6021d1d520b353b8
    Copy to Clipboard Toggle word wrap

    참고

    이 예에서 링크된 Red Hat Knowledgebase 문서( OpenShift Container Platform 4.16으로 업그레이드 준비 )에서는 릴리스 간 API 호환성을 확인하는 방법에 대한 자세한 내용을 제공합니다.

검증

  • 다음 명령을 실행하여 업데이트를 확인하세요.

    $ oc get configmap admin-acks -n openshift-config -o json | jq .data
    Copy to Clipboard Toggle word wrap

    출력 예

    {
      "ack-4.14-kube-1.28-api-removals-in-4.15": "true",
      "ack-4.15-kube-1.29-api-removals-in-4.16": "true"
    }
    Copy to Clipboard Toggle word wrap

    참고

    이 예에서 클러스터는 버전 4.14에서 4.15로 업데이트되고, 그런 다음 Control Plane Only 업데이트에서 버전 4.15에서 4.16으로 업데이트됩니다.

17.2.7.2. 클러스터 업데이트 시작

한 y-stream 릴리스에서 다음 릴리스로 업데이트할 때 중간 z-stream 릴리스도 호환되는지 확인해야 합니다.

참고

oc adm upgrade 명령을 실행하여 실행 가능한 릴리스로 업데이트하고 있는지 확인할 수 있습니다. oc adm upgrade 명령은 호환되는 업데이트 릴리스를 나열합니다.

프로세스

  1. 업데이트를 시작합니다:

    $ oc adm upgrade --to=4.15.33
    Copy to Clipboard Toggle word wrap
    중요
    • 제어 평면 전용 업데이트 : 임시 <y+1> 릴리스 경로를 가리키도록 하세요.
    • Y-stream 업데이트 - Kubernetes 버전 스큐 정책을 따르는 올바른 <yz> 릴리스를 사용해야 합니다.
    • Z-stream 업데이트 - 해당 릴리스로 이동하는 데 문제가 없는지 확인하세요.

    출력 예

    Requested update to 4.15.33 
    1
    Copy to Clipboard Toggle word wrap

    1
    요청된 업데이트 값은 특정 업데이트에 따라 변경됩니다.
17.2.7.3. 클러스터 업데이트 모니터링

업데이트하는 동안 클러스터 상태를 자주 확인해야 합니다. 노드 상태, 클러스터 운영자 상태 및 실패한 Pod를 확인합니다.

프로세스

  • 클러스터 업데이트를 모니터링합니다. 예를 들어, 버전 4.14에서 4.15로의 클러스터 업데이트를 모니터링하려면 다음 명령을 실행합니다.

    $ watch "oc get clusterversion; echo; oc get co | head -1; oc get co | grep 4.14; oc get co | grep 4.15; echo; oc get no; echo; oc get po -A | grep -E -iv 'running|complete'"
    Copy to Clipboard Toggle word wrap

    출력 예

    NAME      VERSION   AVAILABLE   PROGRESSING   SINCE   STATUS
    version   4.14.34   True        True          4m6s    Working towards 4.15.33: 111 of 873 done (12% complete), waiting on kube-apiserver
    
    NAME                           VERSION   AVAILABLE   PROGRESSING   DEGRADED   SINCE   MESSAGE
    authentication                 4.14.34   True        False         False      4d22h
    baremetal                      4.14.34   True        False         False      4d23h
    cloud-controller-manager       4.14.34   True        False         False      4d23h
    cloud-credential               4.14.34   True        False         False      4d23h
    cluster-autoscaler             4.14.34   True        False         False      4d23h
    console                        4.14.34   True        False         False      4d22h
    
    ...
    
    storage                        4.14.34   True        False         False      4d23h
    config-operator                4.15.33   True        False         False      4d23h
    etcd                           4.15.33   True        False         False      4d23h
    
    NAME           STATUS   ROLES                  AGE     VERSION
    ctrl-plane-0   Ready    control-plane,master   4d23h   v1.27.15+6147456
    ctrl-plane-1   Ready    control-plane,master   4d23h   v1.27.15+6147456
    ctrl-plane-2   Ready    control-plane,master   4d23h   v1.27.15+6147456
    worker-0       Ready    mcp-1,worker           4d23h   v1.27.15+6147456
    worker-1       Ready    mcp-2,worker           4d23h   v1.27.15+6147456
    
    NAMESPACE               NAME                       READY   STATUS              RESTARTS   AGE
    openshift-marketplace   redhat-marketplace-rf86t   0/1     ContainerCreating   0          0s
    Copy to Clipboard Toggle word wrap

검증

업데이트 중에 watch 명령은 한 번에 하나 이상의 클러스터 운영자를 순환하며 MESSAGE 열에 운영자 업데이트 상태를 제공합니다.

클러스터 운영자 업데이트 프로세스가 완료되면 각 제어 평면 노드가 한 번에 하나씩 재부팅됩니다.

참고

이 업데이트 부분에서는 상태 클러스터 운영자가 다시 업데이트 중이거나 성능이 저하되었다는 메시지가 보고됩니다. 이는 노드를 재부팅하는 동안 제어 평면 노드가 오프라인 상태이기 때문입니다.

마지막 제어 평면 노드 재부팅이 완료되면 클러스터 버전이 업데이트된 것으로 표시됩니다.

제어 평면 업데이트가 완료되면 다음과 같은 메시지가 표시됩니다. 이 예에서는 중간 y-스트림 릴리스에 완료된 업데이트를 보여줍니다.

NAME      VERSION   AVAILABLE   PROGRESSING   SINCE   STATUS
version   4.15.33   True        False         28m     Cluster version is 4.15.33

NAME                         VERSION   AVAILABLE   PROGRESSING   DEGRADED   SINCE   MESSAGE
authentication               4.15.33   True        False         False	  5d
baremetal                    4.15.33   True        False         False	  5d
cloud-controller-manager     4.15.33   True        False         False	  5d1h
cloud-credential             4.15.33   True        False         False	  5d1h
cluster-autoscaler           4.15.33   True        False         False	  5d
config-operator              4.15.33   True        False         False	  5d
console                      4.15.33   True        False         False	  5d

...

service-ca                   4.15.33   True        False         False	  5d
storage                      4.15.33   True        False         False	  5d

NAME           STATUS   ROLES                  AGE   VERSION
ctrl-plane-0   Ready    control-plane,master   5d    v1.28.13+2ca1a23
ctrl-plane-1   Ready    control-plane,master   5d    v1.28.13+2ca1a23
ctrl-plane-2   Ready    control-plane,master   5d    v1.28.13+2ca1a23
worker-0       Ready    mcp-1,worker           5d    v1.28.13+2ca1a23
worker-1       Ready    mcp-2,worker           5d    v1.28.13+2ca1a23
Copy to Clipboard Toggle word wrap
17.2.7.4. OLM 운영자 업데이트

통신 환경에서는 소프트웨어를 프로덕션 클러스터에 로드하기 전에 검증해야 합니다. 프로덕션 클러스터도 연결이 끊긴 네트워크에 구성되므로 항상 인터넷에 직접 연결되어 있지는 않습니다. 클러스터가 연결되지 않은 네트워크에 있기 때문에 OpenShift Operator는 설치 중에 수동 업데이트가 가능하도록 구성되어 새 버전을 클러스터별로 관리할 수 있습니다. 다음 절차에 따라 Operator를 최신 버전으로 옮기세요.

프로세스

  1. 어떤 운영자를 업데이트해야 하는지 확인하세요.

    $ oc get installplan -A | grep -E 'APPROVED|false'
    Copy to Clipboard Toggle word wrap

    출력 예

    NAMESPACE           NAME            CSV                                               APPROVAL   APPROVED
    metallb-system      install-nwjnh   metallb-operator.v4.16.0-202409202304             Manual     false
    openshift-nmstate   install-5r7wr   kubernetes-nmstate-operator.4.16.0-202409251605   Manual     false
    Copy to Clipboard Toggle word wrap

  2. 다음 운영자에 대한 InstallPlan 리소스를 패치합니다.

    $ oc patch installplan -n metallb-system install-nwjnh --type merge --patch \
    '{"spec":{"approved":true}}'
    Copy to Clipboard Toggle word wrap

    출력 예

    installplan.operators.coreos.com/install-nwjnh patched
    Copy to Clipboard Toggle word wrap

  3. 다음 명령을 실행하여 네임스페이스를 모니터링합니다.

    $ oc get all -n metallb-system
    Copy to Clipboard Toggle word wrap

    출력 예

    NAME                                                       READY   STATUS              RESTARTS   AGE
    pod/metallb-operator-controller-manager-69b5f884c-8bp22    0/1     ContainerCreating   0          4s
    pod/metallb-operator-controller-manager-77895bdb46-bqjdx   1/1     Running             0          4m1s
    pod/metallb-operator-webhook-server-5d9b968896-vnbhk       0/1     ContainerCreating   0          4s
    pod/metallb-operator-webhook-server-d76f9c6c8-57r4w        1/1     Running             0          4m1s
    
    ...
    
    NAME                                                             DESIRED   CURRENT   READY   AGE
    replicaset.apps/metallb-operator-controller-manager-69b5f884c    1         1         0       4s
    replicaset.apps/metallb-operator-controller-manager-77895bdb46   1         1         1       4m1s
    replicaset.apps/metallb-operator-controller-manager-99b76f88     0         0         0       4m40s
    replicaset.apps/metallb-operator-webhook-server-5d9b968896       1         1         0       4s
    replicaset.apps/metallb-operator-webhook-server-6f7dbfdb88       0         0         0       4m40s
    replicaset.apps/metallb-operator-webhook-server-d76f9c6c8        1         1         1       4m1s
    Copy to Clipboard Toggle word wrap

    업데이트가 완료되면 필요한 포드가 실행 상태가 되고 필요한 ReplicaSet 리소스가 준비되어야 합니다.

    NAME                                                      READY   STATUS    RESTARTS   AGE
    pod/metallb-operator-controller-manager-69b5f884c-8bp22   1/1     Running   0          25s
    pod/metallb-operator-webhook-server-5d9b968896-vnbhk      1/1     Running   0          25s
    
    ...
    
    NAME                                                             DESIRED   CURRENT   READY   AGE
    replicaset.apps/metallb-operator-controller-manager-69b5f884c    1         1         1       25s
    replicaset.apps/metallb-operator-controller-manager-77895bdb46   0         0         0       4m22s
    replicaset.apps/metallb-operator-webhook-server-5d9b968896       1         1         1       25s
    replicaset.apps/metallb-operator-webhook-server-d76f9c6c8        0         0         0       4m22s
    Copy to Clipboard Toggle word wrap

검증

  • 운영자를 두 번째로 업데이트할 필요가 없는지 확인하세요.

    $ oc get installplan -A | grep -E 'APPROVED|false'
    Copy to Clipboard Toggle word wrap

    반환된 출력이 없어야 합니다.

    참고

    일부 운영자가 최종 버전에 앞서 설치해야 하는 임시 z-stream 릴리스 버전을 보유하고 있기 때문에 업데이트를 두 번 승인해야 하는 경우가 있습니다.

17.2.7.5. 작업자 노드 업데이트

관련 MCP 그룹의 일시 중지를 해제하여 제어 평면을 업데이트한 후 작업자 노드를 업그레이드합니다. mcp 그룹의 일시 중지를 해제하면 해당 그룹의 작업자 노드에 대한 업그레이드 프로세스가 시작됩니다. 클러스터의 각 워커 노드는 필요에 따라 새로운 EUS, y-stream 또는 z-stream 버전으로 업그레이드하기 위해 재부팅됩니다.

Control Plane Only 업그레이드의 경우, 워커 노드가 업데이트되면 한 번만 재부팅하고 <y+2>-릴리스 버전으로 넘어갑니다. 이 기능은 대규모 베어 메탈 클러스터를 업그레이드하는 데 걸리는 시간을 줄이기 위해 추가되었습니다.

중요

이곳은 잠재적인 보류 지점입니다. 작업자 노드가 <y-2>-릴리스 버전인 동안 제어 평면이 새로운 EUS 릴리스로 업데이트되어 프로덕션에서 실행되도록 완벽하게 지원되는 클러스터 버전을 가질 수 있습니다. 이를 통해 대규모 클러스터를 여러 유지 관리 창에 걸쳐 단계적으로 업그레이드할 수 있습니다.

  1. mcp 그룹에서 관리되는 노드의 수를 확인할 수 있습니다. 다음 명령을 실행하여 mcp 그룹 목록을 가져옵니다.

    $ oc get mcp
    Copy to Clipboard Toggle word wrap

    출력 예

    NAME     CONFIG                                             UPDATED   UPDATING   DEGRADED   MACHINECOUNT   READYMACHINECOUNT   UPDATEDMACHINECOUNT   DEGRADEDMACHINECOUNT   AGE
    master   rendered-master-c9a52144456dbff9c9af9c5a37d1b614   True      False      False      3              3                   3                     0                      36d
    mcp-1    rendered-mcp-1-07fe50b9ad51fae43ed212e84e1dcc8e    False     False      False      1              0                   0                     0                      47h
    mcp-2    rendered-mcp-2-07fe50b9ad51fae43ed212e84e1dcc8e    False     False      False      1              0                   0                     0                      47h
    worker   rendered-worker-f1ab7b9a768e1b0ac9290a18817f60f0   True      False      False      0              0                   0                     0                      36d
    Copy to Clipboard Toggle word wrap

    참고

    한 번에 얼마나 많은 MCP 그룹을 업그레이드할지 결정합니다. 이는 한 번에 얼마나 많은 CNF 포드를 제거할 수 있는지, 그리고 포드 중단 예산과 안티-어피니티 설정이 어떻게 구성되어 있는지에 따라 달라집니다.

  2. 클러스터의 노드 목록을 가져옵니다.

    $ oc get nodes
    Copy to Clipboard Toggle word wrap

    출력 예

    NAME           STATUS   ROLES                  AGE    VERSION
    ctrl-plane-0   Ready    control-plane,master   5d8h   v1.29.8+f10c92d
    ctrl-plane-1   Ready    control-plane,master   5d8h   v1.29.8+f10c92d
    ctrl-plane-2   Ready    control-plane,master   5d8h   v1.29.8+f10c92d
    worker-0       Ready    mcp-1,worker           5d8h   v1.27.15+6147456
    worker-1       Ready    mcp-2,worker           5d8h   v1.27.15+6147456
    Copy to Clipboard Toggle word wrap

  3. 일시 중지된 MachineConfigPool 그룹을 확인하세요.

    $ oc get mcp -o json | jq -r '["MCP","Paused"], ["---","------"], (.items[] | [(.metadata.name), (.spec.paused)]) | @tsv' | grep -v worker
    Copy to Clipboard Toggle word wrap

    출력 예

    MCP     Paused
    ---     ------
    master  false
    mcp-1   true
    mcp-2   true
    Copy to Clipboard Toggle word wrap

    참고

    MachineConfigPool은 독립적으로 일시 중지를 해제할 수 있습니다. 따라서 유지 관리 기간이 끝나더라도 다른 MCP의 일시 중지를 즉시 해제할 필요는 없습니다. 클러스터는 일부 작업자 노드가 여전히 <y-2>-릴리스 버전인 상태에서 실행되도록 지원됩니다.

  4. 업그레이드를 시작하려면 필요한 mcp 그룹의 일시 중지를 해제하세요.

    $ oc patch mcp/mcp-1 --type merge --patch '{"spec":{"paused":false}}'
    Copy to Clipboard Toggle word wrap

    출력 예

    machineconfigpool.machineconfiguration.openshift.io/mcp-1 patched
    Copy to Clipboard Toggle word wrap

  5. 필수 mcp 그룹이 일시 중지 해제되었는지 확인하세요.

    $ oc get mcp -o json | jq -r '["MCP","Paused"], ["---","------"], (.items[] | [(.metadata.name), (.spec.paused)]) | @tsv' | grep -v worker
    Copy to Clipboard Toggle word wrap

    출력 예

    MCP     Paused
    ---     ------
    master  false
    mcp-1   false
    mcp-2   true
    Copy to Clipboard Toggle word wrap

  6. mcp 그룹이 업그레이드되면 일시 중지를 계속 해제하고 나머지 노드를 업그레이드합니다.

    $ oc get nodes
    Copy to Clipboard Toggle word wrap

    출력 예

    NAME           STATUS                        ROLES                  AGE    VERSION
    ctrl-plane-0   Ready                         control-plane,master   5d8h   v1.29.8+f10c92d
    ctrl-plane-1   Ready                         control-plane,master   5d8h   v1.29.8+f10c92d
    ctrl-plane-2   Ready                         control-plane,master   5d8h   v1.29.8+f10c92d
    worker-0       Ready                         mcp-1,worker           5d8h   v1.29.8+f10c92d
    worker-1       NotReady,SchedulingDisabled   mcp-2,worker           5d8h   v1.27.15+6147456
    Copy to Clipboard Toggle word wrap

17.2.7.6. 새로 업데이트된 클러스터의 상태 확인

클러스터를 업데이트한 후 다음 명령을 실행하여 클러스터가 다시 백업되고 실행 중인지 확인하세요.

프로세스

  1. 다음 명령을 실행하여 클러스터 버전을 확인하세요.

    $ oc get clusterversion
    Copy to Clipboard Toggle word wrap

    출력 예

    NAME      VERSION   AVAILABLE   PROGRESSING   SINCE   STATUS
    version   4.16.14   True        False         4h38m   Cluster version is 4.16.14
    Copy to Clipboard Toggle word wrap

    이렇게 하면 새로운 클러스터 버전이 반환되고 PROGRESSING 열은 False를 반환해야 합니다.

  2. 모든 노드가 준비되었는지 확인하세요.

    $ oc get nodes
    Copy to Clipboard Toggle word wrap

    출력 예

    NAME           STATUS   ROLES                  AGE    VERSION
    ctrl-plane-0   Ready    control-plane,master   5d9h   v1.29.8+f10c92d
    ctrl-plane-1   Ready    control-plane,master   5d9h   v1.29.8+f10c92d
    ctrl-plane-2   Ready    control-plane,master   5d9h   v1.29.8+f10c92d
    worker-0       Ready    mcp-1,worker           5d9h   v1.29.8+f10c92d
    worker-1       Ready    mcp-2,worker           5d9h   v1.29.8+f10c92d
    Copy to Clipboard Toggle word wrap

    클러스터의 모든 노드는 준비 상태여야 하며 동일한 버전을 실행해야 합니다.

  3. 클러스터에 일시 중지된 mcp 리소스가 없는지 확인합니다.

    $ oc get mcp -o json | jq -r '["MCP","Paused"], ["---","------"], (.items[] | [(.metadata.name), (.spec.paused)]) | @tsv' | grep -v worker
    Copy to Clipboard Toggle word wrap

    출력 예

    MCP     Paused
    ---     ------
    master  false
    mcp-1   false
    mcp-2   false
    Copy to Clipboard Toggle word wrap

  4. 모든 클러스터 운영자가 사용 가능한지 확인하세요.

    $ oc get co
    Copy to Clipboard Toggle word wrap

    출력 예

    NAME                                       VERSION   AVAILABLE   PROGRESSING   DEGRADED   SINCE   MESSAGE
    authentication                             4.16.14   True        False         False      5d9h
    baremetal                                  4.16.14   True        False         False      5d9h
    cloud-controller-manager                   4.16.14   True        False         False      5d10h
    cloud-credential                           4.16.14   True        False         False      5d10h
    cluster-autoscaler                         4.16.14   True        False         False      5d9h
    config-operator                            4.16.14   True        False         False      5d9h
    console                                    4.16.14   True        False         False      5d9h
    control-plane-machine-set                  4.16.14   True        False         False      5d9h
    csi-snapshot-controller                    4.16.14   True        False         False      5d9h
    dns                                        4.16.14   True        False         False      5d9h
    etcd                                       4.16.14   True        False         False      5d9h
    image-registry                             4.16.14   True        False         False      85m
    ingress                                    4.16.14   True        False         False      5d9h
    insights                                   4.16.14   True        False         False      5d9h
    kube-apiserver                             4.16.14   True        False         False      5d9h
    kube-controller-manager                    4.16.14   True        False         False      5d9h
    kube-scheduler                             4.16.14   True        False         False      5d9h
    kube-storage-version-migrator              4.16.14   True        False         False      4h48m
    machine-api                                4.16.14   True        False         False      5d9h
    machine-approver                           4.16.14   True        False         False      5d9h
    machine-config                             4.16.14   True        False         False      5d9h
    marketplace                                4.16.14   True        False         False      5d9h
    monitoring                                 4.16.14   True        False         False      5d9h
    network                                    4.16.14   True        False         False      5d9h
    node-tuning                                4.16.14   True        False         False      5d7h
    openshift-apiserver                        4.16.14   True        False         False      5d9h
    openshift-controller-manager               4.16.14   True        False         False      5d9h
    openshift-samples                          4.16.14   True        False         False      5h24m
    operator-lifecycle-manager                 4.16.14   True        False         False      5d9h
    operator-lifecycle-manager-catalog         4.16.14   True        False         False      5d9h
    operator-lifecycle-manager-packageserver   4.16.14   True        False         False      5d9h
    service-ca                                 4.16.14   True        False         False      5d9h
    storage                                    4.16.14   True        False         False      5d9h
    Copy to Clipboard Toggle word wrap

    모든 클러스터 운영자는 AVAILABLE 열에 True를 보고해야 합니다.

  5. 모든 포드가 건강한지 확인하세요.

    $ oc get po -A | grep -E -iv 'complete|running'
    Copy to Clipboard Toggle word wrap

    이렇게 하면 포드가 반환되지 않습니다.

    참고

    업데이트 후에도 몇몇 포드가 계속 움직이는 것을 볼 수 있습니다. 잠시 지켜보면서 모든 포드가 비워졌는지 확인하세요.

17.2.8. z-stream 클러스터 업데이트 완료

다음 단계에 따라 z-stream 클러스터 업데이트를 수행하고 업데이트가 완료될 때까지 모니터링하세요. z-스트림 업데이트를 완료하는 것은 제어 평면 전용 업데이트나 y-스트림 업데이트를 완료하는 것보다 더 간단합니다.

17.2.8.1. 클러스터 업데이트 시작

한 y-stream 릴리스에서 다음 릴리스로 업데이트할 때 중간 z-stream 릴리스도 호환되는지 확인해야 합니다.

참고

oc adm upgrade 명령을 실행하여 실행 가능한 릴리스로 업데이트하고 있는지 확인할 수 있습니다. oc adm upgrade 명령은 호환되는 업데이트 릴리스를 나열합니다.

프로세스

  1. 업데이트를 시작합니다:

    $ oc adm upgrade --to=4.15.33
    Copy to Clipboard Toggle word wrap
    중요
    • 제어 평면 전용 업데이트 : 임시 <y+1> 릴리스 경로를 가리키도록 하세요.
    • Y-stream 업데이트 - Kubernetes 버전 스큐 정책을 따르는 올바른 <yz> 릴리스를 사용해야 합니다.
    • Z-stream 업데이트 - 해당 릴리스로 이동하는 데 문제가 없는지 확인하세요.

    출력 예

    Requested update to 4.15.33 
    1
    Copy to Clipboard Toggle word wrap

    1
    요청된 업데이트 값은 특정 업데이트에 따라 변경됩니다.
17.2.8.2. 작업자 노드 업데이트

관련 MCP 그룹의 일시 중지를 해제하여 제어 평면을 업데이트한 후 작업자 노드를 업그레이드합니다. mcp 그룹의 일시 중지를 해제하면 해당 그룹의 작업자 노드에 대한 업그레이드 프로세스가 시작됩니다. 클러스터의 각 워커 노드는 필요에 따라 새로운 EUS, y-stream 또는 z-stream 버전으로 업그레이드하기 위해 재부팅됩니다.

Control Plane Only 업그레이드의 경우, 워커 노드가 업데이트되면 한 번만 재부팅하고 <y+2>-릴리스 버전으로 넘어갑니다. 이 기능은 대규모 베어 메탈 클러스터를 업그레이드하는 데 걸리는 시간을 줄이기 위해 추가되었습니다.

중요

이곳은 잠재적인 보류 지점입니다. 작업자 노드가 <y-2>-릴리스 버전인 동안 제어 평면이 새로운 EUS 릴리스로 업데이트되어 프로덕션에서 실행되도록 완벽하게 지원되는 클러스터 버전을 가질 수 있습니다. 이를 통해 대규모 클러스터를 여러 유지 관리 창에 걸쳐 단계적으로 업그레이드할 수 있습니다.

  1. mcp 그룹에서 관리되는 노드의 수를 확인할 수 있습니다. 다음 명령을 실행하여 mcp 그룹 목록을 가져옵니다.

    $ oc get mcp
    Copy to Clipboard Toggle word wrap

    출력 예

    NAME     CONFIG                                             UPDATED   UPDATING   DEGRADED   MACHINECOUNT   READYMACHINECOUNT   UPDATEDMACHINECOUNT   DEGRADEDMACHINECOUNT   AGE
    master   rendered-master-c9a52144456dbff9c9af9c5a37d1b614   True      False      False      3              3                   3                     0                      36d
    mcp-1    rendered-mcp-1-07fe50b9ad51fae43ed212e84e1dcc8e    False     False      False      1              0                   0                     0                      47h
    mcp-2    rendered-mcp-2-07fe50b9ad51fae43ed212e84e1dcc8e    False     False      False      1              0                   0                     0                      47h
    worker   rendered-worker-f1ab7b9a768e1b0ac9290a18817f60f0   True      False      False      0              0                   0                     0                      36d
    Copy to Clipboard Toggle word wrap

    참고

    한 번에 얼마나 많은 MCP 그룹을 업그레이드할지 결정합니다. 이는 한 번에 얼마나 많은 CNF 포드를 제거할 수 있는지, 그리고 포드 중단 예산과 안티-어피니티 설정이 어떻게 구성되어 있는지에 따라 달라집니다.

  2. 클러스터의 노드 목록을 가져옵니다.

    $ oc get nodes
    Copy to Clipboard Toggle word wrap

    출력 예

    NAME           STATUS   ROLES                  AGE    VERSION
    ctrl-plane-0   Ready    control-plane,master   5d8h   v1.29.8+f10c92d
    ctrl-plane-1   Ready    control-plane,master   5d8h   v1.29.8+f10c92d
    ctrl-plane-2   Ready    control-plane,master   5d8h   v1.29.8+f10c92d
    worker-0       Ready    mcp-1,worker           5d8h   v1.27.15+6147456
    worker-1       Ready    mcp-2,worker           5d8h   v1.27.15+6147456
    Copy to Clipboard Toggle word wrap

  3. 일시 중지된 MachineConfigPool 그룹을 확인하세요.

    $ oc get mcp -o json | jq -r '["MCP","Paused"], ["---","------"], (.items[] | [(.metadata.name), (.spec.paused)]) | @tsv' | grep -v worker
    Copy to Clipboard Toggle word wrap

    출력 예

    MCP     Paused
    ---     ------
    master  false
    mcp-1   true
    mcp-2   true
    Copy to Clipboard Toggle word wrap

    참고

    MachineConfigPool은 독립적으로 일시 중지를 해제할 수 있습니다. 따라서 유지 관리 기간이 끝나더라도 다른 MCP의 일시 중지를 즉시 해제할 필요는 없습니다. 클러스터는 일부 작업자 노드가 여전히 <y-2>-릴리스 버전인 상태에서 실행되도록 지원됩니다.

  4. 업그레이드를 시작하려면 필요한 mcp 그룹의 일시 중지를 해제하세요.

    $ oc patch mcp/mcp-1 --type merge --patch '{"spec":{"paused":false}}'
    Copy to Clipboard Toggle word wrap

    출력 예

    machineconfigpool.machineconfiguration.openshift.io/mcp-1 patched
    Copy to Clipboard Toggle word wrap

  5. 필수 mcp 그룹이 일시 중지 해제되었는지 확인하세요.

    $ oc get mcp -o json | jq -r '["MCP","Paused"], ["---","------"], (.items[] | [(.metadata.name), (.spec.paused)]) | @tsv' | grep -v worker
    Copy to Clipboard Toggle word wrap

    출력 예

    MCP     Paused
    ---     ------
    master  false
    mcp-1   false
    mcp-2   true
    Copy to Clipboard Toggle word wrap

  6. mcp 그룹이 업그레이드되면 일시 중지를 계속 해제하고 나머지 노드를 업그레이드합니다.

    $ oc get nodes
    Copy to Clipboard Toggle word wrap

    출력 예

    NAME           STATUS                        ROLES                  AGE    VERSION
    ctrl-plane-0   Ready                         control-plane,master   5d8h   v1.29.8+f10c92d
    ctrl-plane-1   Ready                         control-plane,master   5d8h   v1.29.8+f10c92d
    ctrl-plane-2   Ready                         control-plane,master   5d8h   v1.29.8+f10c92d
    worker-0       Ready                         mcp-1,worker           5d8h   v1.29.8+f10c92d
    worker-1       NotReady,SchedulingDisabled   mcp-2,worker           5d8h   v1.27.15+6147456
    Copy to Clipboard Toggle word wrap

17.2.8.3. 새로 업데이트된 클러스터의 상태 확인

클러스터를 업데이트한 후 다음 명령을 실행하여 클러스터가 다시 백업되고 실행 중인지 확인하세요.

프로세스

  1. 다음 명령을 실행하여 클러스터 버전을 확인하세요.

    $ oc get clusterversion
    Copy to Clipboard Toggle word wrap

    출력 예

    NAME      VERSION   AVAILABLE   PROGRESSING   SINCE   STATUS
    version   4.16.14   True        False         4h38m   Cluster version is 4.16.14
    Copy to Clipboard Toggle word wrap

    이렇게 하면 새로운 클러스터 버전이 반환되고 PROGRESSING 열은 False를 반환해야 합니다.

  2. 모든 노드가 준비되었는지 확인하세요.

    $ oc get nodes
    Copy to Clipboard Toggle word wrap

    출력 예

    NAME           STATUS   ROLES                  AGE    VERSION
    ctrl-plane-0   Ready    control-plane,master   5d9h   v1.29.8+f10c92d
    ctrl-plane-1   Ready    control-plane,master   5d9h   v1.29.8+f10c92d
    ctrl-plane-2   Ready    control-plane,master   5d9h   v1.29.8+f10c92d
    worker-0       Ready    mcp-1,worker           5d9h   v1.29.8+f10c92d
    worker-1       Ready    mcp-2,worker           5d9h   v1.29.8+f10c92d
    Copy to Clipboard Toggle word wrap

    클러스터의 모든 노드는 준비 상태여야 하며 동일한 버전을 실행해야 합니다.

  3. 클러스터에 일시 중지된 mcp 리소스가 없는지 확인합니다.

    $ oc get mcp -o json | jq -r '["MCP","Paused"], ["---","------"], (.items[] | [(.metadata.name), (.spec.paused)]) | @tsv' | grep -v worker
    Copy to Clipboard Toggle word wrap

    출력 예

    MCP     Paused
    ---     ------
    master  false
    mcp-1   false
    mcp-2   false
    Copy to Clipboard Toggle word wrap

  4. 모든 클러스터 운영자가 사용 가능한지 확인하세요.

    $ oc get co
    Copy to Clipboard Toggle word wrap

    출력 예

    NAME                                       VERSION   AVAILABLE   PROGRESSING   DEGRADED   SINCE   MESSAGE
    authentication                             4.16.14   True        False         False      5d9h
    baremetal                                  4.16.14   True        False         False      5d9h
    cloud-controller-manager                   4.16.14   True        False         False      5d10h
    cloud-credential                           4.16.14   True        False         False      5d10h
    cluster-autoscaler                         4.16.14   True        False         False      5d9h
    config-operator                            4.16.14   True        False         False      5d9h
    console                                    4.16.14   True        False         False      5d9h
    control-plane-machine-set                  4.16.14   True        False         False      5d9h
    csi-snapshot-controller                    4.16.14   True        False         False      5d9h
    dns                                        4.16.14   True        False         False      5d9h
    etcd                                       4.16.14   True        False         False      5d9h
    image-registry                             4.16.14   True        False         False      85m
    ingress                                    4.16.14   True        False         False      5d9h
    insights                                   4.16.14   True        False         False      5d9h
    kube-apiserver                             4.16.14   True        False         False      5d9h
    kube-controller-manager                    4.16.14   True        False         False      5d9h
    kube-scheduler                             4.16.14   True        False         False      5d9h
    kube-storage-version-migrator              4.16.14   True        False         False      4h48m
    machine-api                                4.16.14   True        False         False      5d9h
    machine-approver                           4.16.14   True        False         False      5d9h
    machine-config                             4.16.14   True        False         False      5d9h
    marketplace                                4.16.14   True        False         False      5d9h
    monitoring                                 4.16.14   True        False         False      5d9h
    network                                    4.16.14   True        False         False      5d9h
    node-tuning                                4.16.14   True        False         False      5d7h
    openshift-apiserver                        4.16.14   True        False         False      5d9h
    openshift-controller-manager               4.16.14   True        False         False      5d9h
    openshift-samples                          4.16.14   True        False         False      5h24m
    operator-lifecycle-manager                 4.16.14   True        False         False      5d9h
    operator-lifecycle-manager-catalog         4.16.14   True        False         False      5d9h
    operator-lifecycle-manager-packageserver   4.16.14   True        False         False      5d9h
    service-ca                                 4.16.14   True        False         False      5d9h
    storage                                    4.16.14   True        False         False      5d9h
    Copy to Clipboard Toggle word wrap

    모든 클러스터 운영자는 AVAILABLE 열에 True를 보고해야 합니다.

  5. 모든 포드가 건강한지 확인하세요.

    $ oc get po -A | grep -E -iv 'complete|running'
    Copy to Clipboard Toggle word wrap

    이렇게 하면 포드가 반환되지 않습니다.

    참고

    업데이트 후에도 몇몇 포드가 계속 움직이는 것을 볼 수 있습니다. 잠시 지켜보면서 모든 포드가 비워졌는지 확인하세요.

17.3. 통신사 핵심 CNF 클러스터 문제 해결 및 유지 관리

17.3.1. 통신사 핵심 CNF 클러스터 문제 해결 및 유지 관리

문제 해결 및 유지 관리는 목표를 달성하는 데 필요한 도구가 없다면 어려울 수 있는 주간 작업입니다. 구성 요소를 업데이트하거나 문제를 조사하려는 경우에도 마찬가지입니다. 과제 중 하나는 도구와 답변을 어디서 어떻게 검색해야 할지 아는 것입니다.

고대역폭 네트워크 처리량이 필요한 베어 메탈 환경을 유지 관리하고 문제를 해결하려면 다음 절차를 참조하세요.

중요

이 문제 해결 정보는 OpenShift Container Platform 구성이나 클라우드 기반 네트워크 기능(CNF) 애플리케이션 개발을 위한 참고 자료가 아닙니다.

통신 회사를 위한 CNF 애플리케이션 개발에 대한 자세한 내용은 Kubernetes를 위한 Red Hat 모범 사례를 참조하세요.

17.3.1.1. 클라우드 기반 네트워크 기능

통신 클라우드 기반 네트워크 기능(CNF) 애플리케이션에 OpenShift Container Platform을 사용하기 시작하는 경우 CNF에 대해 알아보면 발생할 수 있는 문제를 이해하는 데 도움이 될 수 있습니다.

CNF와 그 발전에 대해 자세히 알아보려면 VNF와 CNF, 차이점은 무엇인가요?를 참조하세요.

17.3.1.2. 지원 요청

절차에 어려움이 있는 경우 Red Hat 고객 포털을 방문하세요. 고객 포털에서는 다양한 방법으로 도움을 받을 수 있습니다.

  • Red Hat 제품에 대한 문서와 솔루션이 있는 Red Hat Knowledgebase를 검색하거나 탐색해 보세요.
  • Red Hat 지원팀에 지원 사례를 제출하세요.
  • 다른 제품 설명서에 액세스 가능합니다.

배포와 관련된 문제를 식별하려면 디버깅 도구를 사용하거나 배포의 상태 엔드포인트를 확인할 수 있습니다. 배포에 대한 디버깅을 완료하거나 상태 정보를 얻은 후에는 Red Hat Knowledgebase에서 솔루션을 검색하거나 지원 티켓을 제출할 수 있습니다.

17.3.1.2.1. Red Hat 지식베이스 정보

Red Hat 지식베이스는 Red Hat의 제품과 기술을 최대한 활용할 수 있도록 풍부한 콘텐츠를 제공합니다. Red Hat 지식베이스는 Red Hat 제품 설치, 설정 및 사용에 대한 기사, 제품 문서 및 동영상으로 구성되어 있습니다. 또한 알려진 문제에 대한 솔루션을 검색할 수 있으며, 간결한 근본 원인 설명 및 해결 단계를 제공합니다.

17.3.1.2.2. Red Hat 지식베이스 검색

OpenShift Container Platform 문제가 발생한 경우 초기 검색을 수행하여 솔루션이 이미 Red Hat Knowledgebase 내에 존재하는지 확인할 수 있습니다.

사전 요구 사항

  • Red Hat 고객 포털 계정이 있어야 합니다.

프로세스

  1. Red Hat 고객 포털에 로그인합니다.
  2. Search를 클릭합니다
  3. 검색 필드에 문제와 관련된 키워드와 문자열을 입력합니다.

    • OpenShift Container Platform 구성 요소 (etcd 등)
    • 관련 절차 (예: installation 등)
    • 명시적 실패와 관련된 경고, 오류 메시지 및 기타 출력
  4. Enter 키를 클릭하세요.
  5. 선택 사항: OpenShift Container Platform 제품 필터를 선택합니다.
  6. 선택 사항: 문서 콘텐츠 유형 필터를 선택합니다.
17.3.1.2.3. 지원 케이스 제출

사전 요구 사항

  • cluster-admin 역할의 사용자로 클러스터에 액세스할 수 있어야 합니다.
  • OpenShift CLI(oc)가 설치되어 있습니다.
  • Red Hat 고객 포털 계정이 있어야 합니다.
  • Red Hat Standard 또는 Premium 구독이 있습니다.

프로세스

  1. Red Hat 고객 포털의 고객 지원 페이지 에 로그인하세요.
  2. 지원 받기를 클릭하세요.
  3. 고객 지원 페이지의 사례 탭에서:

    1. 선택 사항: 필요한 경우 미리 작성된 계정 및 소유자 세부 정보를 변경합니다.
    2. 버그나 결함 등 문제에 적합한 범주를 선택하고 계속을 클릭합니다.
  4. 다음 정보를 입력하세요:

    1. 요약 필드에 간결하면서도 설명적인 문제 요약과 발생한 증상에 대한 자세한 내용, 그리고 기대 사항을 입력하세요.
    2. 제품 드롭다운 메뉴에서 OpenShift Container Platform을 선택합니다.
    3. 버전 드롭다운에서 4.19를 선택합니다.
  5. 보고되는 문제와 관련이 있을 수 있는 권장 Red Hat 지식베이스 솔루션 목록을 확인합니다. 제안된 문서로 문제가 해결되지 않으면 Continue을 클릭합니다.
  6. 보고되는 문제와 관련있는 제안된 Red Hat 지식베이스 솔루션 목록을 확인하십시오. 케이스 작성 과정에서 더 많은 정보를 제공하면 목록이 구체화됩니다. 제안된 문서로 문제가 해결되지 않으면 Continue을 클릭합니다.
  7. 제시된 계정 정보가 정확한지 확인하고 필요한 경우 적절하게 수정합니다.
  8. 자동 입력된 OpenShift Container Platform 클러스터 ID가 올바른지 확인합니다. 그렇지 않은 경우 클러스터 ID를 수동으로 가져옵니다.

    • OpenShift Container Platform 웹 콘솔을 사용하여 클러스터 ID를 수동으로 가져오려면 다음을 수행합니다.

      1. 개요 로 이동합니다.
      2. Details 섹션의 Cluster ID 필드에서 값을 찾습니다.
    • 또는 OpenShift Container Platform 웹 콘솔을 통해 새 지원 케이스를 열고 클러스터 ID를 자동으로 입력할 수 있습니다.

      1. 툴바에서 (?) HelpOpen Support Case로 이동합니다.
      2. Cluster ID 값이 자동으로 입력됩니다.
    • OpenShift CLI (oc)를 사용하여 클러스터 ID를 얻으려면 다음 명령을 실행합니다.

      $ oc get clusterversion -o jsonpath='{.items[].spec.clusterID}{"\n"}'
      Copy to Clipboard Toggle word wrap
  9. 프롬프트가 표시되면 다음 질문을 입력한 후 Continue를 클릭합니다.

    • 당신은 무슨 일을 겪고 있나요? 무슨 일이 일어날 것으로 기대하시나요?
    • 당신이나 회사에 미치는 가치나 영향을 정의하세요.
    • 이런 현상은 어디에서 나타나나요? 어떤 시스템 환경을 사용하고 있습니까?
    • 이런 동작은 언제 발생합니까? 발생 빈도는 어떻게 됩니까? 반복적으로 발생합니까? 특정 시간에만 발생합니까?
  10. 관련 진단 데이터 파일을 업로드하고 Continue를 클릭합니다. oc adm must-gather 명령을 사용하여 수집된 데이터와 해당 명령으로 수집되지 않은 특정 문제와 관련된 데이터를 제공하는 것이 좋습니다
  11. 관련 케이스 관리 세부 정보를 입력하고 Continue를 클릭합니다.
  12. 케이스 세부 정보를 미리보고 Submit을 클릭합니다.

17.3.2. 일반 문제 해결

문제가 발생하면 첫 번째 단계는 문제가 발생하는 구체적인 영역을 찾는 것입니다. 문제가 발생할 가능성이 있는 영역을 좁히려면 다음 작업 중 하나 이상을 완료하세요.

  • 클러스터 쿼리
  • 포드 로그를 확인하세요
  • 포드 디버깅
  • 이벤트 검토
17.3.2.1. 클러스터 쿼리

클러스터에 대한 정보를 얻으면 잠재적인 문제를 더 정확하게 찾을 수 있습니다.

프로세스

  1. 다음 명령을 실행하여 프로젝트로 전환하세요.

    $ oc project <project_name>
    Copy to Clipboard Toggle word wrap
  2. 다음 명령을 실행하여 해당 네임스페이스 내의 클러스터 버전, 클러스터 운영자 및 노드를 쿼리합니다.

    $ oc get clusterversion,clusteroperator,node
    Copy to Clipboard Toggle word wrap

    출력 예

    NAME                                         VERSION   AVAILABLE   PROGRESSING   SINCE   STATUS
    clusterversion.config.openshift.io/version   4.16.11   True        False         62d     Cluster version is 4.16.11
    
    NAME                                                                           VERSION   AVAILABLE   PROGRESSING   DEGRADED   SINCE   MESSAGE
    clusteroperator.config.openshift.io/authentication                             4.16.11   True        False         False      62d
    clusteroperator.config.openshift.io/baremetal                                  4.16.11   True        False         False      62d
    clusteroperator.config.openshift.io/cloud-controller-manager                   4.16.11   True        False         False      62d
    clusteroperator.config.openshift.io/cloud-credential                           4.16.11   True        False         False      62d
    clusteroperator.config.openshift.io/cluster-autoscaler                         4.16.11   True        False         False      62d
    clusteroperator.config.openshift.io/config-operator                            4.16.11   True        False         False      62d
    clusteroperator.config.openshift.io/console                                    4.16.11   True        False         False      62d
    clusteroperator.config.openshift.io/control-plane-machine-set                  4.16.11   True        False         False      62d
    clusteroperator.config.openshift.io/csi-snapshot-controller                    4.16.11   True        False         False      62d
    clusteroperator.config.openshift.io/dns                                        4.16.11   True        False         False      62d
    clusteroperator.config.openshift.io/etcd                                       4.16.11   True        False         False      62d
    clusteroperator.config.openshift.io/image-registry                             4.16.11   True        False         False      55d
    clusteroperator.config.openshift.io/ingress                                    4.16.11   True        False         False      62d
    clusteroperator.config.openshift.io/insights                                   4.16.11   True        False         False      62d
    clusteroperator.config.openshift.io/kube-apiserver                             4.16.11   True        False         False      62d
    clusteroperator.config.openshift.io/kube-controller-manager                    4.16.11   True        False         False      62d
    clusteroperator.config.openshift.io/kube-scheduler                             4.16.11   True        False         False      62d
    clusteroperator.config.openshift.io/kube-storage-version-migrator              4.16.11   True        False         False      62d
    clusteroperator.config.openshift.io/machine-api                                4.16.11   True        False         False      62d
    clusteroperator.config.openshift.io/machine-approver                           4.16.11   True        False         False      62d
    clusteroperator.config.openshift.io/machine-config                             4.16.11   True        False         False      62d
    clusteroperator.config.openshift.io/marketplace                                4.16.11   True        False         False      62d
    clusteroperator.config.openshift.io/monitoring                                 4.16.11   True        False         False      62d
    clusteroperator.config.openshift.io/network                                    4.16.11   True        False         False      62d
    clusteroperator.config.openshift.io/node-tuning                                4.16.11   True        False         False      62d
    clusteroperator.config.openshift.io/openshift-apiserver                        4.16.11   True        False         False      62d
    clusteroperator.config.openshift.io/openshift-controller-manager               4.16.11   True        False         False      62d
    clusteroperator.config.openshift.io/openshift-samples                          4.16.11   True        False         False      35d
    clusteroperator.config.openshift.io/operator-lifecycle-manager                 4.16.11   True        False         False      62d
    clusteroperator.config.openshift.io/operator-lifecycle-manager-catalog         4.16.11   True        False         False      62d
    clusteroperator.config.openshift.io/operator-lifecycle-manager-packageserver   4.16.11   True        False         False      62d
    clusteroperator.config.openshift.io/service-ca                                 4.16.11   True        False         False      62d
    clusteroperator.config.openshift.io/storage                                    4.16.11   True        False         False      62d
    
    NAME                STATUS   ROLES                         AGE   VERSION
    node/ctrl-plane-0   Ready    control-plane,master,worker   62d   v1.29.7
    node/ctrl-plane-1   Ready    control-plane,master,worker   62d   v1.29.7
    node/ctrl-plane-2   Ready    control-plane,master,worker   62d   v1.29.7
    Copy to Clipboard Toggle word wrap

자세한 내용은 "oc get" 및 "pod 상태 검토"를 참조하세요.

17.3.2.2. 포드 로그 확인

포드에서 로그를 가져와서 문제가 있는지 로그를 검토할 수 있습니다.

프로세스

  1. 다음 명령을 실행하여 포드를 나열합니다.

    $ oc get pod
    Copy to Clipboard Toggle word wrap

    출력 예

    NAME        READY   STATUS    RESTARTS          AGE
    busybox-1   1/1     Running   168 (34m ago)     7d
    busybox-2   1/1     Running   119 (9m20s ago)   4d23h
    busybox-3   1/1     Running   168 (43m ago)     7d
    busybox-4   1/1     Running   168 (43m ago)     7d
    Copy to Clipboard Toggle word wrap

  2. 다음 명령을 실행하여 Pod 로그 파일을 확인합니다.

    $ oc logs -n <namespace> busybox-1
    Copy to Clipboard Toggle word wrap

자세한 내용은 "oc 로그", "로깅" 및 "pod 및 컨테이너 로그 검사"를 참조하세요.

17.3.2.3. 포드 설명

포드를 설명하면 문제 해결에 도움이 되는 해당 포드에 대한 정보가 제공됩니다. 이벤트 섹션에서는 포드와 포드 안의 컨테이너에 대한 자세한 정보를 제공합니다.

프로세스

  • 다음 명령을 실행하여 포드를 설명합니다.

    $ oc describe pod -n <namespace> busybox-1
    Copy to Clipboard Toggle word wrap

    출력 예

    Name:             busybox-1
    Namespace:        busy
    Priority:         0
    Service Account:  default
    Node:             worker-3/192.168.0.0
    Start Time:       Mon, 27 Nov 2023 14:41:25 -0500
    Labels:           app=busybox
                      pod-template-hash=<hash>
    Annotations:      k8s.ovn.org/pod-networks:
    …
    Events:
      Type    Reason   Age                   From     Message
      ----    ------   ----                  ----     -------
      Normal  Pulled   41m (x170 over 7d1h)  kubelet  Container image "quay.io/quay/busybox:latest" already present on machine
      Normal  Created  41m (x170 over 7d1h)  kubelet  Created container busybox
      Normal  Started  41m (x170 over 7d1h)  kubelet  Started container busybox
    Copy to Clipboard Toggle word wrap

자세한 내용은 "oc describe"를 참조하세요.

17.3.2.4. 이벤트 검토

주어진 네임스페이스의 이벤트를 검토하여 잠재적인 문제를 찾을 수 있습니다.

프로세스

  1. 다음 명령을 실행하여 네임스페이스에서 이벤트를 확인하세요.

    $ oc get events -n <namespace> --sort-by=".metadata.creationTimestamp" 
    1
    Copy to Clipboard Toggle word wrap
    1
    --sort-by=".metadata.creationTimestamp" 플래그를 추가하면 가장 최근 이벤트가 출력의 끝에 배치됩니다.
  2. 선택 사항: 지정된 네임스페이스 내의 이벤트가 충분한 정보를 제공하지 않는 경우 다음 명령을 실행하여 쿼리를 모든 네임스페이스로 확장합니다.

    $ oc get events -A --sort-by=".metadata.creationTimestamp" 
    1
    Copy to Clipboard Toggle word wrap
    1
    --sort-by=".metadata.creationTimestamp" 플래그는 가장 최근 이벤트를 출력의 끝에 배치합니다.

    클러스터의 모든 이벤트 결과를 필터링하려면 grep 명령을 사용하면 됩니다. 예를 들어, 오류를 찾는 경우 오류는 출력의 두 가지 섹션, 즉 TYPE 섹션과 MESSAGE 섹션에 나타날 수 있습니다. grep 명령을 사용하면 error , failed 등의 키워드를 검색할 수 있습니다.

  3. 예를 들어, 다음 명령을 실행하여 경고오류가 포함된 메시지를 검색합니다.

    $ oc get events -A | grep -Ei "warning|error"
    Copy to Clipboard Toggle word wrap

    출력 예

    NAMESPACE    LAST SEEN   TYPE      REASON          OBJECT              MESSAGE
    openshift    59s         Warning   FailedMount     pod/openshift-1     MountVolume.SetUp failed for volume "v4-0-config-user-idp-0-file-data" : references non-existent secret key: test
    Copy to Clipboard Toggle word wrap

  4. 선택 사항: 이벤트를 정리하고 반복되는 이벤트만 보려면 다음 명령을 실행하여 관련 네임스페이스에서 이벤트를 삭제할 수 있습니다.

    $ oc delete events -n <namespace> --all
    Copy to Clipboard Toggle word wrap

자세한 내용은 "클러스터 이벤트 감시"를 참조하세요.

17.3.2.5. 포드에 연결

oc rsh 명령을 사용하면 현재 실행 중인 Pod에 직접 연결할 수 있으며, 해당 Pod에 셸을 제공합니다.

주의

저지연 애플리케이션을 실행하는 포드에서 oc rsh 명령을 실행하면 지연 문제가 발생할 수 있습니다. oc debug 명령을 사용하여 노드에 연결할 수 없는 경우에만 oc rsh 명령을 사용하세요.

프로세스

  • 다음 명령을 실행하여 Pod에 연결합니다.

    $ oc rsh -n <namespace> busybox-1
    Copy to Clipboard Toggle word wrap

자세한 내용은 "oc rsh" 및 "실행 중인 Pod에 액세스"를 참조하세요.

17.3.2.6. 포드 디버깅

경우에 따라 프로덕션 중인 Pod와 직접 상호 작용하지 않으려 합니다.

운행 중인 교통을 방해하지 않으려면 원래 포드의 복사본인 보조 포드를 사용할 수 있습니다. 2차 포드는 원래 포드와 동일한 구성요소를 사용하지만 운행 교통이 없습니다.

프로세스

  1. 다음 명령을 실행하여 포드를 나열합니다.

    $ oc get pod
    Copy to Clipboard Toggle word wrap

    출력 예

    NAME        READY   STATUS    RESTARTS          AGE
    busybox-1   1/1     Running   168 (34m ago)     7d
    busybox-2   1/1     Running   119 (9m20s ago)   4d23h
    busybox-3   1/1     Running   168 (43m ago)     7d
    busybox-4   1/1     Running   168 (43m ago)     7d
    Copy to Clipboard Toggle word wrap

  2. 다음 명령을 실행하여 Pod를 디버깅합니다.

    $ oc debug -n <namespace> busybox-1
    Copy to Clipboard Toggle word wrap

    출력 예

    Starting pod/busybox-1-debug, command was: sleep 3600
    Pod IP: 10.133.2.11
    Copy to Clipboard Toggle word wrap

    셸 프롬프트가 보이지 않으면 Enter를 누르세요.

자세한 내용은 "oc debug" 및 "root 액세스로 디버그 포드 시작"을 참조하세요.

17.3.2.7. 포드에서 명령 실행

포드에 직접 로그인하지 않고도 포드에서 명령이나 명령 세트를 실행하려면 oc exec -it 명령을 사용하면 됩니다. 포드와 빠르게 상호작용하여 포드에서 프로세스나 출력 정보를 얻을 수 있습니다. 일반적인 사용 사례는 스크립트 내에서 oc exec -it 명령을 실행하여 복제본 세트 또는 배포 내의 여러 포드에서 동일한 명령을 실행하는 것입니다.

주의

저지연 애플리케이션을 실행하는 포드에서 oc exec 명령은 지연 문제를 일으킬 수 있습니다.

프로세스

  • 로그인하지 않고 포드에서 명령을 실행하려면 다음 명령을 실행하세요.

    $ oc exec -it <pod> -- <command>
    Copy to Clipboard Toggle word wrap

자세한 내용은 "oc exec" 및 "컨테이너에서 원격 명령 실행"을 참조하세요.

17.3.3. 클러스터 유지 관리

통신사 네트워크에서는 베어메탈 배포의 특성으로 인해 특정 구성에 더 많은 주의를 기울여야 합니다. 다음 작업을 완료하여 보다 효과적으로 문제를 해결할 수 있습니다.

  • 실패하거나 오류가 발생한 하드웨어 구성 요소를 모니터링합니다.
  • 클러스터 운영자의 상태를 주기적으로 확인하세요
참고

하드웨어 모니터링의 경우, 해당 하드웨어 공급업체에 문의하여 해당 하드웨어에 적합한 로깅 도구를 찾으세요.

17.3.3.1. 클러스터 운영자 확인

문제를 조기에 발견하려면 클러스터 운영자의 상태를 주기적으로 확인하세요.

프로세스

  • 다음 명령을 실행하여 클러스터 운영자의 상태를 확인하세요.

    $ oc get co
    Copy to Clipboard Toggle word wrap
17.3.3.2. 실패한 포드를 감시합니다

문제 해결 시간을 줄이려면 클러스터에서 실패한 Pod를 정기적으로 모니터링하세요.

프로세스

  • 실패한 Pod를 감시하려면 다음 명령을 실행하세요.

    $ oc get po -A | grep -Eiv 'complete|running'
    Copy to Clipboard Toggle word wrap

17.3.4. 보안

탄력적인 통신사 네트워크를 구축하려면 강력한 클러스터 보안 프로필을 구현하는 것이 중요합니다.

17.3.4.1. 인증

클러스터에 어떤 ID 공급자가 있는지 확인하세요. 지원되는 ID 공급자에 대한 자세한 내용은 인증 및 권한 부여 에서 "지원되는 ID 공급자"를 참조하세요.

어떤 공급자가 구성되어 있는지 확인한 후 openshift-authentication 네임스페이스를 검사하여 잠재적인 문제가 있는지 확인할 수 있습니다.

프로세스

  1. 다음 명령을 실행하여 openshift-authentication 네임스페이스의 이벤트를 확인하세요.

    $ oc get events -n openshift-authentication --sort-by='.metadata.creationTimestamp'
    Copy to Clipboard Toggle word wrap
  2. 다음 명령을 실행하여 openshift-authentication 네임스페이스의 포드를 확인하세요.

    $ oc get pod -n openshift-authentication
    Copy to Clipboard Toggle word wrap
  3. 선택 사항: 더 많은 정보가 필요하면 다음 명령을 실행하여 실행 중인 포드 중 하나의 로그를 확인하세요.

    $ oc logs -n openshift-authentication <pod_name>
    Copy to Clipboard Toggle word wrap

17.3.5. 인증서 유지 관리

지속적인 클러스터 인증을 위해서는 인증서 유지 관리가 필요합니다. 클러스터 관리자는 일부 인증서는 수동으로 갱신해야 하지만, 다른 인증서는 클러스터에서 자동으로 갱신됩니다.

다음 리소스를 사용하여 OpenShift Container Platform의 인증서에 대해 알아보고 인증서를 유지 관리하는 방법을 알아보세요.

17.3.5.1. 관리자가 수동으로 관리하는 인증서

다음 인증서는 클러스터 관리자가 갱신해야 합니다.

  • 프록시 인증서
  • API 서버에 대한 사용자 제공 인증서
17.3.5.1.1. 프록시 인증서 관리

프록시 인증서를 사용하면 사용자는 플랫폼 구성 요소에서 송신 연결을 만들 때 사용되는 하나 이상의 사용자 정의 인증 기관(CA) 인증서를 지정할 수 있습니다.

참고

특정 CA는 만료 날짜를 설정하고 2 개월마다 이러한 인증서를 갱신해야 할 수도 있습니다.

원래 요청한 인증서를 설정하지 않은 경우 여러 가지 방법으로 인증서 만료일을 확인할 수 있습니다. 대부분의 클라우드 기반 네트워크 기능(CNF)은 브라우저 기반 연결에 맞게 특별히 설계되지 않은 인증서를 사용합니다. 따라서 배포의 ConfigMap 개체에서 인증서를 가져와야 합니다.

프로세스

  • 만료 날짜를 알아보려면 인증서 파일에 대해 다음 명령을 실행하세요.

    $ openssl x509 -enddate -noout -in <cert_file_name>.pem
    Copy to Clipboard Toggle word wrap

프록시 인증서를 갱신하는 방법과 시기를 결정하는 방법에 대한 자세한 내용은 보안 및 규정 준수 의 "프록시 인증서"를 참조하세요.

17.3.5.1.2. 사용자 제공 API 서버 인증서

API 서버는 api.<cluster_name>.<base_domain> 에서 클러스터 외부에 있는 클라이언트가 접근할 수 있습니다. 클라이언트가 다른 호스트 이름으로 또는 클러스터 관리 인증 기관(CA) 인증서를 클라이언트에 배포하지 않고 API 서버에 액세스하게 합니다. 콘텐츠를 제공할 때 API 서버에서 사용할 사용자 지정 기본 인증서를 설정해야 합니다.

자세한 내용은 보안 및 규정 준수 의 "API 서버에 대한 사용자 제공 인증서"를 참조하세요.

17.3.5.2. 클러스터에서 관리하는 인증서

로그에서 문제를 감지한 경우에만 클러스터 관리 인증서를 확인하면 됩니다. 다음 인증서는 클러스터에서 자동으로 관리됩니다.

  • 서비스 CA 인증서
  • 노드 인증서
  • 부트스트랩 인증서
  • etcd 인증서
  • OLM 인증서
  • 머신 구성 운영자 인증서
  • 모니터링 및 클러스터 로깅 Operator 구성요소 인증서
  • 컨트롤 플레인 인증서
  • 수신 인증서
17.3.5.2.1. etcd에서 관리하는 인증서

etcd 인증서는 etcd 멤버 피어 간의 암호화된 통신과 암호화된 클라이언트 트래픽에 사용됩니다. 모든 노드와 모든 서비스 간 통신이 최신 상태인 경우 클러스터 내에서 인증서가 자동으로 갱신됩니다. 따라서 etcd 인증서의 수명이 끝나갈 무렵 특정 기간 동안 클러스터에서 구성 요소 간 통신이 끊어질 가능성이 있는 경우 미리 인증서를 갱신하는 것이 좋습니다. 예를 들어 다른 시간에 노드를 재부팅하여 업그레이드 중에 통신이 손실될 수 있습니다.

  • 다음 명령을 실행하여 etcd 인증서를 수동으로 갱신할 수 있습니다.

    $ for each in $(oc get secret -n openshift-etcd | grep "kubernetes.io/tls" | grep -e \
    "etcd-peer\|etcd-serving" | awk '{print $1}'); do oc get secret $each -n openshift-etcd -o \
    jsonpath="{.data.tls\.crt}" | base64 -d | openssl x509 -noout -enddate; done
    Copy to Clipboard Toggle word wrap

etcd 인증서 업데이트에 대한 자세한 내용은 OpenShift 4에서 etcd 인증서 만료 확인을 참조하세요. etcd 인증서에 대한 자세한 내용은 보안 및 규정 준수 의 "etcd 인증서"를 참조하세요.

17.3.5.2.2. 노드 인증서

노드 인증서는 자체 서명 인증서입니다. 즉, 클러스터에서 서명하고 부트스트랩 프로세스에서 생성된 내부 인증 기관(CA)에서 생성된 인증서입니다.

클러스터가 설치된 후 클러스터가 자동으로 노드 인증서를 갱신합니다.

자세한 내용은 보안 및 규정 준수 의 "노드 인증서"를 참조하세요.

17.3.5.2.3. 서비스 CA 인증서

service-ca는 OpenShift Container Platform 클러스터가 배포될 때 자체 서명된 인증 기관(CA)을 생성하는 운영자입니다. 이를 통해 사용자는 인증서를 수동으로 생성하지 않고도 배포에 인증서를 추가할 수 있습니다. 서비스 CA 인증서는 자체 서명된 인증서입니다.

자세한 내용은 보안 및 규정 준수 의 "서비스 CA 인증서"를 참조하세요.

17.3.6. Machine Config Operator

Machine Config Operator는 클러스터 관리자에게 유용한 정보를 제공하고 베어 메탈 호스트에서 직접 실행되는 작업을 제어합니다.

Machine Config Operator는 클러스터 내의 다양한 노드 그룹을 구별하여 제어 평면 노드와 작업자 노드가 서로 다른 구성으로 실행될 수 있도록 합니다. 이러한 노드 그룹은 MachineConfigPool ( mcp ) 그룹이라고 하는 작업자 또는 애플리케이션 포드를 실행합니다. 동일한 머신 구성이 모든 노드에 적용되거나 클러스터의 한 MCP에만 적용됩니다.

업데이트 전에 노드에 MachineConfigPool 레이블 적용을 참조하여 통신사 코어 클러스터에 MCP를 적용하는 방법과 이유에 대한 자세한 내용을 확인하세요.

Machine Config Operator에 대한 자세한 내용은 Machine Config Operator를 참조하세요.

17.3.6.1. Machine Config Operator의 목적

MCO(Machine Config Operator)는 커널과 kubelet 사이의 모든 것을 포함하여 Red Hat Enterprise Linux CoreOS(RHCOS) 및 컨테이너 런타임의 구성과 업데이트를 관리하고 적용합니다. 대부분의 통신 회사는 베어메탈 하드웨어로 운영되고 어떤 종류의 하드웨어 가속기나 커널 수정을 사용하기 때문에 RHCOS를 관리하는 것이 중요합니다. RHCOS에 수동으로 머신 구성을 적용하면 MCO가 각 노드와 해당 노드에 적용되는 내용을 모니터링하기 때문에 문제가 발생할 수 있습니다.

이러한 사소한 구성 요소를 고려해야 하며 MCO가 클러스터를 효과적으로 관리하는 데 어떻게 도움을 줄 수 있는지 고려해야 합니다.

중요

작업자 또는 제어 평면 노드에서 모든 변경을 수행하려면 MCO를 사용해야 합니다. 수동으로 RHCOS 또는 노드 파일을 변경하지 마십시오.

17.3.6.2. 여러 머신 구성 파일을 동시에 적용

클러스터 내 노드 그룹에 대한 머신 구성(머신 구성 풀(MCP)이라고도 함)을 변경해야 하는 경우, 때로는 여러 개의 서로 다른 머신 구성 파일에 변경 사항을 적용해야 합니다. 머신 구성 파일을 적용하려면 노드를 다시 시작해야 합니다. 각 머신 구성 파일이 클러스터에 적용된 후에는 해당 머신 구성 파일의 영향을 받는 모든 노드가 다시 시작됩니다.

각 머신 구성 파일에 대해 노드가 다시 시작되는 것을 방지하려면 새 머신 구성 파일에 의해 업데이트된 각 MCP를 일시 중지하여 모든 변경 사항을 동시에 적용할 수 있습니다.

프로세스

  1. 다음 명령을 실행하여 영향을 받은 MCP를 일시 중지합니다.

    $ oc patch mcp/<mcp_name> --type merge --patch '{"spec":{"paused":true}}'
    Copy to Clipboard Toggle word wrap
  2. 클러스터에 모든 머신 구성 변경 사항을 적용한 후 다음 명령을 실행합니다.

    $ oc patch mcp/<mcp_name> --type merge --patch '{"spec":{"paused":false}}'
    Copy to Clipboard Toggle word wrap

이렇게 하면 MCP의 노드가 새로운 구성으로 재부팅될 수 있습니다.

17.3.7. 베어 메탈 노드 유지 관리

일반적인 문제 해결을 위해 노드에 연결할 수 있습니다. 그러나 어떤 경우에는 특정 하드웨어 구성 요소에 대한 문제 해결이나 유지 관리 작업을 수행해야 합니다. 이 섹션에서는 하드웨어 유지 관리를 수행하는 데 필요한 항목을 설명합니다.

17.3.7.1. 클러스터의 베어 메탈 노드에 연결

일반적인 유지 관리 작업을 위해 베어 메탈 클러스터 노드에 연결할 수 있습니다.

참고

호스트 운영 체제에서 클러스터 노드를 구성하는 것은 권장되지 않으며 지원되지 않습니다.

노드 문제를 해결하려면 다음 작업을 수행할 수 있습니다.

  • 노드에서 로그 검색
  • 디버깅을 사용하세요
  • SSH를 사용하여 노드에 연결합니다.
중요

oc debug 명령으로 노드에 연결할 수 없는 경우에만 SSH를 사용하세요.

프로세스

  1. 다음 명령을 실행하여 노드에서 로그를 검색합니다.

    $ oc adm node-logs <node_name> -u crio
    Copy to Clipboard Toggle word wrap
  2. 다음 명령을 실행하여 디버깅을 사용하세요.

    $ oc debug node/<node_name>
    Copy to Clipboard Toggle word wrap
  3. 디버그 쉘 내에서 /host를 root 디렉터리로 설정합니다. 디버그 Pod는 Pod 내의 /host에 호스트의 루트 파일 시스템을 마운트합니다. root 디렉토리를 /host로 변경하면 호스트의 실행 경로에 포함된 바이너리를 실행할 수 있습니다.

    # chroot /host
    Copy to Clipboard Toggle word wrap

    출력 결과

    You are now logged in as root on the node
    Copy to Clipboard Toggle word wrap

  4. 선택 사항: 다음 명령을 실행하여 SSH를 사용하여 노드에 연결합니다.

    $ ssh core@<node_name>
    Copy to Clipboard Toggle word wrap
17.3.7.2. 클러스터 내의 포드로 애플리케이션 이동

예정된 하드웨어 유지 관리를 위해서는 포드 작업 부하에 영향을 주지 않고 클러스터 내의 다른 노드로 애플리케이션 포드를 이동하는 방법을 고려해야 합니다.

프로세스

  • 다음 명령을 실행하여 노드를 예약 불가능으로 표시합니다.

    $ oc adm cordon <node_name>
    Copy to Clipboard Toggle word wrap

노드를 예약할 수 없는 경우 노드에 Pod를 예약할 수 없습니다. 자세한 내용은 "노드 작업"을 참조하세요.

참고

CNF 애플리케이션을 이동할 때, 반친화성 및 Pod 중단 예산으로 인해 클러스터에 충분한 추가 작업자 노드가 있는지 미리 확인해야 할 수도 있습니다.

17.3.7.3. DIMM 메모리 교체

듀얼 인라인 메모리 모듈(DIMM) 문제는 때때로 서버를 재부팅한 후에만 나타납니다. 로그 파일에서 이러한 문제를 확인할 수 있습니다.

표준 재부팅을 수행했는데 서버가 시작되지 않으면 콘솔에 DIMM 메모리에 오류가 있다는 메시지가 표시됩니다. 그런 경우, 오류가 있는 DIMM을 확인하고 남은 메모리가 충분하다면 재부팅을 계속할 수 있습니다. 그런 다음, 결함이 있는 DIMM을 교체하기 위한 유지 관리 기간을 예약할 수 있습니다.

때로는 이벤트 로그의 메시지가 메모리 모듈에 문제가 있음을 나타냅니다. 이런 경우, 서버를 재부팅하기 전에 메모리 교체 일정을 예약할 수 있습니다.

17.3.7.4. 디스크 교체

하드웨어 또는 소프트웨어 RAID(Redundant Array of Independent Disks)를 통해 노드에 디스크 중복성이 구성되지 않은 경우 다음 사항을 확인해야 합니다.

  • 디스크에 실행 중인 Pod 이미지가 포함되어 있나요?
  • 디스크에 포드에 대한 영구 데이터가 포함되어 있나요?

자세한 내용은 저장소 의 "OpenShift Container Platform 저장소 개요"를 참조하세요.

17.3.7.5. 클러스터 네트워크 카드 교체

네트워크 카드를 교체하면 MAC 주소가 변경됩니다. MAC 주소는 DHCP 또는 SR-IOV 운영자 구성, 라우터 구성, 방화벽 규칙 또는 애플리케이션 클라우드 기반 네트워크 기능(CNF) 구성의 일부가 될 수 있습니다. 네트워크 카드를 교체한 후 노드를 다시 온라인으로 전환하기 전에 이러한 구성이 최신 상태인지 확인해야 합니다.

중요

네트워크 내에서 MAC 주소를 변경하는 구체적인 절차가 없는 경우 네트워크 관리자나 네트워크 하드웨어 공급업체에 문의하세요.

17.4. 가시성

17.4.1. 통신사 핵심 CNF 클러스터의 관찰성

OpenShift Container Platform은 플랫폼과 해당 플랫폼에서 실행되는 워크로드 모두에서 성능 지표와 로그 등 방대한 양의 데이터를 생성합니다. 관리자는 다양한 도구를 사용하여 사용 가능한 모든 데이터를 수집하고 분석할 수 있습니다. 다음은 시스템 엔지니어, 설계자 및 관리자를 위한 관찰성 스택 구성 모범 사례 개요입니다.

명시적으로 언급하지 않는 한, 이 문서의 내용은 Edge 및 Core 배포를 모두 참조합니다.

17.4.1.1. 모니터링 스택 이해

모니터링 스택은 다음 구성 요소를 사용합니다.

  • Prometheus는 OpenShift Container Platform 구성 요소와 워크로드에서 메트릭을 수집하고 분석합니다(구성된 경우).
  • Alertmanager는 알람의 라우팅, 그룹화, 음소거를 처리하는 Prometheus의 구성 요소입니다.
  • Thanos는 메트릭의 장기 저장을 처리합니다.

그림 17.2. OpenShift 컨테이너 플랫폼 모니터링 아키텍처

참고

단일 노드 OpenShift 클러스터의 경우 클러스터가 분석 및 보존을 위해 모든 메트릭을 허브 클러스터로 전송하므로 Alertmanager와 Thanos를 비활성화해야 합니다.

17.4.1.2. 주요 성과 지표

시스템에 따라 사용 가능한 측정값이 수백 개일 수 있습니다.

주의해야 할 몇 가지 주요 지표는 다음과 같습니다.

  • etcd 응답 시간
  • API 응답 시간
  • Pod 재시작 및 예약
  • 리소스 사용량
  • OVN 건강
  • 전체 클러스터 운영자 상태

따라야 할 좋은 규칙은 특정 지표가 중요하다고 판단되면 해당 지표에 대한 알림을 제공하는 것입니다.

참고

다음 명령을 실행하여 사용 가능한 메트릭을 확인할 수 있습니다.

$ oc -n openshift-monitoring exec -c prometheus prometheus-k8s-0 -- curl -qsk http://localhost:9090/api/v1/metadata | jq '.data
Copy to Clipboard Toggle word wrap
17.4.1.2.1. PromQL의 쿼리 예

다음 표에서는 OpenShift Container Platform 콘솔을 사용하여 메트릭 쿼리 브라우저에서 탐색할 수 있는 몇 가지 쿼리를 보여줍니다.

참고

콘솔의 URL은 https://<OpenShift 콘솔 FQDN>/monitoring/query-browser입니다. 다음 명령을 실행하면 OpenShift 콘솔 FQDN을 얻을 수 있습니다.

$ oc get routes -n openshift-console console -o jsonpath='{.status.ingress[0].host}'
Copy to Clipboard Toggle word wrap
Expand
표 17.1. 노드 메모리 및 CPU 사용량
지표쿼리

노드별 CPU % 요청

(노드)별 합계 (sum_over_time(kube_pod_container_resource_requests{resource="cpu"}[60m]))/(노드)별 합계 (sum_over_time(kube_node_status_allocatable{resource="cpu"}[60m])) *100

전체 클러스터 CPU % 사용률

(관리형 클러스터)의 합계 (시간당 합계(kube_pod_container_resource_requests{resource="memory"}[60m]))/(관리형 클러스터)의 합계 (시간당 합계(kube_node_status_allocatable{resource="cpu"}[60m])) *100

노드별 메모리 % 요청

(노드)별 합계 (sum_over_time(kube_pod_container_resource_requests{resource="memory"}[60m]))/(노드)별 합계 (sum_over_time(kube_node_status_allocatable{resource="memory"}[60m])) *100

전체 클러스터 메모리 사용률(%)

(1-(sum by (managed_cluster)(avg_over_timenode_memory_MemAvailable_bytes[60m] ))/(managed_cluster)(avg_over_time(kube_node_status_allocatable{resource="memory"}[60m])))*100에 의한 합계

Expand
표 17.2. 동사별 API 대기 시간
지표쿼리

GET

히스토그램 분위수(0.99, (le, 관리형 클러스터)에 대한 합계(apiserver_request_duration_seconds_bucket{apiserver="kube-apiserver|openshift-apiserver", 동사="GET"}[60m])))

PATCH

히스토그램 분위수(0.99, (le, 관리형 클러스터)에 대한 합계(apiserver_request_duration_seconds_bucket{apiserver="kube-apiserver|openshift-apiserver", 동사="패치"}[60m])))

POST

히스토그램 분위수(0.99, (le, 관리형 클러스터)에 대한 합계(apiserver_request_duration_seconds_bucket{apiserver="kube-apiserver|openshift-apiserver", 동사="POST"}[60m])))

LIST

히스토그램 분위수(0.99, (le, 관리형 클러스터)에 대한 합계(apiserver_request_duration_seconds_bucket{apiserver="kube-apiserver|openshift-apiserver", 동사="목록"}[60m])))

PUT

히스토그램 분위수(0.99, (le, 관리형 클러스터)에 대한 합계(apiserver_request_duration_seconds_bucket{apiserver="kube-apiserver|openshift-apiserver", 동사="PUT"}[60m])))

삭제

히스토그램 분위수(0.99, (le, 관리형 클러스터)에 대한 합계(apiserver_request_duration_seconds_bucket{apiserver="kube-apiserver|openshift-apiserver", 동사="삭제"}[60m])))

결합된

histogram_quantile(0.99, (le,managed_cluster)에 대한 합계(apiserver_request_duration_seconds_bucket{apiserver=~"(openshift-apiserver|kube-apiserver)", verb!="WATCH"}[60m])))

Expand
표 17.3. etcd
지표쿼리

fsync 99번째 백분위수 지연 시간(인스턴스당)

histogram_quantile(0.99, rate(etcd_disk_wal_fsync_duration_seconds_bucket[2m]))

fsync 99번째 백분위수 지연 시간(클러스터당)

(managed_cluster)에 의한 합계 (histogram_quantile(0.99, rate(etcd_disk_wal_fsync_duration_seconds_bucket[60m])))

지도자 선거

sum(rate(etcd_server_leader_changes_seen_total[1440m]))

네트워크 지연 시간

histogram_quantile(0.99, rate(etcd_network_peer_round_trip_time_seconds_bucket[5m]))

Expand
표 17.4. 운영자 건강
지표쿼리

저하된 운영자

(managed_cluster, name)에 따른 합계 (avg_over_time(cluster_operator_conditions{condition="Degraded", name!="version"}[60m]))

클러스터당 저하된 총 연산자

(managed_cluster)의 합계 (avg_over_time(cluster_operator_conditions{condition="Degraded", name!="version"}[60m] ))

17.4.1.2.2. 메트릭 저장을 위한 권장 사항

기본적으로 Prometheus는 영구 스토리지를 사용하여 저장된 지표를 백업하지 않습니다. Prometheus Pod를 다시 시작하면 모든 메트릭 데이터가 손실됩니다. 플랫폼에서 사용 가능한 백엔드 스토리지를 사용하도록 모니터링 스택을 구성해야 합니다. Prometheus의 높은 IO 요구 사항을 충족하려면 로컬 스토리지를 사용해야 합니다.

Telco 코어 클러스터의 경우 Prometheus의 영구 저장소로 Local Storage Operator를 사용할 수 있습니다.

블록, 파일, 객체 스토리지를 위한 Ceph 클러스터를 구축하는 Red Hat OpenShift Data Foundation(ODF)도 통신사 코어 클러스터에 적합한 후보입니다.

RAN 단일 노드 OpenShift 또는 Far Edge 클러스터에서 시스템 리소스 요구 사항을 낮게 유지하려면 모니터링 스택에 대한 백엔드 스토리지를 프로비저닝해서는 안 됩니다. 이러한 클러스터는 모든 측정 항목을 허브 클러스터로 전달하며, 여기서 타사 모니터링 플랫폼을 프로비저닝할 수 있습니다.

17.4.1.3. 에지 모니터링

에지의 단일 노드 OpenShift는 플랫폼 구성 요소의 설치 공간을 최소한으로 유지합니다. 다음 절차는 모니터링 공간이 작은 단일 노드 OpenShift 노드를 구성하는 방법의 예입니다.

사전 요구 사항

  • Red Hat Advanced Cluster Management(RHACM)를 사용하는 환경의 경우 Observability 서비스를 활성화했습니다.
  • 허브 클러스터는 Red Hat OpenShift Data Foundation(ODF)을 실행하고 있습니다.

프로세스

  1. 다음 예와 같이 ConfigMap CR을 만들고 monitoringConfigMap.yaml 로 저장합니다.

    apiVersion: v1
    kind: ConfigMap
    metadata:
     name: cluster-monitoring-config
     namespace: openshift-monitoring
     data:
     config.yaml: |
       alertmanagerMain:
         enabled: false
       telemeterClient:
         enabled: false
       prometheusK8s:
          retention: 24h
    Copy to Clipboard Toggle word wrap
  2. 단일 노드 OpenShift에서 다음 명령을 실행하여 ConfigMap CR을 적용합니다.

    $ oc apply -f monitoringConfigMap.yaml
    Copy to Clipboard Toggle word wrap
  3. 다음 예와 같이 NameSpace CR을 만들고 monitoringNamespace.yaml 로 저장합니다.

    apiVersion: v1
    kind: Namespace
    metadata:
      name: open-cluster-management-observability
    Copy to Clipboard Toggle word wrap
  4. 허브 클러스터에서 다음 명령을 실행하여 허브 클러스터에 네임스페이스 CR을 적용합니다.

    $ oc apply -f monitoringNamespace.yaml
    Copy to Clipboard Toggle word wrap
  5. 다음 예와 같이 ObjectBucketClaim CR을 만들고 monitoringObjectBucketClaim.yaml 로 저장합니다.

    apiVersion: objectbucket.io/v1alpha1
    kind: ObjectBucketClaim
    metadata:
      name: multi-cloud-observability
      namespace: open-cluster-management-observability
    spec:
      storageClassName: openshift-storage.noobaa.io
      generateBucketName: acm-multi
    Copy to Clipboard Toggle word wrap
  6. 허브 클러스터에서 다음 명령을 실행하여 ObjectBucketClaim CR을 적용합니다.

    $ oc apply -f monitoringObjectBucketClaim.yaml
    Copy to Clipboard Toggle word wrap
  7. 다음 예와 같이 비밀 CR을 만들고 monitoringSecret.yaml 로 저장합니다.

    apiVersion: v1
    kind: Secret
    metadata:
      name: multiclusterhub-operator-pull-secret
      namespace: open-cluster-management-observability
    stringData:
      .dockerconfigjson: 'PULL_SECRET'
    Copy to Clipboard Toggle word wrap
  8. 허브 클러스터에서 다음 명령을 실행하여 Secret CR을 적용합니다.

    $ oc apply -f monitoringSecret.yaml
    Copy to Clipboard Toggle word wrap
  9. 다음 명령을 실행하여 허브 클러스터에서 NooBaa 서비스에 대한 키와 백엔드 버킷 이름을 가져옵니다.

    $ NOOBAA_ACCESS_KEY=$(oc get secret noobaa-admin -n openshift-storage -o json | jq -r '.data.AWS_ACCESS_KEY_ID|@base64d')
    Copy to Clipboard Toggle word wrap
    $ NOOBAA_SECRET_KEY=$(oc get secret noobaa-admin -n openshift-storage -o json | jq -r '.data.AWS_SECRET_ACCESS_KEY|@base64d')
    Copy to Clipboard Toggle word wrap
    $ OBJECT_BUCKET=$(oc get objectbucketclaim -n open-cluster-management-observability multi-cloud-observability -o json | jq -r .spec.bucketName)
    Copy to Clipboard Toggle word wrap
  10. 다음 예와 같이 버킷 저장소에 대한 비밀 CR을 만들고 monitoringBucketSecret.yaml 로 저장합니다.

    apiVersion: v1
    kind: Secret
    metadata:
      name: thanos-object-storage
      namespace: open-cluster-management-observability
    type: Opaque
    stringData:
      thanos.yaml: |
        type: s3
        config:
          bucket: ${OBJECT_BUCKET}
          endpoint: s3.openshift-storage.svc
          insecure: true
          access_key: ${NOOBAA_ACCESS_KEY}
          secret_key: ${NOOBAA_SECRET_KEY}
    Copy to Clipboard Toggle word wrap
  11. 허브 클러스터에서 다음 명령을 실행하여 Secret CR을 적용합니다.

    $ oc apply -f monitoringBucketSecret.yaml
    Copy to Clipboard Toggle word wrap
  12. 다음 예와 같이 MultiClusterObservability CR을 만들고 monitoringMultiClusterObservability.yaml 로 저장합니다.

    apiVersion: observability.open-cluster-management.io/v1beta2
    kind: MultiClusterObservability
    metadata:
      name: observability
    spec:
      advanced:
        retentionConfig:
          blockDuration: 2h
          deleteDelay: 48h
          retentionInLocal: 24h
          retentionResolutionRaw: 3d
      enableDownsampling: false
      observabilityAddonSpec:
        enableMetrics: true
        interval: 300
      storageConfig:
        alertmanagerStorageSize: 10Gi
        compactStorageSize: 100Gi
        metricObjectStorage:
          key: thanos.yaml
          name: thanos-object-storage
        receiveStorageSize: 25Gi
        ruleStorageSize: 10Gi
        storeStorageSize: 25Gi
    Copy to Clipboard Toggle word wrap
  13. 허브 클러스터에서 다음 명령을 실행하여 MultiClusterObservability CR을 적용합니다.

    $ oc apply -f monitoringMultiClusterObservability.yaml
    Copy to Clipboard Toggle word wrap

검증

  1. 다음 명령을 실행하여 네임스페이스의 경로와 포드를 확인하여 서비스가 허브 클러스터에 배포되었는지 확인합니다.

    $ oc get routes,pods -n open-cluster-management-observability
    Copy to Clipboard Toggle word wrap

    출력 예

    NAME                                         HOST/PORT                                                                                        PATH      SERVICES                          PORT          TERMINATION          WILDCARD
    route.route.openshift.io/alertmanager        alertmanager-open-cluster-management-observability.cloud.example.com        /api/v2   alertmanager                      oauth-proxy   reencrypt/Redirect   None
    route.route.openshift.io/grafana             grafana-open-cluster-management-observability.cloud.example.com                       grafana                           oauth-proxy   reencrypt/Redirect   None 
    1
    
    route.route.openshift.io/observatorium-api   observatorium-api-open-cluster-management-observability.cloud.example.com             observability-observatorium-api   public        passthrough/None     None
    route.route.openshift.io/rbac-query-proxy    rbac-query-proxy-open-cluster-management-observability.cloud.example.com              rbac-query-proxy                  https         reencrypt/Redirect   None
    
    NAME                                                           READY   STATUS    RESTARTS   AGE
    pod/observability-alertmanager-0                               3/3     Running   0          1d
    pod/observability-alertmanager-1                               3/3     Running   0          1d
    pod/observability-alertmanager-2                               3/3     Running   0          1d
    pod/observability-grafana-685b47bb47-dq4cw                     3/3     Running   0          1d
    <...snip…>
    pod/observability-thanos-store-shard-0-0                       1/1     Running   0          1d
    pod/observability-thanos-store-shard-1-0                       1/1     Running   0          1d
    pod/observability-thanos-store-shard-2-0                       1/1     Running   0          1d
    Copy to Clipboard Toggle word wrap

    1
    대시보드는 나열된 그래피나 경로에서 접근할 수 있습니다. 이를 사용하면 관리되는 모든 클러스터의 메트릭을 볼 수 있습니다.

Red Hat Advanced Cluster Management의 관찰성에 대한 자세한 내용은 관찰성을 참조하세요.

17.4.1.4. 경고

OpenShift Container Platform에는 많은 수의 알림 규칙이 포함되어 있으며, 이러한 알림 규칙은 릴리스마다 변경될 수 있습니다.

17.4.1.4.1. 기본 알림 보기

다음 절차에 따라 클러스터의 모든 알림 규칙을 검토하세요.

프로세스

  • 클러스터의 모든 알림 규칙을 검토하려면 다음 명령을 실행하세요.

    $ oc get cm -n openshift-monitoring prometheus-k8s-rulefiles-0 -o yaml
    Copy to Clipboard Toggle word wrap

    규칙에는 설명을 포함하고 추가 정보 및 완화 단계에 대한 링크를 제공할 수 있습니다. 예를 들어, etcdHighFsyncDurations 에 대한 규칙은 다음과 같습니다.

          - alert: etcdHighFsyncDurations
            annotations:
              description: 'etcd cluster "{{ $labels.job }}": 99th percentile fsync durations
                are {{ $value }}s on etcd instance {{ $labels.instance }}.'
              runbook_url: https://github.com/openshift/runbooks/blob/master/alerts/cluster-etcd-operator/etcdHighFsyncDurations.md
              summary: etcd cluster 99th percentile fsync durations are too high.
            expr: |
              histogram_quantile(0.99, rate(etcd_disk_wal_fsync_duration_seconds_bucket{job=~".*etcd.*"}[5m]))
              > 1
            for: 10m
            labels:
              severity: critical
    Copy to Clipboard Toggle word wrap
17.4.1.4.2. 알림 알림

OpenShift Container Platform 콘솔에서 알림을 볼 수 있지만, 관리자는 알림을 전달할 외부 수신기를 구성해야 합니다. OpenShift Container Platform은 다음과 같은 수신기 유형을 지원합니다.

  • PagerDuty: 제3자 사고 대응 플랫폼
  • Webhook: POST 요청을 통해 알림을 받고 필요한 모든 조치를 취할 수 있는 임의의 API 엔드포인트
  • 이메일: 지정된 주소로 이메일을 보냅니다.
  • Slack: Slack 채널이나 개별 사용자에게 알림을 보냅니다.
17.4.1.5. 작업 부하 모니터링

기본적으로 OpenShift Container Platform은 애플리케이션 워크로드에 대한 메트릭을 수집하지 않습니다. 워크로드 지표를 수집하도록 클러스터를 구성할 수 있습니다.

사전 요구 사항

  • 클러스터에서 작업 부하 측정 항목을 수집하기 위해 엔드포인트를 정의했습니다.

프로세스

  1. 다음 예와 같이 ConfigMap CR을 만들고 monitoringConfigMap.yaml 로 저장합니다.

    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: cluster-monitoring-config
      namespace: openshift-monitoring
    data:
      config.yaml: |
        enableUserWorkload: true 
    1
    Copy to Clipboard Toggle word wrap
    1
    작업 부하 모니터링을 활성화하려면 true 로 설정합니다.
  2. 다음 명령을 실행하여 ConfigMap CR을 적용합니다.

    $ oc apply -f monitoringConfigMap.yaml
    Copy to Clipboard Toggle word wrap
  3. 다음 예와 같이 ServiceMonitor CR을 만들고 monitoringServiceMonitor.yaml 로 저장합니다.

    apiVersion: monitoring.coreos.com/v1
    kind: ServiceMonitor
    metadata:
      labels:
        app: ui
      name: myapp
      namespace: myns
    spec:
      endpoints: 
    1
    
      - interval: 30s
        port: ui-http
        scheme: http
        path: /healthz 
    2
    
      selector:
        matchLabels:
          app: ui
    Copy to Clipboard Toggle word wrap
    1
    엔드포인트를 사용하여 작업 부하 측정 항목을 정의합니다.
    2
    Prometheus는 기본적으로 /metrics 경로를 스크래핑합니다. 여기서 사용자 정의 경로를 정의할 수 있습니다.
  4. 다음 명령을 실행하여 ServiceMonitor CR을 적용합니다.

    $ oc apply -f monitoringServiceMonitor.yaml
    Copy to Clipboard Toggle word wrap

Prometheus는 기본적으로 /metrics 경로를 스크래핑하지만 사용자 지정 경로를 정의할 수 있습니다. 스크래핑을 위해 이 엔드포인트를 공개하고 관련성이 있다고 생각되는 측정항목을 제공하는 것은 애플리케이션 공급업체의 몫입니다.

17.4.1.5.1. 작업 부하 알림 생성

클러스터의 사용자 워크로드에 대한 알림을 활성화할 수 있습니다.

프로세스

  1. 다음 예와 같이 ConfigMap CR을 만들고 monitoringConfigMap.yaml 로 저장합니다.

    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: cluster-monitoring-config
      namespace: openshift-monitoring
    data:
      config.yaml: |
        enableUserWorkload: true 
    1
    
    # ...
    Copy to Clipboard Toggle word wrap
    1
    작업 부하 모니터링을 활성화하려면 true 로 설정합니다.
  2. 다음 명령을 실행하여 ConfigMap CR을 적용합니다.

    $ oc apply -f monitoringConfigMap.yaml
    Copy to Clipboard Toggle word wrap
  3. 다음 예와 같이 알림 규칙에 대한 YAML 파일인 monitoringAlertRule.yaml 을 만듭니다.

    apiVersion: monitoring.coreos.com/v1
    kind: PrometheusRule
    metadata:
      name: myapp-alert
      namespace: myns
    spec:
      groups:
      - name: example
        rules:
        - alert: InternalErrorsAlert
          expr: flask_http_request_total{status="500"} > 0
    # ...
    Copy to Clipboard Toggle word wrap
  4. 다음 명령을 실행하여 알림 규칙을 적용합니다.

    $ oc apply -f monitoringAlertRule.yaml
    Copy to Clipboard Toggle word wrap

17.5. 보안

17.5.1. 보안 기본 사항

보안은 OpenShift Container Platform에서 통신 서비스를 배포하는 데 있어 중요한 구성 요소이며, 특히 클라우드 기반 네트워크 기능(CNF)을 실행할 때 더욱 중요합니다.

주요 보안 고려 사항을 따르면 통신(텔코) 환경에서 고대역폭 네트워크 배포에 대한 보안을 강화할 수 있습니다. 이러한 표준과 모범 사례를 구현하면 통신사별 사용 사례에서 보안을 강화할 수 있습니다.

17.5.1.1. RBAC 개요

RBAC(역할 기반 액세스 제어) 오브젝트에 따라 사용자가 프로젝트 내에서 지정된 작업을 수행할 수 있는지가 결정됩니다.

클러스터 관리자는 클러스터 역할 및 바인딩을 사용하여 OpenShift Container Platform 플랫폼 자체 및 모든 프로젝트에 대해 다양한 액세스 수준을 보유한 사용자를 제어할 수 있습니다.

개발자는 로컬 역할 및 바인딩을 사용하여 프로젝트에 액세스할 수 있는 사용자를 제어할 수 있습니다. 권한 부여는 인증과 별도의 단계이며, 여기서는 조치를 수행할 사용자의 신원을 파악하는 것이 더 중요합니다.

권한 부여는 다음 권한 부여 객체를 사용하여 관리됩니다.

규칙
특정 객체에 대해 허용되는 작업 집합입니다. 예를 들어, 규칙은 사용자 또는 서비스 계정이 Pod를 생성할 수 있는지 여부를 결정할 수 있습니다. 각 규칙은 API 리소스, 해당 API 내의 리소스, 허용되는 작업을 지정합니다.
역할

사용자 또는 그룹이 수행할 수 있는 작업을 정의하는 규칙의 모음입니다. 여러 사용자나 그룹에 규칙을 연관시키거나 바인딩할 수 있습니다. 역할 파일에는 해당 역할에 허용되는 작업과 리소스를 지정하는 하나 이상의 규칙이 포함될 수 있습니다.

역할은 다음 유형으로 분류됩니다.

  • 클러스터 역할: 클러스터 수준에서 클러스터 역할을 정의할 수 있습니다. 단일 네임 스페이스에 연결되어 있지 않습니다. 사용자, 그룹 또는 서비스 계정에 바인딩하면 모든 네임스페이스에 적용할 수도 있고, 특정 네임스페이스에 적용할 수도 있습니다.
  • 프로젝트 역할: 특정 네임스페이스 내에서 프로젝트 역할을 만들 수 있으며, 해당 역할은 해당 네임스페이스에만 적용됩니다. 특정 사용자에게 네임스페이스 내에서 역할과 역할 바인딩을 만들 수 있는 권한을 할당하여 다른 네임스페이스에 영향을 미치지 않도록 할 수 있습니다.
바인딩

사용자 및/또는 그룹 간의 역할을 연결한 것입니다. 역할 바인딩을 생성하여 역할의 규칙을 특정 사용자 ID 또는 그룹에 연결할 수 있습니다. 그러면 역할과 사용자 또는 그룹을 결합하여 수행할 수 있는 작업을 정의합니다.

참고

사용자 또는 그룹에 두 개 이상의 역할을 바인딩할 수 있습니다.

RBAC에 대한 자세한 내용은 "RBAC를 사용하여 권한 정의 및 적용"을 참조하세요.

운영 RBAC 고려 사항

운영 오버헤드를 줄이려면 여러 클러스터에서 개별 사용자 ID를 처리하는 것보다 그룹을 통해 액세스를 관리하는 것이 중요합니다. 조직 수준에서 그룹을 관리하면 액세스 제어를 간소화하고 조직 전체의 관리를 단순화할 수 있습니다.

17.5.1.2. 보안 계정 개요

서비스 계정은 구성 요소가 API에 직접 액세스할 수 있는 OpenShift Container Platform 계정입니다. 서비스 계정은 각 프로젝트 내에 존재하는 API 오브젝트입니다. 서비스 계정을 사용하면 일반 사용자의 자격 증명을 공유하지 않고도 API 액세스 권한을 유연하게 제어할 수 있습니다.

서비스 계정을 사용하여 포드에 역할 기반 액세스 제어(RBAC)를 적용할 수 있습니다. 포드 및 배포와 같은 워크로드에 서비스 계정을 할당하면 다른 레지스트리에서 가져오는 등의 추가 권한을 부여할 수 있습니다. 이를 통해 서비스 계정에 낮은 권한을 할당하여 해당 계정에서 실행되는 포드의 보안 영향을 줄일 수 있습니다.

서비스 계정에 대한 자세한 내용은 "서비스 계정 이해 및 생성"을 참조하세요.

17.5.1.3. ID 공급자 구성

ID 공급자를 구성하는 것은 클러스터에 사용자를 설정하는 첫 번째 단계입니다. ID 공급자를 사용하여 조직 수준에서 그룹을 관리할 수 있습니다.

ID 공급자는 클러스터 수준이 아닌 조직 수준에서 유지 관리되는 특정 사용자 그룹을 가져올 수 있습니다. 이를 통해 조직의 기존 관행을 따르는 그룹에 사용자를 추가하거나 제거할 수 있습니다.

참고

클러스터에 변경 사항을 가져오려면 자주 실행되는 Cron 작업을 설정해야 합니다.

조직 내 특정 그룹의 액세스 수준을 관리하려면 ID 공급자를 사용할 수 있습니다. 예를 들어, 다음 작업을 수행하여 액세스 수준을 관리할 수 있습니다.

  • 클러스터 수준 권한이 필요한 팀에 클러스터 관리자 역할을 할당합니다.
  • 애플리케이션 관리자에게 해당 프로젝트만 관리할 수 있는 특정 권한을 부여합니다.
  • 운영팀에 클러스터 전반에 대한 보기 액세스 권한을 제공하여 수정을 허용하지 않고도 모니터링이 가능하도록 합니다.

ID 공급자 구성에 대한 자세한 내용은 "ID 공급자 구성 이해"를 참조하세요.

17.5.1.4. kubeadmin 사용자를 cluster-admin 사용자로 교체

cluster-admin 권한이 있는 kubeadmin 사용자는 기본적으로 모든 클러스터에 생성됩니다. 클러스터 보안을 강화하려면 `kubeadmin` 사용자를 cluster-admin 사용자로 바꾼 다음 kubeadmin 사용자를 비활성화하거나 제거할 수 있습니다.

사전 요구 사항

  • 클러스터 관리자 권한이 있는 사용자를 생성했습니다.
  • OpenShift CLI(oc)가 설치되어 있습니다.
  • 안전한 저장을 위해 가상 금고에 대한 관리 액세스 권한이 있습니다.

프로세스

  1. htpasswd ID 공급자를 사용하여 긴급 cluster-admin 사용자를 생성합니다. 자세한 내용은 "htpasswd 인증 정보"를 참조하세요.
  2. 다음 명령을 실행하여 새 사용자에게 cluster-admin 권한을 할당합니다.

    $ oc adm policy add-cluster-role-to-user cluster-admin <emergency_user>
    Copy to Clipboard Toggle word wrap
  3. 비상 사용자 액세스를 확인하세요.

    1. 새로운 비상 사용자를 사용하여 클러스터에 로그인합니다.
    2. 다음 명령을 실행하여 사용자에게 클러스터 관리자 권한이 있는지 확인하세요.

      $ oc whoami
      Copy to Clipboard Toggle word wrap

      출력에 비상 사용자의 ID가 표시되는지 확인하세요.

  4. 비상 사용자의 비밀번호나 인증 키를 가상 금고에 안전하게 보관하세요.

    참고

    조직의 모범 사례에 따라 중요한 자격 증명을 보호하세요.

  5. 다음 명령을 실행하여 보안 위험을 줄이려면 kubeadmin 사용자를 비활성화하거나 제거하세요.

    $ oc delete secrets kubeadmin -n kube-system
    Copy to Clipboard Toggle word wrap
17.5.1.5. 통신사 CNF에 대한 보안 고려 사항

통신사 업무는 방대한 양의 민감한 데이터를 처리하며 높은 안정성을 요구합니다. 단일 보안 취약점으로 인해 클러스터 전체에 더 큰 손상이 발생할 수 있습니다. 단일 노드 OpenShift 클러스터에서 수많은 구성 요소가 실행되므로 각 구성 요소를 보호하여 침해가 확대되는 것을 방지해야 합니다. 모든 구성 요소를 포함한 전체 인프라의 보안을 보장하는 것은 통신사 네트워크의 무결성을 유지하고 취약성을 방지하는 데 필수적입니다.

다음과 같은 주요 보안 기능은 통신에 필수적입니다.

  • 보안 컨텍스트 제약(SCC): OpenShift 클러스터의 Pod 보안에 대한 세부적인 제어를 제공합니다.
  • Pod 보안 승인(PSA): Kubernetes 기반 Pod 보안 제어.
  • 암호화: 처리량이 많은 네트워크 환경에서 데이터의 기밀성을 보장합니다.
17.5.1.6. Kubernetes 및 OpenShift 컨테이너 플랫폼의 Pod 보안 향상

쿠버네티스는 처음에는 포드 보안이 제한적이었습니다. OpenShift Container Platform이 Kubernetes를 통합했을 때 Red Hat은 SCC(Security Context Constraints)를 통해 포드 보안을 추가했습니다. Kubernetes 버전 1.3에서는 PodSecurityPolicy (PSP)가 유사한 기능으로 도입되었습니다. 그러나 Kubernetes 버전 1.21에서 Pod Security Admission(PSA)이 도입되었고, 이로 인해 Kubernetes 버전 1.25에서 PSP가 더 이상 사용되지 않게 되었습니다.

PSA는 OpenShift Container Platform 버전 4.11에서도 사용할 수 있게 되었습니다. PSA는 포드 보안을 개선하지만, 통신사 사용 사례에 여전히 필요한 SCC가 제공하는 일부 기능이 부족합니다. 따라서 OpenShift Container Platform은 PSA와 SCC를 모두 계속 지원합니다.

17.5.1.7. CNF 배포를 위한 주요 영역

클라우드 기반 네트워크 기능(CNF) 배포에는 다음과 같은 주요 영역이 포함됩니다.

코어
CNF는 무선 네트워크의 핵심에서 처음 배포되었습니다. 코어에 CNF를 배포한다는 것은 일반적으로 중앙 사무실이나 데이터 센터에 서버 랙을 배치한다는 것을 의미합니다. 이러한 서버는 인터넷과 무선 접속망(RAN)에 모두 연결되어 있지만, 종종 여러 보안 방화벽 뒤에 있거나 때로는 인터넷과 전혀 연결이 끊어져 있습니다. 이런 유형의 설정을 오프라인 또는 연결 해제된 클러스터라고 합니다.
RAN
CNF가 핵심 네트워크에서 성공적으로 테스트되어 효과가 있는 것으로 확인되자 RAN(무선 접속 네트워크)에 배포하는 것이 고려되었습니다. RAN에 CNF를 배포하려면 많은 수의 서버(대규모 배포 시 최대 100,000개)가 필요합니다. 이러한 서버는 셀룰러 타워 근처에 위치하며 일반적으로 높은 확장성이 필요하여 단일 노드 OpenShift 클러스터로 실행됩니다.
17.5.1.8. 통신사별 인프라
하드웨어 요구 사항
통신사 네트워크에서 클러스터는 주로 베어메탈 하드웨어를 기반으로 구축됩니다. 즉, 가상 머신을 사용하지 않고 운영 체제(op-system-first)가 물리적 머신에 직접 설치된다는 의미입니다. 이를 통해 네트워크 연결의 복잡성이 줄어들고, 지연 시간이 최소화되며, 애플리케이션의 CPU 사용량이 최적화됩니다.
네트워크 요구 사항
통신사 네트워크는 표준 IT 네트워크에 비해 훨씬 더 높은 대역폭이 필요합니다. 통신사 네트워크는 일반적으로 듀얼 포트 25GB 연결이나 100GB 네트워크 인터페이스 카드(NIC)를 사용하여 대량의 데이터 처리량을 처리합니다. 보안은 매우 중요하며, 민감한 개인 데이터를 보호하기 위해 암호화된 연결과 안전한 엔드포인트가 필요합니다.
17.5.1.9. 수명주기 관리

보안을 위해서는 업그레이드가 중요합니다. 취약점이 발견되면 최신 z-stream 릴리스에 패치가 적용됩니다. 이 수정 사항은 지원되는 모든 버전에 패치가 적용될 때까지 각 하위 y-stream 릴리스로 롤백됩니다. 더 이상 지원되지 않는 릴리스에는 패치가 제공되지 않습니다. 따라서 지원되는 릴리스를 유지하고 취약점으로부터 보호받으려면 OpenShift Container Platform 클러스터를 정기적으로 업그레이드하는 것이 중요합니다.

수명 주기 관리 및 업그레이드에 대한 자세한 내용은 "통신사 핵심 CNF 클러스터 업그레이드"를 참조하세요.

17.5.1.10. 네트워크 기능의 CNF로의 진화

네트워크 기능(NF)은 원래 물리적 네트워크 기능(PNF)으로 시작되었는데, 이는 독립적으로 작동하는 특수 목적의 하드웨어 장치였습니다. 시간이 지남에 따라 PNF는 CPU, 메모리, 스토리지, 네트워크 등의 리소스를 제어하면서 기능을 가상화하는 가상 네트워크 기능(VNF)으로 발전했습니다.

기술이 더욱 발전함에 따라 VNF는 클라우드 기반 네트워크 기능(CNF)으로 전환되었습니다. CNF는 가볍고 안전하며 확장 가능한 컨테이너에서 실행됩니다. 이들은 보안과 성능을 강화하기 위해 루트가 아닌 실행과 최소한의 호스트 간섭을 포함한 엄격한 제한을 시행합니다.

PNF는 간섭 없이 독립적으로 작동할 수 있는 무제한 루트 접근 권한을 가졌습니다. VNF로 전환하면서 리소스 사용이 제어되었지만 프로세스는 여전히 가상 머신 내에서 루트로 실행될 수 있습니다. 이와 대조적으로 CNF는 루트 액세스를 제한하고 컨테이너 기능을 제한하여 다른 컨테이너나 호스트 운영 체제와의 간섭을 방지합니다.

CNF로 마이그레이션하는 데 있어 주요 과제는 다음과 같습니다.

  • 모놀리식 네트워크 기능을 컨테이너화된 더 작은 프로세스로 분리합니다.
  • 루트가 아닌 실행 및 격리와 같은 클라우드 기반 원칙을 준수하는 동시에 통신사 수준의 성능과 안정성을 유지합니다.

17.5.2. 호스트 보안

17.5.2.1. Red Hat Enterprise Linux CoreOS(RHCOS)

Red Hat Enterprise Linux CoreOS(RHCOS)는 주요 면에서 Red Hat Enterprise Linux(RHEL)와 다릅니다. 자세한 내용은 "RHCOS 정보"를 참조하세요.

통신사 관점에서 볼 때 가장 큰 차이점은 Machine Config Operator를 통해 업데이트되는 rpm-ostree 의 제어입니다.

RHCOS는 OpenShift Container Platform의 Pod에 사용된 것과 동일한 변경 불가능한 디자인을 따릅니다. 이렇게 하면 클러스터 전체에서 운영 체제의 일관성이 유지됩니다. RHCOS 아키텍처에 대한 자세한 내용은 "Red Hat Enterprise Linux CoreOS(RHCOS)"를 참조하세요.

보안을 유지하면서 호스트를 효과적으로 관리하려면 가능하면 직접 액세스를 피하세요. 대신 다음 방법을 사용하여 호스트를 관리할 수 있습니다.

  • 디버그 포드
  • 직접 SSH
  • 콘솔 액세스

호스트 보안을 유지 관리하는 데 통합된 다음 RHCOS 보안 메커니즘을 검토하십시오.

Linux 네임스페이스
프로세스 및 리소스에 대한 격리 제공. 각 컨테이너는 자체 네임스페이스에 프로세스 및 파일을 유지합니다. 사용자가 컨테이너 네임스페이스에서 이스케이프하면 호스트 운영 체제에 액세스할 수 있어 보안이 손상될 수 있습니다.
Security-Enhanced Linux (SELinux)

필수 액세스 제어를 적용하여 프로세스별 파일 및 디렉터리에 대한 액세스를 제한합니다. 프로세스에서 제한을 제거하려고 하는 경우 파일에 무단 액세스를 방지하여 추가 보안 계층을 추가합니다.

SELinux는 명시적으로 허용되지 않는 한 모든 것을 거부하는 보안 정책을 따릅니다. 프로세스가 권한 없이 파일을 수정하거나 액세스하려고 하면 SELinux에서 액세스를 거부합니다. 자세한 내용은 SELinux 소개를 참조하십시오.

Linux 기능
세분화된 수준의 프로세스에 특정 권한을 할당하여 전체 루트 권한의 필요성을 최소화합니다. 자세한 내용은 "Linux 기능"을 참조하십시오.
컨트롤그룹(cgroups)
프로세스 및 컨테이너의 CPU 및 메모리와 같은 시스템 리소스를 할당하고 관리하여 효율적으로 사용할 수 있도록 합니다. OpenShift Container Platform 4.16부터 cgroups의 두 가지 버전이 있습니다. 이제 cgroup v2가 기본적으로 구성되어 있습니다.
CRI-O
보안 경계를 적용하고 컨테이너 워크로드를 관리하는 경량 컨테이너 런타임 역할을 합니다.
17.5.2.2. 명령줄 호스트 액세스

호스트에 대한 직접 액세스는 호스트를 수정하거나 액세스해서는 안 되는 Pod에 액세스하지 않도록 제한해야 합니다. 호스트에 직접 액세스해야 하는 사용자의 경우 LDAP에서 SSSD와 같은 외부 인증기를 사용하여 액세스를 관리하는 것이 좋습니다. 이렇게 하면 Machine Config Operator를 통해 클러스터 전체에서 일관성을 유지할 수 있습니다.

중요

OpenShift Container Platform 클러스터 서버에서 루트 ID에 대한 직접 액세스를 구성하지 마세요.

다음 방법을 사용하여 클러스터의 노드에 연결할 수 있습니다.

디버그 포드 사용

이는 노드에 접근하는 데 권장되는 방법입니다. 노드를 디버깅하거나 연결하려면 다음 명령을 실행하세요.

$ oc debug node/<worker_node_name>
Copy to Clipboard Toggle word wrap

노드에 연결한 후 다음 명령을 실행하여 루트 파일 시스템에 액세스합니다.

# chroot /host
Copy to Clipboard Toggle word wrap

이렇게 하면 노드의 디버그 포드 내에서 루트 액세스가 가능합니다. 자세한 내용은 "루트 액세스로 디버그 포드 시작"을 참조하세요.

직접 SSH

루트 사용자를 사용하지 마세요. 대신, 핵심 사용자 ID(또는 본인의 ID)를 사용하세요. SSH를 사용하여 노드에 연결하려면 다음 명령을 실행하세요.

$ ssh core@<worker_node_name>
Copy to Clipboard Toggle word wrap
중요

코어 사용자 ID에는 처음에 클러스터 내에서 sudo 권한이 부여됩니다.

SSH를 사용하여 노드에 연결할 수 없는 경우 SSH 배스천 포드를 사용하여 OpenShift Container Platform 4.x 클러스터 노드에 연결하는 방법을 참조하여 SSH 키를 코어 사용자에 추가하세요.

SSH를 사용하여 노드에 연결한 후 다음 명령을 실행하여 루트 셸에 액세스하세요.

$ sudo -i
Copy to Clipboard Toggle word wrap
콘솔 액세스

콘솔이 안전한지 확인하세요. 루트 ID로 직접 로그인하는 것을 허용하지 말고, 대신 개별 ID를 사용하세요.

참고

조직의 모범 사례에 따라 콘솔 액세스 보안을 강화하세요.

17.5.2.3. 리눅스 기능

Linux 기능은 프로세스가 호스트 시스템에서 수행할 수 있는 작업을 정의합니다. 기본적으로 보안 조치가 적용되지 않는 한 포드에는 여러 가지 기능이 부여됩니다. 기본 기능은 다음과 같습니다.

  • CHOWN
  • DAC_OVERRIDE
  • FSETID
  • FOWNER
  • SETGID
  • SETUID
  • SETPCAP
  • NET_BIND_SERVICE
  • KILL

보안 컨텍스트 제약 조건(SCC)을 구성하여 포드가 수신할 수 있는 기능을 수정할 수 있습니다.

중요

다음 기능은 포드에 할당할 수 없습니다.

  • SYS_ADMIN : 높은 권한을 부여하는 강력한 기능입니다. 이 기능을 허용하면 보안 경계가 무너지고 심각한 보안 위험이 초래될 수 있습니다.
  • NET_ADMIN : SR-IOV 포트와 같은 네트워킹을 제어할 수 있지만 최신 설정에서는 대체 솔루션으로 대체될 수 있습니다.

Linux 기능에 대한 자세한 내용은 Linux 기능 도움말 페이지를 참조하십시오.

17.5.3. 보안 컨텍스트 제약 조건

RBAC 리소스에서 사용자 액세스를 제어하는 방식과 유사하게 관리자는 SCC(보안 컨텍스트 제약 조건)를 사용하여 Pod에 대한 권한을 제어할 수 있습니다. 이러한 권한은 Pod에서 수행할 수 있는 작업과 액세스할 수 있는 리소스를 결정합니다. SCC를 사용하면 포드가 실행해야 하는 조건 집합을 정의할 수 있습니다.

보안 컨텍스트 제약 조건을 통해 관리자는 다음과 같은 보안 제약 조건을 제어할 수 있습니다.

  • Pod에서 allowPrivilegedContainer 플래그를 사용하여 권한 있는 컨테이너를 실행할 수 있는지 여부
  • Pod가 allowPrivilegeEscalation 플래그로 제한되는지 여부
  • 컨테이너에서 요청할 수 있는 기능
  • 호스트 디렉터리를 볼륨으로 사용
  • 컨테이너의 SELinux 컨텍스트
  • 컨테이너 사용자 ID
  • 호스트 네임스페이스 및 네트워킹 사용
  • Pod 볼륨을 보유한 FSGroup의 할당
  • 허용되는 추가 그룹의 구성
  • 컨테이너에 루트 파일 시스템에 대한 쓰기 액세스 권한이 필요한지 여부
  • 볼륨 유형 사용
  • 허용 가능한 seccomp 프로필 구성

기본 SCC는 설치 중에 그리고 일부 Operator 또는 기타 구성 요소를 설치할 때 생성됩니다. 클러스터 관리자는 OpenShift CLI(oc)를 사용하여 고유한 SCC를 생성할 수도 있습니다.

기본 보안 컨텍스트 제약 조건에 대한 자세한 내용은 기본 보안 컨텍스트 제약 조건을 참조하세요.

중요

기본 SCC를 수정하지 마십시오. 기본 SCC를 사용자 정의하면 일부 플랫폼 Pod 배포 또는 OpenShift Container Platform이 업그레이드되는 경우 문제가 발생할 수 있습니다. 또한 일부 클러스터 업그레이드 중에 기본 SCC 값이 기본값으로 재설정되므로 해당 SCC에 대한 모든 사용자 정의를 삭제합니다.

기본 SCC를 수정하는 대신 필요에 따라 자체 SCC를 생성하고 수정합니다. 자세한 단계는 보안 컨텍스트 제약 조건 만들기를 참조하세요.

다음과 같은 기본 SCC를 사용할 수 있습니다.

  • restricted
  • restricted-v2

제한된 v2 SCC는 새로운 설치에서 제공되는 가장 제한적인 SCC이며 기본적으로 인증된 사용자에게 사용됩니다. 이는 Pod 보안 입장(PSA) 제한 사항과 일치하며 원래 제한된 SCC가 덜 제한적이기 때문에 보안을 강화합니다. 또한 여러 릴리스에 걸쳐 원래 SCC에서 v2로 전환하는 데 도움이 됩니다. 결국 원래의 SCC는 더 이상 사용되지 않게 됩니다. 따라서 제한된 v2 SCC를 사용하는 것이 좋습니다.

다음 명령을 실행하여 제한된 v2 SCC를 조사할 수 있습니다.

$ oc describe scc restricted-v2
Copy to Clipboard Toggle word wrap

출력 예

Name:                                           restricted-v2
Priority:                                       <none>
Access:
  Users:                                        <none>
  Groups:                                       <none>
Settings:
  Allow Privileged:                             false
  Allow Privilege Escalation:                   false
  Default Add Capabilities:                     <none>
  Required Drop Capabilities:                   ALL
  Allowed Capabilities:                         NET_BIND_SERVICE
  Allowed Seccomp Profiles:                     runtime/default
  Allowed Volume Types:                         configMap,downwardAPI,emptyDir,ephemeral,persistentVolumeClaim,projected,secret
  Allowed Flexvolumes:                          <all>
  Allowed Unsafe Sysctls:                       <none>
  Forbidden Sysctls:                            <none>
  Allow Host Network:                           false
  Allow Host Ports:                             false
  Allow Host PID:                               false
  Allow Host IPC:                               false
  Read Only Root Filesystem:                    false
  Run As User Strategy: MustRunAsRange
    UID:                                        <none>
    UID Range Min:                              <none>
    UID Range Max:                              <none>
  SELinux Context Strategy: MustRunAs
    User:                                       <none>
    Role:                                       <none>
    Type:                                       <none>
    Level:                                      <none>
  FSGroup Strategy: MustRunAs
    Ranges:                                     <none>
  Supplemental Groups Strategy: RunAsAny
    Ranges:                                     <none>
Copy to Clipboard Toggle word wrap

제한된 v2 SCC는 명시적으로 허용하는 것 외의 모든 것을 명시적으로 거부합니다. 다음 설정은 허용되는 기능과 보안 제한을 정의합니다.

  • 기본 추가 기능: <없음> 으로 설정합니다. 즉, 기본적으로 포드에 아무런 기능도 추가되지 않습니다.
  • 필수 드롭 기능: ALL 로 설정하세요. 이렇게 하면 포드의 모든 기본 Linux 기능이 삭제됩니다.
  • 허용된 기능: NET_BIND_SERVICE . 포드는 이 기능을 요청할 수 있지만 기본적으로 추가되지 않습니다.
  • 허용된 seccomp 프로필: runtime/default .

자세한 내용은 보안 컨텍스트 제약 조건 관리를 참조하세요.

Legal Notice

Copyright © 2025 Red Hat

OpenShift documentation is licensed under the Apache License 2.0 (https://www.apache.org/licenses/LICENSE-2.0).

Modified versions must remove all Red Hat trademarks.

Portions adapted from https://github.com/kubernetes-incubator/service-catalog/ with modifications by Red Hat.

Red Hat, Red Hat Enterprise Linux, the Red Hat logo, the Shadowman logo, JBoss, OpenShift, Fedora, the Infinity logo, and RHCE are trademarks of Red Hat, Inc., registered in the United States and other countries.

Linux® is the registered trademark of Linus Torvalds in the United States and other countries.

Java® is a registered trademark of Oracle and/or its affiliates.

XFS® is a trademark of Silicon Graphics International Corp. or its subsidiaries in the United States and/or other countries.

MySQL® is a registered trademark of MySQL AB in the United States, the European Union and other countries.

Node.js® is an official trademark of Joyent. Red Hat Software Collections is not formally related to or endorsed by the official Joyent Node.js open source or commercial project.

The OpenStack® Word Mark and OpenStack logo are either registered trademarks/service marks or trademarks/service marks of the OpenStack Foundation, in the United States and other countries and are used with the OpenStack Foundation’s permission. We are not affiliated with, endorsed or sponsored by the OpenStack Foundation, or the OpenStack community.

All other trademarks are the property of their respective owners.

맨 위로 이동
Red Hat logoGithubredditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

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

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

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

Red Hat 소개

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

Theme

© 2025 Red Hat