19.10. 토폴로지 Aware Lifecycle Manager로 관리형 클러스터 업데이트


Topology Aware Lifecycle Manager (TALM)를 사용하여 여러 클러스터의 소프트웨어 라이프사이클을 관리할 수 있습니다. TALM은 RHACM(Red Hat Advanced Cluster Management) 정책을 사용하여 대상 클러스터에서 변경 사항을 수행합니다.

19.10.1. 토폴로지 Aware Lifecycle Manager 구성 정보

Topology Aware Lifecycle Manager (TALM)는 하나 이상의 OpenShift Container Platform 클러스터에 대한 RHACM(Red Hat Advanced Cluster Management) 정책 배포를 관리합니다. 대규모 클러스터에서 TALM을 사용하면 제한된 일괄 처리로 클러스터에 정책을 단계적으로 롤아웃할 수 있습니다. 이를 통해 업데이트 시 가능한 서비스 중단을 최소화할 수 있습니다. TALM을 사용하면 다음 작업을 제어할 수 있습니다.

  • 업데이트의 시간
  • RHACM 관리 클러스터 수
  • 정책을 적용할 관리 클러스터의 하위 세트
  • 클러스터의 업데이트 순서
  • 클러스터에 수정된 정책 세트
  • 클러스터에 수정된 정책 순서
  • 카나리아 클러스터 할당

단일 노드 OpenShift의 경우 토폴로지 Aware Lifecycle Manager(TALM)는 다음 기능을 제공합니다.

  • 업그레이드하기 전에 배포 백업 생성
  • 대역폭이 제한된 클러스터의 이미지 사전 캐싱

TALM은 y-streams 및 z-streams에서 OpenShift Container Platform y-stream 및 z-stream 업데이트의 오케스트레이션과 2일차 작업을 지원합니다.

19.10.2. 토폴로지 Aware Lifecycle Manager와 함께 사용되는 관리형 정책 정보

TALM(토폴로지 라이프사이클 관리자)에서는 클러스터 업데이트에 RHACM 정책을 사용합니다.

TALM은 remediationAction 필드가 알리 도록 설정된 정책 CR의 롤아웃을 관리하는 데 사용할 수 있습니다. 지원되는 사용 사례는 다음과 같습니다.

  • 정책 CR 수동 사용자 생성
  • PolicyGenTemplate CRD(사용자 정의 리소스 정의)에서 자동으로 생성된 정책

수동 승인으로 Operator 서브스크립션을 업데이트하는 정책의 경우 TALM은 업데이트된 Operator 설치를 승인하는 추가 기능을 제공합니다.

관리 정책에 대한 자세한 내용은 RHACM 설명서의 정책 개요 를 참조하십시오.

PolicyGenTemplate CRD에 대한 자세한 내용은 "PolicyGenTemplate Resource를 사용하여 관리 클러스터 구성"의 "PolicyGenTemplate CRD 정보" 섹션을 참조하십시오.

19.10.3. 웹 콘솔을 사용하여 토폴로지 Aware Lifecycle Manager 설치

OpenShift Container Platform 웹 콘솔을 사용하여 토폴로지 Aware Lifecycle Manager를 설치할 수 있습니다.

사전 요구 사항

  • RHACM Operator의 최신 버전을 설치합니다.
  • 연결이 끊긴 regitry로 hub 클러스터를 설정합니다.
  • cluster-admin 권한이 있는 사용자로 로그인합니다.

절차

  1. OpenShift Container Platform 웹 콘솔에서 Operator OperatorHub로 이동합니다.
  2. 사용 가능한 Operator 목록에서 Topology Aware Lifecycle Manager 를 검색한 다음 설치를 클릭합니다.
  3. 기본 설치 모드 ["All namespaces on the cluster (default)"] 및 Installed Namespace ("openshift-operators")를 계속 선택하여 Operator가 올바르게 설치되었는지 확인합니다.
  4. 설치를 클릭합니다.

검증

설치에 성공했는지 확인하려면 다음을 수행하십시오.

  1. Operator 설치된 Operator 페이지로 이동합니다.
  2. Operator가 All Namespaces 네임스페이스에 설치되어 있고 해당 상태는 Succeeded 인지 확인합니다.

Operator가 성공적으로 설치되지 않은 경우 다음을 수행하십시오.

  1. Operator 설치된 Operator 페이지로 이동하여 Status 열에 오류 또는 실패가 있는지 점검합니다.
  2. 워크로드 Pod 페이지로 이동하여 문제를 보고하는 cluster-group-upgrades-controller-manager Pod의 모든 컨테이너에서 로그를 확인합니다.

19.10.4. CLI를 사용하여 토폴로지 Aware Lifecycle Manager 설치

OpenShift CLI(oc)를 사용하여 TALM(토폴로지 Aware Lifecycle Manager)을 설치할 수 있습니다.

사전 요구 사항

  • OpenShift CLI(oc)를 설치합니다.
  • RHACM Operator의 최신 버전을 설치합니다.
  • 연결이 끊긴 레지스트리를 사용하여 hub 클러스터를 설정합니다.
  • cluster-admin 권한이 있는 사용자로 로그인합니다.

절차

  1. 서브스크립션 CR을 생성합니다.

    1. Subscription CR을 정의하고 YAML 파일을 저장합니다(예: talm-subscription.yaml ).

      apiVersion: operators.coreos.com/v1alpha1
      kind: Subscription
      metadata:
        name: openshift-topology-aware-lifecycle-manager-subscription
        namespace: openshift-operators
      spec:
        channel: "stable"
        name: topology-aware-lifecycle-manager
        source: redhat-operators
        sourceNamespace: openshift-marketplace
    2. 다음 명령을 실행하여 Subscription CR을 생성합니다.

      $ oc create -f talm-subscription.yaml

검증

  1. CSV 리소스를 검사하여 설치에 성공했는지 확인합니다.

    $ oc get csv -n openshift-operators

    출력 예

    NAME                                                   DISPLAY                            VERSION               REPLACES                           PHASE
    topology-aware-lifecycle-manager.4.13.x   Topology Aware Lifecycle Manager   4.13.x                                      Succeeded

  2. TALM이 실행 중인지 확인합니다.

    $ oc get deploy -n openshift-operators

    출력 예

    NAMESPACE                                          NAME                                             READY   UP-TO-DATE   AVAILABLE   AGE
    openshift-operators                                cluster-group-upgrades-controller-manager        1/1     1            1           14s

19.10.5. ClusterGroupUpgrade CR 정보

Topology Aware Lifecycle Manager(TALM)는 클러스터 그룹에 대한 ClusterGroupUpgrade CR에서 수정 계획을 빌드합니다. ClusterGroupUpgrade CR에서 다음 사양을 정의할 수 있습니다.

  • 그룹의 클러스터
  • ClusterGroupUpgrade CR 차단
  • 적용 가능한 정책 목록
  • 동시 업데이트 수
  • 적용 가능한 카나리아 업데이트
  • 업데이트 전과 후에 수행할 작업
  • 업데이트 타이밍

ClusterGroupUpgrade CR의 enable 필드를 사용하여 업데이트 시작 시간을 제어할 수 있습니다. 예를 들어 예약된 유지 관리 기간이 4시간이면 enable 필드를 false 로 설정하여 ClusterGroupUpgrade CR을 준비할 수 있습니다.

spec.remediationStrategy.timeout 설정을 다음과 같이 구성하여 타임아웃을 설정할 수 있습니다.

spec
  remediationStrategy:
          maxConcurrency: 1
          timeout: 240

batchTimeoutAction 을 사용하여 클러스터에 대한 업데이트가 실패하는 경우 발생하는 상황을 확인할 수 있습니다. 오류가 발생한 클러스터를 계속 건너뛰고 다른 클러스터를 계속 업그레이드하거나 모든 클러스터에 대한 정책 수정을 중지하도록 중단할 수 있습니다. 제한 시간이 경과하면 TALM은 클러스터에 대한 추가 업데이트가 발생하지 않도록 모든 적용 정책을 제거합니다.

변경 사항을 적용하려면 enabled 필드를 true 로 설정합니다.

자세한 내용은 "관리된 클러스터에 업데이트 정책 적용" 섹션을 참조하십시오.

TALM은 지정된 클러스터에 대한 정책 수정을 통해 작동하므로 ClusterGroupUpgrade CR은 여러 조건에 대해 true 또는 false 상태를 보고할 수 있습니다.

참고

TALM이 클러스터 업데이트를 완료하면 동일한 ClusterGroupUpgrade CR에서 클러스터에서 다시 업데이트되지 않습니다. 다음과 같은 경우 새 ClusterGroupUpgrade CR을 생성해야 합니다.

  • 클러스터를 다시 업데이트해야 하는 경우
  • 클러스터가 업데이트 후 정보 정책과 일치하지 않는 것으로 변경되는 경우

19.10.5.1. 클러스터 선택

TALM은 수정 계획을 빌드하고 다음 필드에 따라 클러스터를 선택합니다.

  • clusterLabelSelector 필드는 업데이트하려는 클러스터의 레이블을 지정합니다. k8s.io/apimachinery/pkg/apis/meta/v1 의 표준 라벨 선택기 목록으로 구성됩니다. 목록의 각 선택기는 레이블 값 쌍 또는 레이블 표현식을 사용합니다. 각 선택기의 일치는 clusterSelector 필드 및 cluster 필드의 일치 항목과 함께 최종 클러스터 목록에 추가됩니다.
  • cluster 필드는 업데이트할 클러스터 목록을 지정합니다.
  • canaries 필드는 카나리아 업데이트의 클러스터를 지정합니다.
  • maxConcurrency 필드는 일괄 처리에서 업데이트할 클러스터 수를 지정합니다.
  • actions 필드는 업데이트 프로세스를 시작할 때 TALM이 수행할 때 TALM이 수행하는 작업을 활성화하고 각 클러스터에 대한 정책 수정을 완료할 때 TALM이 수행하는 작업을 지정합니다.

clusterLabelSelector , clusterSelector 필드를 함께 사용하여 결합된 클러스터 목록을 생성할 수 있습니다.

수정 계획은 canaries 필드에 나열된 클러스터로 시작됩니다. 각 카나리아 클러스터는 단일 클러스터 배치를 형성합니다.

enabled 필드false로 설정된 샘플 ClusterGroupUpgrade CR

apiVersion: ran.openshift.io/v1alpha1
kind: ClusterGroupUpgrade
metadata:
  creationTimestamp: '2022-11-18T16:27:15Z'
  finalizers:
    - ran.openshift.io/cleanup-finalizer
  generation: 1
  name: talm-cgu
  namespace: talm-namespace
  resourceVersion: '40451823'
  uid: cca245a5-4bca-45fa-89c0-aa6af81a596c
Spec:
  actions:
    afterCompletion: 1
      addClusterLabels:
        upgrade-done: ""
      deleteClusterLabels:
        upgrade-running: ""
      deleteObjects: true
    beforeEnable: 2
      addClusterLabels:
        upgrade-running: ""
  backup: false
  clusters: 3
    - spoke1
  enable: false 4
  managedPolicies: 5
    - talm-policy
  preCaching: false
  remediationStrategy: 6
    canaries: 7
        - spoke1
    maxConcurrency: 2 8
    timeout: 240
  clusterLabelSelectors: 9
    - matchExpressions:
      - key: label1
      operator: In
      values:
        - value1a
        - value1b
  batchTimeoutAction: 10
status: 11
    computedMaxConcurrency: 2
    conditions:
      - lastTransitionTime: '2022-11-18T16:27:15Z'
        message: All selected clusters are valid
        reason: ClusterSelectionCompleted
        status: 'True'
        type: ClustersSelected 12
      - lastTransitionTime: '2022-11-18T16:27:15Z'
        message: Completed validation
        reason: ValidationCompleted
        status: 'True'
        type: Validated 13
      - lastTransitionTime: '2022-11-18T16:37:16Z'
        message: Not enabled
        reason: NotEnabled
        status: 'False'
        type: Progressing
    managedPoliciesForUpgrade:
      - name: talm-policy
        namespace: talm-namespace
    managedPoliciesNs:
      talm-policy: talm-namespace
    remediationPlan:
      - - spoke1
      - - spoke2
        - spoke3
    status:

1
각 클러스터에 대한 정책 수정을 완료할 때 TALM이 수행하는 작업을 지정합니다.
2
업데이트 프로세스를 시작할 때 TALM이 수행하는 작업을 지정합니다.
3
업데이트할 클러스터 목록을 정의합니다.
4
enable 필드는 false 로 설정됩니다.
5
수정할 사용자 정의 정책 세트를 나열합니다.
6
클러스터 업데이트의 세부 사항을 정의합니다.
7
카나리아 업데이트의 클러스터를 정의합니다.
8
일괄 처리의 최대 동시 업데이트 수를 정의합니다. 수정 일괄 처리 횟수는 카나리아 클러스터 수와 maxConcurrency 값으로 구분된 카나리아 클러스터를 제외한 클러스터 수입니다. 모든 관리 정책을 이미 준수하는 클러스터는 수정 계획에서 제외됩니다.
9
클러스터 선택을 위한 매개변수를 표시합니다.
10
일괄 처리 시간이 초과될 때 발생하는 작업을 제어합니다. 가능한 값은 중단 되거나 계속됩니다. 지정하지 않는 경우 기본값은 continue 입니다.
11
업데이트 상태에 대한 정보를 표시합니다.
12
ClustersSelected 조건은 선택한 모든 클러스터가 유효하다는 것을 보여줍니다.
13
Validated 조건은 선택한 모든 클러스터의 유효성을 검사합니다.
참고

카나리아 클러스터를 업데이트하는 동안 오류가 발생하면 업데이트 프로세스가 중지됩니다.

수정 계획을 성공적으로 생성하면 enable 필드를 true 로 설정하고 TALM이 지정된 관리 정책을 사용하여 비준수 클러스터를 업데이트하기 시작할 수 있습니다.

참고

ClusterGroupUpgrade CR의 enable 필드가 false 로 설정된 경우에만 spec 필드를 변경할 수 있습니다.

19.10.5.2. 검증

TALM은 지정된 모든 관리 정책이 사용 가능하고 올바르며 Validated 조건을 사용하여 다음과 같이 상태 및 이유를 보고합니다.

  • true

    검증이 완료되었습니다.

  • false

    정책이 누락되거나 유효하지 않거나 잘못된 플랫폼 이미지가 지정되어 있습니다.

19.10.5.3. 사전 캐싱

클러스터는 컨테이너 이미지 레지스트리에 액세스하기 위해 대역폭이 제한될 수 있으므로 업데이트가 완료되기 전에 시간 초과가 발생할 수 있습니다. 단일 노드 OpenShift 클러스터에서는 사전 캐싱을 사용하여 이러한 문제를 방지할 수 있습니다. preCaching 필드가 true 로 설정된 ClusterGroupUpgrade CR을 생성할 때 컨테이너 이미지 사전 캐싱이 시작됩니다. TALM은 사용 가능한 디스크 공간을 예상 OpenShift Container Platform 이미지 크기와 비교하여 충분한 공간이 있는지 확인합니다. 클러스터에 공간이 충분하지 않은 경우 TALM은 해당 클러스터에 대한 사전 캐싱을 취소하고 이에 대한 정책을 수정하지 않습니다.

TALM은 PrecacheSpecValid 조건을 사용하여 다음과 같이 상태 정보를 보고합니다.

  • true

    사전 캐싱 사양이 유효하고 일관되게 유지됩니다.

  • false

    사전 캐싱 사양이 불완전합니다.

TALM은 PrecachingSucceeded 조건을 사용하여 다음과 같이 상태 정보를 보고합니다.

  • true

    TALM은 사전 캐싱 프로세스를 발표했습니다. 클러스터에 대한 사전 캐싱이 실패하면 해당 클러스터에 대한 업데이트가 실패하지만 다른 모든 클러스터를 진행합니다. 클러스터에 대한 사전 캐싱이 실패한 경우 메시지가 표시됩니다.

  • false

    하나 이상의 클러스터에 대한 사전 캐싱이 여전히 진행 중이거나 모든 클러스터에서 실패했습니다.

자세한 내용은 "컨테이너 이미지 사전 캐시 기능 사용" 섹션을 참조하십시오.

19.10.5.4. 백업 생성

단일 노드 OpenShift의 경우 TALM은 업데이트하기 전에 배포 백업을 생성할 수 있습니다. 업데이트에 실패하면 애플리케이션을 다시 프로비저닝하지 않고도 이전 버전을 복구하고 클러스터를 작동 상태로 복원할 수 있습니다. 백업 기능을 사용하려면 먼저 backup 필드가 true 로 설정된 ClusterGroupUpgrade CR을 생성합니다. 백업 내용이 최신 상태인지 확인하기 위해 ClusterGroupUpgrade CR의 enable 필드를 true 로 설정할 때까지 백업이 수행되지 않습니다.

TALM은 BackupSucceeded 조건을 사용하여 다음과 같이 상태 및 이유를 보고합니다.

  • true

    모든 클러스터에 대한 백업이 완료되었거나 백업 실행이 완료되지만 하나 이상의 클러스터에는 실패했습니다. 클러스터에 대한 백업이 실패하면 해당 클러스터에 대한 업데이트가 실패하지만 다른 모든 클러스터를 진행합니다.

  • false

    하나 이상의 클러스터에 대한 백업이 여전히 진행 중이거나 모든 클러스터에 대해 실패했습니다.

자세한 내용은 "업그레이드 전에 클러스터 리소스의 백업 생성" 섹션을 참조하십시오.

19.10.5.5. 클러스터 업데이트

TALM은 수정 계획에 따라 정책을 적용합니다. 후속 배치에 대한 정책을 강제 적용하는 것은 현재 배치의 모든 클러스터가 관리되는 모든 정책을 준수하는 후 즉시 시작됩니다. 일괄 처리가 시간 초과되면 TALM은 다음 일괄 처리로 이동합니다. 일괄 처리의 시간 초과 값은 spec.timeout 필드로, 수정 계획의 배치 수로 나눈 값입니다.

TALM은 Progressing 조건을 사용하여 다음과 같이 상태 및 이유를 보고합니다.

  • true

    TALM은 비준수 정책을 수정하고 있습니다.

  • false

    업데이트가 진행되지 않았습니다. 가능한 이유는 다음과 같습니다.

    • 모든 클러스터는 모든 관리 정책을 준수합니다.
    • 정책 수정이 너무 오래 걸리는 경우 업데이트 시간이 초과되었습니다.
    • 시스템에서 차단 CR이 누락되었거나 아직 완료되지 않았습니다.
    • ClusterGroupUpgrade CR이 활성화되지 않습니다.
    • 백업이 아직 진행 중입니다.
참고

관리형 정책은 ClusterGroupUpgrade CR의 managedPolicies 필드에 나열된 순서에 적용됩니다. 하나의 관리형 정책은 한 번에 지정된 클러스터에 적용됩니다. 클러스터가 현재 정책을 준수하면 다음 관리 정책이 적용됩니다.

진행 상태의 샘플 ClusterGroupUpgrade CR

apiVersion: ran.openshift.io/v1alpha1
kind: ClusterGroupUpgrade
metadata:
  creationTimestamp: '2022-11-18T16:27:15Z'
  finalizers:
    - ran.openshift.io/cleanup-finalizer
  generation: 1
  name: talm-cgu
  namespace: talm-namespace
  resourceVersion: '40451823'
  uid: cca245a5-4bca-45fa-89c0-aa6af81a596c
Spec:
  actions:
    afterCompletion:
      deleteObjects: true
    beforeEnable: {}
  backup: false
  clusters:
    - spoke1
  enable: true
  managedPolicies:
    - talm-policy
  preCaching: true
  remediationStrategy:
    canaries:
        - spoke1
    maxConcurrency: 2
    timeout: 240
  clusterLabelSelectors:
    - matchExpressions:
      - key: label1
      operator: In
      values:
        - value1a
        - value1b
  batchTimeoutAction:
status:
    clusters:
      - name: spoke1
        state: complete
    computedMaxConcurrency: 2
    conditions:
      - lastTransitionTime: '2022-11-18T16:27:15Z'
        message: All selected clusters are valid
        reason: ClusterSelectionCompleted
        status: 'True'
        type: ClustersSelected
      - lastTransitionTime: '2022-11-18T16:27:15Z'
        message: Completed validation
        reason: ValidationCompleted
        status: 'True'
        type: Validated
      - lastTransitionTime: '2022-11-18T16:37:16Z'
        message: Remediating non-compliant policies
        reason: InProgress
        status: 'True'
        type: Progressing 1
    managedPoliciesForUpgrade:
      - name: talm-policy
        namespace: talm-namespace
    managedPoliciesNs:
      talm-policy: talm-namespace
    remediationPlan:
      - - spoke1
      - - spoke2
        - spoke3
    status:
      currentBatch: 2
      currentBatchRemediationProgress:
        spoke2:
          state: Completed
        spoke3:
          policyIndex: 0
          state: InProgress
      currentBatchStartedAt: '2022-11-18T16:27:16Z'
      startedAt: '2022-11-18T16:27:15Z'

1
진행 필드는 TALM이 정책을 수정하는 과정에 있음을 보여줍니다.

19.10.5.6. 업데이트 상태

TALM은 Succeeded 조건을 사용하여 다음과 같이 상태 및 이유를 보고합니다.

  • true

    모든 클러스터는 지정된 관리 정책을 준수합니다.

  • false

    업데이트 적용에 사용할 수 있는 클러스터가 없거나 다음과 같은 이유 중 하나로 인해 정책 수정이 너무 오래 걸리기 때문에 정책 수정이 실패했습니다.

    • 현재 일괄 처리에는 카나리아 업데이트가 포함되어 있으며 일괄 처리의 클러스터가 배치 제한 시간 내의 모든 관리 정책을 준수하지는 않습니다.
    • 클러스터는 remediationStrategy 필드에 지정된 타임아웃 값 내의 관리 정책을 준수하지 않았습니다.

Succeeded 상태의 샘플 ClusterGroupUpgrade CR

    apiVersion: ran.openshift.io/v1alpha1
    kind: ClusterGroupUpgrade
    metadata:
      name: cgu-upgrade-complete
      namespace: default
    spec:
      clusters:
      - spoke1
      - spoke4
      enable: true
      managedPolicies:
      - policy1-common-cluster-version-policy
      - policy2-common-pao-sub-policy
      remediationStrategy:
        maxConcurrency: 1
        timeout: 240
    status: 1
      clusters:
        - name: spoke1
          state: complete
        - name: spoke4
          state: complete
      conditions:
      - message: All selected clusters are valid
        reason: ClusterSelectionCompleted
        status: "True"
        type: ClustersSelected
      - message: Completed validation
        reason: ValidationCompleted
        status: "True"
        type: Validated
      - message: All clusters are compliant with all the managed policies
        reason: Completed
        status: "False"
        type: Progressing 2
      - message: All clusters are compliant with all the managed policies
        reason: Completed
        status: "True"
        type: Succeeded 3
      managedPoliciesForUpgrade:
      - name: policy1-common-cluster-version-policy
        namespace: default
      - name: policy2-common-pao-sub-policy
        namespace: default
      remediationPlan:
      - - spoke1
      - - spoke4
      status:
        completedAt: '2022-11-18T16:27:16Z'
        startedAt: '2022-11-18T16:27:15Z'

2
업데이트가 완료되면 Progressing 필드에서 상태가 false 입니다. 클러스터는 모든 관리 정책을 준수합니다.
3
Succeeded 필드에는 검증이 성공적으로 완료된 것으로 표시됩니다.
1
status 필드에는 클러스터 목록과 해당 상태가 포함됩니다. 클러스터의 상태는 완료 되거나 타임아웃 될 수 있습니다.

시간 초과 상태의 샘플 ClusterGroupUpgrade CR

apiVersion: ran.openshift.io/v1alpha1
kind: ClusterGroupUpgrade
metadata:
  creationTimestamp: '2022-11-18T16:27:15Z'
  finalizers:
    - ran.openshift.io/cleanup-finalizer
  generation: 1
  name: talm-cgu
  namespace: talm-namespace
  resourceVersion: '40451823'
  uid: cca245a5-4bca-45fa-89c0-aa6af81a596c
spec:
  actions:
    afterCompletion:
      deleteObjects: true
    beforeEnable: {}
  backup: false
  clusters:
    - spoke1
    - spoke2
  enable: true
  managedPolicies:
    - talm-policy
  preCaching: false
  remediationStrategy:
    maxConcurrency: 2
    timeout: 240
status:
  clusters:
    - name: spoke1
      state: complete
    - currentPolicy: 1
        name: talm-policy
        status: NonCompliant
      name: spoke2
      state: timedout
  computedMaxConcurrency: 2
  conditions:
    - lastTransitionTime: '2022-11-18T16:27:15Z'
      message: All selected clusters are valid
      reason: ClusterSelectionCompleted
      status: 'True'
      type: ClustersSelected
    - lastTransitionTime: '2022-11-18T16:27:15Z'
      message: Completed validation
      reason: ValidationCompleted
      status: 'True'
      type: Validated
    - lastTransitionTime: '2022-11-18T16:37:16Z'
      message: Policy remediation took too long
      reason: TimedOut
      status: 'False'
      type: Progressing
    - lastTransitionTime: '2022-11-18T16:37:16Z'
      message: Policy remediation took too long
      reason: TimedOut
      status: 'False'
      type: Succeeded 2
  managedPoliciesForUpgrade:
    - name: talm-policy
      namespace: talm-namespace
  managedPoliciesNs:
    talm-policy: talm-namespace
  remediationPlan:
    - - spoke1
      - spoke2
  status:
        startedAt: '2022-11-18T16:27:15Z'
        completedAt: '2022-11-18T20:27:15Z'

1
클러스터 상태가 시간 초과된 경우 currentPolicy 필드에 정책 이름과 정책 상태가 표시됩니다.
2
성공의 상태는 false 이고, 이 메시지는 정책 수정에 시간이 너무 오래 걸리는 것을 나타냅니다.

19.10.5.7. ClusterGroupUpgrade CR 차단

여러 ClusterGroupUpgrade CR을 생성하고 애플리케이션 순서를 제어할 수 있습니다.

예를 들어 ClusterGroupUpgrade CR A의 시작을 차단하는 ClusterGroupUpgrade CR C를 생성하는 경우 ClusterGroupUpgrade CR A의 상태가 UpgradeComplete 가 될 때까지 시작할 수 없습니다.

하나의 ClusterGroupUpgrade CR에는 여러 개의 차단 CR이 있을 수 있습니다. 이 경우 현재 CR의 업그레이드가 시작되기 전에 모든 차단 CR을 완료해야 합니다.

사전 요구 사항

  • TALM(토폴로지 라이프사이클 관리자)을 설치합니다.
  • 하나 이상의 관리 클러스터를 프로비저닝합니다.
  • cluster-admin 권한이 있는 사용자로 로그인합니다.
  • hub 클러스터에 RHACM 정책을 생성합니다.

절차

  1. ClusterGroupUpgrade CR의 콘텐츠를 cgu-a.yaml,cgu-b.yaml, cgu-c.yaml 파일에 저장합니다.

    apiVersion: ran.openshift.io/v1alpha1
    kind: ClusterGroupUpgrade
    metadata:
      name: cgu-a
      namespace: default
    spec:
      blockingCRs: 1
      - name: cgu-c
        namespace: default
      clusters:
      - spoke1
      - spoke2
      - spoke3
      enable: false
      managedPolicies:
      - policy1-common-cluster-version-policy
      - policy2-common-pao-sub-policy
      - policy3-common-ptp-sub-policy
      remediationStrategy:
        canaries:
        - spoke1
        maxConcurrency: 2
        timeout: 240
    status:
      conditions:
      - message: The ClusterGroupUpgrade CR is not enabled
        reason: UpgradeNotStarted
        status: "False"
        type: Ready
      copiedPolicies:
      - cgu-a-policy1-common-cluster-version-policy
      - cgu-a-policy2-common-pao-sub-policy
      - cgu-a-policy3-common-ptp-sub-policy
      managedPoliciesForUpgrade:
      - name: policy1-common-cluster-version-policy
        namespace: default
      - name: policy2-common-pao-sub-policy
        namespace: default
      - name: policy3-common-ptp-sub-policy
        namespace: default
      placementBindings:
      - cgu-a-policy1-common-cluster-version-policy
      - cgu-a-policy2-common-pao-sub-policy
      - cgu-a-policy3-common-ptp-sub-policy
      placementRules:
      - cgu-a-policy1-common-cluster-version-policy
      - cgu-a-policy2-common-pao-sub-policy
      - cgu-a-policy3-common-ptp-sub-policy
      remediationPlan:
      - - spoke1
      - - spoke2
    1
    차단 CR을 정의합니다. cgu-a 업데이트는 cgu-c 가 완료될 때까지 시작할 수 없습니다.
    apiVersion: ran.openshift.io/v1alpha1
    kind: ClusterGroupUpgrade
    metadata:
      name: cgu-b
      namespace: default
    spec:
      blockingCRs: 1
      - name: cgu-a
        namespace: default
      clusters:
      - spoke4
      - spoke5
      enable: false
      managedPolicies:
      - policy1-common-cluster-version-policy
      - policy2-common-pao-sub-policy
      - policy3-common-ptp-sub-policy
      - policy4-common-sriov-sub-policy
      remediationStrategy:
        maxConcurrency: 1
        timeout: 240
    status:
      conditions:
      - message: The ClusterGroupUpgrade CR is not enabled
        reason: UpgradeNotStarted
        status: "False"
        type: Ready
      copiedPolicies:
      - cgu-b-policy1-common-cluster-version-policy
      - cgu-b-policy2-common-pao-sub-policy
      - cgu-b-policy3-common-ptp-sub-policy
      - cgu-b-policy4-common-sriov-sub-policy
      managedPoliciesForUpgrade:
      - name: policy1-common-cluster-version-policy
        namespace: default
      - name: policy2-common-pao-sub-policy
        namespace: default
      - name: policy3-common-ptp-sub-policy
        namespace: default
      - name: policy4-common-sriov-sub-policy
        namespace: default
      placementBindings:
      - cgu-b-policy1-common-cluster-version-policy
      - cgu-b-policy2-common-pao-sub-policy
      - cgu-b-policy3-common-ptp-sub-policy
      - cgu-b-policy4-common-sriov-sub-policy
      placementRules:
      - cgu-b-policy1-common-cluster-version-policy
      - cgu-b-policy2-common-pao-sub-policy
      - cgu-b-policy3-common-ptp-sub-policy
      - cgu-b-policy4-common-sriov-sub-policy
      remediationPlan:
      - - spoke4
      - - spoke5
      status: {}
    1
    cgu-b 업데이트는 cgu-a 가 완료될 때까지 시작할 수 없습니다.
    apiVersion: ran.openshift.io/v1alpha1
    kind: ClusterGroupUpgrade
    metadata:
      name: cgu-c
      namespace: default
    spec: 1
      clusters:
      - spoke6
      enable: false
      managedPolicies:
      - policy1-common-cluster-version-policy
      - policy2-common-pao-sub-policy
      - policy3-common-ptp-sub-policy
      - policy4-common-sriov-sub-policy
      remediationStrategy:
        maxConcurrency: 1
        timeout: 240
    status:
      conditions:
      - message: The ClusterGroupUpgrade CR is not enabled
        reason: UpgradeNotStarted
        status: "False"
        type: Ready
      copiedPolicies:
      - cgu-c-policy1-common-cluster-version-policy
      - cgu-c-policy4-common-sriov-sub-policy
      managedPoliciesCompliantBeforeUpgrade:
      - policy2-common-pao-sub-policy
      - policy3-common-ptp-sub-policy
      managedPoliciesForUpgrade:
      - name: policy1-common-cluster-version-policy
        namespace: default
      - name: policy4-common-sriov-sub-policy
        namespace: default
      placementBindings:
      - cgu-c-policy1-common-cluster-version-policy
      - cgu-c-policy4-common-sriov-sub-policy
      placementRules:
      - cgu-c-policy1-common-cluster-version-policy
      - cgu-c-policy4-common-sriov-sub-policy
      remediationPlan:
      - - spoke6
      status: {}
    1
    cgu-c 업데이트는 차단 CR이 없습니다. enable 필드가 true 로 설정된 경우 TALM이 cgu-c 업데이트를 시작합니다.
  2. 각 관련 CR에 대해 다음 명령을 실행하여 ClusterGroupUpgrade CR을 생성합니다.

    $ oc apply -f <name>.yaml
  3. 관련 각 CR에 대해 다음 명령을 실행하여 업데이트 프로세스를 시작합니다.

    $ oc --namespace=default patch clustergroupupgrade.ran.openshift.io/<name> \
    --type merge -p '{"spec":{"enable":true}}'

    다음 예제에서는 enable 필드가 true 로 설정된 ClusterGroupUpgrade CR을 보여줍니다.

    cgu-a 차단 CR의 예

    apiVersion: ran.openshift.io/v1alpha1
    kind: ClusterGroupUpgrade
    metadata:
      name: cgu-a
      namespace: default
    spec:
      blockingCRs:
      - name: cgu-c
        namespace: default
      clusters:
      - spoke1
      - spoke2
      - spoke3
      enable: true
      managedPolicies:
      - policy1-common-cluster-version-policy
      - policy2-common-pao-sub-policy
      - policy3-common-ptp-sub-policy
      remediationStrategy:
        canaries:
        - spoke1
        maxConcurrency: 2
        timeout: 240
    status:
      conditions:
      - message: 'The ClusterGroupUpgrade CR is blocked by other CRs that have not yet
          completed: [cgu-c]' 1
        reason: UpgradeCannotStart
        status: "False"
        type: Ready
      copiedPolicies:
      - cgu-a-policy1-common-cluster-version-policy
      - cgu-a-policy2-common-pao-sub-policy
      - cgu-a-policy3-common-ptp-sub-policy
      managedPoliciesForUpgrade:
      - name: policy1-common-cluster-version-policy
        namespace: default
      - name: policy2-common-pao-sub-policy
        namespace: default
      - name: policy3-common-ptp-sub-policy
        namespace: default
      placementBindings:
      - cgu-a-policy1-common-cluster-version-policy
      - cgu-a-policy2-common-pao-sub-policy
      - cgu-a-policy3-common-ptp-sub-policy
      placementRules:
      - cgu-a-policy1-common-cluster-version-policy
      - cgu-a-policy2-common-pao-sub-policy
      - cgu-a-policy3-common-ptp-sub-policy
      remediationPlan:
      - - spoke1
      - - spoke2
      status: {}

    1
    차단 CR 목록을 표시합니다.

    CR을 차단하는 cgu-b 의 예

    apiVersion: ran.openshift.io/v1alpha1
    kind: ClusterGroupUpgrade
    metadata:
      name: cgu-b
      namespace: default
    spec:
      blockingCRs:
      - name: cgu-a
        namespace: default
      clusters:
      - spoke4
      - spoke5
      enable: true
      managedPolicies:
      - policy1-common-cluster-version-policy
      - policy2-common-pao-sub-policy
      - policy3-common-ptp-sub-policy
      - policy4-common-sriov-sub-policy
      remediationStrategy:
        maxConcurrency: 1
        timeout: 240
    status:
      conditions:
      - message: 'The ClusterGroupUpgrade CR is blocked by other CRs that have not yet
          completed: [cgu-a]' 1
        reason: UpgradeCannotStart
        status: "False"
        type: Ready
      copiedPolicies:
      - cgu-b-policy1-common-cluster-version-policy
      - cgu-b-policy2-common-pao-sub-policy
      - cgu-b-policy3-common-ptp-sub-policy
      - cgu-b-policy4-common-sriov-sub-policy
      managedPoliciesForUpgrade:
      - name: policy1-common-cluster-version-policy
        namespace: default
      - name: policy2-common-pao-sub-policy
        namespace: default
      - name: policy3-common-ptp-sub-policy
        namespace: default
      - name: policy4-common-sriov-sub-policy
        namespace: default
      placementBindings:
      - cgu-b-policy1-common-cluster-version-policy
      - cgu-b-policy2-common-pao-sub-policy
      - cgu-b-policy3-common-ptp-sub-policy
      - cgu-b-policy4-common-sriov-sub-policy
      placementRules:
      - cgu-b-policy1-common-cluster-version-policy
      - cgu-b-policy2-common-pao-sub-policy
      - cgu-b-policy3-common-ptp-sub-policy
      - cgu-b-policy4-common-sriov-sub-policy
      remediationPlan:
      - - spoke4
      - - spoke5
      status: {}

    1
    차단 CR 목록을 표시합니다.

    CR을 차단하는 cgu-c 의 예

    apiVersion: ran.openshift.io/v1alpha1
    kind: ClusterGroupUpgrade
    metadata:
      name: cgu-c
      namespace: default
    spec:
      clusters:
      - spoke6
      enable: true
      managedPolicies:
      - policy1-common-cluster-version-policy
      - policy2-common-pao-sub-policy
      - policy3-common-ptp-sub-policy
      - policy4-common-sriov-sub-policy
      remediationStrategy:
        maxConcurrency: 1
        timeout: 240
    status:
      conditions:
      - message: The ClusterGroupUpgrade CR has upgrade policies that are still non compliant 1
        reason: UpgradeNotCompleted
        status: "False"
        type: Ready
      copiedPolicies:
      - cgu-c-policy1-common-cluster-version-policy
      - cgu-c-policy4-common-sriov-sub-policy
      managedPoliciesCompliantBeforeUpgrade:
      - policy2-common-pao-sub-policy
      - policy3-common-ptp-sub-policy
      managedPoliciesForUpgrade:
      - name: policy1-common-cluster-version-policy
        namespace: default
      - name: policy4-common-sriov-sub-policy
        namespace: default
      placementBindings:
      - cgu-c-policy1-common-cluster-version-policy
      - cgu-c-policy4-common-sriov-sub-policy
      placementRules:
      - cgu-c-policy1-common-cluster-version-policy
      - cgu-c-policy4-common-sriov-sub-policy
      remediationPlan:
      - - spoke6
      status:
        currentBatch: 1
        remediationPlanForBatch:
          spoke6: 0

    1
    cgu-c 업데이트는 차단 CR이 없습니다.

19.10.6. 관리형 클러스터에서 정책 업데이트

TALM(토폴로지 라이프사이클 관리자)은 ClusterGroupUpgrade CR에 지정된 클러스터에 대한 정보 정책을 조정합니다. TALM은 관리되는 RHACM 정책 사본을 시행 하여 정보 정책을 해결합니다. 복사된 각 정책에는 자체 RHACM 배치 규칙과 RHACM 배치 바인딩이 있습니다.

하나씩 TALM은 현재 배치의 각 클러스터를 적용 가능한 관리 정책에 해당하는 배치 규칙에 추가합니다. 클러스터가 이미 정책을 준수하는 경우 TALM은 호환 클러스터에 해당 정책을 적용하는 것을 건너뜁니다. 그런 다음 TALM은 비호환 클러스터에 다음 정책을 적용하기 위해 계속 이동합니다. TALM이 일괄 처리에서 업데이트를 완료하면 복사된 정책과 연결된 배치 규칙에서 모든 클러스터가 제거됩니다. 그런 다음 다음 배치의 업데이트가 시작됩니다.

스포크 클러스터에서 RHACM에 호환 상태를 보고하지 않는 경우 hub 클러스터에 대한 관리 정책에 TALM에 필요한 상태 정보가 누락될 수 있습니다. TALM에서는 다음과 같은 방법으로 이러한 경우를 처리합니다.

  • 정책의 status.compliant 필드가 없는 경우 TALM은 정책을 무시하고 로그 항목을 추가합니다. 그런 다음 TALM은 정책의 status.status 필드를 계속 확인합니다.
  • 정책의 status.status 가 누락된 경우 TALM에서 오류를 생성합니다.
  • 정책의 status.status 필드에 클러스터의 규정 준수 상태가 없는 경우 TALM은 해당 클러스터를 해당 정책과 준수하지 않는 것으로 간주합니다.

ClusterGroupUpgrade CR의 batchTimeoutAction 은 클러스터에 대한 업그레이드가 실패하는 경우 발생하는 상황을 결정합니다. 오류가 발생한 클러스터를 계속 건너뛰고 다른 클러스터를 계속 업그레이드하거나 모든 클러스터에 대한 정책 수정을 중지하려면 중단 을 지정할 수 있습니다. 제한 시간이 경과하면 TALM은 클러스터에 대한 추가 업데이트가 발생하지 않도록 모든 적용 정책을 제거합니다.

업그레이드 정책의 예

apiVersion: policy.open-cluster-management.io/v1
kind: Policy
metadata:
  name: ocp-4.4.13.4
  namespace: platform-upgrade
spec:
  disabled: false
  policy-templates:
  - objectDefinition:
      apiVersion: policy.open-cluster-management.io/v1
      kind: ConfigurationPolicy
      metadata:
        name: upgrade
      spec:
        namespaceselector:
          exclude:
          - kube-*
          include:
          - '*'
        object-templates:
        - complianceType: musthave
          objectDefinition:
            apiVersion: config.openshift.io/v1
            kind: ClusterVersion
            metadata:
              name: version
            spec:
              channel: stable-4.13
              desiredUpdate:
                version: 4.4.13.4
              upstream: https://api.openshift.com/api/upgrades_info/v1/graph
            status:
              history:
                - state: Completed
                  version: 4.4.13.4
        remediationAction: inform
        severity: low
  remediationAction: inform

RHACM 정책에 대한 자세한 내용은 정책 개요 를 참조하십시오.

추가 리소스

PolicyGenTemplate CRD에 대한 자세한 내용은 PolicyGenTemplate CRD 정보를 참조하십시오.

19.10.6.1. TALM을 사용하여 설치하는 관리형 클러스터에 대한 Operator 서브스크립션 구성

Operator의 Subscription CR(사용자 정의 리소스)에 status.state.AtLatestKnown 필드가 포함된 경우에만 TALM( topology Aware Lifecycle Manager)은 Operator에 대한 설치 계획을 승인할 수 있습니다.

절차

  1. status.state.AtLatestKnown 필드를 Operator의 Subscription CR에 추가합니다.

    서브스크립션 CR의 예

    apiVersion: operators.coreos.com/v1alpha1
    kind: Subscription
    metadata:
      name: cluster-logging
      namespace: openshift-logging
      annotations:
        ran.openshift.io/ztp-deploy-wave: "2"
    spec:
      channel: "stable"
      name: cluster-logging
      source: redhat-operators
      sourceNamespace: openshift-marketplace
      installPlanApproval: Manual
    status:
      state: AtLatestKnown 1

    1
    status.state: AtLatestKnown 필드는 Operator 카탈로그에서 사용 가능한 최신 Operator 버전에 사용됩니다.
    참고

    레지스트리에서 새 버전의 Operator를 사용할 수 있으면 연결된 정책이 호환되지 않습니다.

  2. ClusterGroupUpgrade CR이 있는 관리 클러스터에 변경된 서브스크립션 정책을 적용합니다.

19.10.6.2. 관리 클러스터에 업데이트 정책 적용

정책을 적용하여 관리 클러스터를 업데이트할 수 있습니다.

사전 요구 사항

  • TALM(토폴로지 라이프사이클 관리자)을 설치합니다.
  • 하나 이상의 관리 클러스터를 프로비저닝합니다.
  • cluster-admin 권한이 있는 사용자로 로그인합니다.
  • hub 클러스터에 RHACM 정책을 생성합니다.

절차

  1. ClusterGroupUpgrade CR의 콘텐츠를 cgu-1.yaml 파일에 저장합니다.

    apiVersion: ran.openshift.io/v1alpha1
    kind: ClusterGroupUpgrade
    metadata:
      name: cgu-1
      namespace: default
    spec:
      managedPolicies: 1
        - policy1-common-cluster-version-policy
        - policy2-common-nto-sub-policy
        - policy3-common-ptp-sub-policy
        - policy4-common-sriov-sub-policy
      enable: false
      clusters: 2
      - spoke1
      - spoke2
      - spoke5
      - spoke6
      remediationStrategy:
        maxConcurrency: 2 3
        timeout: 240 4
      batchTimeoutAction: 5
    1
    적용할 정책의 이름입니다.
    2
    업데이트할 클러스터 목록입니다.
    3
    maxConcurrency 필드는 동시에 업데이트되는 클러스터 수를 나타냅니다.
    4
    업데이트 제한 시간(분)입니다.
    5
    일괄 처리 시간이 초과될 때 발생하는 작업을 제어합니다. 가능한 값은 중단 되거나 계속됩니다. 지정하지 않는 경우 기본값은 continue 입니다.
  2. 다음 명령을 실행하여 ClusterGroupUpgrade CR을 생성합니다.

    $ oc create -f cgu-1.yaml
    1. 다음 명령을 실행하여 hub 클러스터에서 ClusterGroupUpgrade CR이 생성되었는지 확인합니다.

      $ oc get cgu --all-namespaces

      출력 예

      NAMESPACE   NAME  AGE  STATE      DETAILS
      default     cgu-1 8m55 NotEnabled Not Enabled

    2. 다음 명령을 실행하여 업데이트 상태를 확인합니다.

      $ oc get cgu -n default cgu-1 -ojsonpath='{.status}' | jq

      출력 예

      {
        "computedMaxConcurrency": 2,
        "conditions": [
          {
            "lastTransitionTime": "2022-02-25T15:34:07Z",
            "message": "Not enabled", 1
            "reason": "NotEnabled",
            "status": "False",
            "type": "Progressing"
          }
        ],
        "copiedPolicies": [
          "cgu-policy1-common-cluster-version-policy",
          "cgu-policy2-common-nto-sub-policy",
          "cgu-policy3-common-ptp-sub-policy",
          "cgu-policy4-common-sriov-sub-policy"
        ],
        "managedPoliciesContent": {
          "policy1-common-cluster-version-policy": "null",
          "policy2-common-nto-sub-policy": "[{\"kind\":\"Subscription\",\"name\":\"node-tuning-operator\",\"namespace\":\"openshift-cluster-node-tuning-operator\"}]",
          "policy3-common-ptp-sub-policy": "[{\"kind\":\"Subscription\",\"name\":\"ptp-operator-subscription\",\"namespace\":\"openshift-ptp\"}]",
          "policy4-common-sriov-sub-policy": "[{\"kind\":\"Subscription\",\"name\":\"sriov-network-operator-subscription\",\"namespace\":\"openshift-sriov-network-operator\"}]"
        },
        "managedPoliciesForUpgrade": [
          {
            "name": "policy1-common-cluster-version-policy",
            "namespace": "default"
          },
          {
            "name": "policy2-common-nto-sub-policy",
            "namespace": "default"
          },
          {
            "name": "policy3-common-ptp-sub-policy",
            "namespace": "default"
          },
          {
            "name": "policy4-common-sriov-sub-policy",
            "namespace": "default"
          }
        ],
        "managedPoliciesNs": {
          "policy1-common-cluster-version-policy": "default",
          "policy2-common-nto-sub-policy": "default",
          "policy3-common-ptp-sub-policy": "default",
          "policy4-common-sriov-sub-policy": "default"
        },
        "placementBindings": [
          "cgu-policy1-common-cluster-version-policy",
          "cgu-policy2-common-nto-sub-policy",
          "cgu-policy3-common-ptp-sub-policy",
          "cgu-policy4-common-sriov-sub-policy"
        ],
        "placementRules": [
          "cgu-policy1-common-cluster-version-policy",
          "cgu-policy2-common-nto-sub-policy",
          "cgu-policy3-common-ptp-sub-policy",
          "cgu-policy4-common-sriov-sub-policy"
        ],
        "precaching": {
          "spec": {}
        },
        "remediationPlan": [
          [
            "spoke1",
            "spoke2"
          ],
          [
            "spoke5",
            "spoke6"
          ]
        ],
        "status": {}
      }

      1
      ClusterGroupUpgrade CR의 spec.enable 필드가 false 로 설정됩니다.
    3. 다음 명령을 실행하여 정책 상태를 확인합니다.

      $ oc get policies -A

      출력 예

      NAMESPACE   NAME                                                 REMEDIATION ACTION   COMPLIANCE STATE   AGE
      default     cgu-policy1-common-cluster-version-policy            enforce                                 17m 1
      default     cgu-policy2-common-nto-sub-policy                    enforce                                 17m
      default     cgu-policy3-common-ptp-sub-policy                    enforce                                 17m
      default     cgu-policy4-common-sriov-sub-policy                  enforce                                 17m
      default     policy1-common-cluster-version-policy                inform               NonCompliant       15h
      default     policy2-common-nto-sub-policy                        inform               NonCompliant       15h
      default     policy3-common-ptp-sub-policy                        inform               NonCompliant       18m
      default     policy4-common-sriov-sub-policy                      inform               NonCompliant       18m

      1
      현재 클러스터에 적용되는 정책의 spec.remediationAction 필드가 적용 되도록 설정되어 있습니다. ClusterGroupUpgrade CR의 정보 정보 모드의 관리형 정책은 업데이트 중에 정보 모드를 유지합니다.
  3. 다음 명령을 실행하여 spec.enable 필드의 값을 true 로 변경합니다.

    $ oc --namespace=default patch clustergroupupgrade.ran.openshift.io/cgu-1 \
    --patch '{"spec":{"enable":true}}' --type=merge

검증

  1. 다음 명령을 실행하여 업데이트 상태를 다시 확인합니다.

    $ oc get cgu -n default cgu-1 -ojsonpath='{.status}' | jq

    출력 예

    {
      "computedMaxConcurrency": 2,
      "conditions": [ 1
        {
          "lastTransitionTime": "2022-02-25T15:33:07Z",
          "message": "All selected clusters are valid",
          "reason": "ClusterSelectionCompleted",
          "status": "True",
          "type": "ClustersSelected",
          "lastTransitionTime": "2022-02-25T15:33:07Z",
          "message": "Completed validation",
          "reason": "ValidationCompleted",
          "status": "True",
          "type": "Validated",
          "lastTransitionTime": "2022-02-25T15:34:07Z",
          "message": "Remediating non-compliant policies",
          "reason": "InProgress",
          "status": "True",
          "type": "Progressing"
        }
      ],
      "copiedPolicies": [
        "cgu-policy1-common-cluster-version-policy",
        "cgu-policy2-common-nto-sub-policy",
        "cgu-policy3-common-ptp-sub-policy",
        "cgu-policy4-common-sriov-sub-policy"
      ],
      "managedPoliciesContent": {
        "policy1-common-cluster-version-policy": "null",
        "policy2-common-nto-sub-policy": "[{\"kind\":\"Subscription\",\"name\":\"node-tuning-operator\",\"namespace\":\"openshift-cluster-node-tuning-operator\"}]",
        "policy3-common-ptp-sub-policy": "[{\"kind\":\"Subscription\",\"name\":\"ptp-operator-subscription\",\"namespace\":\"openshift-ptp\"}]",
        "policy4-common-sriov-sub-policy": "[{\"kind\":\"Subscription\",\"name\":\"sriov-network-operator-subscription\",\"namespace\":\"openshift-sriov-network-operator\"}]"
      },
      "managedPoliciesForUpgrade": [
        {
          "name": "policy1-common-cluster-version-policy",
          "namespace": "default"
        },
        {
          "name": "policy2-common-nto-sub-policy",
          "namespace": "default"
        },
        {
          "name": "policy3-common-ptp-sub-policy",
          "namespace": "default"
        },
        {
          "name": "policy4-common-sriov-sub-policy",
          "namespace": "default"
        }
      ],
      "managedPoliciesNs": {
        "policy1-common-cluster-version-policy": "default",
        "policy2-common-nto-sub-policy": "default",
        "policy3-common-ptp-sub-policy": "default",
        "policy4-common-sriov-sub-policy": "default"
      },
      "placementBindings": [
        "cgu-policy1-common-cluster-version-policy",
        "cgu-policy2-common-nto-sub-policy",
        "cgu-policy3-common-ptp-sub-policy",
        "cgu-policy4-common-sriov-sub-policy"
      ],
      "placementRules": [
        "cgu-policy1-common-cluster-version-policy",
        "cgu-policy2-common-nto-sub-policy",
        "cgu-policy3-common-ptp-sub-policy",
        "cgu-policy4-common-sriov-sub-policy"
      ],
      "precaching": {
        "spec": {}
      },
      "remediationPlan": [
        [
          "spoke1",
          "spoke2"
        ],
        [
          "spoke5",
          "spoke6"
        ]
      ],
      "status": {
        "currentBatch": 1,
        "currentBatchStartedAt": "2022-02-25T15:54:16Z",
        "remediationPlanForBatch": {
          "spoke1": 0,
          "spoke2": 1
        },
        "startedAt": "2022-02-25T15:54:16Z"
      }
    }

    1
    현재 일괄 처리의 업데이트 진행 상황을 반영합니다. 이 명령을 다시 실행하여 진행 상황에 대한 업데이트된 정보를 받습니다.
  2. 정책에 Operator 서브스크립션이 포함된 경우 단일 노드 클러스터에서 직접 설치 진행 상황을 확인할 수 있습니다.

    1. 다음 명령을 실행하여 설치 진행 상황을 확인할 단일 노드 클러스터의 KUBECONFIG 파일을 내보냅니다.

      $ export KUBECONFIG=<cluster_kubeconfig_absolute_path>
    2. 단일 노드 클러스터에 있는 모든 서브스크립션을 확인하고 다음 명령을 실행하여 ClusterGroupUpgrade CR을 통해 설치하려는 정책에서 해당 서브스크립션을 찾습니다.

      $ oc get subs -A | grep -i <subscription_name>

      cluster-logging 정책의 출력 예

      NAMESPACE                              NAME                         PACKAGE                      SOURCE             CHANNEL
      openshift-logging                      cluster-logging              cluster-logging              redhat-operators   stable

  3. 관리 정책 중 하나에 ClusterVersion CR이 포함된 경우 스포크 클러스터에 대해 다음 명령을 실행하여 현재 배치에서 플랫폼 업데이트의 상태를 확인합니다.

    $ oc get clusterversion

    출력 예

    NAME      VERSION   AVAILABLE   PROGRESSING   SINCE   STATUS
    version   4.4.13.5     True        True          43s     Working towards 4.4.13.7: 71 of 735 done (9% complete)

  4. 다음 명령을 실행하여 Operator 서브스크립션을 확인합니다.

    $ oc get subs -n <operator-namespace> <operator-subscription> -ojsonpath="{.status}"
  5. 다음 명령을 실행하여 원하는 서브스크립션과 연결된 단일 노드 클러스터에 설치 계획이 있는지 확인합니다.

    $ oc get installplan -n <subscription_namespace>

    cluster-logging Operator의 출력 예

    NAMESPACE                              NAME            CSV                                 APPROVAL   APPROVED
    openshift-logging                      install-6khtw   cluster-logging.5.3.3-4             Manual     true 1

    1
    설치 계획의 Approval 필드가 Manual 로 설정되고 TALM에서 설치 계획을 승인한 후 승인 필드가 false 에서 true 로 변경됩니다.
    참고

    TALM이 서브스크립션이 포함된 정책을 수정하면 해당 서브스크립션에 연결된 모든 설치 계획을 자동으로 승인합니다. Operator를 최신 알려진 버전으로 가져오기 위해 여러 설치 계획이 필요한 경우 TALM에서 여러 설치 계획을 승인하고 하나 이상의 중간 버전을 통해 업그레이드하여 최종 버전으로 가져올 수 있습니다.

  6. 다음 명령을 실행하여 ClusterGroupUpgrade 가 설치하는 정책의 Operator의 클러스터 서비스 버전이 Succeeded 단계에 도달했는지 확인합니다.

    $ oc get csv -n <operator_namespace>

    OpenShift Logging Operator의 출력 예

    NAME                    DISPLAY                     VERSION   REPLACES   PHASE
    cluster-logging.5.4.2   Red Hat OpenShift Logging   5.4.2                Succeeded

19.10.7. 업그레이드하기 전에 클러스터 리소스의 백업 생성

단일 노드 OpenShift의 경우 TALM(토폴로지 라이프사이클 관리자)는 업그레이드하기 전에 배포 백업을 생성할 수 있습니다. 업그레이드에 실패하면 애플리케이션을 재프로비저닝하지 않고도 이전 버전을 복구하고 클러스터를 작동 상태로 복원할 수 있습니다.

백업 기능을 사용하려면 먼저 backup 필드가 true 로 설정된 ClusterGroupUpgrade CR을 생성합니다. 백업 내용이 최신 상태인지 확인하기 위해 ClusterGroupUpgrade CR의 enable 필드를 true 로 설정할 때까지 백업이 수행되지 않습니다.

TALM은 BackupSucceeded 조건을 사용하여 다음과 같이 상태 및 이유를 보고합니다.

  • true

    모든 클러스터에 대한 백업이 완료되었거나 백업 실행이 완료되지만 하나 이상의 클러스터에는 실패했습니다. 클러스터에 대한 백업이 실패하면 해당 클러스터가 업데이트되지 않습니다.

  • false

    하나 이상의 클러스터에 대한 백업이 여전히 진행 중이거나 모든 클러스터에 대해 실패했습니다. 스포크 클러스터에서 실행되는 백업 프로세스는 다음과 같은 상태를 가질 수 있습니다.

    • PreparingToStart

      첫 번째 조정 통과가 진행 중입니다. TALM은 실패한 업그레이드 시도에서 생성된 모든 설명된 백업 네임스페이스 및 허브 뷰 리소스를 삭제합니다.

    • Starting

      백업 사전 요구 사항 및 백업 작업이 생성됩니다.

    • 활성 상태

      백업이 진행 중입니다.

    • Succeed

      백업이 성공했습니다.

    • BackupTimeout

      아티팩트 백업이 부분적으로 수행됩니다.

    • 복구할 수 없는Error

      백업이 0이 아닌 종료 코드로 종료되었습니다.

참고

클러스터 백업에 실패하고 BackupTimeout 또는 UnrecoverableError 상태를 입력하면 클러스터 업데이트가 해당 클러스터를 진행하지 않습니다. 다른 클러스터에 대한 업데이트는 영향을 받지 않으며 계속됩니다.

19.10.7.1. 백업을 사용하여 ClusterGroupUpgrade CR 생성

단일 노드 OpenShift 클러스터에서 업그레이드하기 전에 배포 백업을 생성할 수 있습니다. 업그레이드에 실패하면 Topology Aware Lifecycle Manager (TALM)에서 생성한 upgrade-recovery.sh 스크립트를 사용하여 시스템을 사전 업그레이드 상태로 되돌릴 수 있습니다. 백업은 다음 항목으로 구성됩니다.

클러스터 백업
etcd 및 정적 포드 매니페스트의 스냅샷입니다.
콘텐츠 백업
폴더 백업(예: /etc,/usr/local,/var/lib/kubelet )
변경된 파일 백업
변경된 machine-config 에서 관리하는 모든 파일
Deployment
고정된 ostree 배포.
이미지 (선택 사항)
사용 중인 모든 컨테이너 이미지입니다.

사전 요구 사항

  • TALM(토폴로지 라이프사이클 관리자)을 설치합니다.
  • 하나 이상의 관리 클러스터를 프로비저닝합니다.
  • cluster-admin 권한이 있는 사용자로 로그인합니다.
  • RHACM(Red Hat Advanced Cluster Management)을 설치합니다.
참고

복구 파티션을 만드는 것이 좋습니다. 다음은 50GB의 복구 파티션에 대한 SiteConfig CR(사용자 정의 리소스)의 예입니다.

nodes:
    - hostName: "node-1.example.com"
    role: "master"
    rootDeviceHints:
        hctl: "0:2:0:0"
        deviceName: /dev/disk/by-id/scsi-3600508b400105e210000900000490000
...
    #Disk /dev/disk/by-id/scsi-3600508b400105e210000900000490000:
    #893.3 GiB, 959119884288 bytes, 1873281024 sectors
    diskPartition:
        - device: /dev/disk/by-id/scsi-3600508b400105e210000900000490000
        partitions:
        - mount_point: /var/recovery
            size: 51200
            start: 800000

절차

  1. backup 을 사용하여 ClusterGroupUpgrade CR의 콘텐츠를 저장하고 clustergroupupgrades-group-du.yaml 파일에서 true 로 설정된 필드를 활성화합니다.

    apiVersion: ran.openshift.io/v1alpha1
    kind: ClusterGroupUpgrade
    metadata:
      name: du-upgrade-4918
      namespace: ztp-group-du-sno
    spec:
      preCaching: true
      backup: true
      clusters:
      - cnfdb1
      - cnfdb2
      enable: true
      managedPolicies:
      - du-upgrade-platform-upgrade
      remediationStrategy:
        maxConcurrency: 2
        timeout: 240
  2. 업데이트를 시작하려면 다음 명령을 실행하여 ClusterGroupUpgrade CR을 적용합니다.

    $ oc apply -f clustergroupupgrades-group-du.yaml

검증

  • 다음 명령을 실행하여 hub 클러스터에서 업그레이드 상태를 확인합니다.

    $ oc get cgu -n ztp-group-du-sno du-upgrade-4918 -o jsonpath='{.status}'

    출력 예

    {
        "backup": {
            "clusters": [
                "cnfdb2",
                "cnfdb1"
        ],
        "status": {
            "cnfdb1": "Succeeded",
            "cnfdb2": "Failed" 1
        }
    },
    "computedMaxConcurrency": 1,
    "conditions": [
        {
            "lastTransitionTime": "2022-04-05T10:37:19Z",
            "message": "Backup failed for 1 cluster", 2
            "reason": "PartiallyDone", 3
            "status": "True", 4
            "type": "Succeeded"
        }
    ],
    "precaching": {
        "spec": {}
    },
    "status": {}

    1
    하나의 클러스터에 대한 백업이 실패했습니다.
    2
    이 메시지는 백업이 하나의 클러스터에 실패했음을 확인합니다.
    3
    백업이 부분적으로 성공했습니다.
    4
    백업 프로세스가 완료되었습니다.

19.10.7.2. 업그레이드 실패 후 클러스터 복구

클러스터 업그레이드가 실패하면 클러스터에 수동으로 로그인하고 백업을 사용하여 클러스터를 사전 업그레이드 상태로 되돌릴 수 있습니다. 두 단계가 있습니다.

rollback
시도한 업그레이드에 플랫폼 OS 배포로 변경 사항이 포함된 경우 복구 스크립트를 실행하기 전에 이전 버전으로 롤백해야 합니다.
중요

롤백은 TALM 및 단일 노드 OpenShift에서의 업그레이드에만 적용됩니다. 이 프로세스는 다른 업그레이드 유형의 롤백에는 적용되지 않습니다.

복구
복구 시 컨테이너가 종료되고 백업 파티션의 파일을 사용하여 컨테이너를 다시 시작하고 클러스터를 복원합니다.

사전 요구 사항

  • TALM(토폴로지 라이프사이클 관리자)을 설치합니다.
  • 하나 이상의 관리 클러스터를 프로비저닝합니다.
  • RHACM(Red Hat Advanced Cluster Management)을 설치합니다.
  • cluster-admin 권한이 있는 사용자로 로그인합니다.
  • 백업용으로 구성된 업그레이드를 실행합니다.

절차

  1. 다음 명령을 실행하여 이전에 생성한 ClusterGroupUpgrade 사용자 정의 리소스(CR)를 삭제합니다.

    $ oc delete cgu/du-upgrade-4918 -n ztp-group-du-sno
  2. 복구하려는 클러스터에 로그인합니다.
  3. 다음 명령을 실행하여 플랫폼 OS 배포의 상태를 확인합니다.

    $ ostree admin status

    출력 예

    [root@lab-test-spoke2-node-0 core]# ostree admin status
    * rhcos c038a8f08458bbed83a77ece033ad3c55597e3f64edad66ea12fda18cbdceaf9.0
        Version: 49.84.202202230006-0
        Pinned: yes 1
        origin refspec: c038a8f08458bbed83a77ece033ad3c55597e3f64edad66ea12fda18cbdceaf9

    1
    현재 배포가 고정되어 있습니다. 플랫폼 OS 배포 롤백은 필요하지 않습니다.
    [root@lab-test-spoke2-node-0 core]# ostree admin status
    * rhcos f750ff26f2d5550930ccbe17af61af47daafc8018cd9944f2a3a6269af26b0fa.0
        Version: 410.84.202204050541-0
        origin refspec: f750ff26f2d5550930ccbe17af61af47daafc8018cd9944f2a3a6269af26b0fa
    rhcos ad8f159f9dc4ea7e773fd9604c9a16be0fe9b266ae800ac8470f63abc39b52ca.0 (rollback) 1
        Version: 410.84.202203290245-0
        Pinned: yes 2
        origin refspec: ad8f159f9dc4ea7e773fd9604c9a16be0fe9b266ae800ac8470f63abc39b52ca
    1
    이 플랫폼 OS 배포는 롤백으로 표시됩니다.
    2
    이전 배포는 고정되어 있으며 롤백할 수 있습니다.
  4. 플랫폼 OS 배포의 롤백을 트리거하려면 다음 명령을 실행합니다.

    $ rpm-ostree rollback -r
  5. 복구의 첫 번째 단계는 컨테이너를 종료하고 백업 파티션에서 대상 디렉터리로 파일을 복원합니다. 복구를 시작하려면 다음 명령을 실행합니다.

    $ /var/recovery/upgrade-recovery.sh
  6. 메시지가 표시되면 다음 명령을 실행하여 클러스터를 재부팅합니다.

    $ systemctl reboot
  7. 재부팅 후 다음 명령을 실행하여 복구를 다시 시작합니다.

    $ /var/recovery/upgrade-recovery.sh  --resume
참고

복구 유틸리티가 실패하면 --restart 옵션을 사용하여 다시 시도할 수 있습니다.

$ /var/recovery/upgrade-recovery.sh --restart

검증

  • 복구 상태를 확인하려면 다음 명령을 실행합니다.

    $ oc get clusterversion,nodes,clusteroperator

    출력 예

    NAME                                         VERSION   AVAILABLE   PROGRESSING   SINCE   STATUS
    clusterversion.config.openshift.io/version   4.4.13.23    True        False         86d     Cluster version is 4.4.13.23 1
    
    
    NAME                          STATUS   ROLES           AGE   VERSION
    node/lab-test-spoke1-node-0   Ready    master,worker   86d   v1.22.3+b93fd35 2
    
    NAME                                                                           VERSION   AVAILABLE   PROGRESSING   DEGRADED   SINCE   MESSAGE
    clusteroperator.config.openshift.io/authentication                             4.4.13.23    True        False         False      2d7h    3
    clusteroperator.config.openshift.io/baremetal                                  4.4.13.23    True        False         False      86d
    
    
    ..............

    1
    클러스터 버전이 사용 가능하며 올바른 버전이 있습니다.
    2
    노드 상태는 Ready 입니다.
    3
    ClusterOperator 오브젝트의 가용성은 True 입니다.

19.10.8. 컨테이너 이미지 사전 캐시 기능 사용

단일 노드 OpenShift 클러스터에 컨테이너 이미지 레지스트리에 액세스하기 위해 대역폭이 제한되어 업데이트가 완료되기 전에 타임아웃이 발생할 수 있습니다.

참고

업데이트 시간은 TALM에 의해 설정되지 않습니다. 수동 애플리케이션 또는 외부 자동화를 통해 업데이트 시작 시 ClusterGroupUpgrade CR을 적용할 수 있습니다.

ClusterGroupUpgrade CR에서 preCaching 필드가 true 로 설정된 경우 컨테이너 이미지 사전 캐싱이 시작됩니다.

TALM은 PrecacheSpecValid 조건을 사용하여 다음과 같이 상태 정보를 보고합니다.

  • true

    사전 캐싱 사양이 유효하고 일관되게 유지됩니다.

  • false

    사전 캐싱 사양이 불완전합니다.

TALM은 PrecachingSucceeded 조건을 사용하여 다음과 같이 상태 정보를 보고합니다.

  • true

    TALM은 사전 캐싱 프로세스를 발표했습니다. 클러스터에 대한 사전 캐싱이 실패하면 해당 클러스터에 대한 업데이트가 실패하지만 다른 모든 클러스터를 진행합니다. 클러스터에 대한 사전 캐싱이 실패한 경우 메시지가 표시됩니다.

  • false

    하나 이상의 클러스터에 대한 사전 캐싱이 여전히 진행 중이거나 모든 클러스터에서 실패했습니다.

성공적인 사전 캐싱 프로세스를 마친 후 정책 수정을 시작할 수 있습니다. enable 필드가 true 로 설정된 경우 수정 작업이 시작됩니다. 클러스터에 사전 캐싱 오류가 있는 경우 해당 클러스터에 대한 업그레이드가 실패합니다. 업그레이드 프로세스는 사전 캐시가 성공한 다른 모든 클러스터에서 계속됩니다.

사전 캐싱 프로세스는 다음 상태에 있을 수 있습니다.

  • NotStarted

    이는 초기 상태 모든 클러스터는 ClusterGroupUpgrade CR의 첫 번째 조정 전달 시 자동으로 할당됩니다. 이 상태에서 TALM은 이전의 불완전한 업데이트에서 남아 있는 설명된 클러스터의 사전 캐싱 네임스페이스 및 허브 뷰 리소스를 삭제합니다. 그런 다음 TALM은 스포크 사전 캐싱 네임스페이스에 대한 새로운 ManagedClusterView 리소스를 생성하여 PrecachePreparing 상태에서 삭제를 확인합니다.

  • PreparingToStart

    이전 불완전한 업데이트에서 나머지 리소스를 정리하는 작업이 진행 중입니다.

  • Starting

    사전 캐싱 작업 사전 요구 사항 및 작업이 생성됩니다.

  • 활성 상태

    작업은 "Active" 상태입니다.

  • Succeed

    pre-cache 작업이 성공했습니다.

  • PrecacheTimeout

    아티팩트 사전 캐싱은 부분적으로 수행됩니다.

  • 복구할 수 없는Error

    작업이 0이 아닌 종료 코드로 종료됩니다.

19.10.8.1. 컨테이너 이미지 사전 캐시 필터 사용

사전 캐시 기능은 일반적으로 클러스터에 필요한 것보다 더 많은 이미지를 다운로드합니다. 클러스터에 다운로드한 사전 캐시 이미지를 제어할 수 있습니다. 이렇게 하면 다운로드 시간이 줄어들고 대역폭 및 스토리지를 절약할 수 있습니다.

다음 명령을 사용하여 다운로드할 모든 이미지 목록을 볼 수 있습니다.

$ oc adm release info <ocp-version>

다음 ConfigMap 예제에서는 excludePrecachePatterns 필드를 사용하여 이미지를 제외하는 방법을 보여줍니다.

apiVersion: v1
kind: ConfigMap
metadata:
  name: cluster-group-upgrade-overrides
data:
  excludePrecachePatterns: |
    azure 1
    aws
    vsphere
    alibaba
1
TALM은 여기에 나열된 패턴을 포함하는 이름의 모든 이미지를 제외합니다.

19.10.8.2. 사전 캐싱을 사용하여 ClusterGroupUpgrade CR 생성

단일 노드 OpenShift의 경우 사전 캐시 기능을 사용하면 업데이트가 시작되기 전에 필요한 컨테이너 이미지가 spoke 클러스터에 있을 수 있습니다.

참고

사전 캐싱의 경우 TALM은 ClusterGroupUpgrade CR의 spec.remediationStrategy.timeout 값을 사용합니다. 사전 캐싱 작업이 완료될 때까지 충분한 시간을 허용하는 시간 초과 값을 설정해야 합니다. 사전 캐싱이 완료된 후 ClusterGroupUpgrade CR을 활성화하면 업데이트에 적합한 기간으로 시간 초과 값을 변경할 수 있습니다.

사전 요구 사항

  • TALM(토폴로지 라이프사이클 관리자)을 설치합니다.
  • 하나 이상의 관리 클러스터를 프로비저닝합니다.
  • cluster-admin 권한이 있는 사용자로 로그인합니다.

절차

  1. clustergroupupgrades-group-du.yaml 파일에서 preCaching 필드가 true 로 설정된 상태에서 ClusterGroupUpgrade CR의 콘텐츠를 저장합니다.

    apiVersion: ran.openshift.io/v1alpha1
    kind: ClusterGroupUpgrade
    metadata:
      name: du-upgrade-4918
      namespace: ztp-group-du-sno
    spec:
      preCaching: true 1
      clusters:
      - cnfdb1
      - cnfdb2
      enable: false
      managedPolicies:
      - du-upgrade-platform-upgrade
      remediationStrategy:
        maxConcurrency: 2
        timeout: 240
    1
    preCaching 필드는 업데이트를 시작하기 전에 TALM이 컨테이너 이미지를 가져올 수 있도록 true 로 설정됩니다.
  2. 사전 캐싱을 시작하려면 다음 명령을 실행하여 ClusterGroupUpgrade CR을 적용합니다.

    $ oc apply -f clustergroupupgrades-group-du.yaml

검증

  1. 다음 명령을 실행하여 hub 클러스터에 ClusterGroupUpgrade CR이 있는지 확인합니다.

    $ oc get cgu -A

    출력 예

    NAMESPACE          NAME              AGE   STATE        DETAILS
    ztp-group-du-sno   du-upgrade-4918   10s   InProgress   Precaching is required and not done 1

    1
    CR이 생성됩니다.
  2. 다음 명령을 실행하여 사전 캐싱 작업의 상태를 확인합니다.

    $ oc get cgu -n ztp-group-du-sno du-upgrade-4918 -o jsonpath='{.status}'

    출력 예

    {
      "conditions": [
        {
          "lastTransitionTime": "2022-01-27T19:07:24Z",
          "message": "Precaching is required and not done",
          "reason": "InProgress",
          "status": "False",
          "type": "PrecachingSucceeded"
        },
        {
          "lastTransitionTime": "2022-01-27T19:07:34Z",
          "message": "Pre-caching spec is valid and consistent",
          "reason": "PrecacheSpecIsWellFormed",
          "status": "True",
          "type": "PrecacheSpecValid"
        }
      ],
      "precaching": {
        "clusters": [
          "cnfdb1" 1
          "cnfdb2"
        ],
        "spec": {
          "platformImage": "image.example.io"},
        "status": {
          "cnfdb1": "Active"
          "cnfdb2": "Succeeded"}
        }
    }

    1
    확인된 클러스터 목록을 표시합니다.
  3. spoke 클러스터에서 다음 명령을 실행하여 사전 캐싱 작업의 상태를 확인합니다.

    $ oc get jobs,pods -n openshift-talo-pre-cache

    출력 예

    NAME                  COMPLETIONS   DURATION   AGE
    job.batch/pre-cache   0/1           3m10s      3m10s
    
    NAME                     READY   STATUS    RESTARTS   AGE
    pod/pre-cache--1-9bmlr   1/1     Running   0          3m10s

  4. 다음 명령을 실행하여 ClusterGroupUpgrade CR의 상태를 확인합니다.

    $ oc get cgu -n ztp-group-du-sno du-upgrade-4918 -o jsonpath='{.status}'

    출력 예

    "conditions": [
        {
          "lastTransitionTime": "2022-01-27T19:30:41Z",
          "message": "The ClusterGroupUpgrade CR has all clusters compliant with all the managed policies",
          "reason": "UpgradeCompleted",
          "status": "True",
          "type": "Ready"
        },
        {
          "lastTransitionTime": "2022-01-27T19:28:57Z",
          "message": "Precaching is completed",
          "reason": "PrecachingCompleted",
          "status": "True",
          "type": "PrecachingSucceeded" 1
        }

    1
    사전 캐시 작업이 완료되었습니다.

19.10.9. 토폴로지 Aware Lifecycle Manager 문제 해결

TALM(토폴로지 라이프사이클 관리자)은 RHACM 정책을 수정하는 OpenShift Container Platform Operator입니다. 문제가 발생하면 oc adm must-gather 명령을 사용하여 세부 정보 및 로그를 수집하고 문제를 디버깅하는 단계를 수행하십시오.

관련 항목에 대한 자세한 내용은 다음 설명서를 참조하십시오.

19.10.9.1. 일반 문제 해결

다음 질문을 검토하여 문제의 원인을 확인할 수 있습니다.

ClusterGroupUpgrade 구성이 작동하는지 확인하려면 다음을 수행합니다.

  1. spec.enable 필드를 false 로 설정하여 ClusterGroupUpgrade CR을 생성합니다.
  2. 상태가 업데이트될 때까지 기다린 후 문제 해결 질문을 진행합니다.
  3. 모든 항목이 예상대로 표시되면 ClusterGroupUpgrade CR에서 spec.enable 필드를 true 로 설정합니다.
주의

ClusterUpgradeGroup CR에서 spec.enable 필드를 true 로 설정한 후 업데이트 절차가 시작되고 CR의 spec 필드를 더 이상 편집할 수 없습니다.

19.10.9.2. ClusterUpgradeGroup CR을 수정할 수 없음

문제
업데이트를 활성화한 후에는 ClusterUpgradeGroup CR을 편집할 수 없습니다.
해결

다음 단계를 수행하여 절차를 다시 시작하십시오.

  1. 다음 명령을 실행하여 이전 ClusterGroupUpgrade CR을 제거합니다.

    $ oc delete cgu -n <ClusterGroupUpgradeCR_namespace> <ClusterGroupUpgradeCR_name>
  2. 관리형 클러스터 및 정책의 기존 문제를 확인하고 수정합니다.

    1. 모든 클러스터가 관리되고 사용 가능한지 확인합니다.
    2. 모든 정책이 존재하고 spec.remediationAction 필드를 inform 로 설정해야 합니다.
  3. 올바른 구성을 사용하여 새 ClusterGroupUpgrade CR을 생성합니다.

    $ oc apply -f <ClusterGroupUpgradeCR_YAML>

19.10.9.3. 관리형 정책

시스템에서 관리되는 정책 확인
문제
시스템에 올바른 관리 정책이 있는지 확인하려고 합니다.
해결

다음 명령을 실행합니다.

$ oc get cgu lab-upgrade -ojsonpath='{.spec.managedPolicies}'

출력 예

["group-du-sno-validator-du-validator-policy", "policy2-common-nto-sub-policy", "policy3-common-ptp-sub-policy"]

수정 모드 확인
문제
관리 정책을 사양에 알리 도록 remediationAction 필드가 설정되어 있는지 확인하려고 합니다.
해결

다음 명령을 실행합니다.

$ oc get policies --all-namespaces

출력 예

NAMESPACE   NAME                                                 REMEDIATION ACTION   COMPLIANCE STATE   AGE
default     policy1-common-cluster-version-policy                inform               NonCompliant       5d21h
default     policy2-common-nto-sub-policy                        inform               Compliant          5d21h
default     policy3-common-ptp-sub-policy                        inform               NonCompliant       5d21h
default     policy4-common-sriov-sub-policy                      inform               NonCompliant       5d21h

정책 준수 상태 확인
문제
정책의 규정 준수 상태를 확인하려고 합니다.
해결

다음 명령을 실행합니다.

$ oc get policies --all-namespaces

출력 예

NAMESPACE   NAME                                                 REMEDIATION ACTION   COMPLIANCE STATE   AGE
default     policy1-common-cluster-version-policy                inform               NonCompliant       5d21h
default     policy2-common-nto-sub-policy                        inform               Compliant          5d21h
default     policy3-common-ptp-sub-policy                        inform               NonCompliant       5d21h
default     policy4-common-sriov-sub-policy                      inform               NonCompliant       5d21h

19.10.9.4. 클러스터

관리형 클러스터가 있는지 확인
문제
ClusterGroupUpgrade CR의 클러스터가 관리 클러스터인지 확인해야 합니다.
해결

다음 명령을 실행합니다.

$ oc get managedclusters

출력 예

NAME            HUB ACCEPTED   MANAGED CLUSTER URLS                    JOINED   AVAILABLE   AGE
local-cluster   true           https://api.hub.example.com:6443        True     Unknown     13d
spoke1          true           https://api.spoke1.example.com:6443     True     True        13d
spoke3          true           https://api.spoke3.example.com:6443     True     True        27h

  1. 또는 TALM 관리자 로그를 확인합니다.

    1. 다음 명령을 실행하여 TALM 관리자의 이름을 가져옵니다.

      $ oc get pod -n openshift-operators

      출력 예

      NAME                                                         READY   STATUS    RESTARTS   AGE
      cluster-group-upgrades-controller-manager-75bcc7484d-8k8xp   2/2     Running   0          45m

    2. 다음 명령을 실행하여 TALM 관리자 로그를 확인합니다.

      $ oc logs -n openshift-operators \
      cluster-group-upgrades-controller-manager-75bcc7484d-8k8xp -c manager

      출력 예

      ERROR	controller-runtime.manager.controller.clustergroupupgrade	Reconciler error	{"reconciler group": "ran.openshift.io", "reconciler kind": "ClusterGroupUpgrade", "name": "lab-upgrade", "namespace": "default", "error": "Cluster spoke5555 is not a ManagedCluster"} 1
      sigs.k8s.io/controller-runtime/pkg/internal/controller.(*Controller).processNextWorkItem

      1
      오류 메시지는 클러스터가 관리 클러스터가 아님을 나타냅니다.
관리형 클러스터를 사용할 수 있는지 확인
문제
ClusterGroupUpgrade CR에 지정된 관리형 클러스터를 사용할 수 있는지 확인해야 합니다.
해결

다음 명령을 실행합니다.

$ oc get managedclusters

출력 예

NAME            HUB ACCEPTED   MANAGED CLUSTER URLS                    JOINED   AVAILABLE   AGE
local-cluster   true           https://api.hub.testlab.com:6443        True     Unknown     13d
spoke1          true           https://api.spoke1.testlab.com:6443     True     True        13d 1
spoke3          true           https://api.spoke3.testlab.com:6443     True     True        27h 2

1 2
AVAILABLE 필드의 값은 관리형 클러스터에 대해 True 입니다.
clusterLabelSelector 확인
문제
ClusterGroupUpgrade CR에 지정된 clusterLabelSelector 필드가 관리형 클러스터 중 하나 이상과 일치하는지 확인하려고 합니다.
해결

다음 명령을 실행합니다.

$ oc get managedcluster --selector=upgrade=true 1
1
업데이트하려는 클러스터의 레이블은 upgrade:true 입니다.

출력 예

NAME            HUB ACCEPTED   MANAGED CLUSTER URLS                     JOINED    AVAILABLE   AGE
spoke1          true           https://api.spoke1.testlab.com:6443      True     True        13d
spoke3          true           https://api.spoke3.testlab.com:6443      True     True        27h

카나리아 클러스터가 있는지 확인
문제

카나리아 클러스터가 클러스터 목록에 있는지 확인하려고 합니다.

ClusterGroupUpgrade CR의 예

spec:
    remediationStrategy:
        canaries:
        - spoke3
        maxConcurrency: 2
        timeout: 240
    clusterLabelSelectors:
      - matchLabels:
          upgrade: true

해결

다음 명령을 실행합니다.

$ oc get cgu lab-upgrade -ojsonpath='{.spec.clusters}'

출력 예

["spoke1", "spoke3"]

  1. 다음 명령을 실행하여 clusterLabelSelector 라벨과 일치하는 클러스터 목록에 카나리아 클러스터가 있는지 확인합니다.

    $ oc get managedcluster --selector=upgrade=true

    출력 예

    NAME            HUB ACCEPTED   MANAGED CLUSTER URLS   JOINED    AVAILABLE   AGE
    spoke1          true           https://api.spoke1.testlab.com:6443   True     True        13d
    spoke3          true           https://api.spoke3.testlab.com:6443   True     True        27h

참고

클러스터는 spec.clusters 에 존재할 수 있으며 spec.clusterLabelSelector 레이블과도 일치할 수 있습니다.

스포크 클러스터에서 사전 캐싱 상태 확인
  1. spoke 클러스터에서 다음 명령을 실행하여 사전 캐싱의 상태를 확인합니다.

    $ oc get jobs,pods -n openshift-talo-pre-cache

19.10.9.5. 수정 전략

ClusterGroupUpgrade CR에 remediationStrategy가 있는지 확인
문제
remediationStrategyClusterGroupUpgrade CR에 있는지 확인하려고 합니다.
해결

다음 명령을 실행합니다.

$ oc get cgu lab-upgrade -ojsonpath='{.spec.remediationStrategy}'

출력 예

{"maxConcurrency":2, "timeout":240}

ClusterGroupUpgrade CR에 maxConcurrency가 지정되어 있는지 확인
문제
maxConcurrencyClusterGroupUpgrade CR에 지정되어 있는지 확인하려고 합니다.
해결

다음 명령을 실행합니다.

$ oc get cgu lab-upgrade -ojsonpath='{.spec.remediationStrategy.maxConcurrency}'

출력 예

2

19.10.9.6. 토폴로지 인식 라이프 사이클 관리자

ClusterGroupUpgrade CR에서 조건 메시지 및 상태 확인
문제
ClusterGroupUpgrade CR에서 status.conditions 필드의 값을 확인하려고 합니다.
해결

다음 명령을 실행합니다.

$ oc get cgu lab-upgrade -ojsonpath='{.status.conditions}'

출력 예

{"lastTransitionTime":"2022-02-17T22:25:28Z", "message":"Missing managed policies:[policyList]", "reason":"NotAllManagedPoliciesExist", "status":"False", "type":"Validated"}

해당 복사 정책 확인
문제
status.managedPoliciesForUpgrade 의 모든 정책이 status.copiedPolicies.copiedPolicies에 해당 정책이 있는지 확인하려면 다음을 수행하십시오.
해결

다음 명령을 실행합니다.

$ oc get cgu lab-upgrade -oyaml

출력 예

status:
  …
  copiedPolicies:
  - lab-upgrade-policy3-common-ptp-sub-policy
  managedPoliciesForUpgrade:
  - name: policy3-common-ptp-sub-policy
    namespace: default

status.remediationPlan이 계산되었는지 확인
문제
status.remediationPlan 이 계산되었는지 확인하려고 합니다.
해결

다음 명령을 실행합니다.

$ oc get cgu lab-upgrade -ojsonpath='{.status.remediationPlan}'

출력 예

[["spoke2", "spoke3"]]

TALM 관리자 컨테이너의 오류
문제
TALM의 manager 컨테이너의 로그를 확인하려고 합니다.
해결

다음 명령을 실행합니다.

$ oc logs -n openshift-operators \
cluster-group-upgrades-controller-manager-75bcc7484d-8k8xp -c manager

출력 예

ERROR	controller-runtime.manager.controller.clustergroupupgrade	Reconciler error	{"reconciler group": "ran.openshift.io", "reconciler kind": "ClusterGroupUpgrade", "name": "lab-upgrade", "namespace": "default", "error": "Cluster spoke5555 is not a ManagedCluster"} 1
sigs.k8s.io/controller-runtime/pkg/internal/controller.(*Controller).processNextWorkItem

1
오류를 표시합니다.
ClusterGroupUpgrade CR이 완료된 후 클러스터는 일부 정책을 준수하지 않습니다.
문제

TALM이 모든 클러스터에 대해 수정이 필요한지 여부를 결정하는 데 사용하는 정책 준수 상태입니다. 다음과 같은 이유로 인해 발생할 수 있습니다.

  • CGU는 정책을 만들거나 업데이트한 후 너무 빨리 실행되었습니다.
  • 정책을 수정하면 ClusterGroupUpgrade CR의 후속 정책 준수에 영향을 미칩니다.
해결
동일한 사양으로 새 ClusterGroupUpdate CR을 생성하고 적용합니다.
GitOps ZTP 워크플로우의 자동 생성 ClusterGroupUpgrade CR에는 관리 정책이 없습니다.
문제
클러스터가 Ready 가 될 때 관리형 클러스터에 대한 정책이 없는 경우 정책이 없는 ClusterGroupUpgrade CR이 자동으로 생성됩니다. ClusterGroupUpgrade CR이 완료되면 관리 클러스터에 ztp-done 으로 레이블이 지정됩니다. PolicyGenTemplate CR이 SiteConfig 리소스가 내보낸 후 필요한 시간 내에 Git 리포지토리로 푸시되지 않으면 클러스터가 Ready 상태가 되면 대상 클러스터에 정책을 사용할 수 없습니다.
해결
적용하려는 정책이 hub 클러스터에서 사용 가능한지 확인한 다음 필요한 정책을 사용하여 ClusterGroupUpgrade CR을 만듭니다.

ClusterGroupUpgrade CR을 수동으로 생성하거나 자동 생성을 다시 트리거할 수 있습니다. ClusterGroupUpgrade CR의 자동 생성을 트리거하려면 클러스터에서 ztp-done 레이블을 제거하고 zip-install 네임스페이스에서 이전에 생성된 빈 ClusterGroupUpgrade CR을 삭제합니다.

사전 캐싱 실패
문제

다음 이유 중 하나로 인해 사전 캐싱이 실패할 수 있습니다.

  • 노드에 여유 공간이 충분하지 않습니다.
  • 연결이 끊긴 환경의 경우 사전 캐시 이미지가 올바르게 미러링되지 않았습니다.
  • Pod를 생성할 때 문제가 발생했습니다.
해결
  1. 공간이 부족하여 사전 캐싱이 실패했는지 확인하려면 노드에서 사전 캐싱 Pod의 로그를 확인합니다.

    1. 다음 명령을 사용하여 Pod 이름을 찾습니다.

      $ oc get pods -n openshift-talo-pre-cache
    2. 다음 명령을 사용하여 로그에서 오류가 충분하지 않은 공간과 관련이 있는지 확인합니다.

      $ oc logs -n openshift-talo-pre-cache <pod name>
  2. 로그가 없는 경우 다음 명령을 사용하여 Pod 상태를 확인합니다.

    $ oc describe pod -n openshift-talo-pre-cache <pod name>
  3. Pod가 없는 경우 작업 상태를 확인하여 다음 명령을 사용하여 Pod를 생성할 수 없는 이유를 확인합니다.

    $ oc describe job -n openshift-talo-pre-cache pre-cache

추가 리소스

Red Hat logoGithubRedditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

Red Hat을 사용하는 고객은 신뢰할 수 있는 콘텐츠가 포함된 제품과 서비스를 통해 혁신하고 목표를 달성할 수 있습니다.

보다 포괄적 수용을 위한 오픈 소스 용어 교체

Red Hat은 코드, 문서, 웹 속성에서 문제가 있는 언어를 교체하기 위해 최선을 다하고 있습니다. 자세한 내용은 다음을 참조하세요.Red Hat 블로그.

Red Hat 소개

Red Hat은 기업이 핵심 데이터 센터에서 네트워크 에지에 이르기까지 플랫폼과 환경 전반에서 더 쉽게 작업할 수 있도록 강화된 솔루션을 제공합니다.

© 2024 Red Hat, Inc.