15.2. 단일 노드 OpenShift 클러스터에 대한 이미지 기반 업그레이드 준비
15.2.2. 이미지 기반 업그레이드를 위한 Operator 설치
Lifecycle Agent 및 OADP Operator를 설치하여 업그레이드를 위해 클러스터를 준비합니다.
비GitOps 방법을 사용하여 OADP Operator를 설치하려면 "OADP Operator 설치"를 참조하십시오.
15.2.2.1. CLI를 사용하여 라이프사이클 에이전트 설치
OpenShift CLI(oc
)를 사용하여 Lifecycle Agent를 설치할 수 있습니다.
사전 요구 사항
-
OpenShift CLI(
oc
)가 설치되어 있습니다. -
cluster-admin
권한이 있는 사용자로 로그인했습니다.
프로세스
Lifecycle Agent에 대한
Namespace
오브젝트 YAML 파일을 생성합니다.apiVersion: v1 kind: Namespace metadata: name: openshift-lifecycle-agent annotations: workload.openshift.io/allowed: management
다음 명령을 실행하여
네임스페이스
CR을 생성합니다.$ oc create -f <namespace_filename>.yaml
Lifecycle Agent에 대한
OperatorGroup
오브젝트 YAML 파일을 생성합니다.apiVersion: operators.coreos.com/v1 kind: OperatorGroup metadata: name: openshift-lifecycle-agent namespace: openshift-lifecycle-agent spec: targetNamespaces: - openshift-lifecycle-agent
다음 명령을 실행하여
OperatorGroup
CR을 생성합니다.$ oc create -f <operatorgroup_filename>.yaml
Lifecycle Agent에 대한
서브스크립션
CR을 생성합니다.apiVersion: operators.coreos.com/v1 kind: Subscription metadata: name: openshift-lifecycle-agent-subscription namespace: openshift-lifecycle-agent spec: channel: "stable" name: lifecycle-agent source: redhat-operators sourceNamespace: openshift-marketplace
다음 명령을 실행하여
서브스크립션
CR을 생성합니다.$ oc create -f <subscription_filename>.yaml
검증
설치에 성공했는지 확인하려면 다음 명령을 실행하여 CSV 리소스를 검사합니다.
$ oc get csv -n openshift-lifecycle-agent
출력 예
NAME DISPLAY VERSION REPLACES PHASE lifecycle-agent.v4.17.0 Openshift Lifecycle Agent 4.17.0 Succeeded
다음 명령을 실행하여 Lifecycle Agent가 실행 중인지 확인합니다.
$ oc get deploy -n openshift-lifecycle-agent
출력 예
NAME READY UP-TO-DATE AVAILABLE AGE lifecycle-agent-controller-manager 1/1 1 1 14s
15.2.2.2. 웹 콘솔을 사용하여 라이프사이클 에이전트 설치
OpenShift Container Platform 웹 콘솔을 사용하여 Lifecycle Agent를 설치할 수 있습니다.
사전 요구 사항
-
cluster-admin
권한이 있는 사용자로 로그인했습니다.
프로세스
-
OpenShift Container Platform 웹 콘솔에서 Operator
OperatorHub로 이동합니다. - 사용 가능한 Operator 목록에서 Lifecycle Agent 를 검색한 다음 설치를 클릭합니다.
- Operator 설치 페이지의 클러스터의 특정 네임스페이스에서 openshift-lifecycle-agent 를 선택합니다.
- 설치를 클릭합니다.
검증
설치에 성공했는지 확인하려면 다음을 수행하십시오.
-
Operators
설치된 Operators를 클릭합니다. Lifecycle Agent가 openshift-lifecycle-agent 프로젝트에 InstallSucceeded 상태로 나열되어 있는지 확인합니다.
참고설치 중에 Operator는 실패 상태를 표시할 수 있습니다. 나중에 InstallSucceeded 메시지와 함께 설치에 성공하면 이 실패 메시지를 무시할 수 있습니다.
-
Operators
Operator가 성공적으로 설치되지 않은 경우 다음을 수행하십시오.
-
Operator
설치된 Operator 를 클릭하고 Operator 서브스크립션 및 설치 계획 탭의 상태에 장애 또는 오류가 있는지 검사합니다. -
워크로드
포드 를 클릭하고 openshift-lifecycle-agent 프로젝트에서 Pod 로그를 확인합니다.
15.2.2.3. GitOps ZTP를 사용하여 라이프사이클 에이전트 설치
GitOps ZTP(ZTP)를 사용하여 Lifecycle Agent를 설치하여 이미지 기반 업그레이드를 수행합니다.
프로세스
ztp-site-generate
컨테이너 이미지에서 다음 CR을 추출하여source-cr
디렉터리로 내보냅니다.LcaSubscriptionNS.yaml
파일 예apiVersion: v1 kind: Namespace metadata: name: openshift-lifecycle-agent annotations: workload.openshift.io/allowed: management ran.openshift.io/ztp-deploy-wave: "2" labels: kubernetes.io/metadata.name: openshift-lifecycle-agent
LcaSubscriptionOperGroup.yaml
파일 예apiVersion: operators.coreos.com/v1 kind: OperatorGroup metadata: name: lifecycle-agent-operatorgroup namespace: openshift-lifecycle-agent annotations: ran.openshift.io/ztp-deploy-wave: "2" spec: targetNamespaces: - openshift-lifecycle-agent
LcaSubscription.yaml
파일 예apiVersion: operators.coreos.com/v1alpha1 kind: Subscription metadata: name: lifecycle-agent namespace: openshift-lifecycle-agent annotations: ran.openshift.io/ztp-deploy-wave: "2" spec: channel: "stable" name: lifecycle-agent source: redhat-operators sourceNamespace: openshift-marketplace installPlanApproval: Manual status: state: AtLatestKnown
디렉터리 구조의 예
├── kustomization.yaml ├── sno │ ├── example-cnf.yaml │ ├── common-ranGen.yaml │ ├── group-du-sno-ranGen.yaml │ ├── group-du-sno-validator-ranGen.yaml │ └── ns.yaml ├── source-crs │ ├── LcaSubscriptionNS.yaml │ ├── LcaSubscriptionOperGroup.yaml │ ├── LcaSubscription.yaml
공통
PolicyGenTemplate
에 CR을 추가합니다.apiVersion: ran.openshift.io/v1 kind: PolicyGenTemplate metadata: name: "example-common-latest" namespace: "ztp-common" spec: bindingRules: common: "true" du-profile: "latest" sourceFiles: - fileName: LcaSubscriptionNS.yaml policyName: "subscriptions-policy" - fileName: LcaSubscriptionOperGroup.yaml policyName: "subscriptions-policy" - fileName: LcaSubscription.yaml policyName: "subscriptions-policy" [...]
15.2.2.4. GitOps ZTP를 사용하여 OADP Operator 설치 및 구성
업그레이드를 시작하기 전에 GitOps ZTP를 사용하여 OADP Operator를 설치하고 구성합니다.
프로세스
ztp-site-generate
컨테이너 이미지에서 다음 CR을 추출하여source-cr
디렉터리로 내보냅니다.OadpSubscriptionNS.yaml
파일의 예apiVersion: v1 kind: Namespace metadata: name: openshift-adp annotations: ran.openshift.io/ztp-deploy-wave: "2" labels: kubernetes.io/metadata.name: openshift-adp
OadpSubscriptionOperGroup.yaml
파일의 예apiVersion: operators.coreos.com/v1 kind: OperatorGroup metadata: name: redhat-oadp-operator namespace: openshift-adp annotations: ran.openshift.io/ztp-deploy-wave: "2" spec: targetNamespaces: - openshift-adp
OadpSubscription.yaml
파일의 예apiVersion: operators.coreos.com/v1alpha1 kind: Subscription metadata: name: redhat-oadp-operator namespace: openshift-adp annotations: ran.openshift.io/ztp-deploy-wave: "2" spec: channel: stable-1.4 name: redhat-oadp-operator source: redhat-operators sourceNamespace: openshift-marketplace installPlanApproval: Manual status: state: AtLatestKnown
OadpOperatorStatus.yaml
파일의 예apiVersion: operators.coreos.com/v1 kind: Operator metadata: name: redhat-oadp-operator.openshift-adp annotations: ran.openshift.io/ztp-deploy-wave: "2" status: components: refs: - kind: Subscription namespace: openshift-adp conditions: - type: CatalogSourcesUnhealthy status: "False" - kind: InstallPlan namespace: openshift-adp conditions: - type: Installed status: "True" - kind: ClusterServiceVersion namespace: openshift-adp conditions: - type: Succeeded status: "True" reason: InstallSucceeded
디렉터리 구조의 예
├── kustomization.yaml ├── sno │ ├── example-cnf.yaml │ ├── common-ranGen.yaml │ ├── group-du-sno-ranGen.yaml │ ├── group-du-sno-validator-ranGen.yaml │ └── ns.yaml ├── source-crs │ ├── OadpSubscriptionNS.yaml │ ├── OadpSubscriptionOperGroup.yaml │ ├── OadpSubscription.yaml │ ├── OadpOperatorStatus.yaml
공통
PolicyGenTemplate
에 CR을 추가합니다.apiVersion: ran.openshift.io/v1 kind: PolicyGenTemplate metadata: name: "example-common-latest" namespace: "ztp-common" spec: bindingRules: common: "true" du-profile: "latest" sourceFiles: - fileName: OadpSubscriptionNS.yaml policyName: "subscriptions-policy" - fileName: OadpSubscriptionOperGroup.yaml policyName: "subscriptions-policy" - fileName: OadpSubscription.yaml policyName: "subscriptions-policy" - fileName: OadpOperatorStatus.yaml policyName: "subscriptions-policy" [...]
대상 클러스터에 대해서만
DataProtectionApplication
CR 및 S3 시크릿을 생성합니다.ztp-site-generate
컨테이너 이미지에서 다음 CR을 추출하여source-cr
디렉터리로 내보냅니다.DataProtectionApplication.yaml
파일 예apiVersion: oadp.openshift.io/v1alpha1 kind: DataProtectionApplication metadata: name: dataprotectionapplication namespace: openshift-adp annotations: ran.openshift.io/ztp-deploy-wave: "100" spec: configuration: restic: enable: false 1 velero: defaultPlugins: - aws - openshift resourceTimeout: 10m backupLocations: - velero: config: profile: "default" region: minio s3Url: $url insecureSkipTLSVerify: "true" s3ForcePathStyle: "true" provider: aws default: true credential: key: cloud name: cloud-credentials objectStorage: bucket: $bucketName 2 prefix: $prefixName 3 status: conditions: - reason: Complete status: "True" type: Reconciled
- 1
- 영구 볼륨 콘텐츠가 업그레이드 후 유지되고 재사용되므로 이미지 기반 업그레이드에 대해
spec.configuration.restic.enable
필드를false
로 설정해야 합니다. - 2 3
- 버킷은 S3 백엔드에서 생성된 버킷 이름을 정의합니다. 접두사는 버킷에 자동으로 생성될 하위 디렉터리의 이름을 정의합니다. 버킷과 접두사의 조합은 대상 클러스터마다 고유해야 합니다. 각 대상 클러스터의 고유한 스토리지 디렉터리를 보장하기 위해 RHACM 허브 템플릿 기능(예:
prefix: {{hub .ManagedClusterName hub}}
)을 사용할 수 있습니다.
OadpSecret.yaml
파일 예apiVersion: v1 kind: Secret metadata: name: cloud-credentials namespace: openshift-adp annotations: ran.openshift.io/ztp-deploy-wave: "100" type: Opaque
OadpBackupStorageLocationStatus.yaml
파일의 예apiVersion: velero.io/v1 kind: BackupStorageLocation metadata: namespace: openshift-adp annotations: ran.openshift.io/ztp-deploy-wave: "100" status: phase: Available
OadpBackupStorageLocationStatus.yaml
CR은 OADP에서 생성한 백업 스토리지 위치의 가용성을 확인합니다.재정의를 사용하여 사이트
PolicyGenTemplate
에 CR을 추가합니다.apiVersion: ran.openshift.io/v1 kind: PolicyGenTemplate metadata: name: "example-cnf" namespace: "ztp-site" spec: bindingRules: sites: "example-cnf" du-profile: "latest" mcp: "master" sourceFiles: ... - fileName: OadpSecret.yaml policyName: "config-policy" data: cloud: <your_credentials> 1 - fileName: DataProtectionApplication.yaml policyName: "config-policy" spec: backupLocations: - velero: config: region: minio s3Url: <your_S3_URL> 2 profile: "default" insecureSkipTLSVerify: "true" s3ForcePathStyle: "true" provider: aws default: true credential: key: cloud name: cloud-credentials objectStorage: bucket: <your_bucket_name> 3 prefix: <cluster_name> 4 - fileName: OadpBackupStorageLocationStatus.yaml policyName: "config-policy"
15.2.3. Lifecycle Agent를 사용하여 이미지 기반 업그레이드의 시드 이미지 생성
Lifecycle Agent를 사용하여 SeedGenerator
CR(사용자 정의 리소스)으로 시드 이미지를 생성합니다.
15.2.3.1. 시드 이미지 구성
시드 이미지는 동일한 하드웨어 및 유사한 구성으로 단일 노드 OpenShift 클러스터 세트를 대상으로 합니다. 즉, 시드 이미지에는 시드 클러스터가 대상 클러스터와 공유하는 모든 구성 요소 및 구성이 있어야 합니다. 따라서 시드 클러스터에서 생성된 시드 이미지에는 클러스터별 구성이 포함될 수 없습니다.
다음 표에는 시드 이미지에 포함되어야 하며 포함하지 않아야 하는 구성 요소, 리소스 및 구성이 나열되어 있습니다.
클러스터 구성 | 시드 이미지에 포함 |
---|---|
성능 프로필 | 제공됨 |
대상 클러스터의 | 제공됨 |
IP 버전 [1] | 제공됨 |
Lifecycle Agent 및 OADP Operator를 포함한 Day 2 Operator 세트 | 제공됨 |
연결이 끊긴 레지스트리 설정 [2] | 제공됨 |
유효한 프록시 설정 [3] | 제공됨 |
FIPS 설정 | 제공됨 |
대상 클러스터의 크기와 일치하는 컨테이너 스토리지를 위한 기본 디스크의 전용 파티션 | 제공됨 |
로컬 볼륨
| 없음 |
OADP | 없음 |
- 이번 릴리스에서는 듀얼 스택 네트워킹이 지원되지 않습니다.
- 시드 클러스터가 연결이 끊긴 환경에 설치된 경우 대상 클러스터도 연결이 끊긴 환경에 설치해야 합니다.
- 시드 및 대상 클러스터의 프록시 구성이 일치하지 않아도 됩니다.
15.2.3.1.1. RAN DU 프로필을 사용한 시드 이미지 구성
다음 표에는 RAN DU 프로필을 사용할 때 시드 이미지에 포함되어야 하는 구성 요소, 리소스 및 구성이 나열되어 있습니다.
리소스 | 시드 이미지에 포함 |
---|---|
Day 0 설치의 일부로 적용되는 모든 추가 매니페스트 | 제공됨 |
모든 Day 2 Operator 서브스크립션 | 제공됨 |
| 제공됨 |
| 제공됨 |
| 제공됨 |
| 제공됨 |
| 제공됨 |
|
아니요. |
| 없음 |
| 없음 |
리소스 | 추가 매니페스트로 적용 |
---|---|
| 제공됨 |
| 제공됨 |
| 제공됨 |
| 제공됨 |
| 제공됨 |
| 대상 클러스터의 인터페이스가 seed 클러스터와 공통되는 경우 시드 이미지에 포함할 수 있습니다. 그렇지 않으면 추가 매니페스트로 적용합니다. |
| 네임스페이스를 포함한 구성이 시드 및 대상 클러스터에서 정확히 동일하면 시드 이미지에 포함할 수 있습니다. 그렇지 않으면 추가 매니페스트로 적용합니다. |
15.2.3.2. Lifecycle Agent를 사용하여 시드 이미지 생성
Lifecycle Agent를 사용하여 관리 클러스터에서 시드 이미지를 생성합니다. Operator는 필수 시스템 구성을 확인하고 시드 이미지를 생성하기 전에 필요한 시스템 정리를 수행한 다음 이미지 생성을 시작합니다. 시드 이미지 생성에는 다음 작업이 포함됩니다.
- 클러스터 Operator 중지
- 시드 이미지 구성 준비
-
SeedGenerator
CR에 지정된 이미지 리포지토리로 시드 이미지를 생성하고 푸시 - 클러스터 Operator 복원
- 시드 클러스터 인증서 만료
- 시드 클러스터에 대한 새 인증서 생성
-
seed 클러스터에서
SeedGenerator
CR 복원 및 업데이트
사전 요구 사항
- Kubernetes Operator의 RHACM 및 다중 클러스터 엔진은 시드 클러스터에 설치되지 않습니다.
- seed 클러스터에 공유 컨테이너 디렉터리를 구성했습니다.
- seed 클러스터에 최소 버전의 OADP Operator 및 Lifecycle Agent를 설치했습니다.
- 영구 볼륨이 시드 클러스터에 구성되지 않았는지 확인합니다.
-
Local Storage Operator가 사용되는 경우
LocalVolume
CR이 시드 클러스터에 존재하지 않는지 확인합니다. -
LVM 스토리지가 사용되는 경우
LVMCluster
CR이 시드 클러스터에 존재하지 않는지 확인합니다. -
OADP가 사용되는 경우
DataProtectionApplication
CR이 시드 클러스터에 존재하지 않는지 확인합니다.
프로세스
관리 클러스터를 허브에서 분리하여 시드 이미지에 없는 초기 클러스터에서 RHACM 관련 리소스를 삭제합니다.
다음 명령을 실행하여 시드 클러스터를 수동으로 분리합니다.
$ oc delete managedcluster sno-worker-example
-
관리 클러스터가 제거될 때까지 기다립니다. 클러스터가 제거된 후 적절한
SeedGenerator
CR을 생성합니다. Lifecycle Agent는 RHACM 아티팩트를 정리합니다.
-
관리 클러스터가 제거될 때까지 기다립니다. 클러스터가 제거된 후 적절한
GitOps ZTP를 사용하는 경우
kustomization.yaml
에서 seed 클러스터의SiteConfig
CR을 제거하여 클러스터를 분리합니다.여러
SiteConfig
kustomization.yaml
파일이 있는 경우kustomization.yaml
에서 시드 클러스터의 siteConfig CR을 제거합니다.apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization generators: #- example-seed-sno1.yaml - example-target-sno2.yaml - example-target-sno3.yaml
하나의
SiteConfig
kustomization.yaml
이 있는 경우kustomization.yaml
에서 시드 클러스터의 siteConfig CR을 제거하고generators: {}
행을 추가합니다.apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization generators: {}
Git 리포지토리에서
kustomization.yaml
변경 사항을 커밋하고 변경 사항을 리포지토리로 내보냅니다.ArgoCD 파이프라인은 변경 사항을 감지하고 관리 클러스터를 제거합니다.
시드 이미지를 레지스트리로 푸시할 수 있도록
Secret
오브젝트를 생성합니다.다음 명령을 실행하여 인증 파일을 생성합니다.
$ MY_USER=myuserid $ AUTHFILE=/tmp/my-auth.json $ podman login --authfile ${AUTHFILE} -u ${MY_USER} quay.io/${MY_USER}
$ base64 -w 0 ${AUTHFILE} ; echo
openshift-lifecycle-agent
네임스페이스의seedgen
이라는Secret
YAML 파일의seedAuth
필드에 출력을 복사합니다.apiVersion: v1 kind: Secret metadata: name: seedgen 1 namespace: openshift-lifecycle-agent type: Opaque data: seedAuth: <encoded_AUTHFILE> 2
다음
명령을
실행하여 보안을 적용합니다.$ oc apply -f secretseedgenerator.yaml
SeedGenerator
CR을 생성합니다.apiVersion: lca.openshift.io/v1 kind: SeedGenerator metadata: name: seedimage 1 spec: seedImage: <seed_container_image> 2
다음 명령을 실행하여 시드 이미지를 생성합니다.
$ oc apply -f seedgenerator.yaml
중요클러스터가 재부팅되고 API 기능이 손실되는 동안 Lifecycle Agent에서 시드 이미지를 생성합니다.
SeedGenerator
CR을 적용하면kubelet
및 CRI-O 작업이 중지되고 이미지 생성이 시작됩니다.
더 많은 시드 이미지를 생성하려면 시드 이미지를 생성하려는 버전으로 새 시드 클러스터를 프로비저닝해야 합니다.
검증
클러스터가 복구되고 사용 가능한 후 다음 명령을 실행하여
SeedGenerator
CR의 상태를 확인할 수 있습니다.$ oc get seedgenerator -o yaml
출력 예
status: conditions: - lastTransitionTime: "2024-02-13T21:24:26Z" message: Seed Generation completed observedGeneration: 1 reason: Completed status: "False" type: SeedGenInProgress - lastTransitionTime: "2024-02-13T21:24:26Z" message: Seed Generation completed observedGeneration: 1 reason: Completed status: "True" type: SeedGenCompleted 1 observedGeneration: 1
- 1
- 시드 이미지 생성이 완료되었습니다.
15.2.4. Lifecycle Agent를 사용하여 이미지 기반 업그레이드에 대한 ConfigMap 오브젝트 생성
Lifecycle Agent에는 이미지 기반 업그레이드를 위해 해당 리소스를 처리하기 위해 ConfigMap
오브젝트로 래핑된 모든 OADP 리소스, 추가 매니페스트 및 사용자 정의 카탈로그 소스가 필요합니다.
15.2.4.1. Lifecycle Agent를 사용하여 이미지 기반 업그레이드에 대한 OADP ConfigMap 오브젝트 생성
업그레이드 중에 리소스를 백업하고 복원하는 데 사용되는 OADP 리소스를 생성합니다.
사전 요구 사항
- 호환되는 시드 클러스터에서 시드 이미지를 생성했습니다.
- OADP 백업 및 복원 리소스를 생성했습니다.
- stateroots 간에 공유되는 컨테이너 이미지의 대상 클러스터에 별도의 파티션을 생성했습니다. 자세한 내용은 "이미지 기반 업그레이드에 대한 공유 컨테이너 파티션 구성"을 참조하십시오.
- 시드 이미지와 함께 사용되는 버전과 호환되는 Lifecycle Agent 버전을 배포했습니다.
-
대상 클러스터에 OADP Operator,
DataProtectionApplication
CR 및 해당 시크릿을 설치했습니다. - 적절한 인증 정보가 구성된 S3 호환 스토리지 솔루션 및 즉시 사용 가능한 버킷을 생성했습니다. 자세한 내용은 "OADP 설치 제외"를 참조하십시오.
프로세스
OADP Operator가 설치된 동일한 네임스페이스에서 플랫폼 아티팩트에 대한 OADP
Backup
및Restore
CR을openshift-adp
.대상 클러스터가 RHACM에서 관리하는 경우 다음 YAML 파일을 추가하여 RHACM 아티팩트를 백업 및 복원합니다.
PlatformBackupRestore.yaml for RHACM
apiVersion: velero.io/v1 kind: Backup metadata: name: acm-klusterlet annotations: lca.openshift.io/apply-label: "apps/v1/deployments/open-cluster-management-agent/klusterlet,v1/secrets/open-cluster-management-agent/bootstrap-hub-kubeconfig,rbac.authorization.k8s.io/v1/clusterroles/klusterlet,v1/serviceaccounts/open-cluster-management-agent/klusterlet,scheduling.k8s.io/v1/priorityclasses/klusterlet-critical,rbac.authorization.k8s.io/v1/clusterroles/open-cluster-management:klusterlet-admin-aggregate-clusterrole,rbac.authorization.k8s.io/v1/clusterrolebindings/klusterlet,operator.open-cluster-management.io/v1/klusterlets/klusterlet,apiextensions.k8s.io/v1/customresourcedefinitions/klusterlets.operator.open-cluster-management.io,v1/secrets/open-cluster-management-agent/open-cluster-management-image-pull-credentials" 1 labels: velero.io/storage-location: default namespace: openshift-adp spec: includedNamespaces: - open-cluster-management-agent includedClusterScopedResources: - klusterlets.operator.open-cluster-management.io - clusterroles.rbac.authorization.k8s.io - clusterrolebindings.rbac.authorization.k8s.io - priorityclasses.scheduling.k8s.io includedNamespaceScopedResources: - deployments - serviceaccounts - secrets excludedNamespaceScopedResources: [] --- apiVersion: velero.io/v1 kind: Restore metadata: name: acm-klusterlet namespace: openshift-adp labels: velero.io/storage-location: default annotations: lca.openshift.io/apply-wave: "1" spec: backupName: acm-klusterlet
- 1
다중 클러스터Hub
CR에.spec.imagePullSecret
이 정의되어 있지 않고 허브 클러스터의open-cluster-management-agent
네임스페이스에 보안이 존재하지 않는 경우v1/secrets/open-cluster-management-agent/open-cluster-management-image-pull-credentials
.
LVM 스토리지를 통해 클러스터에 영구 볼륨을 생성한 경우 LVM 스토리지 아티팩트에 대해 다음 YAML 파일을 추가합니다.
PlatformBackupRestoreLvms.yaml for LVM Storage
apiVersion: velero.io/v1 kind: Backup metadata: labels: velero.io/storage-location: default name: lvmcluster namespace: openshift-adp spec: includedNamespaces: - openshift-storage includedNamespaceScopedResources: - lvmclusters - lvmvolumegroups - lvmvolumegroupnodestatuses --- apiVersion: velero.io/v1 kind: Restore metadata: name: lvmcluster namespace: openshift-adp labels: velero.io/storage-location: default annotations: lca.openshift.io/apply-wave: "2" 1 spec: backupName: lvmcluster
- 1
lca.openshift.io/apply-
ECDSA 값은 애플리케이션Restore
CR에 지정된 값보다 작아야 합니다.
업그레이드 후 애플리케이션을 복원해야 하는 경우
openshift-adp
네임스페이스에서 애플리케이션의 OADPBackup
및Restore
CR을 생성합니다.openshift-adp
네임스페이스에서 클러스터 범위 애플리케이션 아티팩트에 대한 OADP CR을 생성합니다.LSO 및 LVM 스토리지의 클러스터 범위 애플리케이션 아티팩트에 대한 OADP CR의 예
apiVersion: velero.io/v1 kind: Backup metadata: annotations: lca.openshift.io/apply-label: "apiextensions.k8s.io/v1/customresourcedefinitions/test.example.com,security.openshift.io/v1/securitycontextconstraints/test,rbac.authorization.k8s.io/v1/clusterroles/test-role,rbac.authorization.k8s.io/v1/clusterrolebindings/system:openshift:scc:test" 1 name: backup-app-cluster-resources labels: velero.io/storage-location: default namespace: openshift-adp spec: includedClusterScopedResources: - customresourcedefinitions - securitycontextconstraints - clusterrolebindings - clusterroles excludedClusterScopedResources: - Namespace --- apiVersion: velero.io/v1 kind: Restore metadata: name: test-app-cluster-resources namespace: openshift-adp labels: velero.io/storage-location: default annotations: lca.openshift.io/apply-wave: "3" 2 spec: backupName: backup-app-cluster-resources
네임스페이스 범위 애플리케이션 아티팩트에 대한 OADP CR을 생성합니다.
LSO를 사용할 때 OADP CR의 네임스페이스 범위 애플리케이션 아티팩트의 예
apiVersion: velero.io/v1 kind: Backup metadata: labels: velero.io/storage-location: default name: backup-app namespace: openshift-adp spec: includedNamespaces: - test includedNamespaceScopedResources: - secrets - persistentvolumeclaims - deployments - statefulsets - configmaps - cronjobs - services - job - poddisruptionbudgets - <application_custom_resources> 1 excludedClusterScopedResources: - persistentVolumes --- apiVersion: velero.io/v1 kind: Restore metadata: name: test-app namespace: openshift-adp labels: velero.io/storage-location: default annotations: lca.openshift.io/apply-wave: "4" spec: backupName: backup-app
- 1
- 애플리케이션에 대한 사용자 정의 리소스를 정의합니다.
LVM 스토리지를 사용할 때 OADP CR의 네임스페이스 범위 애플리케이션 아티팩트의 예
apiVersion: velero.io/v1 kind: Backup metadata: labels: velero.io/storage-location: default name: backup-app namespace: openshift-adp spec: includedNamespaces: - test includedNamespaceScopedResources: - secrets - persistentvolumeclaims - deployments - statefulsets - configmaps - cronjobs - services - job - poddisruptionbudgets - <application_custom_resources> 1 includedClusterScopedResources: - persistentVolumes 2 - logicalvolumes.topolvm.io 3 - volumesnapshotcontents 4 --- apiVersion: velero.io/v1 kind: Restore metadata: name: test-app namespace: openshift-adp labels: velero.io/storage-location: default annotations: lca.openshift.io/apply-wave: "4" spec: backupName: backup-app restorePVs: true restoreStatus: includedResources: - logicalvolumes 5
중요동일한 버전의 애플리케이션이 OpenShift Container Platform의 현재 릴리스와 대상 릴리스에서 작동해야 합니다.
다음 명령을 실행하여 OADP CR의
ConfigMap
오브젝트를 생성합니다.$ oc create configmap oadp-cm-example --from-file=example-oadp-resources.yaml=<path_to_oadp_crs> -n openshift-adp
다음 명령을 실행하여
ImageBasedUpgrade
CR을 패치합니다.$ oc patch imagebasedupgrades.lca.openshift.io upgrade \ -p='{"spec": {"oadpContent": [{"name": "oadp-cm-example", "namespace": "openshift-adp"}]}}' \ --type=merge -n openshift-lifecycle-agent
15.2.4.2. Lifecycle Agent를 사용하여 이미지 기반 업그레이드에 대한 추가 매니페스트의 ConfigMap 오브젝트 생성
대상 클러스터에 적용할 추가 매니페스트를 생성합니다.
프로세스
SR-IOV와 같은 추가 매니페스트가 포함된 YAML 파일을 생성합니다.
SR-IOV 리소스의 예
apiVersion: sriovnetwork.openshift.io/v1 kind: SriovNetworkNodePolicy metadata: name: "example-sriov-node-policy" namespace: openshift-sriov-network-operator spec: deviceType: vfio-pci isRdma: false nicSelector: pfNames: [ens1f0] nodeSelector: node-role.kubernetes.io/master: "" mtu: 1500 numVfs: 8 priority: 99 resourceName: example-sriov-node-policy --- apiVersion: sriovnetwork.openshift.io/v1 kind: SriovNetwork metadata: name: "example-sriov-network" namespace: openshift-sriov-network-operator spec: ipam: |- { } linkState: auto networkNamespace: sriov-namespace resourceName: example-sriov-node-policy spoofChk: "on" trust: "off"
다음 명령을 실행하여
ConfigMap
오브젝트를 생성합니다.$ oc create configmap example-extra-manifests-cm --from-file=example-extra-manifests.yaml=<path_to_extramanifest> -n openshift-lifecycle-agent
다음 명령을 실행하여
ImageBasedUpgrade
CR을 패치합니다.$ oc patch imagebasedupgrades.lca.openshift.io upgrade \ -p='{"spec": {"extraManifests": [{"name": "example-extra-manifests-cm", "namespace": "openshift-lifecycle-agent"}]}}' \ --type=merge -n openshift-lifecycle-agent
15.2.4.3. Lifecycle Agent를 사용하여 이미지 기반 업그레이드에 대한 사용자 정의 카탈로그 소스의 ConfigMap 오브젝트 생성
카탈로그 소스에 대한 ConfigMap
오브젝트를 생성하고 ImageBasedUpgrade
CR의 spec.extraManifest
필드에 추가하여 업그레이드 후 사용자 정의 카탈로그 소스를 유지할 수 있습니다. 카탈로그 소스에 대한 자세한 내용은 "Catalog source"를 참조하십시오.
프로세스
CatalogSource
CR이 포함된 YAML 파일을 생성합니다.apiVersion: operators.coreos.com/v1 kind: CatalogSource metadata: name: example-catalogsources namespace: openshift-marketplace spec: sourceType: grpc displayName: disconnected-redhat-operators image: quay.io/example-org/example-catalog:v1
다음 명령을 실행하여
ConfigMap
오브젝트를 생성합니다.$ oc create configmap example-catalogsources-cm --from-file=example-catalogsources.yaml=<path_to_catalogsource_cr> -n openshift-lifecycle-agent
다음 명령을 실행하여
ImageBasedUpgrade
CR을 패치합니다.$ oc patch imagebasedupgrades.lca.openshift.io upgrade \ -p='{"spec": {"extraManifests": [{"name": "example-catalogsources-cm", "namespace": "openshift-lifecycle-agent"}]}}' \ --type=merge -n openshift-lifecycle-agent
15.2.5. GitOps ZTP를 사용하여 Lifecycle Agent를 사용하여 이미지 기반 업그레이드에 대한 ConfigMap 오브젝트 생성
이미지 기반 업그레이드를 준비하기 위해 ConfigMap
오브젝트로 래핑된 추가 매니페스트 및 사용자 정의 카탈로그 소스를 생성합니다.
15.2.5.1. GitOps ZTP를 사용하여 이미지 기반 업그레이드에 대한 OADP 리소스 생성
업그레이드 후 OADP 리소스를 준비하여 애플리케이션을 복원합니다.
사전 요구 사항
- GitOps ZTP를 사용하여 하나 이상의 관리 클러스터를 프로비저닝했습니다.
-
cluster-admin
권한이 있는 사용자로 로그인했습니다. - 호환되는 시드 클러스터에서 시드 이미지를 생성했습니다.
- stateroots 간에 공유되는 컨테이너 이미지의 대상 클러스터에 별도의 파티션을 생성했습니다. 자세한 내용은 GitOps ZTP를 사용할 때 "ostree stateroots 간에 공유 컨테이너 파티션 구성"을 참조하십시오.
- 시드 이미지와 함께 사용되는 버전과 호환되는 Lifecycle Agent 버전을 배포했습니다.
-
대상 클러스터에 OADP Operator,
DataProtectionApplication
CR 및 해당 시크릿을 설치했습니다. - 적절한 인증 정보가 구성된 S3 호환 스토리지 솔루션 및 즉시 사용 가능한 버킷을 생성했습니다. 자세한 내용은 " GitOps ZTP를 사용하여 OADP Operator 설치 및 구성"을 참조하십시오.
-
OADP
ConfigMap
오브젝트의openshift-adp
네임스페이스는 모든 관리 클러스터에 있어야 하며 OADPConfigMap
을 생성하고 클러스터에 복사하려면 허브가 있어야 합니다.
프로세스
ArgoCD 정책 애플리케이션과 함께 사용하는 Git 리포지토리에 다음 디렉터리 구조가 포함되어 있는지 확인합니다.
├── source-crs/ │ ├── ibu/ │ │ ├── ImageBasedUpgrade.yaml │ │ ├── PlatformBackupRestore.yaml │ │ ├── PlatformBackupRestoreLvms.yaml │ │ ├── PlatformBackupRestoreWithIBGU.yaml ├── ... ├── kustomization.yaml
source-crs/ibu/PlatformBackupRestoreWithIBGU.yaml
파일은 ZTP 컨테이너 이미지에 제공됩니다.PlatformBackupRestoreWithIBGU.yaml
apiVersion: velero.io/v1 kind: Backup metadata: name: acm-klusterlet annotations: lca.openshift.io/apply-label: "apps/v1/deployments/open-cluster-management-agent/klusterlet,v1/secrets/open-cluster-management-agent/bootstrap-hub-kubeconfig,rbac.authorization.k8s.io/v1/clusterroles/klusterlet,v1/serviceaccounts/open-cluster-management-agent/klusterlet,scheduling.k8s.io/v1/priorityclasses/klusterlet-critical,rbac.authorization.k8s.io/v1/clusterroles/open-cluster-management:klusterlet-work:ibu-role,rbac.authorization.k8s.io/v1/clusterroles/open-cluster-management:klusterlet-admin-aggregate-clusterrole,rbac.authorization.k8s.io/v1/clusterrolebindings/klusterlet,operator.open-cluster-management.io/v1/klusterlets/klusterlet,apiextensions.k8s.io/v1/customresourcedefinitions/klusterlets.operator.open-cluster-management.io,v1/secrets/open-cluster-management-agent/open-cluster-management-image-pull-credentials" 1 labels: velero.io/storage-location: default namespace: openshift-adp spec: includedNamespaces: - open-cluster-management-agent includedClusterScopedResources: - klusterlets.operator.open-cluster-management.io - clusterroles.rbac.authorization.k8s.io - clusterrolebindings.rbac.authorization.k8s.io - priorityclasses.scheduling.k8s.io includedNamespaceScopedResources: - deployments - serviceaccounts - secrets excludedNamespaceScopedResources: [] --- apiVersion: velero.io/v1 kind: Restore metadata: name: acm-klusterlet namespace: openshift-adp labels: velero.io/storage-location: default annotations: lca.openshift.io/apply-wave: "1" spec: backupName: acm-klusterlet
- 1
다중 클러스터Hub
CR에.spec.imagePullSecret
이 정의되어 있지 않고 허브 클러스터의open-cluster-management-agent
네임스페이스에 보안이 존재하지 않는 경우v1/secrets/open-cluster-management-agent/open-cluster-management-image-pull-credentials
.
참고관리 클러스터에서 직접 이미지 기반 업그레이드를 수행하는 경우
PlatformBackupRestore.yaml
파일을 사용합니다.LVM 스토리지를 사용하여 영구 볼륨을 생성하는 경우 ZTP 컨테이너 이미지에 제공된
source-crs/ibu/PlatformBackupRestoreLvms.yaml
을 사용하여 LVM 스토리지 리소스를 백업할 수 있습니다.PlatformBackupRestoreLvms.yaml
apiVersion: velero.io/v1 kind: Backup metadata: labels: velero.io/storage-location: default name: lvmcluster namespace: openshift-adp spec: includedNamespaces: - openshift-storage includedNamespaceScopedResources: - lvmclusters - lvmvolumegroups - lvmvolumegroupnodestatuses --- apiVersion: velero.io/v1 kind: Restore metadata: name: lvmcluster namespace: openshift-adp labels: velero.io/storage-location: default annotations: lca.openshift.io/apply-wave: "2" 1 spec: backupName: lvmcluster
- 1
lca.openshift.io/apply-
ECDSA 값은 애플리케이션Restore
CR에 지정된 값보다 작아야 합니다.
업그레이드 후 애플리케이션을 복원해야 하는 경우
openshift-adp
네임스페이스에서 애플리케이션의 OADPBackup
및Restore
CR을 생성합니다.openshift-adp
네임스페이스에서 클러스터 범위 애플리케이션 아티팩트에 대한 OADP CR을 생성합니다.LSO 및 LVM 스토리지의 클러스터 범위 애플리케이션 아티팩트에 대한 OADP CR의 예
apiVersion: velero.io/v1 kind: Backup metadata: annotations: lca.openshift.io/apply-label: "apiextensions.k8s.io/v1/customresourcedefinitions/test.example.com,security.openshift.io/v1/securitycontextconstraints/test,rbac.authorization.k8s.io/v1/clusterroles/test-role,rbac.authorization.k8s.io/v1/clusterrolebindings/system:openshift:scc:test" 1 name: backup-app-cluster-resources labels: velero.io/storage-location: default namespace: openshift-adp spec: includedClusterScopedResources: - customresourcedefinitions - securitycontextconstraints - clusterrolebindings - clusterroles excludedClusterScopedResources: - Namespace --- apiVersion: velero.io/v1 kind: Restore metadata: name: test-app-cluster-resources namespace: openshift-adp labels: velero.io/storage-location: default annotations: lca.openshift.io/apply-wave: "3" 2 spec: backupName: backup-app-cluster-resources
source-crs/custom-crs
디렉터리의 네임스페이스 범위 애플리케이션 아티팩트에 대한 OADP CR을 생성합니다.LSO를 사용할 때 OADP CR의 네임스페이스 범위 애플리케이션 아티팩트의 예
apiVersion: velero.io/v1 kind: Backup metadata: labels: velero.io/storage-location: default name: backup-app namespace: openshift-adp spec: includedNamespaces: - test includedNamespaceScopedResources: - secrets - persistentvolumeclaims - deployments - statefulsets - configmaps - cronjobs - services - job - poddisruptionbudgets - <application_custom_resources> 1 excludedClusterScopedResources: - persistentVolumes --- apiVersion: velero.io/v1 kind: Restore metadata: name: test-app namespace: openshift-adp labels: velero.io/storage-location: default annotations: lca.openshift.io/apply-wave: "4" spec: backupName: backup-app
- 1
- 애플리케이션에 대한 사용자 정의 리소스를 정의합니다.
LVM 스토리지를 사용할 때 OADP CR의 네임스페이스 범위 애플리케이션 아티팩트의 예
apiVersion: velero.io/v1 kind: Backup metadata: labels: velero.io/storage-location: default name: backup-app namespace: openshift-adp spec: includedNamespaces: - test includedNamespaceScopedResources: - secrets - persistentvolumeclaims - deployments - statefulsets - configmaps - cronjobs - services - job - poddisruptionbudgets - <application_custom_resources> 1 includedClusterScopedResources: - persistentVolumes 2 - logicalvolumes.topolvm.io 3 - volumesnapshotcontents 4 --- apiVersion: velero.io/v1 kind: Restore metadata: name: test-app namespace: openshift-adp labels: velero.io/storage-location: default annotations: lca.openshift.io/apply-wave: "4" spec: backupName: backup-app restorePVs: true restoreStatus: includedResources: - logicalvolumes 5
중요동일한 버전의 애플리케이션이 OpenShift Container Platform의 현재 릴리스와 대상 릴리스에서 작동해야 합니다.
다음 콘텐츠를 사용하여
kustomization.yaml
을 생성합니다.apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization configMapGenerator: 1 - files: - source-crs/ibu/PlatformBackupRestoreWithIBGU.yaml #- source-crs/custom-crs/ApplicationClusterScopedBackupRestore.yaml #- source-crs/custom-crs/ApplicationApplicationBackupRestoreLso.yaml name: oadp-cm namespace: openshift-adp 2 generatorOptions: disableNameSuffixHash: true
- Git 리포지토리로 변경 사항을 내보냅니다.
15.2.5.2. GitOps ZTP를 사용하여 이미지 기반 업그레이드에 대한 추가 매니페스트 레이블
Lifecycle Agent에서 lca.openshift.io/target-ocp-version: <target_version
> 레이블로 레이블이 지정된 리소스를 추출할 수 있도록 추가 매니페스트에 레이블을 지정합니다.
사전 요구 사항
- GitOps ZTP를 사용하여 하나 이상의 관리 클러스터를 프로비저닝했습니다.
-
cluster-admin
권한이 있는 사용자로 로그인했습니다. - 호환되는 시드 클러스터에서 시드 이미지를 생성했습니다.
- stateroots 간에 공유되는 컨테이너 이미지의 대상 클러스터에 별도의 파티션을 생성했습니다. 자세한 내용은 GitOps ZTP를 사용할 때 "ostree stateroots 간에 공유 컨테이너 디렉터리 구성"을 참조하십시오.
- 시드 이미지와 함께 사용되는 버전과 호환되는 Lifecycle Agent 버전을 배포했습니다.
프로세스
기존 사이트
PolicyGenTemplate
CR의lca.openshift.io/target-ocp-version: <target_version
> 라벨을 사용하여 필요한 추가 매니페스트에 레이블을 지정합니다.apiVersion: ran.openshift.io/v1 kind: PolicyGenTemplate metadata: name: example-sno spec: bindingRules: sites: "example-sno" du-profile: "4.15" mcp: "master" sourceFiles: - fileName: SriovNetwork.yaml policyName: "config-policy" metadata: name: "sriov-nw-du-fh" labels: lca.openshift.io/target-ocp-version: "4.15" 1 spec: resourceName: du_fh vlan: 140 - fileName: SriovNetworkNodePolicy.yaml policyName: "config-policy" metadata: name: "sriov-nnp-du-fh" labels: lca.openshift.io/target-ocp-version: "4.15" spec: deviceType: netdevice isRdma: false nicSelector: pfNames: ["ens5f0"] numVfs: 8 priority: 10 resourceName: du_fh - fileName: SriovNetwork.yaml policyName: "config-policy" metadata: name: "sriov-nw-du-mh" labels: lca.openshift.io/target-ocp-version: "4.15" spec: resourceName: du_mh vlan: 150 - fileName: SriovNetworkNodePolicy.yaml policyName: "config-policy" metadata: name: "sriov-nnp-du-mh" labels: lca.openshift.io/target-ocp-version: "4.15" spec: deviceType: vfio-pci isRdma: false nicSelector: pfNames: ["ens7f0"] numVfs: 8 priority: 10 resourceName: du_mh - fileName: DefaultCatsrc.yaml 2 policyName: "config-policy" metadata: name: default-cat-source namespace: openshift-marketplace labels: lca.openshift.io/target-ocp-version: "4.15" spec: displayName: default-cat-source image: quay.io/example-org/example-catalog:v1
- Git 리포지토리로 변경 사항을 내보냅니다.
15.2.6. 컨테이너 스토리지 디스크의 자동 이미지 정리 구성
주석을 통해 사용 가능한 스토리지 공간에 최소 임계값을 설정하여 Lifecycle Agent가 Prep
단계에서 고정되지 않은 이미지를 정리할 때 를 구성합니다. 기본 컨테이너 스토리지 디스크 사용량 임계값은 50%입니다.
Lifecycle Agent는 CRI-O에 고정되거나 현재 사용되는 이미지를 삭제하지 않습니다. Operator는 이미지 배치로 시작한 다음 생성된 이미지 타임스탬프에 의해 결정된 가장 오래된 이미지에서 최신 이미지까지 정렬하여 삭제할 이미지를
선택합니다.
15.2.6.1. 컨테이너 스토리지 디스크의 자동 이미지 정리 구성
주석을 통해 사용 가능한 스토리지 공간에 대한 최소 임계값을 구성합니다.
사전 요구 사항
-
ImageBasedUpgrade
CR을 생성했습니다.
프로세스
다음 명령을 실행하여 임계값을 Cryostat로 늘립니다.
$ oc -n openshift-lifecycle-agent annotate ibu upgrade image-cleanup.lca.openshift.io/disk-usage-threshold-percent='65'
(선택 사항) 다음 명령을 실행하여 임계값 덮어쓰기를 제거합니다.
$ oc -n openshift-lifecycle-agent annotate ibu upgrade image-cleanup.lca.openshift.io/disk-usage-threshold-percent-
15.2.6.2. 컨테이너 스토리지 디스크의 자동 이미지 정리 비활성화
자동 이미지 정리 임계값을 비활성화합니다.
프로세스
다음 명령을 실행하여 자동 이미지 정리를 비활성화합니다.
$ oc -n openshift-lifecycle-agent annotate ibu upgrade image-cleanup.lca.openshift.io/on-prep='Disabled'
(선택 사항) 다음 명령을 실행하여 자동 이미지 정리를 다시 활성화합니다.
$ oc -n openshift-lifecycle-agent annotate ibu upgrade image-cleanup.lca.openshift.io/on-prep-