엣지 컴퓨팅


OpenShift Container Platform 4.16

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

Red Hat OpenShift Documentation Team

초록

이 문서에서는 GitOps ZTP를 사용하여 OpenShift Container Platform 클러스터를 구성하고 배포하여 네트워크의 맨 위에 있는 사이트를 프로비저닝하고 관리하는 방법을 설명합니다.

1장. 네트워크 맨 위 엣지의 과제

엣지 컴퓨팅은 지리적으로 대체된 위치에서 많은 사이트를 관리할 때 복잡한 문제를 안고 있습니다. ZTP( GitOps Zero Touch Provisioning)를 사용하여 네트워크의 맨 위에 있는 사이트를 프로비저닝하고 관리합니다.

1.1. 네트워크의 문제를 해결하여 엣지

현재 서비스 제공업체는 네트워크의 에지에 인프라를 배포하려고 합니다. 이는 상당한 과제를 안고 있습니다:

  • 여러 에지 사이트의 배포를 병렬로 어떻게 처리합니까?
  • 연결이 끊긴 환경에서 사이트를 배포해야 하는 경우 어떻게 됩니까?
  • 대규모 클러스터의 라이프사이클을 어떻게 관리합니까?

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

GitOps ZTP는 인프라 배포에 GitOps를 사용합니다. GitOps에서는 선언적 YAML 파일 및 Git 리포지토리에 저장된 기타 정의된 패턴을 사용합니다. RHACM(Red Hat Advanced Cluster Management)은 Git 리포지토리를 사용하여 인프라 배포를 지원합니다.

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

GitOps ZTP 파이프라인이 에지 노드에 제공하는 선언적 사이트 정의 및 구성 CR(사용자 정의 리소스)을 생성하여 GitOps ZTP 워크플로를 시작합니다.

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

네트워크 맨 위 엣지의 GitOps ZTP

1.2. GitOps ZTP를 사용하여 네트워크 엣지에서 클러스터를 프로비저닝

RHACM(Red Hat Advanced Cluster Management)은 단일 허브 클러스터가 많은 spoke 클러스터를 관리하는 hub-and-spoke 아키텍처의 클러스터를 관리합니다. RHACM을 실행하는 Hub 클러스터는 GitOps ZTP(ZTP) 및 RHACM을 설치할 때 배포되는 지원 서비스를 사용하여 관리 클러스터를 프로비저닝하고 배포합니다.

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

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

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

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

GitOps 및 GitOps ZTP를 사용하여 관리형 클러스터 설치 및 배포

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

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

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

단일 클러스터를 수동으로 프로비저닝하거나 GitOps ZTP를 사용하여 배치에서 프로비저닝할 수 있습니다.

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

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

GitOps ZTP(Red Hat Advanced Cluster Management)는 정책 기반 거버넌스 접근 방식을 사용하여 구성을 적용하여 클러스터를 구성합니다.

정책 생성기 또는 PolicyGen 은 GitOps Operator의 플러그인으로, 간결한 템플릿에서 RHACM 정책을 생성할 수 있습니다. 이 툴은 여러 CR을 단일 정책으로 결합할 수 있으며, 플릿의 다양한 클러스터 하위 집합에 적용되는 여러 정책을 생성할 수 있습니다.

참고

확장성을 유지하고 클러스터 전체에서 구성 관리의 복잡성을 줄이려면 가능한 한 많은 공통성을 갖춘 구성 CR을 사용하십시오.

  • 가능한 경우 플릿 전체 공통 정책을 사용하여 구성 CR을 적용합니다.
  • 다음 기본 설정은 그룹 정책에서 최대한 많은 나머지 구성을 관리할 클러스터의 논리 그룹을 생성하는 것입니다.
  • 구성이 개별 사이트에 고유한 경우 허브 클러스터에서 RHACM 템플릿 작성을 사용하여 사이트별 데이터를 공통 또는 그룹 정책에 삽입합니다. 또는 사이트에 대한 개별 사이트 정책을 적용합니다.

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

정책 생성기

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

다음과 같은 권장 정책 구조에서는 구성 CR을 결합하여 몇 가지 목표를 달성할 수 있습니다.

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

공통

공통 카테고리에 존재하는 정책은 플릿의 모든 클러스터에 적용됩니다. 공통 PolicyGenerator CR을 사용하여 모든 클러스터 유형에 공통 설치 설정을 적용합니다.

그룹

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

사이트

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

중요

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

PolicyGenerator 리소스에 대한 자세한 내용은 RHACM 정책 생성기 설명서를 참조하십시오.

2장. GitOps ZTP용 허브 클러스터 준비

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

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

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

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

관리형 클러스터 버전

4.16

Cluster Logging Operator

6.0

Local Storage Operator

4.16

PTP Operator

4.16

SRIOV Operator

4.16

Node Tuning Operator

4.16

Logging Operator

4.16

SRIOV-FEC Operator

2.9

Expand
표 2.2. hub 클러스터 검증 소프트웨어 구성 요소
Component소프트웨어 버전

hub 클러스터 버전

4.16

GitOps ZTP 플러그인

4.16

Red Hat Advanced Cluster Management(RHACM)

2.10, 2.11

Red Hat OpenShift GitOps

1.16

토폴로지 인식 라이프사이클 관리자(TALM)

4.16

2.2. GitOps ZTP에 대한 권장 허브 클러스터 사양 및 관리 클러스터 제한

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

실제 상황에서 관리할 수 있는 클러스터 수에 대한 스케일링 제한은 hub 클러스터에 영향을 미치는 다양한 요인에 따라 달라집니다. 예를 들면 다음과 같습니다.

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

다음 대표 구성 및 네트워크 사양을 사용하여 자체 Hub 클러스터 및 네트워크 사양을 개발합니다.

중요

다음 지침은 내부 랩 벤치마크 테스트만 기반으로 하며 완전한 베어 메탈 호스트 사양을 나타내지 않습니다.

Expand
표 2.3. 대표적인 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.4. 시뮬레이션된 랩 환경 네트워크 사양
사양설명

Round-trip Time (RTT) 대기 시간

50 MS

패킷 손실

0.02% 패킷 손실

네트워크 대역폭 제한

20Mbps

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

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

사전 요구 사항

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

    참고

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

프로세스

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

RHACM(Red Hat Advanced Cluster Management)을 사용하여 연결이 끊긴 환경에 클러스터를 설치하기 전에 먼저 사용할 RHCOS(Red Hat Enterprise Linux CoreOS) 이미지를 호스팅해야 합니다. 연결이 끊긴 미러를 사용하여 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.16.1-x86_64-live.x86_64.iso)
      1
      rootfs 이미지 이름(예: rhcos-4.16.1-x86_64-live-rootfs.x86_64.img
      1
      OpenShift Container Platform 버전 (예: 4.16.1)
    2. 필요한 이미지를 다운로드합니다.

      $ sudo wget https://mirror.openshift.com/pub/openshift-v4/dependencies/rhcos/4.16/${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.16/${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.16.1-x86_64-live.x86_64.iso
    rhcos-4.16.1-x86_64-live.x86_64.iso-  11%[====>    ]  10.01M  4.71MB/s
    Copy to Clipboard Toggle word wrap

2.5. 지원 서비스 활성화

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

사전 요구 사항

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

프로세스

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

    $ 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.16"
          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. 연결이 끊긴 미러 레지스트리를 사용하도록 허브 클러스터 구성

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

사전 요구 사항

  • RHACM(Red Hat Advanced Cluster Management) 2.11이 설치된 연결이 끊긴 허브 클러스터 설치가 있어야 합니다.
  • 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 섹션에 저장됩니다. hub 클러스터에서 실행되는 지원 서비스 Pod는 구성된 미러 레지스트리에서 컨테이너 이미지를 가져옵니다.
    4
    미러 레지스트리의 URL입니다. 미러 레지스트리를 구성할 때 oc adm release mirror 명령을 실행하여 imageContentSources 섹션의 URL을 사용해야 합니다. 자세한 내용은 OpenShift Container Platform 이미지 저장소 미러링 섹션을 참조하십시오.
    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 버전을 x.y 또는 x.y.z 형식으로 설정합니다.
    4
    httpd 서버에서 호스팅되는 ISO의 URL을 설정합니다.
중요

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

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

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

사전 요구 사항

  • hub 클러스터를 설치 및 구성하고 hub 클러스터에 Red Hat Advanced Cluster Management(RHACM)를 설치 및 구성했습니다.
  • OpenShift Container Platform CLI(oc)가 설치되어 있습니다.
  • cluster-admin 권한이 있는 사용자로 로그인했습니다.
  • hub 클러스터에서 사용할 인증되지 않은 레지스트리를 구성했습니다.

프로세스

  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 에 나열됩니다. 이 목록의 레지스트리에는 spoke 클러스터 설치에 사용되는 풀 시크릿에 항목이 필요하지 않습니다. assisted-service 는 설치에 사용되는 모든 이미지 레지스트리에 대한 인증 정보가 포함되어 있는지 확인하여 풀 시크릿을 검증합니다.

참고

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

검증

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

  1. hub 클러스터에 대한 디버그 쉘 프롬프트를 엽니다.

    $ 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를 사용하여 허브 클러스터 구성

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

참고

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

사전 요구 사항

  • RHACM(Red Hat Advanced Cluster Management) 및 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 및 인증 정보).
      • certificates - 필요한 경우 리포지토리의 공용 인증서를 추가합니다.
    3. Git 저장소에 따라 두 개의 ArgoCD 애플리케이션( out/argocd/deployment/clusters-app.yamlout/argocd/deployment/policies-app.yaml)을 수정합니다.

      • Git 리포지토리를 가리키도록 URL을 업데이트합니다. URL은 .git 로 끝납니다(예: https://repo.example.com/repo.git ).
      • targetRevision 은 모니터링할 Git 리포지토리 분기를 나타냅니다.
      • path 는 각각 SiteConfigPolicyGenerator 또는 PolicyGentemplate CR의 경로를 지정합니다.
  1. GitOps ZTP 플러그인을 설치하려면 허브 클러스터의 ArgoCD 인스턴스를 관련 MCCE(Multicluster engine) 서브스크립션 이미지로 패치합니다. 이전에 추출한 패치 파일을 사용자 환경의 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 이상에서는 다중 클러스터 엔진에서 기본적으로 cluster-proxy-addon 기능을 활성화합니다. 다음 패치를 적용하여 cluster-proxy-addon 기능을 비활성화하고 이 애드온을 담당하는 관련 허브 클러스터 및 관리 Pod를 제거합니다. 다음 명령을 실행합니다.

    $ 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= backECDSA 정책이 애플리케이션 리소스에 설정되어 있는지 확인합니다.

    $ 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 ZTP(ZTP) 파이프라인을 사용하려면 사이트 구성 데이터를 호스팅하기 위해 Git 리포지토리를 준비해야 합니다.

사전 요구 사항

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

프로세스

  1. SiteConfigPolicyGenerator 또는 PolicyGentemplate CR에 대한 별도의 경로를 사용하여 디렉터리 구조를 생성합니다.

    참고

    site ConfigPolicyGenerator 또는 PolicyGentemplate CR을 별도의 디렉터리에 보관합니다. SiteConfigPolicyGenerator 또는 PolicyGentemplate 디렉터리에 둘 다 해당 디렉터리에 파일을 명시적으로 포함하는 kustomization.yaml 파일이 포함되어야 합니다.

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

    $ podman pull registry.redhat.io/openshift4/ztp-site-generate-rhel8:v4.16
    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.16 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 가 RHACM(Red Hat Advanced Cluster Management) 정책을 생성하는 데 사용하는 소스 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 디렉터리를 site Config 폴더에 복사합니다. 이 디렉터리에는 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 릴리스에서 더 이상 사용되지 않습니다. RHACM(Red Hat Advanced Cluster Management) 및 PolicyGenerator CR을 사용하면 동일하고 개선된 기능을 사용할 수 있습니다.
  6. 디렉터리 구조와 kustomization.yaml 파일을 커밋하고 Git 리포지토리로 내보냅니다. Git으로의 초기 내보내기에는 kustomization.yaml 파일이 포함되어야 합니다.

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

모든 클러스터 유형의 경우 다음을 수행해야 합니다.

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

다음 예제에서는 단일 노드 클러스터 네트워크에 대한 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 릴리스에서 더 이상 사용되지 않습니다. RHACM(Advanced Cluster Management) 및 PolicyGenerator CR을 사용하여 동일하고 개선된 기능을 사용할 수 있습니다.

PolicyGenerator 리소스에 대한 자세한 내용은 RHACM 정책 생성기 설명서를 참조하십시오.

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

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

참고

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

사전 요구 사항

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

프로세스

  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에 대한 사용자 정의 CR 디렉터리를 생성합니다.
    12 14
    사용자 지정 /siteconfig 디렉터리에 디렉터리를 생성하여 ztp-site-generate 컨테이너의 추가 매니페스트를 포함합니다.
    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
    주석을 사용하여 버전을 비활성화합니다.

3장. GitOps ZTP 업데이트

hub 클러스터, RHACM(Advanced Cluster Management) 및 관리형 OpenShift Container Platform 클러스터와 독립적으로ZTP(ZTP) 인프라를 업데이트할 수 있습니다.

참고

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

중요

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

PolicyGenerator 리소스에 대한 자세한 내용은 RHACM 정책 생성기 설명서를 참조하십시오.

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

이전 버전의 GitOps ZTP 인프라를 실행하는 완전히 작동하는 허브 클러스터에 대해 GitOps ZTP(ZTP)를 업데이트할 수 있습니다. 업데이트 프로세스는 관리 클러스터에 미치는 영향을 방지합니다.

참고

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

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

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

3.2. 업그레이드 준비

다음 절차에 따라ZTP(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.16 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이 RHACM(Red Hat Advanced Cluster Management) 정책을 생성하는 데 사용하는 소스 CR 파일이 포함되어 있습니다.
    • update/argocd/deployment: 이 절차의 다음 단계에서 사용할 허브 클러스터에 적용할 패치 및 YAML 파일이 포함되어 있습니다.
    • update/argocd/example: 권장 구성을 나타내는 example site ConfigPolicyGenerator 또는 PolicyGentemplate 파일이 포함되어 있습니다.
  3. 애플리케이션 이름과 Git 리포지토리의 URL, 분기 및 경로를 반영하도록 cluster-app.yamlpolicies-app.yaml 파일을 업데이트합니다.

    업그레이드에 더 이상 사용되지 않는 정책이 생성되는 변경 사항이 포함된 경우 업그레이드를 수행하기 전에 더 이상 사용되지 않는 정책을 제거해야 합니다.

  4. 플릿 사이트 CR을 관리하는 /update 폴더 및 Git 리포지터리의 구성 및 배포 소스 CR 간 변경 사항을 diffe the changes between the configuration and deployment source CRs in the /update folder and Git repo where you manage your fleet site CRs. 필요한 변경 사항을 적용하고 사이트 리포지토리에 내보냅니다.

    중요

    GitOps ZTP를 최신 버전으로 업데이트할 때 update/argocd/deployment 디렉터리의 변경 사항을 사이트 리포지토리에 적용해야 합니다. 이전 버전의 argocd/deployment/ 파일을 사용하지 마십시오.

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

툴 업데이트로 기존 클러스터가 그대로 유지되도록 기존 관리 클러스터에 ztp-done 라벨을 지정합니다.

참고

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

프로세스

  1. local-cluster!=true 와 같이 GitOps ZTP(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 리포지토리에 대한 필수 변경 사항

ztp-site-generate 컨테이너를 이전 버전의 ZTP(ZTP)에서 4.10 이상으로 업그레이드하는 경우 Git 리포지토리의 콘텐츠에 대한 추가 요구 사항이 있습니다. 리포지토리의 기존 콘텐츠는 이러한 변경 사항을 반영하도록 업데이트해야 합니다.

참고

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

  • PolicyGenerator 파일을 변경해야 합니다.

    모든 PolicyGenerator 파일은 ztp 붙은 네임스페이스에 생성해야 합니다. 이렇게 하면 GitOps ZTP 애플리케이션이 RHSM(Red Hat Advanced Cluster Management)에서 내부적으로 정책을 관리하는 방식과 충돌하지 않고 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
    참고

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

    PolicyGenerator kustomization 파일은 generator 섹션의 모든 PolicyGenerator YAML 파일과 resources 섹션의 Namespace 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은 hub 클러스터에서 정책 배포를 관리합니다.

    참고

    site Config{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 인스턴스를 관련 MCCE(Multicluster engine) 서브스크립션 이미지로 패치합니다. 이전에 추출한 패치 파일을 사용자 환경의 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 이상에서는 다중 클러스터 엔진에서 기본적으로 cluster-proxy-addon 기능을 활성화합니다. 다음 패치를 적용하여 cluster-proxy-addon 기능을 비활성화하고 이 애드온을 담당하는 관련 허브 클러스터 및 관리 Pod를 제거합니다. 다음 명령을 실행합니다.

    $ 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 Container Platform 버전의 ISO 이미지 가져오기

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

사전 요구 사항

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

프로세스

  1. 다음 명령을 실행하여 spec.osImages 필드를 업데이트하려면 AgentServiceConfig CR을 엽니다.

    $ 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.16"
          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 구성 변경 사항 롤아웃

권장 변경 사항 구현으로 인해 구성 변경이 업그레이드에 포함된 경우 업그레이드 프로세스에서 hub 클러스터에 정책 CR 세트를 Non-Compliant 상태로 만듭니다. GitOps ZTP(ZTP) 버전 4.10 및 이후 ztp-site-generate 컨테이너를 사용하면 이러한 정책은 정보 모드로 설정되고 사용자가 추가 단계없이 관리 클러스터로 푸시되지 않습니다. 이렇게 하면 변경 사항이 발생하는 시기(예: 유지 관리 기간 중) 및 동시에 업데이트되는 클러스터 수에 따라 클러스터에 잠재적으로 중단될 수 있습니다.

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

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

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

중요

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

PolicyGenerator 리소스에 대한 자세한 내용은 RHACM 정책 생성기 설명서를 참조하십시오.

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

GitOps ZTP(ZTP)는 Git에 저장된 매니페스트에서 설치 및 구성 CR을 생성합니다. 이러한 아티팩트는 RHACM(Red Hat Advanced Cluster Management), 지원 서비스, 토폴로지 Aware Lifecycle Manager(TALM)에서 CR을 사용하여 관리 클러스터를 설치하고 구성하는 중앙 집중식 허브 클러스터에 적용됩니다. GitOps ZTP 파이프라인의 구성 단계는 TALM을 사용하여 구성 CR의 애플리케이션을 클러스터에 오케스트레이션합니다. GitOps ZTP와 TALM 사이에는 몇 가지 주요 통합 지점이 있습니다.

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

새로 배포된 클러스터의 초기 구성을 자동화하기 위해 TALM은 hub 클러스터에서 모든 ManagedCluster CR의 상태를 모니터링합니다. 새로 생성된 ManagedCluster CR을 포함하여 ztp-done 레이블이 적용되지 않은 ManagedCluster CR을 사용하면 TALM에서 다음과 같은 특성을 가진 ClusterGroupUpgrade CR을 자동으로 생성합니다.

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

활성화된 ClusterGroupUpgrade 의 자동 생성을 통해 사용자 개입 없이도 초기 무차별 클러스터 배포를 진행할 수 있습니다. 또한 ztp-done 레이블이 없는 ManagedCluster 에 대한 ClusterGroupUpgrade CR을 자동으로 생성하면 클러스터에 대한 ClusterGroupUpgrade CR을 간단히 삭제하여 실패한 GitOps ZTP 설치를 다시 시작할 수 있습니다.

웨이브

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

참고

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

TALM은 웨이브 주석에 의해 지정된 순서로 구성 정책을 적용합니다. TALM은 다음 정책으로 이동하기 전에 각 정책이 준수될 때까지 기다립니다. 각 CR의 웨이브 주석이 클러스터에 적용되려면 해당 CR의 사전 요구 사항을 고려해야 합니다. 예를 들어 Operator의 구성과 동시에 Operator를 설치해야 합니다. 마찬가지로 Operator 서브스크립션 이전 또는 동시에 Operator의 CatalogSource 를 설치해야 합니다. 각 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 로 설정된 owner 참조가 있습니다. 이 참조를 사용하면 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 Container Platform 배포
  • 클러스터 정책 및 사이트 서브스크립션 생성
  • 서버 운영 체제에 필요한 네트워크 구성 만들기
  • 프로파일 Operator 배포 및 성능 프로필, PTP 및 SR-IOV와 같은 필요한 소프트웨어 관련 구성 수행

4.2.1. 관리 사이트 설치 프로세스 개요

허브 클러스터에 관리 사이트 CR(사용자 정의 리소스)을 적용한 후 다음 작업이 자동으로 수행됩니다.

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

hub 클러스터에서 관리 클러스터의 Agent CR이 생성되면 Discovery 이미지 ISO 프로세스가 완료됩니다.

중요

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

4.3. 관리형 베어 메탈 호스트 시크릿 생성

관리 베어 메탈 호스트에 필요한 Secret CR(사용자 정의 리소스)을 hub 클러스터에 추가합니다. BMC(Baseboard Management Controller)에 액세스하려면 GitOps ZTP(ZTP) 파이프라인의 시크릿과 지원되는 설치 프로그램 서비스에서 레지스트리에서 클러스터 설치 이미지를 가져오는 시크릿이 필요합니다.

참고

보안은 site Config CR에서 이름으로 참조됩니다. 네임스페이스는 site Config 네임스페이스와 일치해야 합니다.

프로세스

  1. OpenShift 및 모든 추가 기능 클러스터 Operator 설치에 필요한 호스트 BMC(Baseboard Management Controller)에 대한 인증 정보와 풀 시크릿을 포함하는 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 ZTP(ZTP) 워크플로는 관리형 베어 메탈 호스트에서 OpenShift Container Platform 설치 프로세스의 일부로 Discovery ISO를 사용합니다. InfraEnv 리소스를 편집하여 Discovery ISO에 대한 커널 인수를 지정할 수 있습니다. 이는 특정 환경 요구 사항이 있는 클러스터 설치에 유용합니다. 예를 들어 클러스터의 정적 네트워킹을 용이하게 하거나 설치 중에 루트 파일 시스템을 다운로드하기 전에 DHCP 주소를 수신하도록 Discovery ISO에 rd.net.timeout.carrier 커널 인수를 구성합니다.

참고

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

사전 요구 사항

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

프로세스

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

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

      참고

      이 예제의 InfraEnv CR은 site Config 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
      구성할 커널 인수를 지정합니다. 이 예제에서는 audit 커널 인수와 trace 커널 인수를 구성합니다.
  2. InfraEnv-example.yaml CR을 site Config CR이 있는 Git 리포지토리의 동일한 위치에 커밋하고 변경 사항을 내보냅니다. 다음 예제에서는 샘플 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을 사용하여 사용자 지정 커널 인수를 포함하여 인프라 환경을 구성합니다.

검증

커널 인수가 적용되었는지 확인하려면 검색 이미지에서 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(사용자 정의 리소스) 및 관련 파일을 생성하고 ZTP( GitOps Zero Touch Provisioning) 클러스터 배포를 시작합니다.

사전 요구 사항

  • OpenShift CLI(oc)가 설치되어 있습니다.
  • cluster-admin 권한이 있는 사용자로 허브 클러스터에 로그인했습니다.
  • 필요한 설치 및 정책 CR을 생성하도록 허브 클러스터를 구성했습니다.
  • 사용자 지정 사이트 구성 데이터를 관리하는 Git 리포지토리를 생성하셨습니다. 리포지토리는 hub 클러스터에서 액세스할 수 있어야 하며 ArgoCD 애플리케이션의 소스 리포지토리로 구성해야 합니다. 자세한 내용은 " GitOps ZTP 사이트 구성 리포지토리 준비"를 참조하십시오.

    참고

    소스 리포지토리를 생성할 때 ztp-site-generate 컨테이너에서 추출한 argocd/deployment/argocd-openshift-gitops-patch.json patch-file을 사용하여 ArgoCD 애플리케이션을 패치하는지 확인합니다. " ArgoCD를 사용하여 허브 클러스터 구성"을 참조하십시오.

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

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

    프로세스

    1. hub 클러스터에 필요한 관리 클러스터 시크릿을 생성합니다. 이러한 리소스는 클러스터 이름과 일치하는 이름이 있는 네임스페이스에 있어야 합니다. 예를 들어 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 Secret CR을 생성합니다. 풀 시크릿에는 OpenShift Container Platform 및 필요한 모든 Operator를 설치하는 데 필요한 모든 인증 정보가 포함되어야 합니다. 자세한 내용은 "관리된 베어 메탈 호스트 시크릿 생성"을 참조하십시오.

      참고

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

    3. Git 리포지토리의 로컬 복제본에 클러스터의 site Config 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.16"
          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:
                # ../policygentemplates/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: "UEFI"
                  rootDeviceHints:
                    deviceName: "/dev/disk/by-path/pci-0000:01:00.0-scsi-0:2:0:0"
                  # 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 필드는 쉽게 읽을 수 있도록 확장됩니다.

      3. 외부/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에서 0일 추가 설치 시간 매니페스트로 crun을 활성화합니다.

        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. Git 리포지토리에서 SiteConfig CR 및 관련 kustomization.yaml 변경 사항을 커밋하고 변경 사항을 내보냅니다.

      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는 이전 단계에서 정책에서 파생된 Day 2 매니페스트를 적용하여 설치를 가속화합니다.

중요

GitOps ZTP의 가속화된 프로비저닝은 지원 설치 프로그램이 있는 단일 노드 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.10"
  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: 부분, GitOps ZTP는 가속화된 작업 매니페스트를 포함하지 않지만 다음 유형의 클러스터 설치 중에 생성된 policy-derived 오브젝트를 포함합니다.

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

이러한 부분적인 가속을 통해 성능 프로필,TunedContainerRuntimeConfig 유형의 리소스를 적용할 때 노드에서 수행한 재부팅 횟수를 줄일 수 있습니다. TALM은 표준 GitOps ZTP와 동일한 흐름에 따라 RHACM이 클러스터 가져오기를 완료한 후 정책에서 파생되는 Operator 서브스크립션을 설치합니다.

배포 규모에 따라 가속화된 ZTP의 이점이 증가합니다. accelerated-ztp 사용: 많은 클러스터에서 전체 이점을 제공합니다. 더 적은 수의 클러스터를 사용하면 설치 시간을 줄이는 것이 덜 중요합니다. 전체 가속 ZTP는 네임스페이스 뒤에 있으며 수동으로 제거해야 하는 문구에 완료된 작업을 남겨 둡니다.

accelerated-ztp를 사용하는 한 가지 이점: 부분적 이점은 주식 구현에 문제가 있거나 사용자 지정 기능이 필요한 경우 온스포크 작업의 기능을 재정의할 수 있다는 것입니다.

4.5.1.2. 가속화된 ZTP 프로세스

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

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

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

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

참고

OpenShift Container Platform 4.16에서는 GitOps ZTP 및 RHACM을 사용하여 IPsec 암호화를 배포하는 것은 단일 노드 OpenShift 클러스터에 대해서만 검증됩니다.

GitOps ZTP IPsec 구현에서는 리소스가 제한된 플랫폼에 배포하는 것으로 가정합니다. 따라서 단일 MachineConfig CR만 사용하여 기능을 설치하고 단일 노드 OpenShift 클러스터에 NMState Operator를 사전 요구 사항으로 설치할 필요가 없습니다.

사전 요구 사항

  • OpenShift CLI(oc)가 설치되어 있습니다.
  • cluster-admin 권한이 있는 사용자로 허브 클러스터에 로그인했습니다.
  • 관리 클러스터에 필요한 설치 및 정책 CR(사용자 정의 리소스)을 생성하도록 RHACM 및 허브 클러스터를 구성했습니다.
  • 사용자 지정 사이트 구성 데이터를 관리하는 Git 리포지토리를 생성했습니다. 리포지토리는 hub 클러스터에서 액세스할 수 있어야 하며 Argo CD 애플리케이션의 소스 리포지토리로 정의해야 합니다.
  • butane 유틸리티 버전 0.20.0 이상을 설치했습니다.
  • IPsec 끝점에 대한 PKCS#12 인증서와 PEM 형식의 CA 인증서가 있습니다.

프로세스

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

    interfaces:
    - name: hosta_conn
      type: ipsec
      libreswan:
        left: <cluster_node> 
    1
    
        leftid: '%fromcert'
        leftmodecfgclient: false
        leftcert: <left_cert> 
    2
    
        leftrsasigkey: '%cert'
        right: <external_host> 
    3
    
        rightid: '%fromcert'
        rightrsasigkey: '%cert'
        rightsubnet: <external_address> 
    4
    
        ikev2: insist 
    5
    
        type: tunnel
    Copy to Clipboard Toggle word wrap
    1
    & lt;cluster_node >를 클러스터 측 IPsec 터널의 클러스터 노드의 IP 주소 또는 DNS 호스트 이름으로 바꿉니다.
    2
    &lt ;left_cert&gt;를 IPsec 인증서 닉네임으로 바꿉니다.
    3
    을 외부 호스트 IP 주소 또는 DNS 호스트 이름으로 바꿉니다 <external_host>.
    4
    IPsec 터널의 다른 쪽에 있는 외부 호스트의 IP 주소 또는 서브넷으로 바꿉니다 <external_address>.
    5
    IKEv2 VPN 암호화 프로토콜만 사용하십시오. 더 이상 사용되지 않는 IKEv1을 사용하지 마십시오.
  3. ca.pemleft_server.p12 인증서를 optional-extra-manifest/ipsec 폴더에 추가합니다. 인증서 파일은 각 호스트의 NSS(Network Security Services) 데이터베이스에 필요합니다. 이러한 파일은 이후 단계에서 Butane 구성의 일부로 가져옵니다.

    1. left_server.p12: IPsec 엔드포인트의 인증서 번들
    2. ca.pem: 인증서에 서명한 인증 기관
  4. 사용자 지정 사이트 구성 데이터를 유지 관리하는 Git 리포지토리의 optional-extra-manifest/ipsec 폴더에서 쉘 프롬프트를 엽니다.
  5. optional-extra-manifest/ipsec/build.sh 스크립트를 실행하여 필요한 Butane 및 MachineConfig CR 파일을 생성합니다.

    출력 예

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

    1
    ipsec/build.sh 스크립트는 Butane 및 endpoint 구성 CR을 생성합니다.
    2
    네트워크와 관련된 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. Git 리포지토리에서 SiteConfig CR 변경 및 업데이트된 파일을 커밋하고 변경 사항을 푸시하여 관리 클러스터를 프로비저닝하고 IPsec 암호화를 구성합니다.

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

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

검증

IPsec 암호화가 관리형 단일 노드 OpenShift 클러스터에 성공적으로 적용되었는지 확인하려면 다음 단계를 수행합니다.

  1. 다음 명령을 실행하여 관리 클러스터의 디버그 Pod를 시작합니다.

    $ 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

    출력 예

    sh-5.1# ping 172.16.110.8
    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.3. 단일 노드 OpenShift SiteConfig CR 설치 참조

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

spec.cpuPartitioningMode

cpu CryostatingMode 값을 AllNodes 로 설정하여 워크로드 파티셔닝을 구성합니다. 구성을 완료하려면 PerformanceProfile CR에서 분리된 CPU와 예약된 CPU를 지정합니다.

참고

SiteConfig CR에서 cpu CryostatingMode 필드를 사용하여 워크로드 파티셔닝을 구성하는 것은 OpenShift Container Platform 4.13의 기술 프리뷰 기능입니다.

metadata.name

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

spec.clusterImageSetNameRef

사이트의 모든 클러스터에 대해 hub 클러스터에서 사용 가능한 이미지 세트를 구성합니다. hub 클러스터에서 지원되는 버전 목록을 보려면 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.yamlcommon: true 가 설정된 모든 클러스터에 적용되며, acmpolicygenerator/acm-group-du-sno-ranGen.yamlgroup-du-sno: "" 가 설정된 모든 클러스터에 적용됩니다.

spec.clusters.crTemplates.KlusterletAddonConfig

선택 사항: KlusterletAddonConfigKlusterletAddonConfig로 설정하여 클러스터에 생성된 기본 'KlusterletAddonConfig를 재정의합니다.

spec.clusters.nodes.hostName

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

spec.clusters.nodes.nodeLabels

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

spec.clusters.nodes.automatedCleaningMode

선택 사항: 디스크를 완전히 삭제하지 않고 값의 주석을 metadata 로 설정하여 디스크 파티션 테이블만 제거할 수 있습니다. 기본값은 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 주소 지정에 대한 자세한 내용은 "추가 리소스" 섹션을 참조하십시오.

참고

지금까지 엣지 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& gt; 값이 선호됩니다. 안정적인 식별자의 자세한 목록은 "루트 장치 팁 정보" 섹션을 참조하십시오.

spec.clusters.nodes.ignitionConfigOverride

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

spec.clusters.nodes.nodeNetwork

노드의 네트워크 설정을 구성합니다.

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

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

4.6. 관리형 클러스터 설치 진행 상황 모니터링

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

사전 요구 사항

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

프로세스

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

  1. Assisted Service Operator는 클러스터에 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.7. 설치 CR을 검증하여 GitOps ZTP 문제 해결

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

사전 요구 사항

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

프로세스

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

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

    오브젝트가 반환되지 않은 경우 다음 단계를 사용하여 SiteConfig 파일에서 설치 CR로 ArgoCD 파이프라인 흐름의 문제를 해결합니다.

  2. hub 클러스터의 SiteConfig CR을 사용하여 ManagedCluster CR이 생성되었는지 확인합니다.

    $ oc get managedcluster
    Copy to Clipboard Toggle word wrap
  3. ManagedCluster 가 없는 경우 클러스터 애플리케이션이 Git 리포지토리의 파일을 hub 클러스터와 동기화하지 않았는지 확인합니다.

    $ 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. 자세한 site Config 오류를 보려면 다음 단계를 완료하십시오.

      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.8. SuperMicro 서버에서 GitOps ZTP 가상 미디어 부팅 문제 해결

Supermicro X11 서버는 https 프로토콜을 사용하여 이미지를 제공하는 경우 가상 미디어 설치를 지원하지 않습니다. 결과적으로 이 환경의 단일 노드 OpenShift 배포가 대상 노드에서 부팅되지 않습니다. 이 문제를 방지하려면 hub 클러스터에 로그인하고 프로비저닝 리소스에서 TLS(Transport Layer Security)를 비활성화합니다. 이렇게 하면 이미지 주소가 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.9. GitOps ZTP 파이프라인에서 관리되는 클러스터 사이트 제거

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

사전 요구 사항

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

프로세스

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

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

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

  3. 선택 사항: 사이트를 영구적으로 제거하려면 Git 리포지토리에서 site Config 및 사이트별 PolicyGenerator 또는 PolicyGentemplate 파일을 제거해야 합니다.
  4. 선택 사항: 예를 들어 사이트를 재배포할 때 사이트를 일시적으로 제거하려면 site Config 및 사이트PolicyGenerator 또는 PolicyGentemplate CR을 Git 리포지토리에 남겨 둘 수 있습니다.

4.10. GitOps ZTP 파이프라인에서 더 이상 사용되지 않는 콘텐츠 제거

PolicyGenerator 또는 PolicyGentemplate 구성을 변경하면 정책 이름 변경과 같이 더 이상 사용되지 않는 정책이 생성되는 경우 다음 절차를 사용하여 더 이상 사용되지 않는 정책을 제거합니다.

사전 요구 사항

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

프로세스

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

    참고

    Git 리포지토리에서 GitOps Zero Touch Provisioning(ZTP) 정책을 제거하면 허브 클러스터에서도 해당 정책을 제거해도 관리 클러스터의 구성에 영향을 미치지 않습니다. 해당 정책에서 관리하는 정책 및 CR은 관리 클러스터에 남아 있습니다.

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

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

4.11. GitOps ZTP 파이프라인 종료

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

사전 요구 사항

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

프로세스

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

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

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

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

참고

여러 개의 관리 클러스터를 생성하는 경우 ZTP를 사용하여 멀리 엣지 사이트 배포에 설명된 site Config 방법을 사용하십시오.

중요

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

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

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

사전 요구 사항

  • 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.16 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.yamlsite-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.16"
      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:
            # ../policygentemplates/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: "UEFI"
              rootDeviceHints:
                deviceName: "/dev/disk/by-path/pci-0000:01:00.0-scsi-0:2:0:0"
              # 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 을 처리하여 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.16 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.16 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 참조를 사용하여 Day 2 구성 CR을 생성하고 내보냅니다. 다음 명령을 실행합니다.

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

      $ mkdir -p ./ref
      Copy to Clipboard Toggle word wrap
    2. Day 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.16 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의 기반으로 사용합니다. "단일 관리 클러스터 설치"에 설명된 대로 hub 클러스터에 설치 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. 관리형 베어 메탈 호스트 시크릿 생성

관리 베어 메탈 호스트에 필요한 Secret CR(사용자 정의 리소스)을 hub 클러스터에 추가합니다. BMC(Baseboard Management Controller)에 액세스하려면 GitOps ZTP(ZTP) 파이프라인의 시크릿과 지원되는 설치 프로그램 서비스에서 레지스트리에서 클러스터 설치 이미지를 가져오는 시크릿이 필요합니다.

참고

보안은 site Config CR에서 이름으로 참조됩니다. 네임스페이스는 site Config 네임스페이스와 일치해야 합니다.

프로세스

  1. OpenShift 및 모든 추가 기능 클러스터 Operator 설치에 필요한 호스트 BMC(Baseboard Management Controller)에 대한 인증 정보와 풀 시크릿을 포함하는 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 ZTP(ZTP) 워크플로는 관리형 베어 메탈 호스트에서 OpenShift Container Platform 설치 프로세스의 일부로 Discovery ISO를 사용합니다. InfraEnv 리소스를 편집하여 Discovery ISO에 대한 커널 인수를 지정할 수 있습니다. 이는 특정 환경 요구 사항이 있는 클러스터 설치에 유용합니다. 예를 들어 클러스터의 정적 네트워킹을 용이하게 하거나 설치 중에 루트 파일 시스템을 다운로드하기 전에 DHCP 주소를 수신하도록 Discovery ISO에 rd.net.timeout.carrier 커널 인수를 구성합니다.

참고

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

사전 요구 사항

  • OpenShift CLI(oc)가 설치되어 있습니다.
  • cluster-admin 권한이 있는 사용자로 hub 클러스터에 로그인했습니다.
  • 설치 및 구성 사용자 정의 리소스(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
구성할 커널 인수를 지정합니다. 이 예제에서는 audit 커널 인수와 trace 커널 인수를 구성합니다.
참고

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

검증

커널 인수가 적용되었는지 확인하려면 검색 이미지에서 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. 단일 관리형 클러스터 설치

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

사전 요구 사항

  • OpenShift CLI(oc)가 설치되어 있습니다.
  • cluster-admin 권한이 있는 사용자로 hub 클러스터에 로그인했습니다.
  • BMC(Baseboard Management Controller) Secret 및 image pull-secret Secret 사용자 정의 리소스(CR)를 생성했습니다. 자세한 내용은 "관리된 베어 메탈 호스트 시크릿 생성"을 참조하십시오.
  • 대상 베어 메탈 호스트는 관리 클러스터의 네트워킹 및 하드웨어 요구 사항을 충족합니다.

프로세스

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

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

    $ oc apply -f clusterImageSet-4.16.yaml
    Copy to Clipboard Toggle word wrap
  3. cluster-namespace.yaml 파일에 Namespace 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. 관리 클러스터 설치 상태 모니터링

클러스터 상태를 확인하여 클러스터 프로비저닝에 성공했는지 확인합니다.

사전 요구 사항

  • 모든 사용자 지정 리소스가 구성 및 프로비저닝되었으며 Agent 사용자 지정 리소스는 관리 클러스터의 허브에 생성됩니다.

프로세스

  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, AgentIConnected 가 포함됩니다. 이러한 상태는 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 참조

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

참고

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

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

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

BareMetalHost

대상 베어 메탈 호스트의 BMC(Baseboard Management Controller)에 대한 연결 정보를 포함합니다.

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

InfraEnv

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

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

AgentClusterInstall

네트워킹 및 컨트롤 플레인 노드 수와 같은 관리형 클러스터 구성의 세부 정보를 지정합니다. 설치가 완료되면 클러스터 kubeconfig 및 인증 정보를 표시합니다.

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

ClusterDeployment

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

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

NMStateConfig

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

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

agent

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

대상 시스템의 검색 이미지가 부팅될 때 허브에서 자동으로 생성됩니다.

ManagedCluster

허브에서 클러스터를 관리하는 경우 이를 가져오고 알고 있어야 합니다. 이 Kubernetes 오브젝트는 해당 인터페이스를 제공합니다.

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

KlusterletAddonConfig

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

ManagedCluster 리소스에 배포할 애드온 서비스를 허브에 지시합니다.

네임스페이스

허브에 존재하는 ManagedCluster 리소스의 논리 공간입니다. 사이트당 고유합니다.

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

Secret

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

  • BMC Secret 은 사용자 이름과 암호를 사용하여 대상 베어 메탈 호스트에 인증합니다.
  • 이미지 가져오기 시크릿에 는 대상 베어 메탈 호스트에 설치된 OpenShift Container Platform 이미지에 대한 인증 정보가 포함되어 있습니다.

ClusterImageSet

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

OpenShift Container Platform 이미지를 제공하기 위해 리소스에 전달됩니다.

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

6.1. OpenShift Container Platform에서 짧은 대기 시간 애플리케이션 실행

OpenShift Container Platform을 사용하면 여러 기술 및 특수 하드웨어 장치를 사용하여 COTS(Commer off-the-shelf) 하드웨어에서 실행되는 애플리케이션에 대해 대기 시간이 짧은 처리를 수행할 수 있습니다.

RHCOS의 실시간 커널
높은 수준의 프로세스 결정으로 워크로드가 처리되도록 합니다.
CPU 격리
CPU 스케줄링 지연을 방지하고 CPU 용량을 일관되게 사용할 수 있도록 합니다.
NUMA 인식 토폴로지 관리
메모리 및 대규모 페이지를 CPU 및 PCI 장치와 조정하여 보장된 컨테이너 메모리 및 대규모 페이지를 NUMA(Non-Uniform Memory Access) 노드에 고정합니다. 모든 QoS(Quality of Service) 클래스에 대한 Pod 리소스는 동일한 NUMA 노드에 남아 있습니다. 이렇게 하면 대기 시간이 줄어들고 노드의 성능이 향상됩니다.
대규모 페이지 메모리 관리
대규모 페이지 크기를 사용하면 페이지 테이블에 액세스하는 데 필요한 시스템 리소스의 양을 줄임으로써 시스템 성능이 향상됩니다.
PTP를 사용한 정확한 타이밍 동기화
네트워크의 노드 간 동기화를 통해 마이크로초 이하의 정확도를 사용할 수 있습니다.

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

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

최소

4에서 8 vCPU

32GB RAM

120GB

참고

하나의 vCPU는 하나의 물리적 코어와 동일합니다. 그러나 동시 멀티스레딩(SMT) 또는 Hyper-Threading을 활성화하면 다음 공식을 사용하여 하나의 물리적 코어를 나타내는 vCPU 수를 계산합니다.

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

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

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

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

프로세스

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

    중요

    정확한 펌웨어 구성은 특정 하드웨어 및 네트워크 요구 사항에 따라 다릅니다. 다음 샘플 구성은 예시적인 목적으로만 사용됩니다.

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

    CPU 전원 및 성능 정책

    성능

    코어 빈도 확장 해제

    비활성화됨

    성능 P-limit

    비활성화됨

    향상된 Intel SpeedStep ® Tech

    활성화됨

    Intel Configurable TDP

    활성화됨

    구성 가능한 TDP 수준

    수준 2

    Intel® Turbo Boost Technology

    활성화됨

    에너지 효율성:

    비활성화됨

    하드웨어 P-States

    비활성화됨

    패키지 C-State

    C0/C1 상태

    C1E

    비활성화됨

    프로세서 C6

    비활성화됨

참고

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

6.4. 관리되는 클러스터 네트워크에 대한 연결 사전 요구 사항

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

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

    • 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에서 워크로드 파티셔닝

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

GitOps ZTP(ZTP)를 사용하여 워크로드 파티셔닝을 구성하려면 클러스터를 설치하는 데 사용하는 SiteConfig CR(사용자 정의 리소스)에서 cpu CryostatingMode 필드를 구성하고 호스트에 분리예약된 CPU를 구성하는 PerformanceProfile CR을 적용합니다.

SiteConfig CR을 구성하면 클러스터 설치 시 워크로드 파티셔닝을 활성화하고 PerformanceProfile CR을 적용하면 예약 및 분리된 세트에 대한 CPU의 특정 할당이 구성됩니다. 이 두 단계는 클러스터 프로비저닝 중에 서로 다른 지점에서 수행됩니다.

참고

SiteConfig CR에서 cpu CryostatingMode 필드를 사용하여 워크로드 파티셔닝을 구성하는 것은 OpenShift Container Platform 4.13의 기술 프리뷰 기능입니다.

또는 SiteConfig 사용자 정의 리소스(CR)의 cpuset 필드와 PolicyGenerator 또는 PolicyGentemplate CR 그룹의 reserved 필드를 사용하여 클러스터 관리 CPU 리소스를 지정할 수 있습니다. GitOps ZTP 파이프라인은 이러한 값을 사용하여 워크로드 파티셔닝 MachineConfig CR(cpuset) 및 단일 노드 OpenShift 클러스터를 구성하는 PerformanceProfile CR(reserved)의 필수 필드를 채웁니다. 이 방법은 OpenShift Container Platform 4.14의 일반 가용성 기능입니다.

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

중요

예약분리된 CPU 세트가 서로 겹치지 않도록 합니다.

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

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

참고

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

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

6.6.1. 워크로드 파티셔닝

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

참고

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

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

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

워크로드 파티셔닝에 권장되는 site Config 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
cpu CryostatingMode 필드를 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.6.2. 플랫폼 관리 공간 감소

플랫폼의 전체 관리 공간을 줄이기 위해 MachineConfig CR(사용자 정의 리소스)을 호스트 운영 체제와 별도로 새 네임스페이스에 모든 Kubernetes별 마운트 지점을 배치해야 합니다. 다음 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.6.3. SCTP

SCTP(스트림 제어 전송 프로토콜)는 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.6.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.6.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.6.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.6.7. crun을 기본 컨테이너 런타임으로 구성

다음 ContainerRuntimeConfig CR(사용자 정의 리소스)은 crun을 컨트롤 플레인 및 작업자 노드의 기본 OCI 컨테이너 런타임으로 구성합니다. crun 컨테이너 런타임은 빠르고 가벼우며 메모리 공간이 적습니다.

중요

최적의 성능을 위해 단일 노드 OpenShift, 3-노드 OpenShift 및 표준 클러스터에서 컨트롤 플레인 및 작업자 노드에 대해 crun을 활성화합니다. CR을 적용할 때 클러스터 재부팅을 방지하려면 변경 사항을 GitOps ZTP 추가 날짜 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. 설치 후 클러스터 구성 권장

클러스터 설치가 완료되면 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.7.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.7.2. Operator 서브스크립션

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

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

Operator 서브스크립션마다 Operator를 가져올 채널을 지정합니다. 권장 채널은 안정적입니다.

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

작은 정보

서브스크립션에 수동 모드를 사용합니다. 이를 통해 예약된 유지 관리 창에 맞게 Operator 업데이트의 타이밍을 제어할 수 있습니다.

권장 Local Storage 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 Operator 서브스크립션 (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 Operator 서브스크립션(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

권장 Cluster Logging Operator 서브스크립션 (ClusterLogSubscription.yaml)

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

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

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

권장되는 클러스터 로깅 구성 (ClusterLogging.yaml)

apiVersion: logging.openshift.io/v1
kind: ClusterLogging
metadata:
  name: instance
  namespace: openshift-logging
  annotations: {}
spec:
  managementState: "Managed"
  collection:
    type: "vector"
Copy to Clipboard Toggle word wrap

권장되는 로그 전달 구성 (ClusterLogForwarder.yaml)

apiVersion: "logging.openshift.io/v1"
kind: ClusterLogForwarder
metadata:
  name: instance
  namespace: openshift-logging
  annotations: {}
spec:
#  outputs: $outputs
#  pipelines: $pipelines

#apiVersion: "logging.openshift.io/v1"
#kind: ClusterLogForwarder
#metadata:
#  name: instance
#  namespace: openshift-logging
#spec:
#  outputs:
#    - type: "kafka"
#      name: kafka-open
#      url: tcp://10.46.55.190:9092/test
#  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

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

6.7.4. 성능 프로필

DU 워크로드를 실행하는 단일 노드 OpenShift 클러스터에는 실시간 호스트 기능 및 서비스를 사용하기 위해 Node Tuning Operator 성능 프로필이 필요합니다.

참고

이전 버전의 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

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

  • TunedPerformancePatch.yaml에서 include=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를 설정합니다. 모든 Hyper-Threading 쌍이 일치하는지 확인합니다.

중요

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

spec.cpu.reserved

예약된 CPU를 설정합니다. 워크로드 파티셔닝이 활성화되면 시스템 프로세스, 커널 스레드 및 시스템 컨테이너 스레드가 이러한 CPU로 제한됩니다. 분리되지 않은 모든 CPU를 예약해야 합니다.

spec.hugepages.pages

  • 대규모 페이지 수 설정 (count)
  • 대규모 페이지 크기(크기)를 설정합니다.
  • nodehugepages 가 할당된 NUMA 노드로 설정합니다(노드)

spec.realTimeKernel

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

spec.workloadHints

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

6.7.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.7.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,300
                - "-P"
                - "29.20"
                - "-p"
                - "CFG-MSG,1,38,300"
              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:
    enableEventPublisher: true
    transportHost: "http://ptp-event-publisher-service-NODE_NAME.openshift-ptp.svc.cluster.local:9043"
Copy to Clipboard Toggle word wrap

6.7.7. 확장된 Tuned 프로파일

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 클러스터에 대한 tuned CR 옵션
tuned CR 필드설명

spec.profile.data

  • spec.profile.data 에서 설정한 include 행은 연결된 PerformanceProfile CR 이름과 일치해야 합니다. 예를 들어 include=openshift-node-performance-${PerformanceProfile.metadata.name}.

6.7.8. SR-IOV

SR-IOV(Single Root I/O Virtualization)는 일반적으로 프론트haul 및 midhaul 네트워크를 활성화하는 데 사용됩니다. 다음 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가 활성화된 상태에서 시작하고 사용자 매니페스트를 확인한 후에만 비활성화합니다. 인젝터가 비활성화된 경우 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 Pod를 비활성화하여 관리 Pod 수를 줄입니다. OperatorWebhook Pod가 활성화된 상태에서 시작하고 사용자 매니페스트를 확인한 후에만 비활성화합니다.

권장되는 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

midhaul 네트워크의 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

deviceTypevfio-pci 또는 netdevice 로 구성합니다. Mellanox NIC의 경우 deviceType: netdevice, isRdma: true 를 설정합니다. Intel 기반 NIC의 경우 deviceType: vfio-pciisRdma: false 를 설정합니다.

spec.nicSelector.pfNames

fronthaul 네트워크에 연결된 인터페이스를 지정합니다.

spec.numVfs

fronthaul 네트워크의 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.7.9. Console Operator

클러스터 기능 기능을 사용하여 Console Operator가 설치되지 않도록 합니다. 노드를 중앙 집중식으로 관리하면 필요하지 않습니다. Operator를 제거하면 애플리케이션 워크로드에 대한 추가 공간 및 용량이 제공됩니다.

관리형 클러스터를 설치하는 동안 콘솔 운영자를 비활성화하려면 SiteConfig 사용자 정의 리소스(CR)의 spec.clusters.0.installConfigOverrides 필드에 다음을 설정합니다.

installConfigOverrides:  "{\"capabilities\":{\"baselineCapabilitySet\": \"None\" }}"
Copy to Clipboard Toggle word wrap

6.7.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.7.11. Operator Lifecycle Manager

분산 단위 워크로드를 실행하는 단일 노드 OpenShift 클러스터에는 CPU 리소스에 대한 일관된 액세스 권한이 필요합니다. OLM(Operator Lifecycle Manager)은 정기적으로 Operator에서 성능 데이터를 수집하여 CPU 사용률이 증가합니다. 다음 ConfigMap CR(사용자 정의 리소스)은 OLM의 Operator 성능 데이터 수집을 비활성화합니다.

권장되는 클러스터 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.7.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.7.13. 네트워크 진단

DU 워크로드를 실행하는 단일 노드 OpenShift 클러스터에는 이러한 Pod에서 생성한 추가 로드를 줄이기 위해 Pod 간 네트워크 연결 검사가 덜 필요합니다. 다음 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.16에서 실행되는 vDU 애플리케이션의 클러스터 호스트 펌웨어를 구성합니다.

참고

다음 표는 vDU 클러스터 호스트 펌웨어 구성에 대한 일반적인 권장 사항입니다. 정확한 펌웨어 설정은 요구 사항과 특정 하드웨어 플랫폼에 따라 달라집니다. 펌웨어의 자동 설정은 제로 터치 프로비저닝 파이프라인에 의해 처리되지 않습니다.

Expand
표 7.1. 권장되는 클러스터 호스트 펌웨어 설정
펌웨어 설정설정설명

HyperTransport (HT)

활성화됨

HT(HyperTransport) 버스는 AMD에서 개발한 버스 기술입니다. HT는 호스트 메모리의 구성 요소와 다른 시스템 주변 장치 간의 고속 링크를 제공합니다.

UEFI

활성화됨

vDU 호스트에 대해 UEFI에서 부팅을 활성화합니다.

CPU 전원 및 성능 정책

성능

CPU 전원 및 성능 정책을 설정하여 에너지 효율성에 대한 성능을 위해 시스템을 최적화합니다.

코어 빈도 확장 해제

비활성화됨

Uncore Frequency Scaling을 비활성화하여 CPU의 코어가 아닌 부분 및 빈도가 독립적으로 설정되지 않도록 합니다.

Uncore frequency

최대

캐시 및 메모리 컨트롤러와 같은 CPU의 코어가 아닌 부분을 최대 작업 빈도로 설정합니다.

성능 P-limit

비활성화됨

프로세서의 Uncore 빈도 조정을 방지하려면 성능 P 제한을 비활성화합니다.

Enhanced Intel® SpeedStep Tech

활성화됨

향상된 Intel SpeedStep을 활성화하여 시스템의 프로세서 마운드 및 코어 빈도를 동적으로 조정하여 호스트의 전력 소비 및 열 생산량을 줄일 수 있습니다.

Intel® Turbo Boost Technology

활성화됨

Intel 기반 CPU용 Cryostat Boost Technology를 사용하면 전력, 현재 및 온도 사양 제한 미만으로 작동하는 경우 프로세서 코어가 정격된 작동 빈도보다 빠르게 실행될 수 있습니다.

Intel Configurable TDP

활성화됨

CPU에 대해 TDP(rmal Design Power)를 활성화합니다.

구성 가능한 TDP 수준

수준 2

TDP 수준은 특정 성능 평가에 필요한 CPU 전력 소비를 설정합니다. TDP 수준 2는 전력 소비로 CPU를 가장 안정적인 성능 수준으로 설정합니다.

에너지 효율성:

비활성화됨

프로세서는 에너지 효율성 기반 정책을 사용하지 못하도록 energy Efficient Cryostat를 비활성화합니다.

하드웨어 P-States

활성화 또는 비활성화

OS가 제어하는 P-States를 활성화하여 전원 저장 구성을 허용합니다. P 상태(성능 상태 )를 비활성화하여 전력 소비에 따른 성능을 위해 운영 체제 및 CPU를 최적화합니다.

Package C-State

C0/C1 상태

C0 또는 C1 상태를 사용하여 프로세서를 완전히 활성 상태(C0)로 설정하거나 소프트웨어(C1)에서 실행되는 CPU 내부 시계를 중지합니다.

C1E

비활성화됨

CPU Enhanced Halt(C1E)는 Intel 칩의 전원 저장 기능입니다. C1E를 비활성화하면 비활성 상태에서 운영 체제가 CPU에 halt 명령을 보내지 않습니다.

Processor C6

비활성화됨

C6 전원은 유휴 CPU 코어 및 캐시를 자동으로 비활성화하는 CPU 기능입니다. C6을 비활성화하면 시스템 성능이 향상됩니다.

하위 NUMA

비활성화됨

하위 NUMA 클러스터링은 프로세서 코어, 캐시 및 메모리를 여러 NUMA 도메인으로 나눕니다. 이 옵션을 비활성화하면 대기 시간에 민감한 워크로드의 성능이 향상될 수 있습니다.

참고

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

참고

C-states 및 OS가 제어하는 P-States 를 모두 활성화하여 Pod 전원 관리를 허용합니다.

7.2. vDU 애플리케이션을 실행하기 위한 권장 클러스터 구성

vDU(가상 분산 장치) 애플리케이션을 실행하는 클러스터에는 고도로 조정되고 최적화된 구성이 필요합니다. 다음 정보는 OpenShift Container Platform 4.16 클러스터에서 vDU 워크로드를 지원하는 데 필요한 다양한 요소를 설명합니다.

7.2.4. 실시간 커널 버전 확인

항상 OpenShift Container Platform 클러스터에서 최신 버전의 실시간 커널을 사용하십시오. 클러스터에서 사용 중인 커널 버전을 잘 모를 경우 현재 실시간 커널 버전을 릴리스 버전과 다음 절차와 비교할 수 있습니다.

사전 요구 사항

  • OpenShift CLI(oc)가 설치되어 있습니다.
  • cluster-admin 권한이 있는 사용자로 로그인합니다.
  • 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.16 클러스터에서 DU 애플리케이션을 배포하는 데 필요한 다양한 구성을 확인하는 방법을 설명합니다.

사전 요구 사항

  • 클러스터를 배포하고 vDU 워크로드에 맞게 조정했습니다.
  • OpenShift CLI(oc)가 설치되어 있습니다.
  • cluster-admin 권한이 있는 사용자로 로그인했습니다.

프로세스

  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

    중요

    추가 Operator는 워크로드 파티셔닝을 위해 주석을 달 수 없습니다. 이전 명령의 출력에서 -- separator 오른쪽에 값을 지정하지 않고 추가 Operator를 나열해야 합니다.

  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. 다음 명령을 실행하여 linuxptp-daemon Pod의 이름으로 $PTP_POD_NAME 변수를 설정합니다.

      $ 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과 100 ns 사이여야 합니다.
      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 보존 기간이 24h로 설정되어 있는지 확인합니다.

    $ 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, 워크로드 파티셔닝 및 커널 명령줄 인수에 대해 예약된 CPU가 최소 4개 이상 있는지 확인합니다.

    $ 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(사용자 정의 리소스)을 사용하여 설치 시 관리 클러스터에 사용자 정의 기능 및 구성을 배포할 수 있습니다.

8.1. GitOps ZTP 파이프라인에서 추가 설치 매니페스트 사용자 정의

GitOps ZTP(ZTP) 파이프라인의 설치 단계에 포함할 추가 매니페스트 세트를 정의할 수 있습니다. 이러한 매니페스트는 site Config CR (사용자 정의 리소스)에 연결되며 설치 중에 클러스터에 적용됩니다. 설치 시 MachineConfig CR을 포함하면 설치 프로세스의 효율성이 향상됩니다.

사전 요구 사항

  • 사용자 지정 사이트 구성 데이터를 관리하는 Git 리포지토리를 생성합니다. 리포지토리는 hub 클러스터에서 액세스할 수 있어야 하며 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-manifestztp-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 CR 및 /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 필터를 사용하여 사용자 정의 리소스 필터링

필터를 사용하면 GitOps ZTP(ZTP) 파이프라인의 설치 단계에서 사용할 다른 CR을 포함하거나 제외하도록 SiteConfig CR(사용자 정의 리소스)을 쉽게 사용자 지정할 수 있습니다.

SiteConfig CR의 include 또는 exclude 기본값 을 포함하거나 제외하려는 특정 추가Manifest RAN CR 목록과 함께 지정할 수 있습니다. include Default를 포함 으로 설정하면 GitOps ZTP 파이프라인이 설치 중에 /source-crs/extra-manifest 의 모든 파일을 적용합니다. excludeinclusionDefault 를 설정하면 그 반대입니다.

기본적으로 포함된 /source-crs/extra-manifest 폴더에서 개별 CR을 제외할 수 있습니다. 다음 예제에서는 설치 시 /source-crs/extra-manifest/03-sctp-machine-config-worker.yaml CR을 제외하도록 사용자 정의 단일 노드 OpenShift SiteConfig CR을 구성합니다.

일부 추가 필터링 시나리오도 설명되어 있습니다.

사전 요구 사항

  • 필요한 설치 및 정책 CR을 생성하도록 허브 클러스터를 구성했습니다.
  • 사용자 지정 사이트 구성 데이터를 관리하는 Git 리포지토리를 생성하셨습니다. 리포지토리는 hub 클러스터에서 액세스할 수 있어야 하며 Argo CD 애플리케이션의 소스 리포지토리로 정의해야 합니다.

프로세스

  1. GitOps ZTP 파이프라인이 03-sctp-machine-config-worker.yaml CR 파일을 적용하지 못하도록 site Config 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.16"
      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 파이프라인은 site Config 필터 명령에 따라 적용되는 CR을 모니터링하고 조정합니다.

  3. 선택 사항: GitOps ZTP 파이프라인이 클러스터 설치 중에 모든 /source-crs/extra-manifest CR을 적용하지 않도록 하려면 site Config 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 에 파일을 적용하지 못하도록 inclusionDefaultexclude 로 설정합니다.

    다음 예제에서는 사용자 지정 폴더 구조를 보여줍니다.

    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 리포지토리를 생성했습니다. 리포지토리는 hub 클러스터에서 액세스할 수 있어야 하며 Argo CD 애플리케이션의 소스 리포지토리로 정의해야 합니다.

프로세스

  1. bmac.agent-install.openshift.io/remove-agent-and-node-on-delete=true 주석을 포함하도록 SiteConfig CR을 업데이트하고 변경 사항을 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. crSuppression.BareMetalHost 주석을 포함하도록 SiteConfig CR을 업데이트하여 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의 상태는 프로비저닝 해제 로 변경되어야 합니다. BareMetalHost 가 프로비저닝 해제가 완료될 때까지 기다린 후 완전히 삭제됩니다.

검증

  1. 다음 명령을 실행하여 작업자 노드의 BareMetalHostAgent CR이 hub 클러스터에서 삭제되었는지 확인합니다.

    $ 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. 다음 명령을 실행하여 노드 레코드가 spoke 클러스터에서 삭제되었는지 확인합니다.

    $ oc get nodes
    Copy to Clipboard Toggle word wrap
    참고

    시크릿을 사용하여 작업하는 경우 ArgoCD에는 삭제 후 다시 동기화를 완료하기 위해 시크릿이 필요하므로 시크릿을 너무 빨리 삭제하면 문제가 발생할 수 있습니다. 현재 ArgoCD 동기화가 완료되면 노드 정리 후에만 보안을 삭제합니다.

다음 단계

노드를 다시 프로비저닝하려면 이전에 SiteConfig 에 추가된 변경 사항을 삭제하고, 변경 사항을 Git 리포지토리로 푸시하고 동기화가 완료될 때까지 기다립니다. 이렇게 하면 작업자 노드의 BareMetalHost CR이 다시 생성되고 노드를 다시 설치합니다.

9장. PolicyGenerator 리소스를 사용하여 클러스터 정책 관리

9.1. PolicyGenerator 리소스를 사용하여 관리되는 클러스터 정책 구성

적용된 정책 CR(사용자 정의 리소스)은 사용자가 프로비저닝하는 관리 클러스터를 구성합니다. RHACM(Red Hat Advanced Cluster Management)에서 Policy Generator CR을 사용하여 적용된 정책 CR을 생성하는 방법을 사용자 지정할 수 있습니다.

중요

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

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

참고

PolicyGenerator 리소스에 대한 자세한 내용은 RHACM 통합 정책 생성기 설명서를 참조하십시오.

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 릴리스에서 더 이상 사용되지 않습니다. RHACM(Advanced Cluster Management) 및 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에 정의된 NameNamespace 필드를 패치할 수 있지만 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 파일은 두 개의 RHACM(Red Hat Advanced Cluster Management) 정책을 정의합니다. 경찰은 CR에서 policyName 의 각 고유 값에 대해 하나씩 구성 CR 컬렉션을 관리합니다. ACM -common-du-ranGen.yamlpolicyDefaults.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 아래에 나열된 파일은 설치된 클러스터에 대한 Operator 정책을 생성합니다.

PolicyGenerator CR은 포함된 CR 수를 사용하여 구성할 수 있습니다. hub 클러스터에 다음 예제 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 필드를 기반으로 정책에 결합됩니다. policyName 에 동일한 값이 있는 동일한 PolicyGenerator 의 CR은 단일 정책으로 관리됩니다.
  • 연결이 끊긴 환경에서는 모든 Operator가 포함된 단일 인덱스로 레지스트리를 구성하여 모든 Operator에 대해 단일 카탈로그 소스를 사용합니다. 관리 클러스터의 각 추가 CatalogSource CR은 CPU 사용량을 늘립니다.
  • MachineConfig CR은 설치 중에 적용되도록 SiteConfig CR에서 extraManifests 로 포함되어야 합니다. 이를 통해 클러스터가 애플리케이션을 배포할 준비가 될 때까지 걸리는 전체 시간을 줄일 수 있습니다.
  • PolicyGenerator CR은 원하는 버전을 명시적으로 식별하기 위해 channel 필드를 재정의해야 합니다. 이렇게 하면 업그레이드 중에 소스 CR의 변경이 생성된 서브스크립션을 업데이트하지 않습니다.
참고

허브 클러스터에서 많은 수의 음성 클러스터를 관리할 때 정책 수를 최소화하여 리소스 소비를 줄입니다.

여러 구성 CR을 단일 또는 제한된 정책으로 그룹화하는 것이 허브 클러스터의 전체 정책 수를 줄이는 한 가지 방법입니다. 사이트 구성을 관리하기 위한 공통, 그룹 및 사이트 계층 구조를 사용하는 경우 사이트별 구성을 단일 정책으로 결합하는 것이 특히 중요합니다.

9.1.4. RAN 배포를 위한 PolicyGenerator CR

ZTP(ZTP) 파이프라인을 사용하여 클러스터에 적용되는 구성을 사용자 지정하려면 PolicyGenerator CR(사용자 정의 리소스)을 사용합니다. PolicyGenerator CR을 사용하면 클러스터의 구성 CR 세트를 관리하는 하나 이상의 정책을 생성할 수 있습니다. PolicyGenerator CR은 관리되는 CR 세트를 식별하고, 정책에 번들하고, 해당 CR을 래핑하는 정책을 빌드하며, 라벨 바인딩 규칙을 사용하여 정책을 클러스터와 연결합니다.

GitOps ZTP 컨테이너에서 얻은 참조 구성은 클러스터가 RAN(Radio Access Network) 분산 단위(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 및 기본 클러스터 튜닝에 일반적인 클러스터 기능을 제공하는 Operator 세트에 서브스크립션합니다.

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

단일 노드 OpenShift 클러스터에 필요한 다양한 정책을 생성하는 데 사용되는 PolicyGenerator CR입니다.

9.1.5. PolicyGenerator CR을 사용하여 관리 클러스터 사용자 정의

다음 절차에 따라 ZTP(ZTP) 파이프라인을 사용하여 프로비저닝하는 관리 클러스터에 적용할 수 있는 정책을 사용자 지정할 수 있습니다.

사전 요구 사항

  • OpenShift CLI(oc)가 설치되어 있습니다.
  • cluster-admin 권한이 있는 사용자로 허브 클러스터에 로그인했습니다.
  • 필요한 설치 및 정책 CR을 생성하도록 허브 클러스터를 구성했습니다.
  • 사용자 지정 사이트 구성 데이터를 관리하는 Git 리포지토리를 생성하셨습니다. 리포지토리는 hub 클러스터에서 액세스할 수 있어야 하며 Argo CD 애플리케이션의 소스 리포지토리로 정의해야 합니다.

프로세스

  1. 사이트별 구성 CR에 대한 PolicyGenerator CR을 생성합니다.

    1. out/argocd/example/acmpolicygenerator/ 폴더에서 CR에 대한 적절한 예를 선택합니다(예: acm-example-sno-site.yaml 또는 acm-example-multinode-site.yaml ).
    2. 예제 파일의 policyDefaults.placement.labelSelector 필드를 SiteConfig CR에 포함된 사이트별 레이블과 일치하도록 변경합니다. 예제 SiteConfig 파일에서 사이트별 레이블은 sites: example-sno 입니다.

      참고

      PolicyGenerator policyDefaults.placement.labelSelector 필드에 정의된 라벨이 관련 관리 클러스터 site Config 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. example 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 정책을 생성한 다음 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 구성이 완료되었는지 확인합니다.

9.1.7. 구성 정책 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. Status: Conditions: 를 확인하여 오류 로그를 표시합니다. 예를 들어 잘못된 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: Conditions: 에 로그 오류가 있는 경우 Status: Sync: shows Unknown or Error:

    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. RHACM(Red Hat Advanced Cluster Management)에서 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. 클러스터 네임스페이스에 복사되지 않은 모든 정책의 배치 규칙을 확인합니다. 해당 정책에 대한 배치matchSelectorManagedCluster 오브젝트의 라벨과 일치해야 합니다.

    $ 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
    • status-decisions에는 클러스터 이름이 포함되어야 합니다.
    • 사양에 있는 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가 아직 spoke에 적용되지 않았기 때문에 Operator 구성 정책이 적용되지 않습니다.

9.1.8. 정책 조정 다시 시작

예를 들어 ClusterGroupUpgrade CR(사용자 정의 리소스)이 시간 초과된 경우 예기치 않은 규정 준수 문제가 발생하면 정책 조정을 다시 시작할 수 있습니다.

프로세스

  1. ClusterGroupUpgrade CR은 관리 클러스터가 Ready 가 된 후 토폴로지 Aware Lifecycle Manager를 통해 ztp-install 네임스페이스에 생성됩니다.

    $ 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. UpgradeTimedOut 상태의 ClusterGroupUpgrade CR은 시간마다 정책 조정을 자동으로 다시 시작합니다. 정책을 변경한 경우 기존 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.9. 정책을 사용하여 적용된 관리 클러스터 CR 변경

정책을 통해 관리 클러스터에 배포된 CR(사용자 정의 리소스)에서 콘텐츠를 제거할 수 있습니다.

기본적으로 Policy Generator CR에서 생성된 모든 Policy CR에는 complianceType 필드가 musthave 로 설정되어 있습니다. 관리 클러스터의 CR에 지정된 콘텐츠가 모두 있으므로 제거된 콘텐츠가 없는 musthave 정책은 계속 호환됩니다. 이 구성을 사용하면 CR에서 콘텐츠를 제거할 때 TALM은 정책에서 콘텐츠를 제거하지만 콘텐츠는 관리 클러스터의 CR에서 제거되지 않습니다.

mustonlyhavecomplianceType 필드를 사용하면 정책에서 클러스터의 CR이 정책에 지정된 내용과 정확히 일치하도록 합니다.

사전 요구 사항

  • OpenShift CLI(oc)가 설치되어 있습니다.
  • cluster-admin 권한이 있는 사용자로 hub 클러스터에 로그인했습니다.
  • RHACM을 실행하는 허브 클러스터에서 관리 클러스터를 배포했습니다.
  • hub 클러스터에 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. 영향을 받는 정책의 complianceTypeacm-group-du-sno-ranGen.yaml 파일에서 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

    정책의 COMPLIANCE STATECompliant 인 경우 CR이 업데이트되고 원하지 않는 콘텐츠가 제거됨을 의미합니다.

  2. 관리 클러스터에서 다음 명령을 실행하여 정책이 대상 클러스터에서 제거되었는지 확인합니다.

    $ oc get <kind> <changed_cr_name>
    Copy to Clipboard Toggle word wrap

    결과가 없는 경우 관리 클러스터에서 CR이 제거됩니다.

9.1.10. GitOps ZTP 설치에 대해 수행됨 표시

GitOps ZTP(ZTP)는 클러스터의 GitOps ZTP 설치 상태를 확인하는 프로세스를 단순화합니다. GitOps ZTP 상태는 클러스터 설치, 클러스터 구성 및 GitOps ZTP의 세 단계로 이동합니다.

클러스터 설치 단계
클러스터 설치 단계는 ManagedCluster CR의 ManagedClusterJoinedManagedClusterAvailable 조건을 통해 표시됩니다. ManagedCluster CR에 이러한 조건이 없거나 조건이 False 로 설정되어 있는 경우 클러스터는 여전히 설치 단계에 있습니다. 설치에 대한 자세한 내용은 AgentClusterInstallClusterDeployment CR에서 확인할 수 있습니다. 자세한 내용은 "Troubleshooting GitOps ZTP"를 참조하십시오.
클러스터 구성 단계
클러스터 구성 단계는 클러스터의 ManagedCluster CR을 적용한 ztp 실행 라벨에 의해 표시됩니다.
GitOps ZTP 완료

GitOps ZTP 완료 단계에서 클러스터 설치 및 구성이 완료됩니다. 이는 ztp-running 레이블을 제거하고 ztp-done 레이블을 ManagedCluster CR에 추가하여 표시됩니다. ztp-done 레이블은 구성이 적용되었으며 기준 DU 구성이 클러스터 튜닝을 완료했음을 보여줍니다.

GitOps ZTP done 상태의 변경 사항은 RHACM(Red Hat Advanced Cluster Management) 검증 검증 정보 정책의 준수 상태에서 적용됩니다. 이 정책은 완료된 설치에 대한 기존 기준을 캡처하고 관리 클러스터의 GitOps ZTP 프로비저닝이 완료된 경우에만 규정 준수 상태로 이동하는지 확인합니다.

검증기 정보 정책은 클러스터 구성이 완전히 적용되고 Operator가 초기화를 완료하도록 합니다. 정책은 다음을 확인합니다.

  • 대상 MachineConfigPool 에는 예상되는 항목이 포함되어 있으며 업데이트가 완료되었습니다. 모든 노드를 사용할 수 있으며 성능이 저하되지 않습니다.
  • SR-IOV Operator는 syncStatus: Succeeded 가 있는 하나 이상의 SriovNetworkNodeState 에 표시된 대로 초기화를 완료했습니다.
  • PTP Operator 데몬 세트가 있습니다.

9.2. PolicyGenerator 리소스를 사용한 고급 관리 클러스터 구성

PolicyGenerator CR을 사용하여 관리 클러스터에 사용자 지정 기능을 배포할 수 있습니다.

중요

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

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

참고

PolicyGenerator 리소스에 대한 자세한 내용은 RHACM 정책 생성기 설명서를 참조하십시오.

9.2.1. 클러스터에 추가 변경 사항 배포

기본 GitOps ZTP(ZTP) 파이프라인 구성 외부에서 클러스터 구성을 변경해야 하는 경우 다음 세 가지 옵션이 있습니다.

GitOps ZTP 파이프라인이 완료된 후 추가 구성을 적용합니다.
GitOps ZTP 파이프라인 배포가 완료되면 배포된 클러스터가 애플리케이션 워크로드에 대해 준비됩니다. 이 시점에서 추가 Operator를 설치하고 요구 사항과 관련된 구성을 적용할 수 있습니다. 추가 구성이 플랫폼 성능 또는 할당된 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 리포지토리를 생성합니다. 리포지토리는 hub 클러스터에서 액세스할 수 있어야 하며 Argo CD의 소스 리포지토리로 정의해야 합니다.

프로세스

  1. 기존 콘텐츠의 기본 소스 CR을 검토합니다. ZTP(ZTP) 컨테이너에서 해당 CR을 추출하여 참조 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.16.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
    참고

    $…​ 을 포함하는 소스 CR의 모든 필드는 PolicyGenerator CR에 제공되지 않는 경우 생성된 CR에서 제거됩니다.

  3. acm-group-du-sno-ranGen.yaml 참조 파일에서 PerformanceProfile 에 대한 PolicyGenerator 항목을 업데이트합니다. 다음 예제 PolicyGenerator CR 스탠자는 적절한 CPU 사양을 제공하고 hugepages 구성을 설정하며 globallyDisableIrqLoadBalancing 을 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의 내용은 PolicyGenerator 에 있는 PerformanceProfile 항목의 메타데이터사양 콘텐츠를 소스 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에서 완전히 생략됩니다.

이에 대한 예외는 PolicyGenerator CR에서 mcp 값으로 대체되는 /source-crs YAML 파일의 $mcp 변수입니다. 예를 들어 example/policygentemplates/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. 필요한 PolicyGenerator CR을 업데이트하여 source-crs/custom-crssource-crs/elasticsearch 디렉터리에 추가한 콘텐츠에 대한 참조를 포함합니다. 예를 들면 다음과 같습니다.

    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. 변경된 PolicyGenerator 를 포함하도록 ClusterGroupUpgrade CR을 업데이트하고 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에 대한 정책 규정 준수 평가 시간 초과 구성

hub 클러스터에 설치된 RHACM(Red Hat Advanced Cluster Management)을 사용하여 관리 클러스터가 적용된 정책을 준수하는지 여부를 모니터링하고 보고합니다. RHACM은 정책 템플릿을 사용하여 사전 정의된 정책 컨트롤러 및 정책을 적용합니다. 정책 컨트롤러는 Kubernetes CRD(사용자 정의 리소스 정의) 인스턴스입니다.

PolicyGenerator 사용자 정의 리소스(CR)를 사용하여 기본 정책 평가 간격을 덮어쓸 수 있습니다. RHACM이 적용된 클러스터 정책을 다시 평가하기 전에 ConfigurationPolicy CR이 정책 준수 또는 비준수 상태에 있을 수 있는 기간을 정의하는 기간을 구성합니다.

GitOps ZTP(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. Git 리포지토리에서 PolicyGenerator CR 파일을 커밋하고 변경 사항을 내보냅니다.

검증

관리형 spoke 클러스터 정책이 예상 간격으로 모니터링되는지 확인합니다.

  1. 관리 클러스터에서 cluster-admin 권한이 있는 사용자로 로그인합니다.
  2. open-cluster-management-agent-addon 네임스페이스에서 실행 중인 Pod를 가져옵니다. 다음 명령을 실행합니다.

    $ 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 ZTP(ZTP) 설치 및 배포된 클러스터의 구성이 완료된 경우 신호를 알리는 검증기 정보를 생성합니다. 이 정책은 단일 노드 OpenShift 클러스터, 3-노드 클러스터 및 표준 클러스터의 배포에 사용할 수 있습니다.

프로세스

  1. 소스 파일 validatorCRs/informDuValidator.yaml 이 포함된 독립 실행형 PolicyGenerator CR(사용자 정의 리소스)을 생성합니다. 각 클러스터 유형에 대해 하나의 독립 실행형 PolicyGenerator CR만 있으면 됩니다. 예를 들어 이 CR은 단일 노드 OpenShift 클러스터에 대한 검증기 정보 정책을 적용합니다.

    single-node 클러스터 검증기 정보 정책 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-state 및 P-state를 비활성화하거나 제한해야 합니다. 이 구성을 사용하면 CPU가 일정한 빈도로 실행되며 일반적으로 최대 turbo 빈도입니다. 이렇게 하면 CPU가 항상 최대 속도로 실행되므로 높은 성능과 대기 시간이 단축됩니다. 이로 인해 워크로드에 대한 최적의 대기 시간이 발생합니다. 그러나 이는 또한 가장 높은 전력 소비를 초래하며, 이는 모든 워크로드에 필요하지 않을 수 있습니다.

워크로드는 높은 성능 및 낮은 대기 시간을 위해 C-state 및 P-state 설정을 비활성화해야 하는 중요한 워크로드로 분류할 수 있지만 중요하지 않은 워크로드는 C-state 및 P-state 설정을 사용하여 일부 대기 시간 및 성능을 저하시킵니다. ZTP(ZTP)를 사용하여 다음 세 가지 전원 상태를 구성할 수 있습니다.

  • 고성능 모드는 가장 높은 전력 소비에서 매우 낮은 대기 시간을 제공합니다.
  • 성능 모드는 비교적 높은 전력 소비로 짧은 대기 시간을 제공합니다.
  • 전력 절감은 대기 시간이 증가하여 전력 소비를 줄일 수 있습니다.

기본 구성은 대기 시간이 짧은 성능 모드입니다.

PolicyGenerator CR(사용자 정의 리소스)을 사용하면 ztp-site-generate 컨테이너의 GitOps 플러그인과 함께 제공된 기본 소스 CR에 추가 구성 세부 정보를 오버레이할 수 있습니다.

acm-group-du-sno-ranGen.yamlPolicyGenerator CR을 기반으로 생성된 PerformanceProfile CR의 workloadHints 필드를 업데이트하여 전원 상태를 구성합니다.

다음과 같은 일반적인 사전 요구 사항은 세 가지 전원 상태를 모두 구성하는 데 적용됩니다.

사전 요구 사항

  • 사용자 지정 사이트 구성 데이터를 관리하는 Git 리포지토리를 생성했습니다. 리포지토리는 hub 클러스터에서 액세스할 수 있어야 하며 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 참조 파일에서 PerformanceProfilePolicyGenerator 항목을 업데이트합니다.

    - 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 참조 파일에서 PerformanceProfilePolicyGenerator 항목을 업데이트합니다.

    - 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-states 및 OS 제어 P-states를 활성화했습니다.

프로세스

  1. 전원 저장 모드를 구성하려면 다음과 같이 out/argocd/example/acmpolicygenerator/ 에서 acm-group-du-sno-ranGen.yaml 참조 파일에서 PerformanceProfile 에 대한 PolicyGenerator 항목을 업데이트합니다. 추가 커널 인수 오브젝트를 통해 전원 저장 모드에 대한 CPU governor를 구성하는 것이 좋습니다.

    - 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 governor를 사용하는 것이 좋습니다. 그러나 온디맨드전원저장 을 포함한 다른 governor도 사용할 수 있습니다.
  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

    & lt;node-name >을 전원 상태를 확인할 노드의 이름으로 바꿉니다.

  3. 디버그 쉘 내에서 /host를 root 디렉터리로 설정합니다. 디버그 Pod는 Pod 내의 /host에 호스트의 루트 파일 시스템을 마운트합니다. root 디렉토리를 /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.16
    Copy to Clipboard Toggle word wrap
    참고

    스토리지 LVMO 서브스크립션은 더 이상 사용되지 않습니다. 향후 OpenShift Container Platform 릴리스에서는 스토리지 LVMO 서브스크립션을 사용할 수 없습니다. 대신 Storage LVMS 서브스크립션을 사용해야 합니다.

    OpenShift Container Platform 4.16에서는 LVMO 서브스크립션 대신 스토리지 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. PolicyGenerator CR을 사용하여 베어 메탈 이벤트 구성

GitOps ZTP 파이프라인을 사용하여 HTTP 또는 AMQP 전송을 사용하는 베어 메탈 이벤트를 구성할 수 있습니다.

참고

HTTP 전송은 PTP 및 베어 메탈 이벤트의 기본 전송입니다. 가능한 경우 PTP 및 베어 메탈 이벤트에 AMQP 대신 HTTP 전송을 사용합니다. AMQ Interconnect는 2024년 6월 30일부터 EOL입니다. AMQ Interconnect의 ELS(Extended Life Cycle Support)는 2029년 11월 29일에 종료됩니다. 자세한 내용은 Red Hat AMQ Interconnect 지원 상태를 참조하십시오.

9.2.9.1. HTTP 전송을 사용하는 베어 메탈 이벤트 구성

ZTP(ZTP) 파이프라인으로 배포하는 관리형 클러스터에서 HTTP 전송을 사용하는 베어 메탈 이벤트를 구성할 수 있습니다.

사전 요구 사항

  • OpenShift CLI(oc)가 설치되어 있습니다.
  • cluster-admin 권한이 있는 사용자로 로그인했습니다.
  • 사용자 지정 사이트 구성 데이터를 관리하는 Git 리포지토리를 생성했습니다.

프로세스

  1. acm-common-ranGen.yaml 파일에서 policies.manifests 에 다음 YAML을 추가하여 Bare Metal Event Relay Operator를 구성합니다.

    # Bare Metal Event Relay Operator
    - path: source-crs/BareMetalEventRelaySubscriptionNS.yaml
    - path: source-crs/BareMetalEventRelaySubscriptionOperGroup.yaml
    - path: source-crs/BareMetalEventRelaySubscription.yaml
    Copy to Clipboard Toggle word wrap
  2. 특정 그룹 구성 파일의 policies.manifestsHardwareEvent CR을 추가합니다(예: acm-group-du-sno-ranGen.yaml 파일).

    - path: source-crs/HardwareEvent.yaml 
    1
    
      patches:
        - spec:
            logLevel: debug
            nodeSelector: {}
            transportHost: http://hw-event-publisher-service.openshift-bare-metal-events.svc.cluster.local:9043
    Copy to Clipboard Toggle word wrap
    1
    각 BMC(Baseboard Management Controller)에는 단일 HardwareEvent CR만 필요합니다.
    참고

    OpenShift Container Platform 4.13 이상에서는 베어 메탈 이벤트와 함께 HTTP 전송을 사용할 때 HardwareEvent CR(사용자 정의 리소스)에서 transportHost 필드를 설정할 필요가 없습니다.

  3. 기타 필요한 변경 사항 및 파일을 사용자 지정 사이트 리포지토리와 병합합니다.
  4. 변경 사항을 사이트 구성 리포지토리로 내보내 GitOps ZTP가 있는 새 사이트에 베어 메탈 이벤트를 배포합니다.
  5. 다음 명령을 실행하여 Redfish 보안을 생성합니다.

    $ oc -n openshift-bare-metal-events create secret generic redfish-basic-auth \
    --from-literal=username=<bmc_username> --from-literal=password=<bmc_password> \
    --from-literal=hostaddr="<bmc_host_ip_addr>"
    Copy to Clipboard Toggle word wrap
9.2.9.2. AMQP 전송을 사용하는 베어 메탈 이벤트 구성

ZTP(ZTP) 파이프라인으로 배포하는 관리 클러스터에서 AMQP 전송을 사용하는 베어 메탈 이벤트를 구성할 수 있습니다.

참고

HTTP 전송은 PTP 및 베어 메탈 이벤트의 기본 전송입니다. 가능한 경우 PTP 및 베어 메탈 이벤트에 AMQP 대신 HTTP 전송을 사용합니다. AMQ Interconnect는 2024년 6월 30일부터 EOL입니다. AMQ Interconnect의 ELS(Extended Life Cycle Support)는 2029년 11월 29일에 종료됩니다. 자세한 내용은 Red Hat AMQ Interconnect 지원 상태를 참조하십시오.

사전 요구 사항

  • OpenShift CLI(oc)가 설치되어 있습니다.
  • cluster-admin 권한이 있는 사용자로 로그인했습니다.
  • 사용자 지정 사이트 구성 데이터를 관리하는 Git 리포지토리를 생성했습니다.

프로세스

  1. AMQ Interconnect Operator 및 Bare Metal Event Relay Operator를 구성하려면 acm-common-ranGen.yaml 파일의 policies.manifests 에 다음 YAML을 추가합니다.

    # AMQ Interconnect Operator for fast events
    - path: source-crs/AmqSubscriptionNS.yaml
    - path: source-crs/AmqSubscriptionOperGroup.yaml
    - path: source-crs/AmqSubscription.yaml
    # Bare Metal Event Relay Operator
    - path: source-crs/BareMetalEventRelaySubscriptionNS.yaml
    - path: source-crs/BareMetalEventRelaySubscriptionOperGroup.yaml
    - path: source-crs/BareMetalEventRelaySubscription.yaml
    Copy to Clipboard Toggle word wrap
  2. 사이트 구성 파일의 policies.manifestsInterconnect CR을 추가합니다(예: acm-example-sno-site.yaml 파일).

    - path: source-crs/AmqInstance.yaml
    Copy to Clipboard Toggle word wrap
  3. 특정 그룹 구성 파일의 policies.manifestsHardwareEvent CR을 추가합니다(예: acm-group-du-sno-ranGen.yaml 파일).

    - path: HardwareEvent.yaml
      patches:
        nodeSelector: {}
        transportHost: "amqp://<amq_interconnect_name>.<amq_interconnect_namespace>.svc.cluster.local" 
    1
    
        logLevel: "info"
    Copy to Clipboard Toggle word wrap
    1
    transportHost URL은 기존 AMQ Interconnect CR 이름과 네임스페이스 로 구성됩니다. 예를 들어 transportHost: "amqp://amq-router.amq-router.svc.cluster.local" 에서 AMQ 상호 연결 이름과 네임스페이스 는 모두 amq-router 로 설정됩니다.
    참고

    각 BMC(Baseboard Management Controller)에는 단일 HardwareEvent 리소스만 필요합니다.

  4. Git에서 PolicyGenerator 변경 사항을 커밋한 다음 사이트 구성 리포지토리로 변경 사항을 푸시하여 GitOps ZTP를 사용하여 베어 메탈 이벤트 모니터링을 새 사이트에 배포합니다.
  5. 다음 명령을 실행하여 Redfish 보안을 생성합니다.

    $ oc -n openshift-bare-metal-events create secret generic redfish-basic-auth \
    --from-literal=username=<bmc_username> --from-literal=password=<bmc_password> \
    --from-literal=hostaddr="<bmc_host_ip_addr>"
    Copy to Clipboard Toggle word wrap

9.2.10. 이미지 로컬 캐싱을 위해 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.10.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.10.2. PolicyGenerator CR을 사용하여 이미지 레지스트리 구성

PGT( PolicyGenerator ) CR을 사용하여 이미지 레지스트리를 구성하고 imageregistry 구성을 패치하는 데 필요한 CR을 적용합니다.

사전 요구 사항

  • 관리 클러스터에 디스크 파티션을 구성했습니다.
  • OpenShift CLI(oc)가 설치되어 있습니다.
  • cluster-admin 권한이 있는 사용자로 허브 클러스터에 로그인했습니다.
  • GitOps ZTP(ZTP)와 함께 사용할 사용자 지정 사이트 구성 데이터를 관리하는 Git 리포지토리를 생성했습니다.

프로세스

  1. 적절한 PolicyGenerator CR에서 스토리지 클래스, 영구 볼륨 클레임, 영구 볼륨 및 이미지 레지스트리 구성을 구성합니다. 예를 들어 개별 사이트를 구성하려면 acm-example-sno-site.yaml 파일에 다음 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- ECDSA에 대한 적절한 값을 설정합니다. ztp-deploy-ECDHE: "100" 은 참조된 소스 파일을 함께 그룹화할 수 있으므로 개발 또는 테스트에 적합합니다.
    2
    ImageRegistryPV.yaml 에서는 SiteConfig CR의 mount_point 필드에 설정된 값과 일치하도록 spec.local.path 필드가 /var/imageregistry 로 설정되어 있는지 확인합니다.
    중요

    complianceType: mustonlyhave for the - fileName: ImageRegistryConfig.yaml 설정을 설정하지 마십시오. 이로 인해 레지스트리 Pod 배포가 실패할 수 있습니다.

  2. Git에서 PolicyGenerator 변경 사항을 커밋한 다음 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) PolicyGenerator 정책을 사용하여 대상 클러스터에 적용된 변경 사항을 관리하고 제어합니다.

중요

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

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

9.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. 미러링된 플랫폼 이미지의 이미지 서명을 저장합니다. 플랫폼 업데이트를 위해 이미지 서명을 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
        Copy to Clipboard Toggle word wrap
        ${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.16 -o ~/upgrade-graph_stable-4.16
        Copy to Clipboard Toggle word wrap
  • Operator를 업데이트하려면 다음 작업을 수행해야 합니다.

    • Operator 카탈로그를 미러링합니다. "연결이 끊긴 클러스터에 사용하기 위해 Operator 카탈로그 미러링" 섹션의 절차에 따라 원하는 Operator 이미지가 미러링되었는지 확인합니다.

9.3.2. PolicyGenerator CR을 사용하여 플랫폼 업데이트 수행

TALM으로 플랫폼 업데이트를 수행할 수 있습니다.

사전 요구 사항

  • TALM(토폴로지 Aware Lifecycle Manager)을 설치합니다.
  • GitOps Zero Touch Provisioning (ZTP)을 최신 버전으로 업데이트합니다.
  • GitOps ZTP를 사용하여 하나 이상의 관리 클러스터를 프로비저닝합니다.
  • 원하는 이미지 저장소를 미러링합니다.
  • cluster-admin 권한이 있는 사용자로 로그인합니다.
  • hub 클러스터에 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.16
                      desiredUpdate:
                          version: 4.16.4
                      upstream: http://upgrade.example.com/images/upgrade-graph_stable-4.16
                    status:
                      history:
                          - state: Completed
                            version: 4.16.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을 표시합니다. 채널,업스트림desiredVersion 필드는 모두 이미지 사전 캐싱에 필요합니다.
      2
      ImageSignature.yaml 에는 필요한 릴리스 이미지의 이미지 서명이 포함되어 있습니다. 플랫폼 업데이트를 적용하기 전에 이미지 서명은 이미지를 확인하는 데 사용됩니다.
      3
      필요한 OpenShift Container Platform 이미지가 포함된 미러 저장소를 표시합니다. "환경 설정" 섹션의 절차를 따를 때 저장한 imageContentSources.yaml 파일에서 미러를 가져옵니다.

      PolicyGenerator CR은 다음 두 가지 정책을 생성합니다.

      • du-upgrade-platform-prep 정책은 플랫폼 업데이트에 대한 준비 작업을 수행합니다. 원하는 릴리스 이미지 서명에 대한 ConfigMap CR을 생성하고 미러링된 릴리스 이미지 저장소의 이미지 콘텐츠 소스를 생성하고, 원하는 업데이트 채널 및 연결이 끊긴 환경에서 관리 클러스터에서 연결할 수 있는 업데이트 그래프로 클러스터 버전을 업데이트합니다.
      • du-upgrade-platform-upgrade 정책은 플랫폼 업그레이드를 수행하는 데 사용됩니다.
    2. PolicyGenerator 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 - prep 및 du-upgrade-platform-upgrade 정책 및 대상 클러스터를 다음 예와 같이 cgu-platform-upgrade.yml 파일에 사용하여 플랫폼 업데이트 ClusterGroupUpdate CR의 콘텐츠를 저장합니다.

      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. 다음 명령을 실행하여 Hub 클러스터에 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. 업데이트 프로세스를 모니터링하고 사전 캐싱이 완료될 때까지 기다립니다. hub 클러스터에서 다음 명령을 실행하여 사전 캐싱 상태를 확인합니다.

      $ 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을 사용하여 Operator 업데이트를 수행할 수 있습니다.

사전 요구 사항

  • TALM(토폴로지 Aware Lifecycle Manager)을 설치합니다.
  • GitOps Zero Touch Provisioning (ZTP)을 최신 버전으로 업데이트합니다.
  • GitOps ZTP를 사용하여 하나 이상의 관리 클러스터를 프로비저닝합니다.
  • 번들 이미지에서 참조하는 원하는 인덱스 이미지, 번들 이미지 및 모든 Operator 이미지를 미러링합니다.
  • cluster-admin 권한이 있는 사용자로 로그인합니다.
  • hub 클러스터에 RHACM 정책을 생성합니다.

프로세스

  1. Operator 업데이트의 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.16 
      1
      
                      updateStrategy: 
      2
      
                          registryPoll:
                              interval: 1h
                    status:
                      connectionState:
                          lastObservedState: READY 
      3
      Copy to Clipboard Toggle word wrap
      1
      필요한 Operator 이미지를 포함합니다. 인덱스 이미지가 항상 동일한 이미지 이름 및 태그로 푸시되는 경우 이 변경이 필요하지 않습니다.
      2
      OLM(Operator Lifecycle Manager)이 registryPoll.interval 필드를 사용하여 새 Operator 버전의 인덱스 이미지를 폴링하는 빈도를 설정합니다. 이 변경 사항은 y-stream 및 z-stream Operator 업데이트를 위해 새 인덱스 이미지 태그가 항상 푸시되는 경우 필요하지 않습니다. registryPoll.interval 필드는 업데이트를 신속하게 처리하기 위해 더 짧은 간격으로 설정할 수 있지만 더 짧은 간격은 계산 부하를 늘리십시오. 이 문제를 대응하려면 업데이트가 완료되면 registryPoll.interval 을 기본값으로 복원할 수 있습니다.
      3
      카탈로그 연결의 관찰 상태를 표시합니다. READY 값을 사용하면 CatalogSource 정책이 준비되어 인덱스 Pod를 가져와 실행 중임을 나타냅니다. 이렇게 하면 TALM이 최신 정책 준수 상태를 기반으로 Operator를 업그레이드합니다.
    2. 이번 업데이트에서는 원하는 Operator 이미지가 포함된 새 인덱스 이미지로 redhat-operators-disconnected 카탈로그 소스를 업데이트하기 위해 하나의 정책인 du-upgrade-operator-catsrc-policy 를 생성합니다.

      참고

      Operator에 이미지 사전 캐싱을 사용하고 redhat-operators-disconnected 이외의 다른 카탈로그 소스의 Operator가 있는 경우 다음 작업을 수행해야 합니다.

      • 다른 카탈로그 소스에 대해 새 인덱스 이미지 또는 레지스트리 폴링 간격 업데이트를 사용하여 별도의 카탈로그 소스 정책을 준비합니다.
      • 다른 카탈로그 소스의 Operator에 대해 별도의 서브스크립션 정책을 준비합니다.

      예를 들어 원하는 SRIOV-FEC Operator는 certified-operators 카탈로그 소스에서 사용할 수 있습니다. 카탈로그 소스 및 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. Common PolicyGenerator CR에서 지정된 서브스크립션 채널이 있는 경우 제거합니다. GitOps ZTP 이미지의 기본 서브스크립션 채널은 업데이트에 사용됩니다.

      참고

      GitOps ZTP 4.16을 통해 적용되는 Operator의 기본 채널은 performance-addon-operator 를 제외하고 안정적입니다. OpenShift Container Platform 4.11부터 performance-addon-operator 기능이 node-tuning-operator 로 이동되었습니다. 4.10 릴리스의 경우 PAO의 기본 채널은 v4.10 입니다. 공통 PolicyGenerator CR에서 기본 채널을 지정할 수도 있습니다.

    4. PolicyGenerator CR 업데이트를 GitOps ZTP Git 리포지토리로 내보냅니다.

      rgocd는 Git 리포지토리에서 변경 사항을 가져와서 hub 클러스터에 정책을 생성합니다.

    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. 다음 예와 같이 Operator 업데이트 ClusterGroupUpgrade CR의 콘텐츠를 du-upgrade-operator-catsrc-policy 정책 및 공통 PolicyGenerator 에서 생성한 서브스크립션 정책과 대상 클러스터에서 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
      이 정책은 카탈로그 소스에서 Operator 이미지를 검색하려면 이미지 사전 캐싱 기능에 필요합니다.
      2
      정책에는 Operator 서브스크립션이 포함되어 있습니다. 참조 PolicyGenTemplates 의 구조와 내용을 따르는 경우 모든 Operator 서브스크립션이 common-subscriptions-policy 정책으로 그룹화됩니다.
      참고

      하나의 ClusterGroupUpgrade CR은 ClusterGroupUpgrade CR에 포함된 하나의 카탈로그 소스에서 서브스크립션 정책에 정의된 Operator의 이미지만 사전 캐시할 수 있습니다. SRIOV-FEC Operator의 예와 같이 원하는 Operator가 다양한 카탈로그 소스의 경우 SRIOV-FEC Operator 이미지에 대한 du-upgrade-fec-catsrc-policydu-upgrade-subscriptions-fec-policy 정책을 사용하여 다른 ClusterGroupUpgrade CR을 생성해야 합니다.

    2. 다음 명령을 실행하여 hub 클러스터에 ClusterGroupUpgrade CR을 적용합니다.

      $ oc apply -f cgu-operator-upgrade.yml
      Copy to Clipboard Toggle word wrap
  4. 선택 사항: Operator 업데이트의 이미지를 사전 캐시합니다.

    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에서 pre-caching을 활성화합니다.

      $ 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)에서 최신 정책 준수 상태로 인해 Operator 업데이트가 누락될 수 있습니다.

카탈로그 소스 업데이트 후 OLM(Operator Lifecycle Manager)에서 서브스크립션 상태를 업데이트하는 데 시간이 걸립니다. TALM에서 수정이 필요한지 여부를 결정하는 동안 서브스크립션 정책의 상태가 계속 준수로 표시될 수 있습니다. 결과적으로 서브스크립션 정책에 지정된 Operator가 업그레이드되지 않습니다.

이 시나리오를 방지하려면 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. 업데이트가 필요한 Operator의 새 구성을 가리키도록 Subscription 리소스를 업데이트합니다.

    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. 플랫폼 및 Operator 업데이트를 함께 수행

플랫폼 및 Operator 업데이트를 동시에 수행할 수 있습니다.

사전 요구 사항

  • TALM(토폴로지 Aware Lifecycle Manager)을 설치합니다.
  • GitOps Zero Touch Provisioning (ZTP)을 최신 버전으로 업데이트합니다.
  • GitOps ZTP를 사용하여 하나 이상의 관리 클러스터를 프로비저닝합니다.
  • cluster-admin 권한이 있는 사용자로 로그인합니다.
  • hub 클러스터에 RHACM 정책을 생성합니다.

프로세스

  1. "플랫폼 업데이트 수행" 섹션과 "Operator 업데이트 수행" 섹션에 설명된 단계에 따라 업데이트에 대한 PolicyGenerator CR을 생성합니다.
  2. 플랫폼 및 Operator 업데이트에 대한 prep 작업을 적용합니다.

    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 파일을 hub 클러스터에 적용합니다.

      $ 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
      이는 Operator를 업데이트할 카탈로그 소스 정보가 포함된 정책입니다. 관리 클러스터로 다운로드할 Operator 이미지를 결정하는 데 사전 캐싱 기능이 필요합니다.
      3
      Operator를 업데이트하는 정책입니다.
    2. 다음 명령을 실행하여 cgu-platform-operator-upgrade.yml 파일을 hub 클러스터에 적용합니다.

      $ oc apply -f cgu-platform-operator-upgrade.yml
      Copy to Clipboard Toggle word wrap
  4. 선택 사항: 플랫폼 및 Operator 업데이트의 이미지를 사전 캐시합니다.

    1. 다음 명령을 실행하여 ClusterGroupUpgrade CR에서 pre-caching을 활성화합니다.

      $ 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. 플랫폼 및 Operator 업데이트를 시작합니다.

    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
      참고

      플랫폼 및 Operator 업데이트의 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 함수를 방해하지 않도록 자동으로 hibernates를 탐지합니다. 그러나 최상의 성능을 보장하기 위해 OpenShift Container Platform 4.11 클러스터에서 Performance Addon Operator를 제거하십시오.

사전 요구 사항

  • 사용자 지정 사이트 구성 데이터를 관리하는 Git 리포지토리를 생성합니다. 리포지토리는 hub 클러스터에서 액세스할 수 있어야 하며 ArgoCD의 소스 리포지토리로 정의해야 합니다.
  • OpenShift Container Platform 4.11 이상으로 업데이트합니다.
  • cluster-admin 권한이 있는 사용자로 로그인합니다.

프로세스

  1. cm-common-ranGen.yaml 파일에서 Performance Addon Operator 네임스페이스, Operator group 및 서브스크립션에 대해 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. 토폴로지 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 group 및 서브스크립션 CR을 삭제합니다.
  6. 사용자 정의 사이트 리포지토리와 변경 사항을 병합하고 ArgoCD 애플리케이션이 변경 사항을 허브 클러스터에 동기화할 때까지 기다립니다. 정책은 그대로 유지됩니다.

9.3.7. PolicyGenerator CR을 사용하여 Cluster Logging Operator 아티팩트 제거

버전 5.x에서 Cluster Logging Operator 버전 6.x로 업데이트할 때 새 API CR(사용자 정의 리소스)을 생성한 후 배포된 클러스터에서 이전 Operator 아티팩트를 제거하는 정리 정책을 추가해야 합니다.

프로세스

  1. 다른 PolicyGenerator CR이 포함된 git 리포지토리에 acm-group-du-clo5-cleanup.yaml 파일을 추가합니다.

    정리 파일의 예

    apiVersion: policy.open-cluster-management.io/v1
    kind: PolicyGenerator
    metadata:
      name: group-du-sno-clo5-cleanup
    placementBindingDefaults:
      name: group-du-sno-clo5-cleanup-placement-binding
    policyDefaults:
      namespace: ztp-group
      # Allow this policy to be unbound from clusters based on a custom label
      placement:
        labelSelector:
          matchExpressions:
          - key: group-du-sno
            operator: Exists
          - key: du-profile
            operator: In
            values: ["latest"]
          - key: clo5-cleanup-done
            operator: DoesNotExist
      remediationAction: inform
      severity: low
      # standards: []
      namespaceSelector:
        exclude:
          - kube-*
        include:
          - '*'
      evaluationInterval:
        compliant: 10m
        noncompliant: 10s
    policies:
    - name: group-du-sno-clo5-cleanup
      policyAnnotations:
        ran.openshift.io/ztp-deploy-wave: "11" 
    1
    
      manifests:
        - path: source-crs/ClusterLogging5Cleanup.yaml
    Copy to Clipboard Toggle word wrap

    1
    기본값은 11 입니다. group-du-sno-clo5-cleanup 정책의 웨이브가 기본적으로 10group-du-sno 구성 정책 이후인지 확인합니다.
  2. 관련 플릿에 사용되는 라벨을 일치하도록 필요에 따라 acm-group-du-clo5-cleanup.yaml 파일에서 바인딩 규칙을 업데이트합니다.
  3. kustomization.yaml 파일의 generators 섹션에 acm-group-clo5-cleanup.yaml 행을 추가합니다.

    kustomization.yaml 파일의 예

    generators:
    - acm-common-ranGen.yaml
    # ...
    - acm-group-du-clo5-cleanup.yaml
    # ...
    Copy to Clipboard Toggle word wrap

  4. 변경 사항을 커밋한 다음 Git 리포지토리로 내보냅니다.
  5. ArgoCD가 정리 정책을 생성하고 hub 클러스터에 동기화할 때까지 기다립니다.

검증

  1. cleanup 정책이 Cluster Logging Operator 버전 5.x에서 6.x로 업그레이드된 모든 클러스터에 바인딩되었는지 확인합니다.
  2. group-du-sno 구성 정책 이후 정리 정책 웨이브가 있는지 확인합니다.

애플리케이션을 업그레이드하기 전에 단일 노드 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
true 로 설정된 preCaching 필드는 사전 캐싱 작업을 활성화합니다.
2
preCachingConfigRef.name 필드는 사용하려는 PreCachingConfig CR을 지정합니다.
3
preCachingConfigRef.namespace 는 사용하려는 PreCachingConfig CR의 네임스페이스를 지정합니다.
9.3.8.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
    hub 클러스터에서 네임스페이스에 액세스할 수 있어야 합니다.
    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이 적용되는 hub 클러스터에서 사전 캐싱 상태를 확인합니다.

    $ 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. root를 호스트로 변경 :

      $ chroot /host/
      Copy to Clipboard Toggle word wrap
    3. 원하는 이미지를 검색합니다.

      $ sudo podman images | grep <operator_name>
      Copy to Clipboard Toggle word wrap

9.3.9. GitOps ZTP의 자동 생성 ClusterGroupUpgrade CR 정보

TALM에는 hub 클러스터에서 ManagedCluster CR의 Ready 상태를 모니터링하고 GitOps Zero Touch Provisioning (ZTP)에 대한 ClusterGroupUpgrade CR을 생성하는 ManagedClusterForCGU 라는 컨트롤러가 있습니다.

ztp-done 레이블이 적용되지 않은 Ready 상태의 관리형 클러스터의 경우 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(사용자 정의 리소스)은 사용자가 프로비저닝하는 관리 클러스터를 구성합니다. RHACM(Red Hat Advanced Cluster Management)에서 Policy GenTemplate CR을 사용하여 적용된 정책 CR을 생성하는 방법을 사용자 지정할 수 있습니다.

중요

PolicyGenTemplate CR을 사용하여 관리형 클러스터에 대한 정책 관리 및 배포는 향후 OpenShift Container Platform 릴리스에서 더 이상 사용되지 않습니다. RHACM(Advanced Cluster Management) 및 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 파일은 두 개의 RHACM(Red Hat Advanced Cluster Management) 정책을 정의합니다. 경찰은 CR에서 policyName 의 각 고유 값에 대해 하나씩 구성 CR 컬렉션을 관리합니다. common-du-ranGen.yamlspec.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
Common: "true" 는 이 레이블이 있는 모든 클러스터에 정책을 적용합니다.
2
sourceFiles 아래에 나열된 파일은 설치된 클러스터에 대한 Operator 정책을 생성합니다.
3
DefaultCatsrc.yaml 은 연결이 끊긴 레지스트리의 카탈로그 소스를 구성합니다.
4
PolicyName: "config-policy" 는 Operator 서브스크립션을 구성합니다. OperatorHub CR은 기본값을 비활성화하고 이 CR은 연결이 끊긴 레지스트리를 가리키는 CatalogSource CR로 redhat-operators 를 대체합니다.

PolicyGenTemplate CR은 포함된 CR 수를 사용하여 구성할 수 있습니다. hub 클러스터에 다음 예제 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 필드를 기반으로 정책에 결합됩니다. policyName 에 동일한 값이 있는 동일한 PolicyGenTemplate 의 CR은 단일 정책으로 관리됩니다.
  • 연결이 끊긴 환경에서는 모든 Operator가 포함된 단일 인덱스로 레지스트리를 구성하여 모든 Operator에 대해 단일 카탈로그 소스를 사용합니다. 관리 클러스터의 각 추가 CatalogSource CR은 CPU 사용량을 늘립니다.
  • MachineConfig CR은 설치 중에 적용되도록 SiteConfig CR에서 extraManifests 로 포함되어야 합니다. 이를 통해 클러스터가 애플리케이션을 배포할 준비가 될 때까지 걸리는 전체 시간을 줄일 수 있습니다.
  • PolicyGenTemplate CR은 원하는 버전을 명시적으로 식별하도록 channel 필드를 재정의해야 합니다. 이렇게 하면 업그레이드 중에 소스 CR의 변경이 생성된 서브스크립션을 업데이트하지 않습니다.
참고

허브 클러스터에서 많은 수의 음성 클러스터를 관리할 때 정책 수를 최소화하여 리소스 소비를 줄입니다.

여러 구성 CR을 단일 또는 제한된 정책으로 그룹화하는 것이 허브 클러스터의 전체 정책 수를 줄이는 한 가지 방법입니다. 사이트 구성을 관리하기 위한 공통, 그룹 및 사이트 계층 구조를 사용하는 경우 사이트별 구성을 단일 정책으로 결합하는 것이 특히 중요합니다.

10.1.3. RAN 배포를 위한 PolicyGenTemplate CR

ZTP(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 및 기본 클러스터 튜닝에 일반적인 클러스터 기능을 제공하는 Operator 세트에 서브스크립션합니다.

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

단일 노드 OpenShift 클러스터에 필요한 다양한 정책을 생성하는 데 사용되는 PolicyGenTemplate CR입니다.

10.1.4. PolicyGenTemplate CR을 사용하여 관리 클러스터 사용자 정의

다음 절차에 따라 ZTP(ZTP) 파이프라인을 사용하여 프로비저닝하는 관리 클러스터에 적용할 수 있는 정책을 사용자 지정할 수 있습니다.

사전 요구 사항

  • OpenShift CLI(oc)가 설치되어 있습니다.
  • cluster-admin 권한이 있는 사용자로 허브 클러스터에 로그인했습니다.
  • 필요한 설치 및 정책 CR을 생성하도록 허브 클러스터를 구성했습니다.
  • 사용자 지정 사이트 구성 데이터를 관리하는 Git 리포지토리를 생성하셨습니다. 리포지토리는 hub 클러스터에서 액세스할 수 있어야 하며 Argo CD 애플리케이션의 소스 리포지토리로 정의해야 합니다.

프로세스

  1. 사이트별 구성 CR에 대한 PolicyGenTemplate CR을 생성합니다.

    1. out/argocd/example/policygentemplates 폴더에서 CR에 대한 적절한 예를 선택합니다(예: example-sno-site.yaml 또는 example-multinode-site.yaml ).
    2. 예제 파일의 spec.bindingRules 필드를 SiteConfig CR에 포함된 사이트별 레이블과 일치하도록 변경합니다. 예제 SiteConfig 파일에서 사이트별 레이블은 sites: example-sno 입니다.

      참고

      PolicyGenTemplate spec.bindingRules 필드에 정의된 라벨이 관련 관리 클러스터 site Config 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. example 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. Status: Conditions: 를 확인하여 오류 로그를 표시합니다. 예를 들어 잘못된 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: Conditions: 에 로그 오류가 있는 경우 Status: Sync: shows Unknown or Error:

    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. RHACM(Red Hat Advanced Cluster Management)에서 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. 클러스터 네임스페이스에 복사되지 않은 모든 정책의 배치 규칙을 확인합니다. 해당 정책에 대한 PlacementRulematchSelectorManagedCluster 오브젝트의 라벨과 일치해야 합니다.

    $ 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
    • status-decisions에는 클러스터 이름이 포함되어야 합니다.
    • 사양에 있는 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가 아직 spoke에 적용되지 않았기 때문에 Operator 구성 정책이 적용되지 않습니다.

10.1.7. 정책 조정 다시 시작

예를 들어 ClusterGroupUpgrade CR(사용자 정의 리소스)이 시간 초과된 경우 예기치 않은 규정 준수 문제가 발생하면 정책 조정을 다시 시작할 수 있습니다.

프로세스

  1. ClusterGroupUpgrade CR은 관리 클러스터가 Ready 가 된 후 토폴로지 Aware Lifecycle Manager를 통해 ztp-install 네임스페이스에 생성됩니다.

    $ 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. UpgradeTimedOut 상태의 ClusterGroupUpgrade CR은 시간마다 정책 조정을 자동으로 다시 시작합니다. 정책을 변경한 경우 기존 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에 지정된 콘텐츠가 모두 있으므로 제거된 콘텐츠가 없는 musthave 정책은 계속 호환됩니다. 이 구성을 사용하면 CR에서 콘텐츠를 제거할 때 TALM은 정책에서 콘텐츠를 제거하지만 콘텐츠는 관리 클러스터의 CR에서 제거되지 않습니다.

mustonlyhavecomplianceType 필드를 사용하면 정책에서 클러스터의 CR이 정책에 지정된 내용과 정확히 일치하도록 합니다.

사전 요구 사항

  • OpenShift CLI(oc)가 설치되어 있습니다.
  • cluster-admin 권한이 있는 사용자로 허브 클러스터에 로그인했습니다.
  • RHACM을 실행하는 허브 클러스터에서 관리 클러스터를 배포했습니다.
  • hub 클러스터에 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. 영향을 받는 정책의 complianceTypegroup-du-sno-ranGen.yaml 파일에서 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

    정책의 COMPLIANCE STATECompliant 인 경우 CR이 업데이트되고 원하지 않는 콘텐츠가 제거됨을 의미합니다.

  2. 관리 클러스터에서 다음 명령을 실행하여 정책이 대상 클러스터에서 제거되었는지 확인합니다.

    $ oc get <kind> <changed_cr_name>
    Copy to Clipboard Toggle word wrap

    결과가 없는 경우 관리 클러스터에서 CR이 제거됩니다.

10.1.9. GitOps ZTP 설치에 대해 수행됨 표시

GitOps ZTP(ZTP)는 클러스터의 GitOps ZTP 설치 상태를 확인하는 프로세스를 단순화합니다. GitOps ZTP 상태는 클러스터 설치, 클러스터 구성 및 GitOps ZTP의 세 단계로 이동합니다.

클러스터 설치 단계
클러스터 설치 단계는 ManagedCluster CR의 ManagedClusterJoinedManagedClusterAvailable 조건을 통해 표시됩니다. ManagedCluster CR에 이러한 조건이 없거나 조건이 False 로 설정되어 있는 경우 클러스터는 여전히 설치 단계에 있습니다. 설치에 대한 자세한 내용은 AgentClusterInstallClusterDeployment CR에서 확인할 수 있습니다. 자세한 내용은 "Troubleshooting GitOps ZTP"를 참조하십시오.
클러스터 구성 단계
클러스터 구성 단계는 클러스터의 ManagedCluster CR을 적용한 ztp 실행 라벨에 의해 표시됩니다.
GitOps ZTP 완료

GitOps ZTP 완료 단계에서 클러스터 설치 및 구성이 완료됩니다. 이는 ztp-running 레이블을 제거하고 ztp-done 레이블을 ManagedCluster CR에 추가하여 표시됩니다. ztp-done 레이블은 구성이 적용되었으며 기준 DU 구성이 클러스터 튜닝을 완료했음을 보여줍니다.

GitOps ZTP done 상태의 변경 사항은 RHACM(Red Hat Advanced Cluster Management) 검증 검증 정보 정책의 준수 상태에서 적용됩니다. 이 정책은 완료된 설치에 대한 기존 기준을 캡처하고 관리 클러스터의 GitOps ZTP 프로비저닝이 완료된 경우에만 규정 준수 상태로 이동하는지 확인합니다.

검증기 정보 정책은 클러스터 구성이 완전히 적용되고 Operator가 초기화를 완료하도록 합니다. 정책은 다음을 확인합니다.

  • 대상 MachineConfigPool 에는 예상되는 항목이 포함되어 있으며 업데이트가 완료되었습니다. 모든 노드를 사용할 수 있으며 성능이 저하되지 않습니다.
  • SR-IOV Operator는 syncStatus: Succeeded 가 있는 하나 이상의 SriovNetworkNodeState 에 표시된 대로 초기화를 완료했습니다.
  • PTP Operator 데몬 세트가 있습니다.

10.2. PolicyGenTemplate 리소스를 사용한 고급 관리 클러스터 구성

PolicyGenTemplate CR을 사용하여 관리 클러스터에 사용자 지정 기능을 배포할 수 있습니다.

중요

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

PolicyGenerator 리소스에 대한 자세한 내용은 RHACM 정책 생성기 설명서를 참조하십시오.

10.2.1. 클러스터에 추가 변경 사항 배포

기본 GitOps ZTP(ZTP) 파이프라인 구성 외부에서 클러스터 구성을 변경해야 하는 경우 다음 세 가지 옵션이 있습니다.

GitOps ZTP 파이프라인이 완료된 후 추가 구성을 적용합니다.
GitOps ZTP 파이프라인 배포가 완료되면 배포된 클러스터가 애플리케이션 워크로드에 대해 준비됩니다. 이 시점에서 추가 Operator를 설치하고 요구 사항과 관련된 구성을 적용할 수 있습니다. 추가 구성이 플랫폼 성능 또는 할당된 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 리포지토리를 생성합니다. 리포지토리는 hub 클러스터에서 액세스할 수 있어야 하며 Argo CD의 소스 리포지토리로 정의해야 합니다.

프로세스

  1. 기존 콘텐츠의 기본 소스 CR을 검토합니다. ZTP(ZTP) 컨테이너에서 해당 CR을 추출하여 참조 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.16.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
    참고

    $…​ 이 포함된 소스 CR의 모든 필드는 PolicyGenTemplate CR에 제공되지 않는 경우 생성된 CR에서 제거됩니다.

  3. group-du-sno-ranGen.yaml 참조 파일에서 PerformanceProfilePolicyGenTemplate 항목을 업데이트합니다. 다음 예제 PolicyGenTemplate CR 스탠자는 적절한 CPU 사양을 제공하고 hugepages 구성을 설정하며 globallyDisableIrqLoadBalancing 을 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 polices 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. 변경된 PolicyGenTemplate 을 포함하도록 ClusterGroupUpgrade CR을 업데이트하고 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에 대한 정책 준수 평가 시간 초과 구성

hub 클러스터에 설치된 RHACM(Red Hat Advanced Cluster Management)을 사용하여 관리 클러스터가 적용된 정책을 준수하는지 여부를 모니터링하고 보고합니다. RHACM은 정책 템플릿을 사용하여 사전 정의된 정책 컨트롤러 및 정책을 적용합니다. 정책 컨트롤러는 Kubernetes CRD(사용자 정의 리소스 정의) 인스턴스입니다.

PolicyGenTemplate CR(사용자 정의 리소스)을 사용하여 기본 정책 평가 간격을 덮어쓸 수 있습니다. RHACM이 적용된 클러스터 정책을 다시 평가하기 전에 ConfigurationPolicy CR이 정책 준수 또는 비준수 상태에 있을 수 있는 기간을 정의하는 기간을 구성합니다.

GitOps ZTP(ZTP) 정책 생성기는 사전 정의된 정책 평가 간격을 사용하여 ConfigurationPolicy CR 정책을 생성합니다. 비준수 상태의 기본값은 10초입니다. 규정 준수 상태의 기본값은 10분입니다. 평가 간격을 비활성화하려면 값을 never 로 설정합니다.

사전 요구 사항

  • OpenShift CLI(oc)가 설치되어 있습니다.
  • cluster-admin 권한이 있는 사용자로 hub 클러스터에 로그인했습니다.
  • 사용자 지정 사이트 구성 데이터를 관리하는 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. Git 리포지토리에서 PolicyGenTemplate CR 파일을 커밋하고 변경 사항을 내보냅니다.

검증

관리형 spoke 클러스터 정책이 예상 간격으로 모니터링되는지 확인합니다.

  1. 관리 클러스터에서 cluster-admin 권한이 있는 사용자로 로그인합니다.
  2. open-cluster-management-agent-addon 네임스페이스에서 실행 중인 Pod를 가져옵니다. 다음 명령을 실행합니다.

    $ 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 ZTP(ZTP) 설치 및 배포된 클러스터의 구성이 완료된 경우 신호를 알리는 검증기 정보를 생성합니다. 이 정책은 단일 노드 OpenShift 클러스터, 3-노드 클러스터 및 표준 클러스터의 배포에 사용할 수 있습니다.

프로세스

  1. 소스 파일 validatorCRs/informDuValidator.yaml 을 포함하는 독립 실행형 PolicyGenTemplate CR(사용자 정의 리소스)을 생성합니다. 각 클러스터 유형에 대해 하나의 독립 실행형 PolicyGenTemplate CR만 있으면 됩니다. 예를 들어 이 CR은 단일 노드 OpenShift 클러스터에 대한 검증기 정보 정책을 적용합니다.

    single-node 클러스터 검증기 정보 정책 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,placementRule정책의 일부로 사용됩니다.
    2
    이 값은 policy-gen-crs 그룹에 사용된 네임스페이스 와 일치해야 합니다.
    3
    bindingRules 에 정의된 group-du-* 레이블은 site Config 파일에 있어야 합니다.
    4
    bindingExcludedRules 에 정의된 레이블은'ztp-done:'이어야 합니다. ztp-done 레이블은 토폴로지 Aware Lifecycle Manager와의 조정에 사용됩니다.
    5
    MCP 는 소스 파일 validatorCRs/informDuValidator.yaml 에 사용되는 MachineConfigPool 오브젝트를 정의합니다. 단일 노드와 3-노드 클러스터 배포의 경우 마스터 이고 표준 클러스터 배포의 경우 worker 여야 합니다.
    6
    선택 사항: 기본값은 inform 입니다.
    7
    이 값은 생성된 RHACM 정책의 이름으로 사용됩니다. 단일 노드 예에 대해 생성된 검증 검증 정책은 group-du-sno-validator-du-policy 입니다.
  2. Git 리포지토리에서 PolicyGenTemplate CR 파일을 커밋하고 변경 사항을 내보냅니다.

10.2.6. PolicyGenTemplate CR을 사용하여 전원 상태 구성

대기 시간이 짧고 고성능 에지 배포를 위해 C-state 및 P-state를 비활성화하거나 제한해야 합니다. 이 구성을 사용하면 CPU가 일정한 빈도로 실행되며 일반적으로 최대 turbo 빈도입니다. 이렇게 하면 CPU가 항상 최대 속도로 실행되므로 높은 성능과 대기 시간이 단축됩니다. 이로 인해 워크로드에 대한 최적의 대기 시간이 발생합니다. 그러나 이는 또한 가장 높은 전력 소비를 초래하며, 이는 모든 워크로드에 필요하지 않을 수 있습니다.

워크로드는 높은 성능 및 낮은 대기 시간을 위해 C-state 및 P-state 설정을 비활성화해야 하는 중요한 워크로드로 분류할 수 있지만 중요하지 않은 워크로드는 C-state 및 P-state 설정을 사용하여 일부 대기 시간 및 성능을 저하시킵니다. ZTP(ZTP)를 사용하여 다음 세 가지 전원 상태를 구성할 수 있습니다.

  • 고성능 모드는 가장 높은 전력 소비에서 매우 낮은 대기 시간을 제공합니다.
  • 성능 모드는 비교적 높은 전력 소비로 짧은 대기 시간을 제공합니다.
  • 전력 절감은 대기 시간이 증가하여 전력 소비를 줄일 수 있습니다.

기본 구성은 대기 시간이 짧은 성능 모드입니다.

PolicyGenTemplate CR(사용자 정의 리소스)을 사용하면 ztp-site-generate 컨테이너의 GitOps 플러그인과 함께 제공된 기본 소스 CR에 추가 구성 세부 정보를 오버레이할 수 있습니다.

group-du-sno-ranGen.yamlPolicyGenTemplate CR을 기반으로 생성된 PerformanceProfile CR의 workloadHints 필드를 업데이트하여 전원 상태를 구성합니다.

다음과 같은 일반적인 사전 요구 사항은 세 가지 전원 상태를 모두 구성하는 데 적용됩니다.

사전 요구 사항

  • 사용자 지정 사이트 구성 데이터를 관리하는 Git 리포지토리를 생성했습니다. 리포지토리는 hub 클러스터에서 액세스할 수 있어야 하며 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 참조 파일에서 PerformanceProfilePolicyGenTemplate 항목을 업데이트합니다.

    - 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. 다음과 같이 group-du-sno-ranGen.yaml 참조 파일의 PolicyGenTemplate 항목을 out/argocd/example/policygentemplates/ 에서 업데이트합니다.

    - 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-states 및 OS 제어 P-states를 활성화했습니다.

프로세스

  1. 다음과 같이 /argocd/example/policygentemplates/ 에서 group-du-sno-ranGen.yaml 참조 파일에서 PerformanceProfilePolicyGenTemplate 항목을 업데이트합니다. 추가 커널 인수 오브젝트를 통해 전원 저장 모드에 대한 CPU governor를 구성하는 것이 좋습니다.

    - 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 governor를 사용하는 것이 좋습니다. 그러나 사용 가능한 다른 governor에는 온디맨드전원 세이프가 포함됩니다.
  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

    & lt;node-name >을 전원 상태를 확인할 노드의 이름으로 바꿉니다.

  3. 디버그 쉘 내에서 /host를 root 디렉터리로 설정합니다. 디버그 Pod는 Pod 내의 /host에 호스트의 루트 파일 시스템을 마운트합니다. root 디렉토리를 /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의 빈도를 높임으로써 전력 절감이 거의 발생하지 않습니다.

sysfs 플러그인 필드를 업데이트하여 전력 절감을 극대화하고 참조 구성에 대한 TunedPerformancePatch CR의 max_perf_pct 에 대한 적절한 값을 설정합니다. group-du-sno-ranGen.yaml 을 기반으로 하는 이 예제에서는 최대 CPU 빈도를 제한하는 절차를 설명합니다.

사전 요구 사항

  • " PolicyGenTemplate CR 사용으로 전원 절약 모드"에 설명된 대로 전원 절감 모드를 구성했습니다.

프로세스

  1. out/argocd/example/policygentemplates/.에서 group-du-sno-ranGen.yaml 참조 파일에서 TunedPerformancePatchPolicyGenTemplate 항목을 업데이트합니다. 전원 절감을 극대화하려면 다음 예와 같이 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를 모든 코어 frequency로 제한하는 백분율로 사용할 수 있습니다. 모든 코어의 frequency는 코어가 완전히 비어 있을 때 모든 코어가 실행되는 빈도입니다.
    참고

    전력 절감을 극대화하려면 더 낮은 가치를 설정하십시오. max_perf_pct 에 대한 더 낮은 값을 설정하면 최대 CPU 빈도가 제한되므로 전력 소비가 줄어들지만 잠재적으로 성능에 영향을 미칠 수 있습니다. 다양한 값을 실험하고 시스템의 성능 및 전력 소비를 모니터링하여 사용 사례에 가장 적합한 설정을 찾습니다.

  2. Git에서 PolicyGenTemplate 변경 사항을 커밋한 다음 GitOps ZTP Argo CD 애플리케이션에서 모니터링하는 Git 리포지토리로 내보냅니다.

10.2.7. PolicyGenTemplate CR을 사용하여 LVM 스토리지 구성

ZTP(ZTP)를 사용하여 배포하는 관리형 클러스터에 대해 LVM(Logical Volume Manager) 스토리지를 구성할 수 있습니다.

참고

HTTP 전송과 함께 PTP 이벤트 또는 베어 메탈 하드웨어 이벤트를 사용할 때 LVM 스토리지를 사용하여 이벤트 서브스크립션을 유지합니다.

분산 단위로 로컬 볼륨을 사용하는 영구 스토리지에 Local Storage Operator를 사용합니다.

사전 요구 사항

  • 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.16
      policyName: subscription-policies
    Copy to Clipboard Toggle word wrap
    참고

    스토리지 LVMO 서브스크립션은 더 이상 사용되지 않습니다. 향후 OpenShift Container Platform 릴리스에서는 스토리지 LVMO 서브스크립션을 사용할 수 없습니다. 대신 Storage LVMS 서브스크립션을 사용해야 합니다.

    OpenShift Container Platform 4.16에서는 LVMO 서브스크립션 대신 스토리지 LVMS 서브스크립션을 사용할 수 있습니다. LVMS 서브스크립션에는 common-ranGen.yaml 파일의 수동 덮어쓰기가 필요하지 않습니다. 스토리지 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이 설치된 디스크를 제외하고 사용 가능한 모든 장치가 포함된 볼륨 그룹( Cryostat1)을 생성합니다. thin-pool 논리 볼륨도 생성됩니다.

  3. 기타 필요한 변경 사항 및 파일을 사용자 지정 사이트 리포지토리와 병합합니다.
  4. Git에서 PolicyGenTemplate 변경 사항을 커밋한 다음 사이트 구성 리포지토리로 변경 사항을 내보내 GitOps ZTP를 사용하여 새 사이트에 LVM 스토리지를 배포합니다.

10.2.8. PolicyGenTemplate CR을 사용하여 PTP 이벤트 구성

GitOps ZTP 파이프라인을 사용하여 HTTP 전송을 사용하는 PTP 이벤트를 구성할 수 있습니다.

10.2.8.1. HTTP 전송을 사용하는 PTP 이벤트 구성

ZTP(ZTP) 파이프라인으로 배포하는 관리형 클러스터에서 HTTP 전송을 사용하는 PTP 이벤트를 구성할 수 있습니다.

사전 요구 사항

  • OpenShift CLI(oc)가 설치되어 있습니다.
  • cluster-admin 권한이 있는 사용자로 로그인했습니다.
  • 사용자 지정 사이트 구성 데이터를 관리하는 Git 리포지토리를 생성했습니다.

프로세스

  1. 요구 사항에 따라 group-du-3node-ranGen.yaml,group-du-sno-ranGen.yaml 또는 group-du-standard-ranGen.yaml 파일에 다음 PolicyGenTemplate 변경 사항을 적용합니다.

    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 를 구성합니다. 예를 들어 spec.sourceFiles 에 다음 YAML을 추가합니다.

      - 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 클럭 이벤트 상태가 Free RUN 으로 변경되기 전의 시간(초)입니다. maxOffsetThresholdminOffsetThreshold 설정은 CLOCK_REALTIME (phc2sys) 또는 master 오프셋(ptp4l)의 값과 비교하는 오프셋 값을 나노초로 구성합니다. ptp4l 또는 phc2sys 오프셋 값이 이 범위를 벗어나는 경우 PTP 클럭 상태가 Free RUN으로 설정됩니다. 오프셋 값이 이 범위 내에 있으면 PTP 클럭 상태가 LOCKED 로 설정됩니다.
  2. 기타 필요한 변경 사항 및 파일을 사용자 지정 사이트 리포지토리와 병합합니다.
  3. GitOps ZTP를 사용하여 새 사이트에 PTP 빠른 이벤트를 배포하려면 사이트 구성 리포지토리로 변경 사항을 푸시합니다.

10.2.9. PolicyGenTemplate CR을 사용하여 베어 메탈 이벤트 구성

GitOps ZTP 파이프라인을 사용하여 HTTP 또는 AMQP 전송을 사용하는 베어 메탈 이벤트를 구성할 수 있습니다.

참고

HTTP 전송은 PTP 및 베어 메탈 이벤트의 기본 전송입니다. 가능한 경우 PTP 및 베어 메탈 이벤트에 AMQP 대신 HTTP 전송을 사용합니다. AMQ Interconnect는 2024년 6월 30일부터 EOL입니다. AMQ Interconnect의 ELS(Extended Life Cycle Support)는 2029년 11월 29일에 종료됩니다. 자세한 내용은 Red Hat AMQ Interconnect 지원 상태를 참조하십시오.

10.2.9.1. HTTP 전송을 사용하는 베어 메탈 이벤트 구성

ZTP(ZTP) 파이프라인으로 배포하는 관리형 클러스터에서 HTTP 전송을 사용하는 베어 메탈 이벤트를 구성할 수 있습니다.

사전 요구 사항

  • OpenShift CLI(oc)가 설치되어 있습니다.
  • cluster-admin 권한이 있는 사용자로 로그인했습니다.
  • 사용자 지정 사이트 구성 데이터를 관리하는 Git 리포지토리를 생성했습니다.

프로세스

  1. common-ranGen.yaml 파일의 spec.sourceFiles 에 다음 YAML을 추가하여 Bare Metal Event Relay Operator를 구성합니다.

    # Bare Metal Event Relay Operator
    - fileName: BareMetalEventRelaySubscriptionNS.yaml
      policyName: "subscriptions-policy"
    - fileName: BareMetalEventRelaySubscriptionOperGroup.yaml
      policyName: "subscriptions-policy"
    - fileName: BareMetalEventRelaySubscription.yaml
      policyName: "subscriptions-policy"
    Copy to Clipboard Toggle word wrap
  2. 특정 그룹 구성 파일의 spec.sourceFilesHardwareEvent CR을 추가합니다(예: group-du-sno-ranGen.yaml 파일).

    - fileName: HardwareEvent.yaml 
    1
    
      policyName: "config-policy"
      spec:
        nodeSelector: {}
        transportHost: "http://hw-event-publisher-service.openshift-bare-metal-events.svc.cluster.local:9043"
        logLevel: "info"
    Copy to Clipboard Toggle word wrap
    1
    각 BMC(Baseboard Management Controller)에는 단일 HardwareEvent CR만 필요합니다.
    참고

    OpenShift Container Platform 4.13 이상에서는 베어 메탈 이벤트와 함께 HTTP 전송을 사용할 때 HardwareEvent CR(사용자 정의 리소스)에서 transportHost 필드를 설정할 필요가 없습니다.

  3. 기타 필요한 변경 사항 및 파일을 사용자 지정 사이트 리포지토리와 병합합니다.
  4. 변경 사항을 사이트 구성 리포지토리로 내보내 GitOps ZTP가 있는 새 사이트에 베어 메탈 이벤트를 배포합니다.
  5. 다음 명령을 실행하여 Redfish 보안을 생성합니다.

    $ oc -n openshift-bare-metal-events create secret generic redfish-basic-auth \
    --from-literal=username=<bmc_username> --from-literal=password=<bmc_password> \
    --from-literal=hostaddr="<bmc_host_ip_addr>"
    Copy to Clipboard Toggle word wrap
10.2.9.2. AMQP 전송을 사용하는 베어 메탈 이벤트 구성

ZTP(ZTP) 파이프라인으로 배포하는 관리 클러스터에서 AMQP 전송을 사용하는 베어 메탈 이벤트를 구성할 수 있습니다.

참고

HTTP 전송은 PTP 및 베어 메탈 이벤트의 기본 전송입니다. 가능한 경우 PTP 및 베어 메탈 이벤트에 AMQP 대신 HTTP 전송을 사용합니다. AMQ Interconnect는 2024년 6월 30일부터 EOL입니다. AMQ Interconnect의 ELS(Extended Life Cycle Support)는 2029년 11월 29일에 종료됩니다. 자세한 내용은 Red Hat AMQ Interconnect 지원 상태를 참조하십시오.

사전 요구 사항

  • OpenShift CLI(oc)가 설치되어 있습니다.
  • cluster-admin 권한이 있는 사용자로 로그인했습니다.
  • 사용자 지정 사이트 구성 데이터를 관리하는 Git 리포지토리를 생성했습니다.

프로세스

  1. AMQ Interconnect Operator 및 Bare Metal Event Relay Operator를 구성하려면 common-ranGen.yaml 파일의 spec.sourceFiles 에 다음 YAML을 추가합니다.

    # AMQ Interconnect Operator for fast events
    - fileName: AmqSubscriptionNS.yaml
      policyName: "subscriptions-policy"
    - fileName: AmqSubscriptionOperGroup.yaml
      policyName: "subscriptions-policy"
    - fileName: AmqSubscription.yaml
      policyName: "subscriptions-policy"
    # Bare Metal Event Relay Operator
    - fileName: BareMetalEventRelaySubscriptionNS.yaml
      policyName: "subscriptions-policy"
    - fileName: BareMetalEventRelaySubscriptionOperGroup.yaml
      policyName: "subscriptions-policy"
    - fileName: BareMetalEventRelaySubscription.yaml
      policyName: "subscriptions-policy"
    Copy to Clipboard Toggle word wrap
  2. 사이트 구성 파일의 spec.sourceFilesInterconnect CR을 추가합니다(예: example-sno-site.yaml 파일).

    - fileName: AmqInstance.yaml
      policyName: "config-policy"
    Copy to Clipboard Toggle word wrap
  3. 특정 그룹 구성 파일의 spec.sourceFilesHardwareEvent CR을 추가합니다(예: group-du-sno-ranGen.yaml 파일).

    - path: HardwareEvent.yaml
      patches:
        nodeSelector: {}
        transportHost: "amqp://<amq_interconnect_name>.<amq_interconnect_namespace>.svc.cluster.local" 
    1
    
        logLevel: "info"
    Copy to Clipboard Toggle word wrap
    1
    transportHost URL은 기존 AMQ Interconnect CR 이름과 네임스페이스 로 구성됩니다. 예를 들어 transportHost: "amqp://amq-router.amq-router.svc.cluster.local" 에서 AMQ 상호 연결 이름과 네임스페이스 는 모두 amq-router 로 설정됩니다.
    참고

    각 BMC(Baseboard Management Controller)에는 단일 HardwareEvent 리소스만 필요합니다.

  4. Git에서 PolicyGenTemplate 변경 사항을 커밋한 다음 사이트 구성 리포지토리로 변경 사항을 푸시하여 GitOps ZTP를 사용하여 베어 메탈 이벤트 모니터링을 새 사이트에 배포합니다.
  5. 다음 명령을 실행하여 Redfish 보안을 생성합니다.

    $ oc -n openshift-bare-metal-events create secret generic redfish-basic-auth \
    --from-literal=username=<bmc_username> --from-literal=password=<bmc_password> \
    --from-literal=hostaddr="<bmc_host_ip_addr>"
    Copy to Clipboard Toggle word wrap

10.2.10. 이미지 로컬 캐싱을 위해 Image Registry Operator 구성

OpenShift Container Platform은 로컬 레지스트리를 사용하여 이미지 캐싱을 관리합니다. 에지 컴퓨팅 사용 사례에서 클러스터는 중앙 집중식 이미지 레지스트리와 통신할 때 대역폭 제한의 영향을 받는 경우가 많기 때문에 이미지 다운로드 시간이 길어질 수 있습니다.

초기 배포 중에 다운로드 시간이 오래 걸릴 수 없습니다. 시간이 지남에 따라 CRI-O에서 예기치 않은 종료의 경우 /var/lib/containers/storage 디렉터리를 지울 위험이 있습니다. 긴 이미지 다운로드 시간을 해결하기 위해ZTP( GitOps Zero Touch Provisioning)를 사용하여 원격 관리 클러스터에 로컬 이미지 레지스트리를 생성할 수 있습니다. 이는 클러스터가 네트워크의 맨 에지에 배포되는 에지 컴퓨팅 시나리오에서 유용합니다.

GitOps ZTP를 사용하여 로컬 이미지 레지스트리를 설정하려면 원격 관리 클러스터를 설치하는 데 사용하는 SiteConfig CR에서 디스크 파티션을 구성해야 합니다. 설치 후 PolicyGenTemplate CR을 사용하여 로컬 이미지 레지스트리를 구성합니다. 그런 다음 GitOps ZTP 파이프라인은 PV(영구 볼륨) 및 PVC(영구 볼륨 클레임) CR을 생성하고 imageregistry 구성을 패치합니다.

참고

로컬 이미지 레지스트리는 사용자 애플리케이션 이미지에만 사용할 수 있으며 OpenShift Container Platform 또는 Operator Lifecycle Manager Operator 이미지에는 사용할 수 없습니다.

10.2.10.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

10.2.10.2. PolicyGenTemplate CR을 사용하여 이미지 레지스트리 구성

PGT( PolicyGenTemplate ) CR을 사용하여 이미지 레지스트리를 구성하고 imageregistry 구성을 패치하는 데 필요한 CR을 적용합니다.

사전 요구 사항

  • 관리 클러스터에 디스크 파티션을 구성했습니다.
  • OpenShift CLI(oc)가 설치되어 있습니다.
  • cluster-admin 권한이 있는 사용자로 hub 클러스터에 로그인했습니다.
  • GitOps ZTP(ZTP)와 함께 사용할 사용자 지정 사이트 구성 데이터를 관리하는 Git 리포지토리를 생성했습니다.

프로세스

  1. 적절한 PolicyGenTemplate CR에서 스토리지 클래스, 영구 볼륨 클레임, 영구 볼륨 및 이미지 레지스트리 구성을 구성합니다. 예를 들어 개별 사이트를 구성하려면 example-sno-site.yaml 파일에 다음 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- ECDSA에 대한 적절한 값을 설정합니다. ztp-deploy-ECDHE: "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
        Copy to Clipboard Toggle word wrap
        ${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.16 -o ~/upgrade-graph_stable-4.16
        Copy to Clipboard Toggle word wrap
  • Operator를 업데이트하려면 다음 작업을 수행해야 합니다.

    • Operator 카탈로그를 미러링합니다. "연결이 끊긴 클러스터에 사용하기 위해 Operator 카탈로그 미러링" 섹션의 절차에 따라 원하는 Operator 이미지가 미러링되었는지 확인합니다.

10.3.2. PolicyGenTemplate CR을 사용하여 플랫폼 업데이트 수행

TALM으로 플랫폼 업데이트를 수행할 수 있습니다.

사전 요구 사항

  • TALM(토폴로지 Aware Lifecycle Manager)을 설치합니다.
  • GitOps Zero Touch Provisioning (ZTP)을 최신 버전으로 업데이트합니다.
  • GitOps ZTP를 사용하여 하나 이상의 관리 클러스터를 프로비저닝합니다.
  • 원하는 이미지 저장소를 미러링합니다.
  • cluster-admin 권한이 있는 사용자로 로그인합니다.
  • hub 클러스터에 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.16"
              upstream: http://upgrade.example.com/images/upgrade-graph_stable-4.16
              desiredUpdate:
                version: 4.16.4
            status:
              history:
                - version: 4.16.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 - prep 및 du-upgrade-platform-upgrade 정책 및 대상 클러스터를 다음 예와 같이 cgu-platform-upgrade.yml 파일에 사용하여 플랫폼 업데이트 ClusterGroupUpdate CR의 콘텐츠를 저장합니다.

      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