9.4. OpenShift Update Service 없이 연결이 끊긴 환경에서 클러스터 업데이트
9.4.1. 전제 조건
-
oc
명령 줄 인터페이스 (CLI) 툴이 설치되어 있어야합니다. - OpenShift Container Platform 이미지 저장소 미러링에 설명된 대로 업데이트를 위한 컨테이너 이미지로 로컬 컨테이너 이미지 레지스트리를 프로비저닝해야 합니다.
-
admin
권한이 있는 사용자로 클러스터에 액세스할 수 있어야 합니다. RBAC를 사용하여 권한 정의 및 적용을 참조하십시오. - 업데이트가 실패하는 경우 etcd 백업이 있어야 하며 클러스터를 이전 상태로 복원 해야 합니다.
- 모든 MCP(Machine config pool)가 실행 중이고 일시 중지되지 않았는지 확인해야 합니다. 업데이트 프로세스 중에 일시 중지된 MCP와 연결된 노드를 건너뜁니다. 카나리아 롤아웃 업데이트 전략을 수행하는 경우 MCP를 일시 중지할 수 있습니다.
- 클러스터에서 수동으로 유지 관리되는 인증 정보를 사용하는 경우 CCO(Cloud Credential Operator)가 업그레이드 가능한 상태인지 확인해야 합니다. 자세한 내용은 AWS, Azure 또는 GCP에 대해 수동으로 유지 관리되는 인증 정보를 사용하여 클러스터 업그레이드 참조하십시오.
-
Operator를 실행하거나 Pod 중단 예산을 사용하여 애플리케이션을 구성한 경우 업그레이드 프로세스 중에 중단될 수 있습니다.
PodDisruptionBudget
에서minAvailable
이 1로 설정된 경우 노드는 제거 프로세스를 차단할 수 있는 보류 중인 머신 구성을 적용하기 위해 드레인됩니다. 여러 노드가 재부팅되면 모든 Pod가 하나의 노드에서만 실행될 수 있으며PodDisruptionBudget
필드에서 노드 드레이닝을 방지할 수 있습니다.
9.4.2. 연결이 끊긴 클러스터 업그레이드
연결이 끊긴 클러스터를 다운로드한 릴리스 이미지의 OpenShift Container Platform 버전으로 업데이트합니다.
로컬 OpenShift Update Service가 있는 경우 이 절차 대신 연결된 웹 콘솔 또는 CLI 지침을 사용하여 업데이트할 수 있습니다.
전제 조건
- 새 릴리스의 이미지를 레지스트리에 미러링하고 있습니다.
- 새 릴리스의 릴리스 이미지 서명 ConfigMap을 클러스터에 적용하고 있습니다.
- 이미지 서명 ConfigMap에서 릴리스의 sha256 합계 값을 얻을 수 있습니다.
-
OpenShift CLI (
oc
), 4.4.8 이상 버전을 설치합니다.
프로세스
클러스터를 업데이트합니다.
$ oc adm upgrade --allow-explicit-upgrade --to-image ${LOCAL_REGISTRY}/${LOCAL_REPOSITORY}<sha256_sum_value> 1
- 1
<sha256_sum_value>
값은 이미지 서명 ConfigMap에서 릴리스에 대한 sha256 합계입니다 (예:@sha256:81154f5c03294534e1eaf0319bef7a601134f891689ccede5d705ef659aa8c92
).
미러 레지스트리에
ImageContentSourcePolicy
를 사용하는 경우LOCAL_REGISTRY
대신 표준 레지스트리 이름을 사용할 수 있습니다.참고ImageContentSourcePolicy
개체가 있는 클러스터에 대한 글로벌 풀 시크릿만 구성할 수 있습니다. 프로젝트에 풀 시크릿을 추가할 수 없습니다.
9.4.3. 이미지 레지스트리 저장소 미러링 설정
컨테이너 레지스트리 저장소 미러링을 설정하면 다음을 수행할 수 있습니다.
- 소스 이미지 레지스트리의 저장소에서 이미지를 가져오기 위해 요청을 리디렉션하고 미러링된 이미지 레지스트리의 저장소에서 이를 해석하도록 OpenShift Container Platform 클러스터를 설정합니다.
- 하나의 미러가 다운된 경우 다른 미러를 사용할 수 있도록 각 대상 저장소에 대해 여러 미러링된 저장소를 확인합니다.
다음은 OpenShift Container Platform의 저장소 미러링의 몇 가지 속성입니다.
- 이미지 풀은 레지스트리 다운타임에 탄력적으로 대처할 수 있습니다.
- 연결이 끊긴 환경의 클러스터는 중요한 위치(예: quay.io)에서 이미지를 가져오고 회사 방화벽 뒤의 레지스트리에서 요청된 이미지를 제공하도록 할 수 있습니다.
- 이미지 가져오기 요청이 있으면 특정한 레지스트리 순서로 가져오기를 시도하며 일반적으로 영구 레지스트리는 마지막으로 시도합니다.
-
입력한 미러링 정보는 OpenShift Container Platform 클러스터의 모든 노드에서
/etc/containers/registries.conf
파일에 추가됩니다. - 노드가 소스 저장소에서 이미지를 요청하면 요청된 컨텐츠를 찾을 때 까지 미러링된 각 저장소를 차례로 시도합니다. 모든 미러가 실패하면 클러스터는 소스 저장소를 시도합니다. 성공하면 이미지를 노드로 가져올 수 있습니다.
저장소 미러링은 다음과 같은 방법으로 설정할 수 있습니다.
OpenShift Container Platform 설치 시
OpenShift Container Platform에 필요한 컨테이너 이미지를 가져온 다음 해당 이미지를 회사 방화벽 뒤에 배치하면 연결이 끊긴 환경에 있는 데이터 센터에 OpenShift Container Platform을 설치할 수 있습니다.
OpenShift Container Platform 설치 후
OpenShift Container Platform 설치 시 미러링을 설정하지 않고
ImageContentSourcePolicy
개체를 사용하여 나중에 설정할 수 있습니다.
다음 절차에서는 설치 후 미러 구성을 제공합니다. 이때 다음을 식별하는 ImageContentSourcePolicy
오브젝트를 생성할 수 있습니다.
- 미러링하려는 컨테이너 이미지 저장소의 소스
- 소스 저장소에서 요청된 컨텐츠를 제공하는 각 미러 저장소에 대한 개별 항목
ImageContentSourcePolicy
개체가 있는 클러스터에 대한 글로벌 풀 시크릿만 구성할 수 있습니다. 프로젝트에 풀 시크릿을 추가할 수 없습니다.
전제 조건
-
cluster-admin
역할의 사용자로 클러스터에 액세스할 수 있어야 합니다.
절차
미러링된 저장소를 설정합니다.
- Red Hat Quay Repository Mirroring에 설명된대로 Red Hat Quay를 사용하여 미러링된 저장소를 설정합니다. Red Hat Quay를 사용하면 한 저장소에서 다른 저장소로 이미지를 복사하고 시간이 지남에 따라 해당 저장소를 반복해서 자동으로 동기화할 수 있습니다.
skopeo
와 같은 툴을 사용하여 소스 디렉토리에서 미러링된 저장소로 이미지를 수동으로 복사합니다.예를 들어, Red Hat Enterprise Linux(RHEL) 7 또는 RHEL 8 시스템에 skopeo RPM 패키지를 설치한 후 다음 예와 같이
skopeo
명령을 사용합니다.$ skopeo copy \ docker://registry.access.redhat.com/ubi8/ubi-minimal@sha256:5cfbaf45ca96806917830c183e9f37df2e913b187adb32e89fd83fa455ebaa6 \ docker://example.io/example/ubi-minimal
이 예제에는
example.io
라는 컨테이너 이미지 레지스트리가 있으며,registry.access.redhat.com
에서ubi8/ubi-minimal
이미지를 복사할example
이라는 이미지 저장소가 있습니다. 레지스트리를 생성한 후 OpenShift Container Platform 클러스터를 설정하여 소스 저장소의 요청을 미러링된 저장소로 리디렉션할 수 있습니다.
- OpenShift Container Platform 클러스터에 로그인합니다.
ImageContentSourcePolicy
파일(예:registryrepomirror.yaml
)을 생성하고 소스 및 미러를 특정 레지스트리 및 저장소 쌍과 이미지로 교체합니다.apiVersion: operator.openshift.io/v1alpha1 kind: ImageContentSourcePolicy metadata: name: ubi8repo spec: repositoryDigestMirrors: - mirrors: - example.io/example/ubi-minimal 1 source: registry.access.redhat.com/ubi8/ubi-minimal 2 - mirrors: - example.com/example/ubi-minimal source: registry.access.redhat.com/ubi8/ubi-minimal - mirrors: - mirror.example.com/redhat source: registry.redhat.io/openshift4 3
새
ImageContentSourcePolicy
개체를 생성합니다.$ oc create -f registryrepomirror.yaml
ImageContentSourcePolicy
개체가 생성된 후 새 설정이 각 노드에 배포된 클러스터는 소스 저장소에 대한 요청에 미러링된 저장소를 사용하기 시작합니다.미러링된 설정이 적용되었는지 확인하려면 노드 중 하나에서 다음을 수행하십시오.
노드를 나열합니다.
$ oc get node
출력 예
NAME STATUS ROLES AGE VERSION ip-10-0-137-44.ec2.internal Ready worker 7m v1.21.0 ip-10-0-138-148.ec2.internal Ready master 11m v1.21.0 ip-10-0-139-122.ec2.internal Ready master 11m v1.21.0 ip-10-0-147-35.ec2.internal Ready,SchedulingDisabled worker 7m v1.21.0 ip-10-0-153-12.ec2.internal Ready worker 7m v1.21.0 ip-10-0-154-10.ec2.internal Ready master 11m v1.21.0
변경 사항이 적용되어 있기 때문에 각 작업자 노드의 예약이 비활성화되어 있음을 알 수 있습니다.
디버깅 프로세스를 시작하고 노드에 액세스합니다.
$ oc debug node/ip-10-0-147-35.ec2.internal
출력 예
Starting pod/ip-10-0-147-35ec2internal-debug ... To use host binaries, run `chroot /host`
루트 디렉토리를
/host
로 변경합니다.sh-4.2# chroot /host
/etc/containers/registries.conf
파일을 체크하여 변경 사항이 적용되었는지 확인합니다.sh-4.2# cat /etc/containers/registries.conf
출력 예
unqualified-search-registries = ["registry.access.redhat.com", "docker.io"] [[registry]] location = "registry.access.redhat.com/ubi8/" insecure = false blocked = false mirror-by-digest-only = true prefix = "" [[registry.mirror]] location = "example.io/example/ubi8-minimal" insecure = false [[registry.mirror]] location = "example.com/example/ubi8-minimal" insecure = false
소스의 이미지 다이제스트를 노드로 가져와 실제로 미러링에 의해 해결되는지 확인합니다.
ImageContentSourcePolicy
개체는 이미지 태그가 아닌 이미지 다이제스트만 지원합니다.sh-4.2# podman pull --log-level=debug registry.access.redhat.com/ubi8/ubi-minimal@sha256:5cfbaf45ca96806917830c183e9f37df2e913b187adb32e89fd83fa455ebaa6
저장소 미러링 문제 해결
저장소 미러링 절차가 설명대로 작동하지 않는 경우 저장소 미러링 작동 방법에 대한 다음 정보를 사용하여 문제를 해결하십시오.
- 가져온 이미지는 첫 번째 작동 미러를 사용하여 공급합니다.
- 주요 레지스트리는 다른 미러가 작동하지 않는 경우에만 사용됩니다.
-
시스템 컨텍스트에서
Insecure
플래그가 폴백으로 사용됩니다. -
/etc/containers/registries.conf
파일 형식이 최근에 변경되었습니다. 현재 버전은 TOML 형식의 버전 2입니다.
9.4.4. 클러스터 노드 재부팅 빈도를 줄이기 위해 미러 이미지 카탈로그의 범위 확장
미러링된 이미지 카탈로그의 범위를 저장소 수준 또는 더 넓은 레지스트리 수준에서 지정할 수 있습니다. 광범위한 ImageContentSourcePolicy
리소스는 리소스 변경에 따라 노드를 재부팅해야 하는 횟수를 줄입니다.
ImageContentSourcePolicy
리소스에서 미러 이미지 카탈로그의 범위를 확장하려면 다음 절차를 수행합니다.
전제 조건
-
OpenShift Container Platform CLI
oc
를 설치합니다. -
cluster-admin
권한이 있는 사용자로 로그인합니다. - 연결이 끊긴 클러스터에서 사용할 미러링된 이미지 카탈로그를 구성합니다.
절차
<local_registry>
,<pull_spec>
, 및<pull_secret_file>
에 대한 값을 지정하여 다음 명령을 실행합니다.$ oc adm catalog mirror <local_registry>/<pull_spec> <local_registry> -a <pull_secret_file> --icsp-scope=registry
다음과 같습니다.
- <local_registry>
-
연결이 끊긴 클러스터에 대해 구성한 로컬 레지스트리입니다 (예:
local.registry:5000
). - <pull_spec>
-
연결이 끊긴 레지스트리에 구성된 풀 사양입니다(예:
redhat/redhat-operator-index:v4.8
). - <pull_secret_file>
-
은
.json
파일 형식의registry.redhat.io
풀 시크릿입니다. Red Hat OpenShift Cluster Manager에서 풀 시크릿을 다운로드할 수 있습니다.
oc adm catalog mirror
명령은/redhat-operator-index-manifests
디렉터리를 생성하고imageContentSourcePolicy.yaml
,catalogSource.yaml
및mapping.txt
파일을 생성합니다.새
ImageContentSourcePolicy
리소스를 클러스터에 적용합니다.$ oc apply -f imageContentSourcePolicy.yaml
검증
oc apply
가ImageContentSourcePolicy
에 변경 사항을 성공적으로 적용했는지 확인합니다.$ oc get ImageContentSourcePolicy -o yaml
출력 예
apiVersion: v1 items: - apiVersion: operator.openshift.io/v1alpha1 kind: ImageContentSourcePolicy metadata: annotations: kubectl.kubernetes.io/last-applied-configuration: | {"apiVersion":"operator.openshift.io/v1alpha1","kind":"ImageContentSourcePolicy","metadata":{"annotations":{},"name":"redhat-operator-index"},"spec":{"repositoryDigestMirrors":[{"mirrors":["local.registry:5000"],"source":"registry.redhat.io"}]}} ...
ImageContentSourcePolicy
리소스를 업데이트한 후 OpenShift Container Platform은 새 설정을 각 노드에 배포하고 클러스터는 소스 저장소에 대한 요청에 미러링된 저장소를 사용하기 시작합니다.