12.7. 컨테이너 이미지 사전 캐시 기능 사용
단일 노드 OpenShift 클러스터는 컨테이너 이미지 레지스트리에 액세스하기 위해 대역폭이 제한될 수 있으므로 업데이트가 완료되기 전에 시간 초과가 발생할 수 있습니다.
업데이트 시간은 TALM에 의해 설정되지 않습니다. 수동 애플리케이션 또는 외부 자동화를 통해 업데이트 시작 시 ClusterGroupUpgrade
CR을 적용할 수 있습니다.
ClusterGroupUpgrade
CR에서 preCaching
필드가 true
로 설정된 경우 컨테이너 이미지 사전 캐싱이 시작됩니다.
TALM은 PrecacheSpecValid
조건을 사용하여 다음과 같이 상태 정보를 보고합니다.
true
사전 캐싱 사양은 유효하고 일관되게 유지됩니다.
false
사전 캐싱 사양은 불완전합니다.
TALM은 PrecachingSucceeded
조건을 사용하여 다음과 같이 상태 정보를 보고합니다.
true
TALM은 사전 캐싱 프로세스를 완료했습니다. 클러스터에 대한 사전 캐싱이 실패하면 해당 클러스터에 대한 업데이트가 실패하지만 다른 모든 클러스터를 진행합니다. 클러스터에 대해 사전 캐싱이 실패한 경우 메시지가 표시됩니다.
false
하나 이상의 클러스터에 대해 아직 진행 중이거나 모든 클러스터에서 실패했습니다.
성공적인 사전 캐싱 프로세스 후 정책 수정을 시작할 수 있습니다. 수정 작업은 enable
필드가 true
로 설정된 경우 시작됩니다. 클러스터에 사전 캐싱 오류가 발생하면 해당 클러스터에 대한 업그레이드가 실패합니다. 업그레이드 프로세스는 사전 캐시가 성공한 다른 모든 클러스터에서 계속됩니다.
사전 캐싱 프로세스는 다음과 같은 상태에 있을 수 있습니다.
NotStarted
이는
ClusterGroupUpgrade
CR의 첫 번째 조정 패스에서 모든 클러스터가 자동으로 할당됩니다. 이 상태에서 TALM은 이전에 불완전한 업데이트에서 남아 있는 spoke 클러스터의 모든 사전 캐싱 네임스페이스 및 허브 뷰 리소스를 삭제합니다. 그런 다음 TALM은PrecachePreparing
상태에서 삭제를 확인하기 위해 spoke pre-caching 네임스페이스에 대한 새ManagedClusterView
리소스를 생성합니다.PreparingToStart
이전 불완전한 업데이트의 나머지 리소스를 정리하는 작업이 진행 중입니다.
Starting
작업 사전 캐싱 사전 요구 사항 및 작업이 생성됩니다.
활성 상태
작업은 "활성" 상태입니다.
succeeded
pre-cache 작업이 성공했습니다.
PrecacheTimeout
아티팩트 사전 캐싱은 부분적으로 수행됩니다.
UnrecoverableError
작업은 0이 아닌 종료 코드로 끝납니다.
12.7.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은 여기에 나열된 패턴이 포함된 이름이 있는 모든 이미지를 제외합니다.
12.7.2. 사전 캐싱을 사용하여 ClusterGroupUpgrade CR 생성
단일 노드 OpenShift의 경우 사전 캐시 기능을 사용하면 업데이트가 시작되기 전에 필요한 컨테이너 이미지를 spoke 클러스터에 표시할 수 있습니다.
사전 캐싱의 경우 TALM은 ClusterGroupUpgrade
CR의 spec.remediationStrategy.timeout
값을 사용합니다. 사전 캐싱 작업을 완료하는 데 충분한 시간을 허용하는 시간 초과
값을 설정해야 합니다. 사전 캐싱이 완료된 후 ClusterGroupUpgrade
CR을 활성화하면 시간 초과
값을 업데이트에 적합한 기간으로 변경할 수 있습니다.
사전 요구 사항
- TALM(토폴로지 Aware Lifecycle Manager)을 설치합니다.
- 하나 이상의 관리 클러스터를 프로비저닝합니다.
-
cluster-admin
권한이 있는 사용자로 로그인합니다.
프로세스
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
필드는true
로 설정되어 업데이트를 시작하기 전에 TALM에서 컨테이너 이미지를 가져올 수 있습니다.
사전 캐싱을 시작하려면 다음 명령을 실행하여
ClusterGroupUpgrade
CR을 적용합니다.$ oc apply -f clustergroupupgrades-group-du.yaml
검증
다음 명령을 실행하여 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이 생성됩니다.
다음 명령을 실행하여 사전 캐싱 작업의 상태를 확인합니다.
$ 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
- 식별된 클러스터 목록을 표시합니다.
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
다음 명령을 실행하여
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
- 사전 캐시 작업이 수행됩니다.