1.7. 정책을 사용하여 연결이 끊긴 클러스터 업그레이드
Kubernetes 정책에 대해 Red Hat Advanced Cluster Management와 함께 OpenShift Update Service를 사용하여 연결이 끊긴 환경에서 여러 클러스터를 업그레이드할 수 있습니다.
보안 문제로 인해 클러스터가 인터넷에 직접 연결되지 않는 경우도 있습니다. 이로 인해 업그레이드할 수 있는 시기와 이러한 업그레이드를 처리하는 방법을 알기가 어렵습니다. OpenShift Update Service를 구성하는 것이 도움이 될 수 있습니다.
OpenShift Update Service는 연결이 끊긴 환경에서 사용 가능한 관리 클러스터 버전을 모니터링하고 연결이 끊긴 환경에서 클러스터를 업그레이드하는 데 사용할 수 있도록 하는 별도의 Operator 및 피연산자입니다. OpenShift Update Service가 구성되면 다음 작업을 수행할 수 있습니다.
- 연결이 끊긴 클러스터에 대한 업그레이드를 사용할 수 있는 시기를 모니터링합니다.
- 그래프 데이터 파일을 사용하여 업그레이드하기 위해 로컬 사이트로 미러링되는 업데이트를 확인합니다.
콘솔을 사용하여 클러스터에 업그레이드를 사용할 수 있음을 알립니다.
1.7.1. 사전 요구 사항
OpenShift Update Service를 사용하여 연결이 끊긴 클러스터를 업그레이드하려면 다음 사전 요구 사항이 있어야 합니다.
제한된 OLM이 구성된 지원되는 OpenShift Container Platform 버전에서 실행 중인 배포된 허브 클러스터입니다. 제한된 OLM 을 구성하는 방법에 대한 자세한 내용은 제한된 네트워크에서 Operator Lifecycle Manager 사용을 참조하십시오.
팁: 제한된 OLM을 구성할 때 카탈로그 소스 이미지를 기록합니다.
- hub 클러스터에서 관리하는 OpenShift Container Platform 클러스터
클러스터 이미지를 미러링할 수 있는 로컬 저장소에 대한 인증 정보에 액세스합니다. 이 리포지토리를 생성하는 방법에 대한 자세한 내용은 Disconnected installation mirroring 에서 참조하십시오.
참고: 업그레이드할 현재 버전의 클러스터의 이미지를 미러링된 이미지 중 하나로 항상 사용할 수 있어야 합니다. 업그레이드에 실패하면 업그레이드 시도 시 클러스터가 클러스터 버전으로 되돌아갑니다.
1.7.2. 연결이 끊긴 미러 레지스트리 준비
업그레이드할 이미지와 로컬 미러 레지스트리로 업그레이드할 현재 이미지를 모두 미러링해야 합니다. 이미지를 미러링하려면 다음 단계를 완료합니다.
다음 예제와 유사한 콘텐츠가 포함된 스크립트 파일을 생성합니다.
UPSTREAM_REGISTRY=quay.io PRODUCT_REPO=openshift-release-dev RELEASE_NAME=ocp-release OCP_RELEASE=4.15.2-x86_64 LOCAL_REGISTRY=$(hostname):5000 LOCAL_SECRET_JSON=/path/to/pull/secret oc adm -a ${LOCAL_SECRET_JSON} release mirror \ --from=${UPSTREAM_REGISTRY}/${PRODUCT_REPO}/${RELEASE_NAME}:${OCP_RELEASE} \ --to=${LOCAL_REGISTRY}/ocp4 \ --to-release-image=${LOCAL_REGISTRY}/ocp4/release:${OCP_RELEASE}
/path/to/pull/secret
을 OpenShift Container Platform 풀 시크릿의 경로로 바꿉니다.- 스크립트를 실행하여 이미지를 미러링하고, 설정을 구성하고, 릴리스 이미지와 릴리스 콘텐츠를 분리합니다.
팁: ImageContentSourcePolicy
를 생성할 때 이 스크립트의 마지막 줄의 출력을 사용할 수 있습니다.
1.7.3. OpenShift Update Service용 Operator 배포
OpenShift Container Platform 환경에서 OpenShift Update Service용 Operator를 배포하려면 다음 단계를 완료하십시오.
- hub 클러스터에서 OpenShift Container Platform Operator 허브에 액세스합니다.
-
OpenShift Update Service Operator
를 선택하여 Operator를 배포합니다. 필요한 경우 기본값을 업데이트합니다. Operator 배포는openshift-cincinnati
라는 새 프로젝트를 생성합니다. Operator 설치가 완료될 때까지 기다립니다.
팁: OpenShift Container Platform 명령줄에
oc get pods
명령을 입력하여 설치 상태를 확인할 수 있습니다. Operator가running
상태인지 확인합니다.
1.7.4. 그래프 데이터 init 컨테이너 빌드
OpenShift Update Service는 그래프 데이터 정보를 사용하여 사용 가능한 업그레이드를 결정합니다. 연결된 환경에서 OpenShift Update Service는 Cincinnati 그래프 데이터 GitHub 리포지토리에서 직접 업그레이드할 수 있는 그래프 데이터 정보를 가져옵니다. 연결이 끊긴 환경을 구성하기 때문에 init 컨테이너
를 사용하여 로컬 리포지토리에서 그래프 데이터를 사용할 수 있도록 설정해야 합니다. 그래프 데이터 init 컨테이너
를 생성하려면 다음 단계를 완료합니다.
다음 명령을 입력하여 그래프 데이터 Git 리포지토리를 복제합니다.
git clone https://github.com/openshift/cincinnati-graph-data
그래프 데이터
init
에 대한 정보가 포함된 파일을 생성합니다. 이 샘플 Dockerfile 은cincinnati-operator
GitHub 리포지토리에서 찾을 수 있습니다. 파일의 내용은 다음 샘플에 표시됩니다.FROM registry.access.redhat.com/ubi8/ubi:8.1 RUN curl -L -o cincinnati-graph-data.tar.gz https://github.com/openshift/cincinnati-graph-data/archive/master.tar.gz RUN mkdir -p /var/lib/cincinnati/graph-data/ CMD exec /bin/bash -c "tar xvzf cincinnati-graph-data.tar.gz -C /var/lib/ cincinnati/graph-data/ --strip-components=1"
이 예제에서는 다음을 수행합니다.
-
FROM
값은 OpenShift Update Service가 이미지를 찾는 외부 레지스트리입니다. -
RUN
명령은 디렉터리를 생성하고 업그레이드 파일을 패키징합니다. -
CMD
명령은 패키지 파일을 로컬 리포지토리에 복사하고 업그레이드를 위해 파일을 추출합니다.
-
다음 명령을 실행하여
그래프 데이터 init 컨테이너
를 빌드합니다.podman build -f <path_to_Dockerfile> -t ${DISCONNECTED_REGISTRY}/cincinnati/cincinnati-graph-data-container:latest podman push ${DISCONNECTED_REGISTRY}/cincinnati/cincinnati-graph-data-container:latest --authfile=/path/to/pull_secret.json
path_to_Dockerfile
을 이전 단계에서 생성한 파일의 경로로 바꿉니다.${DISCONNECTED_REGISTRY}/cincinnati/cincinnati-data-container
를 로컬 그래프 데이터 init 컨테이너의 경로로 교체합니다./path/to/pull_secret
을 풀 시크릿 파일의 경로로 바꿉니다.참고:
podman
이 설치되어 있지 않은 경우 명령의podman
을docker
로 교체할 수도 있습니다.
1.7.5. 미러링된 레지스트리에 대한 인증서 구성
미러링된 OpenShift Container Platform 릴리스 이미지를 저장하기 위해 보안 외부 컨테이너 레지스트리를 사용하는 경우 OpenShift Update Service는 업그레이드 그래프를 빌드하기 위해 이 레지스트리에 액세스해야 합니다. OpenShift Update Service Pod에서 작동하도록 CA 인증서를 구성하려면 다음 단계를 완료합니다.
image.config.openshift.io
에 있는 OpenShift Container Platform 외부 레지스트리 API를 찾습니다. 외부 레지스트리 CA 인증서가 저장되는 위치입니다.자세한 내용은 OpenShift Container Platform 설명서에서 이미지 레지스트리 액세스에 대한 추가 신뢰 저장소 구성 을 참조하십시오.
-
openshift-config
네임스페이스에 ConfigMap을 생성합니다. updateservice-registry
키 아래에 CA 인증서를 추가합니다. OpenShift Update Service는 이 설정을 사용하여 인증서를 찾습니다.apiVersion: v1 kind: ConfigMap metadata: name: trusted-ca data: updateservice-registry: | -----BEGIN CERTIFICATE----- ... -----END CERTIFICATE-----
image.config.openshift.io
API에서클러스터
리소스를 편집하여additionalTrustedCA
필드를 생성한 ConfigMap의 이름으로 설정합니다.oc patch image.config.openshift.io cluster -p '{"spec":{"additionalTrustedCA":{"name":"trusted-ca"}}}' --type merge
trusted-ca
를 새 ConfigMap의 경로로 교체합니다.
OpenShift Update Service Operator는 openshift-config 네임스페이스에서 생성한 image.config.openshift.io
API 및 openshift-config
네임스페이스에서 생성한 ConfigMap을 모니터링한 다음 CA 인증서가 변경된 경우 배포를 다시 시작합니다.
1.7.6. OpenShift Update Service 인스턴스 배포
허브 클러스터에 OpenShift Update Service 인스턴스 배포를 완료하면 클러스터 업그레이드의 이미지를 미러링하고 연결이 끊긴 관리 클러스터에서 사용할 수 있는 이 인스턴스가 있습니다. 인스턴스를 배포하려면 다음 단계를 완료합니다.
openshift-cincinnati
인 Operator의 기본 네임스페이스를 사용하지 않으려면 OpenShift Update Service 인스턴스에 대한 네임스페이스를 생성합니다.- OpenShift Container Platform 허브 클러스터 콘솔 탐색 메뉴에서 관리 > 네임스페이스 를 선택합니다.
- 네임스페이스 생성을 선택합니다.
- 네임스페이스의 이름과 네임스페이스에 대한 기타 정보를 추가합니다.
- 생성 을 선택하여 네임스페이스를 생성합니다.
- OpenShift Container Platform 콘솔의 설치된 Operator 섹션에서 OpenShift Update Service Operator 를 선택합니다.
- 메뉴에서 Create Instance 를 선택합니다.
OpenShift Update Service 인스턴스에서 콘텐츠를 붙여넣습니다. YAML 인스턴스는 다음 매니페스트와 유사할 수 있습니다.
apiVersion: cincinnati.openshift.io/v1beta2 kind: Cincinnati metadata: name: openshift-update-service-instance namespace: openshift-cincinnati spec: registry: <registry_host_name>:<port> 1 replicas: 1 repository: ${LOCAL_REGISTRY}/ocp4/release graphDataImage: '<host_name>:<port>/cincinnati-graph-data-container' 2
- 만들기 를 선택하여 인스턴스를 만듭니다.
-
hub 클러스터 CLI에서
oc get pods
명령을 입력하여 인스턴스 생성 상태를 확인합니다. 다소 시간이 걸릴 수 있지만 명령 결과에 인스턴스 및 Operator가 실행 중임을 표시하는 경우 프로세스가 완료됩니다.
1.7.7. 기본 레지스트리를 덮어쓰는 정책 배포(선택 사항)
참고: 이 섹션의 단계는 릴리스를 미러링된 레지스트리로 미러링한 경우에만 적용됩니다. 더 이상 사용되지 않음: PlacementRule
OpenShift Container Platform에는 업그레이드 패키지를 찾는 위치를 지정하는 기본 이미지 레지스트리 값이 있습니다. 연결이 끊긴 환경에서는 해당 값을 릴리스 이미지를 미러링한 로컬 이미지 레지스트리의 경로로 교체하는 정책을 생성할 수 있습니다.
이러한 단계의 경우 정책의 이름은 policy-mirror 입니다. 정책을 생성하려면 다음 단계를 완료합니다.
- hub 클러스터의 OpenShift Container Platform 환경에 로그인합니다.
- 콘솔에서 Governance > Create policy 를 선택합니다.
- YAML 스위치를 On 으로 설정하여 정책의 YAML 버전을 확인합니다.
- YAML 코드의 모든 콘텐츠를 삭제합니다.
다음 YAML 콘텐츠를 창에 붙여넣어 사용자 정의 정책을 생성합니다.
apiVersion: policy.open-cluster-management.io/v1 kind: Policy metadata: name: policy-mirror namespace: default spec: disabled: false remediationAction: enforce policy-templates: - objectDefinition: apiVersion: policy.open-cluster-management.io/v1 kind: ConfigurationPolicy metadata: name: policy-image-content-source-policy spec: object-templates: - complianceType: musthave objectDefinition: apiVersion: operator.openshift.io/v1alpha1 kind: ImageContentSourcePolicy metadata: name: <your-local-mirror-name> spec: repositoryDigestMirrors: - mirrors: - <your-registry> 1 source: registry.redhat.io --- apiVersion: policy.open-cluster-management.io/v1 kind: PlacementBinding metadata: name: binding-policy-mirror namespace: default placementRef: name: placement-policy-mirror kind: PlacementRule apiGroup: apps.open-cluster-management.io subjects: - name: policy-mirror kind: Policy apiGroup: policy.open-cluster-management.io --- apiVersion: apps.open-cluster-management.io/v1 kind: PlacementRule metadata: name: placement-policy-mirror namespace: default spec: clusterConditions: - status: "True" type: ManagedClusterConditionAvailable clusterSelector: matchExpressions: [] # selects all clusters if not specified
- 1
your-registry
를 로컬 미러 저장소의 경로로 바꿉니다.oc adm release mirror
명령을 입력하여 로컬 미러의 경로를 찾을 수 있습니다.
- 지원되는 경우 Enforce 를 선택합니다.
- 만들기 를 선택하여 정책을 생성합니다.
1.7.8. 연결이 끊긴 카탈로그 소스 배포
Catalogsource 정책을 관리 클러스터로 내보내 연결된 위치에서 연결이 끊긴 로컬 레지스트리로 기본 위치를 변경합니다.
- 콘솔 메뉴에서 Governance > Create policy 를 선택합니다.
-
YAML
스위치를 On 으로 설정하여 정책의 YAML 버전을 확인합니다. -
YAML
코드의 모든 콘텐츠를 삭제합니다. 다음
YAML
콘텐츠를 창에 붙여넣어 사용자 정의 정책을 생성합니다.apiVersion: policy.open-cluster-management.io/v1 kind: Policy metadata: name: policy-catalog namespace: default spec: disabled: false remediationAction: enforce policy-templates: - objectDefinition: apiVersion: policy.open-cluster-management.io/v1 kind: ConfigurationPolicy metadata: name: policy-catalog spec: object-templates: - complianceType: musthave objectDefinition: apiVersion: config.openshift.io/v1 kind: OperatorHub metadata: name: cluster spec: disableAllDefaultSources: true - complianceType: musthave objectDefinition: apiVersion: operators.coreos.com/v1alpha1 kind: CatalogSource metadata: name: my-operator-catalog namespace: openshift-marketplace spec: sourceType: grpc image: '<registry_host_name>:<port>/olm/redhat-operators:v1' 1 displayName: My Operator Catalog publisher: grpc --- apiVersion: policy.open-cluster-management.io/v1 kind: PlacementBinding metadata: name: binding-policy-catalog namespace: default placementRef: name: placement-policy-catalog kind: PlacementRule apiGroup: apps.open-cluster-management.io subjects: - name: policy-catalog kind: Policy apiGroup: policy.open-cluster-management.io --- apiVersion: apps.open-cluster-management.io/v1 kind: PlacementRule metadata: name: placement-policy-catalog namespace: default spec: clusterConditions: - status: "True" type: ManagedClusterConditionAvailable clusterSelector: matchExpressions: [] # selects all clusters if not specified
- 1
spec.image
값을 로컬 제한된 카탈로그 소스 이미지의 경로로 바꿉니다.
- 지원되는 경우 Enforce 를 선택합니다.
- 만들기 를 선택하여 정책을 생성합니다.
1.7.9. 정책을 배포하여 관리 클러스터 매개변수 변경
ClusterVersion 정책을 관리 클러스터로 푸시하여 업그레이드를 검색하는 기본 위치를 변경합니다.
관리형 클러스터에서 다음 명령을 입력하여 ClusterVersion 업스트림 매개변수가 현재 기본 공용 OpenShift Update Service 피연산자인지 확인합니다.
oc get clusterversion -o yaml
반환된 콘텐츠는 다음 내용과 유사할 수 있습니다.
apiVersion: v1 items: - apiVersion: config.openshift.io/v1 kind: ClusterVersion [..] spec: channel: stable-4.4 upstream: https://api.openshift.com/api/upgrades_info/v1/graph
-
허브 클러스터에서 다음 명령을 입력하여 OpenShift Update Service 피연산자의 경로 URL을 확인합니다.
oc get routes
. 이후 단계에서는 이 값을 참조하십시오. - 허브 클러스터 콘솔 메뉴에서 Governance > Create a policy 를 선택합니다.
-
YAML
스위치를 On 으로 설정하여 정책의 YAML 버전을 확인합니다. -
YAML
코드의 모든 콘텐츠를 삭제합니다. 다음
YAML
콘텐츠를 창에 붙여넣어 사용자 정의 정책을 생성합니다.apiVersion: policy.open-cluster-management.io/v1 kind: Policy metadata: name: policy-cluster-version namespace: default annotations: policy.open-cluster-management.io/standards: null policy.open-cluster-management.io/categories: null policy.open-cluster-management.io/controls: null spec: disabled: false remediationAction: enforce policy-templates: - objectDefinition: apiVersion: policy.open-cluster-management.io/v1 kind: ConfigurationPolicy metadata: name: policy-cluster-version spec: object-templates: - complianceType: musthave objectDefinition: apiVersion: config.openshift.io/v1 kind: ClusterVersion metadata: name: version spec: channel: stable-4.4 upstream: >- https://example-cincinnati-policy-engine-uri/api/upgrades_info/v1/graph 1 --- apiVersion: policy.open-cluster-management.io/v1 kind: PlacementBinding metadata: name: binding-policy-cluster-version namespace: default placementRef: name: placement-policy-cluster-version kind: PlacementRule apiGroup: apps.open-cluster-management.io subjects: - name: policy-cluster-version kind: Policy apiGroup: policy.open-cluster-management.io --- apiVersion: apps.open-cluster-management.io/v1 kind: PlacementRule metadata: name: placement-policy-cluster-version namespace: default spec: clusterConditions: - status: "True" type: ManagedClusterConditionAvailable clusterSelector: matchExpressions: [] # selects all clusters if not specified
- 1
objectDefinition.spec.upstream
값을 hub 클러스터 OpenShift Update Service 피연산자의 경로로 바꿉니다.
다음 단계를 완료하여 피연산자의 경로를 확인할 수 있습니다.
-
hub 클러스터에서
oc get get routes -A
명령을 실행합니다. -
cincinnati
. + 피연산자의 경로는HOST/PORT
필드의 값입니다.
- 지원되는 경우 Enforce 를 선택합니다.
- 만들기 를 선택하여 정책을 생성합니다.
관리형 클러스터 CLI에서
ClusterVersion
의 upstream 매개변수가 다음을 입력하여 로컬 허브 클러스터 OpenShift Update Service URL로 업데이트되었는지 확인합니다.oc get clusterversion -o yaml
결과가 다음 콘텐츠와 유사한지 확인합니다.
apiVersion: v1 items: - apiVersion: config.openshift.io/v1 kind: ClusterVersion [..] spec: channel: stable-4.4 upstream: https://<hub-cincinnati-uri>/api/upgrades_info/v1/graph
1.7.10. 사용 가능한 업그레이드 보기
다음 단계를 완료하여 관리 클러스터에 사용 가능한 업그레이드 목록을 볼 수 있습니다.
- Kubernetes Operator 콘솔을 위해 다중 클러스터 엔진에 로그인합니다.
- 탐색 메뉴에서 Infrastructure > Clusters 를 선택합니다.
- Ready 상태에 있는 클러스터를 선택합니다.
- 작업 메뉴에서 클러스터 업그레이드 를 선택합니다.
선택적 업그레이드 경로를 사용할 수 있는지 확인합니다.
참고: 현재 버전이 로컬 이미지 저장소에 미러링되지 않은 경우 사용 가능한 업그레이드 버전이 표시되지 않습니다.
1.7.11. 채널 선택
Red Hat Advanced Cluster Management 콘솔을 사용하여 OpenShift Container Platform 버전 4.6 이상에서 클러스터 업그레이드 채널을 선택할 수 있습니다. 이러한 버전은 미러 레지스트리에서 사용할 수 있어야 합니다. 채널 선택 단계를 완료하여 업그레이드 채널을 지정합니다.
1.7.12. 클러스터 업그레이드
연결이 끊긴 레지스트리를 구성한 후 Red Hat Advanced Cluster Management 및 OpenShift Update Service는 연결이 끊긴 레지스트리를 사용하여 업그레이드를 사용할 수 있는지 확인합니다. 사용 가능한 업그레이드가 표시되지 않는 경우 클러스터의 현재 수준의 릴리스 이미지와 로컬 저장소에 미러링된 하나 이상의 이후 수준이 있는지 확인합니다. 현재 클러스터 버전의 릴리스 이미지를 사용할 수 없는 경우 업그레이드를 사용할 수 없습니다.
업그레이드하려면 다음 단계를 완료합니다.
- 콘솔에서 Infrastructure > Clusters 를 선택합니다.
- 사용 가능한 업그레이드가 있는지 확인할 클러스터를 찾습니다.
- 업그레이드할 수 있는 업그레이드가 있는 경우 클러스터의 배포 버전 열에 업그레이드가 사용 가능함을 나타냅니다.
- 클러스터의 옵션 메뉴를 선택하고 클러스터 업그레이드 를 선택합니다.
- 업그레이드 대상 버전을 선택하고 업그레이드를 선택합니다.
관리 클러스터가 선택한 버전으로 업데이트되었습니다.
클러스터 업그레이드에 실패하면 Operator는 일반적으로 업그레이드를 몇 번 재시도하고 중지한 후 실패한 구성 요소의 상태를 보고합니다. 경우에 따라 업그레이드 프로세스가 프로세스를 완료하려는 시도를 계속 순환합니다. 업그레이드 실패 후 클러스터를 이전 버전으로 롤백하는 것은 지원되지 않습니다. 클러스터 업그레이드에 실패하는 경우 Red Hat 지원에 문의하십시오.