13.3. OpenShift Update Service를 사용하여 연결이 끊긴 환경에서 클러스터 업데이트
연결된 클러스터와 유사한 업데이트 환경을 얻으려면 다음 절차를 사용하여 연결이 끊긴 환경에서 OSUS(OpenShift Update Service)를 설치 및 구성할 수 있습니다.
다음 단계에서는 OSUS를 사용하여 연결이 끊긴 환경에서 클러스터를 업데이트하는 방법에 대한 고급 워크플로를 간략하게 설명합니다.
- 보안 레지스트리에 대한 액세스를 구성합니다.
- 미러 레지스트리에 액세스하려면 글로벌 클러스터 풀 시크릿을 업데이트합니다.
- OSUS Operator를 설치합니다.
- OpenShift Update Service의 그래프 데이터 컨테이너 이미지를 생성합니다.
- OSUS 애플리케이션을 설치하고 로컬 OpenShift Update Service를 사용하도록 클러스터를 구성합니다.
- 연결된 클러스터와 마찬가지로 문서에서 지원되는 업데이트 프로세스를 수행합니다.
13.3.1. 연결이 끊긴 환경에서 OpenShift Update Service 사용
OSUS(OpenShift Update Service)는 OpenShift Container Platform 클러스터에 대한 업데이트 권장 사항을 제공합니다. Red Hat은 OpenShift Update Service를 공개적으로 호스팅하고 연결된 환경의 클러스터는 공용 API를 통해 서비스에 연결하여 업데이트 권장 사항을 검색할 수 있습니다.
그러나 연결이 끊긴 환경의 클러스터는 업데이트 정보를 검색하기 위해 이러한 공용 API에 액세스할 수 없습니다. 연결이 끊긴 환경에서 유사한 업데이트 환경을 제공하기 위해 로컬에서 OpenShift 업데이트 서비스를 설치하고 구성하여 연결이 끊긴 환경에서 사용할 수 있도록 할 수 있습니다.
단일 OSUS 인스턴스는 수천 개의 클러스터에 권장 사항을 제공할 수 있습니다. OSUS는 복제본 값을 변경하여 더 많은 클러스터를 수용하도록 수평으로 확장할 수 있습니다. 따라서 대부분의 연결이 끊긴 사용 사례의 경우 하나의 OSUS 인스턴스만으로도 충분합니다. 예를 들어, Red Hat은 연결된 클러스터의 전체 플릿에 대해 하나의 OSUS 인스턴스를 호스팅합니다.
다른 환경에서 업데이트 권장 사항을 별도로 유지하려면 각 환경에 대해 하나의 OSUS 인스턴스를 실행할 수 있습니다. 예를 들어 별도의 테스트 및 스테이징 환경이 있는 경우 스테이지 환경의 클러스터가 테스트 환경에서 테스트 환경에서 테스트되지 않은 경우 버전 A에 대한 업데이트 권장 사항을 수신하지 않도록 할 수 있습니다.
다음 섹션에서는 로컬 OSUS 인스턴스를 설치하고 클러스터에 업데이트 권장 사항을 제공하도록 구성하는 방법을 설명합니다.
13.3.2. 사전 요구 사항
-
oc
명령 줄 인터페이스 (CLI) 툴이 설치되어 있어야합니다. - OpenShift Container Platform 이미지 리포지토리 미러링에 설명된 대로 업데이트용 컨테이너 이미지로 로컬 컨테이너 이미지 레지스트리를 프로비저닝해야 합니다.
13.3.3. OpenShift Update Service의 보안 레지스트리에 대한 액세스 구성
릴리스 이미지가 사용자 정의 인증 기관에서 HTTPS X.509 인증서를 서명한 레지스트리에 포함된 경우 업데이트 서비스에 대한 다음 변경과 함께 이미지 레지스트리 액세스를 위한 추가 신뢰 저장소 구성 단계를 완료합니다.
OpenShift Update Service Operator는 레지스트리 CA 인증서에 구성 맵 키 이름 updateservice-registry
가 필요합니다.
업데이트 서비스에 대한 이미지 레지스트리 CA 구성 맵의 예
apiVersion: v1 kind: ConfigMap metadata: name: my-registry-ca data: updateservice-registry: | 1 -----BEGIN CERTIFICATE----- ... -----END CERTIFICATE----- registry-with-port.example.com..5000: | 2 -----BEGIN CERTIFICATE----- ... -----END CERTIFICATE-----
13.3.4. 글로벌 클러스터 풀 시크릿 업데이트
현재 풀 시크릿을 교체하거나 새 풀 시크릿을 추가하여 클러스터의 글로벌 풀 시크릿을 업데이트할 수 있습니다.
사용자가 설치하는 동안 사용된 레지스트리보다 이미지를 저장하기 위해 별도의 레지스트리를 사용하는 경우 절차가 필요합니다.
사전 요구 사항
-
cluster-admin
역할의 사용자로 클러스터에 액세스할 수 있어야 합니다.
프로세스
선택 사항: 기존 풀 시크릿에 새 풀 시크릿을 추가하려면 다음 단계를 완료합니다.
다음 명령을 입력하여 풀 시크릿을 다운로드합니다.
$ oc get secret/pull-secret -n openshift-config --template='{{index .data ".dockerconfigjson" | base64decode}}' ><pull_secret_location> 1
- 1
- 풀 시크릿 파일에 경로를 제공합니다.
다음 명령을 입력하여 새 풀 시크릿을 추가합니다.
$ oc registry login --registry="<registry>" \ 1 --auth-basic="<username>:<password>" \ 2 --to=<pull_secret_location> 3
또는 가져오기 시크릿 파일에 대한 수동 업데이트를 수행할 수 있습니다.
다음 명령을 입력하여 클러스터의 글로벌 풀 시크릿을 업데이트합니다.
$ oc set data secret/pull-secret -n openshift-config --from-file=.dockerconfigjson=<pull_secret_location> 1
- 1
- 새 풀 시크릿 파일의 경로를 제공합니다.
이 업데이트는 모든 노드로 롤아웃되며 클러스터 크기에 따라 작업에 약간의 시간이 걸릴 수 있습니다.
참고OpenShift Container Platform 4.7.4부터 글로벌 풀 시크릿을 변경해도 더 이상 노드 드레이닝 또는 재부팅이 트리거되지 않습니다.
13.3.5. OpenShift Update Service Operator 설치
OpenShift Update Service를 설치하려면 먼저 OpenShift Container Platform 웹 콘솔 또는 CLI를 사용하여 OpenShift Update Service Operator를 설치해야 합니다.
연결이 끊긴 환경(연결이 끊긴 클러스터)에 설치된 클러스터의 경우 Operator Lifecycle Manager는 기본적으로 원격 레지스트리에서 호스팅되는 Red Hat 제공 OperatorHub 소스에 액세스할 수 없습니다. 이러한 원격 소스에는 완전한 인터넷 연결이 필요하기 때문입니다. 자세한 내용은 제한된 네트워크에서 Operator Lifecycle Manager 사용을 참조하십시오.
13.3.5.1. 웹 콘솔을 사용하여 OpenShift Update Service Operator 설치
웹 콘솔을 사용하여 OpenShift Update Service Operator를 설치할 수 있습니다.
프로세스
웹 콘솔에서 Operator
OperatorHub를 클릭합니다. 참고Update Service
를 키워드로 필터링… 필드에 입력하여 Operator를 더 빠르게 찾습니다.사용 가능한 Operator 목록에서 OpenShift Update Service를 선택한 다음 설치를 클릭합니다.
-
채널
v1
은 이 릴리스에서 사용할 수 있는 유일한 채널이므로 업데이트 채널로 선택됩니다. - 설치 모드에서 클러스터의 특정 네임스페이스를 선택합니다.
-
설치된 네임스페이스의 네임스페이스를 선택하거나 권장 네임스페이스
openshift-update-service
를 수락합니다. 승인 전략을 선택합니다.
- 자동 전략을 사용하면 Operator 새 버전이 준비될 때 OLM(Operator Lifecycle Manager)이 자동으로 Operator를 업데이트할 수 있습니다.
- 수동 전략을 사용하려면 클러스터 관리자가 Operator 업데이트를 승인해야 합니다.
- 설치를 클릭합니다.
-
채널
-
Operator
Installed Operator 페이지로 전환하여 OpenShift Update Service Operator가 설치되었는지 확인합니다. - OpenShift Update Service가 선택한 네임스페이스에 성공 상태로 나열되어 있는지 확인합니다.
13.3.5.2. CLI를 사용하여 OpenShift Update Service Operator 설치
OpenShift CLI(oc
)를 사용하여 OpenShift Update Service Operator를 설치할 수 있습니다.
프로세스
OpenShift OpenShift Update Service Operator의 네임스페이스를 생성합니다.
OpenShift Update Service Operator에 대해
Namespace
오브젝트 YAML 파일 (예:update-service-namespace.yaml
)을 만듭니다.apiVersion: v1 kind: Namespace metadata: name: openshift-update-service annotations: openshift.io/node-selector: "" labels: openshift.io/cluster-monitoring: "true" 1
- 1
- 이 네임스페이스에서 Operator가 권장하는 클러스터 모니터링을 사용하도록 하려면
openshift.io/cluster-monitoring
레이블을 설정합니다.
네임스페이스를 생성합니다.
$ oc create -f <filename>.yaml
예를 들면 다음과 같습니다.
$ oc create -f update-service-namespace.yaml
다음 오브젝트를 생성하여 OpenShift Update Service Operator를 설치합니다.
OperatorGroup
오브젝트 YAML 파일을 만듭니다 (예:update-service-operator-group.yaml
).apiVersion: operators.coreos.com/v1 kind: OperatorGroup metadata: name: update-service-operator-group spec: targetNamespaces: - openshift-update-service
OperatorGroup
오브젝트를 생성합니다.$ oc -n openshift-update-service create -f <filename>.yaml
예를 들면 다음과 같습니다.
$ oc -n openshift-update-service create -f update-service-operator-group.yaml
Subscription
오브젝트 YAML 파일(예:update-service-subscription.yaml
)을 생성합니다.서브스크립션의 예
apiVersion: operators.coreos.com/v1alpha1 kind: Subscription metadata: name: update-service-subscription spec: channel: v1 installPlanApproval: "Automatic" source: "redhat-operators" 1 sourceNamespace: "openshift-marketplace" name: "cincinnati-operator"
- 1
- Operator를 제공하는 카탈로그 소스의 이름을 지정합니다. 사용자 정의 OLM(Operator Lifecycle Manager)을 사용하지 않는 클러스터의 경우
redhat-operators
를 지정합니다. OpenShift Container Platform 클러스터가 연결이 끊긴 환경에 설치된 경우 OLM(Operator Lifecycle Manager)을 구성할 때 생성된CatalogSource
오브젝트의 이름을 지정합니다.
Subscription
오브젝트를 생성합니다.$ oc create -f <filename>.yaml
예를 들면 다음과 같습니다.
$ oc -n openshift-update-service create -f update-service-subscription.yaml
OpenShift Update Service Operator는
openshift-update-service
네임스페이스에 설치되고openshift-update-service
네임스페이스를 대상으로 합니다.
Operator 설치를 확인합니다.
$ oc -n openshift-update-service get clusterserviceversions
출력 예
NAME DISPLAY VERSION REPLACES PHASE update-service-operator.v4.6.0 OpenShift Update Service 4.6.0 Succeeded ...
OpenShift Update Service Operator가 나열된 경우 설치에 성공한 것입니다. 버전 번호가 표시된 것과 다를 수 있습니다.
추가 리소스
13.3.6. OpenShift Update Service 그래프 데이터 컨테이너 이미지 생성
OpenShift Update Service에는 그래프 데이터 컨테이너 이미지가 필요합니다. 이 이미지를 통해 OpenShift Update Service에서 채널 멤버십 및 차단된 업데이트 에지에 대한 정보를 검색합니다. 일반적으로 그래프 데이터는 업그레이드 그래프 데이터 리포지토리에서 직접 가져옵니다. 인터넷 연결이 불가능한 환경에서 init 컨테이너에서 이 정보를 로드하는 것도 OpenShift 업데이트 서비스에서 그래프 데이터를 사용할 수 있도록 하는 또 다른 방법입니다. init 컨테이너의 역할은 그래프 데이터의 로컬 사본을 제공하는 것이며 pod 초기화 중에 init 컨테이너가 서비스에서 액세스할 수 있는 볼륨에 데이터를 복사하는 것입니다.
oc-mirror OpenShift CLI(oc
) 플러그인은 릴리스 이미지 미러링 외에도 이 그래프 데이터 컨테이너 이미지를 생성합니다. oc-mirror 플러그인을 사용하여 릴리스 이미지를 미러링한 경우 이 프로세스를 건너뛸 수 있습니다.
프로세스
다음을 포함하는 Dockerfile(예:
./Dockerfile
)을 생성합니다.FROM registry.access.redhat.com/ubi8/ubi:8.1 RUN curl -L -o cincinnati-graph-data.tar.gz https://api.openshift.com/api/upgrades_info/graph-data RUN mkdir -p /var/lib/cincinnati-graph-data && tar xvzf cincinnati-graph-data.tar.gz -C /var/lib/cincinnati-graph-data/ --no-overwrite-dir --no-same-owner CMD ["/bin/bash", "-c" ,"exec cp -rp /var/lib/cincinnati-graph-data/* /var/lib/cincinnati/graph-data"]
위 단계에서 생성된 Docker 파일을 사용하여 그래프 데이터 컨테이너 이미지(예:
registry.example.com/openshift/graph-data:latest
)를 빌드합니다.$ podman build -f ./Dockerfile -t registry.example.com/openshift/graph-data:latest
이전 단계에서 생성된 그래프 데이터 컨테이너 이미지를 OpenShift 업데이트 서비스(예:
registry.example.com/openshift/graph-data:latest
)에 액세스할 수 있는 리포지토리로 내보냅니다.$ podman push registry.example.com/openshift/graph-data:latest
참고그래프 데이터 이미지를 연결이 끊긴 환경의 로컬 레지스트리로 푸시하려면 이전 단계에서 생성한 그래프 데이터 컨테이너 이미지를 OpenShift Update Service에서 액세스할 수 있는 리포지토리로 복사합니다. 사용 가능한 옵션은
oc image mirror --help
를 실행합니다.
13.3.7. OpenShift Update Service 애플리케이션 생성
OpenShift Container Platform 웹 콘솔 또는 CLI를 사용하여 OpenShift Update Service 애플리케이션을 생성할 수 있습니다.
13.3.7.1. 웹 콘솔을 사용하여 OpenShift Update Service 애플리케이션 생성
OpenShift Container Platform 웹 콘솔을 사용하여 OpenShift Update Service Operator를 사용하여 OpenShift Update Service 애플리케이션을 생성할 수 있습니다.
사전 요구 사항
- OpenShift Update Service Operator가 설치되었습니다.
- OpenShift Update Service 그래프 데이터 컨테이너 이미지가 생성되어 OpenShift Update Service에서 액세스할 수 있는 리포지토리로 푸시되었습니다.
- 현재 릴리스 및 업데이트 대상 릴리스는 로컬에 액세스 가능한 레지스트리로 미러링되었습니다.
프로세스
-
웹 콘솔에서 Operator
Installed Operator를 클릭합니다. - 설치된 Operator 목록에서 OpenShift Update Service를 선택합니다.
- Update Service 탭을 클릭합니다.
- Create UpdateService를 클릭합니다.
-
Name 필드에 이름을 입력합니다. (예:
service
) -
Graph Data Image 필드에 "OpenShift Update Service 그래프 데이터 컨테이너 이미지 생성"에서 생성된 그래프 데이터 컨테이너 이미지에 로컬 pullspec을 입력합니다(예:
registry.example.com/openshift/graph-data:latest
). -
Releases 필드에서 "OpenShift Container Platform 이미지 리포지토리 미러링"의 릴리스 이미지를 포함하도록 생성된 로컬 레지스트리 및 리포지토리를 입력합니다(예:
registry.example.com/ocp4/openshift4-release-images
). -
Replicas 필드에
2
를 입력합니다. - Create를 클릭하여 OpenShift Update Service 애플리케이션을 생성합니다.
OpenShift Update Service 애플리케이션 확인
- Update Service 탭의 UpdateServices 목록에서 방금 만든 업데이트 서비스 애플리케이션을 클릭합니다.
- Resources 탭을 클릭합니다.
- 각 애플리케이션 리소스의 상태가 Created인지 확인합니다.
13.3.7.2. CLI를 사용하여 OpenShift Update Service 애플리케이션 생성
OpenShift CLI(oc
)를 사용하여 OpenShift Update Service 애플리케이션을 생성할 수 있습니다.
사전 요구 사항
- OpenShift Update Service Operator가 설치되었습니다.
- OpenShift Update Service 그래프 데이터 컨테이너 이미지가 생성되어 OpenShift Update Service에서 액세스할 수 있는 리포지토리로 푸시되었습니다.
- 현재 릴리스 및 업데이트 대상 릴리스는 로컬에 액세스 가능한 레지스트리로 미러링되었습니다.
프로세스
OpenShift Update Service 대상 네임스페이스를 구성합니다(예:
openshift-update-service
).$ NAMESPACE=openshift-update-service
네임스페이스는 Operator 그룹의
targetNamespaces
값과 일치해야 합니다.OpenShift Update Service 애플리케이션의 이름을 구성합니다(예:
service
).$ NAME=service
"OpenShift Container Platform 이미지 리포지토리 미러링"에 구성된 릴리스 이미지의 로컬 레지스트리 및 리포지토리를 구성합니다(예:
registry.example.com/ocp4/openshift4-release-images
).$ RELEASE_IMAGES=registry.example.com/ocp4/openshift4-release-images
그래프 데이터 이미지의 로컬 pullspec을 "OpenShift Update Service 그래프 데이터 컨테이너 이미지 생성"에서 생성된 그래프 데이터 컨테이너 이미지로 설정합니다(예:
registry.example.com/openshift/graph-data:latest
).$ GRAPH_DATA_IMAGE=registry.example.com/openshift/graph-data:latest
OpenShift Update Service 애플리케이션 오브젝트를 생성합니다.
$ oc -n "${NAMESPACE}" create -f - <<EOF apiVersion: updateservice.operator.openshift.io/v1 kind: UpdateService metadata: name: ${NAME} spec: replicas: 2 releases: ${RELEASE_IMAGES} graphDataImage: ${GRAPH_DATA_IMAGE} EOF
OpenShift Update Service 애플리케이션 확인
다음 명령을 사용하여 정책 엔진 경로를 가져옵니다.
$ while sleep 1; do POLICY_ENGINE_GRAPH_URI="$(oc -n "${NAMESPACE}" get -o jsonpath='{.status.policyEngineURI}/api/upgrades_info/v1/graph{"\n"}' updateservice "${NAME}")"; SCHEME="${POLICY_ENGINE_GRAPH_URI%%:*}"; if test "${SCHEME}" = http -o "${SCHEME}" = https; then break; fi; done
명령이 성공할 때까지 폴링해야 할 수도 있습니다.
정책 엔진에서 그래프를 검색합니다.
channel
에 유효한 버전을 지정해야 합니다. 예를 들어 OpenShift Container Platform 4.12에서 실행하는 경우stable-4.12
를 사용합니다.$ while sleep 10; do HTTP_CODE="$(curl --header Accept:application/json --output /dev/stderr --write-out "%{http_code}" "${POLICY_ENGINE_GRAPH_URI}?channel=stable-4.6")"; if test "${HTTP_CODE}" -eq 200; then break; fi; echo "${HTTP_CODE}"; done
이 경우 그래프 요청이 성공할 때까지 폴링되지만 미러링된 릴리스 이미지에 따라 결과 그래프가 비어 있을 수 있습니다.
정책 엔진 경로 이름은 RFC-1123을 기반으로 63자 이하여야 합니다. host must conform to DNS 1123 naming convention and must be no more than 63 characters
로 인해 CreateRouteFailed
이유와 함께 ReconcileCompleted
상태가 false
인 경우 더 짧은 이름으로 업데이트 서비스를 생성하십시오.
13.3.7.2.1. Cluster Version Operator (CVO) 구성
OpenShift Update Service Operator가 설치되고 OpenShift Update Service 애플리케이션이 생성된 후 로컬에 설치된 OpenShift Update Service에서 그래프 데이터를 가져오도록 CVO(Cluster Version Operator)를 업데이트할 수 있습니다.
사전 요구 사항
- OpenShift Update Service Operator가 설치되었습니다.
- OpenShift Update Service 그래프 데이터 컨테이너 이미지가 생성되어 OpenShift Update Service에서 액세스할 수 있는 리포지토리로 푸시되었습니다.
- 현재 릴리스 및 업데이트 대상 릴리스는 로컬에 액세스 가능한 레지스트리로 미러링되었습니다.
- OpenShift Update Service 애플리케이션이 생성되었습니다.
프로세스
OpenShift Update Service 대상 네임스페이스를 설정합니다(예:
openshift-update-service
).$ NAMESPACE=openshift-update-service
OpenShift Update Service 애플리케이션의 이름을 설정합니다(예:
service
).$ NAME=service
정책 엔진 경로를 가져옵니다.
$ POLICY_ENGINE_GRAPH_URI="$(oc -n "${NAMESPACE}" get -o jsonpath='{.status.policyEngineURI}/api/upgrades_info/v1/graph{"\n"}' updateservice "${NAME}")"
풀 그래프 데이터의 패치를 설정합니다.
$ PATCH="{\"spec\":{\"upstream\":\"${POLICY_ENGINE_GRAPH_URI}\"}}"
CVO를 패치하여 로컬 OpenShift Update Service를 사용합니다.
$ oc patch clusterversion version -p $PATCH --type merge
업데이트 서버 를 신뢰하도록 CA를 구성하려면 클러스터 전체 프록시 활성화를 참조하십시오.
13.3.8. 다음 단계
클러스터를 업데이트하기 전에 다음 조건이 충족되었는지 확인합니다.
- CVO(Cluster Version Operator)는 로컬에서 설치된 OpenShift Update Service 애플리케이션을 사용하도록 구성되어 있습니다.
새 릴리스의 릴리스 이미지 서명 구성 맵이 클러스터에 적용됩니다.
참고릴리스 이미지 서명 구성 맵을 사용하면 CVO(Cluster Version Operator)에서 실제 이미지 서명이 예상 서명과 일치하는지 확인하여 릴리스 이미지의 무결성을 확인할 수 있습니다.
- 현재 릴리스 및 업데이트 대상 릴리스 이미지는 로컬에 액세스할 수 있는 레지스트리로 미러링됩니다.
- 최근 그래프 데이터 컨테이너 이미지가 로컬 레지스트리에 미러링되었습니다.
최신 버전의 OpenShift Update Service Operator가 설치되어 있습니다.
참고OpenShift Update Service Operator를 최근에 설치하거나 업데이트하지 않은 경우 더 최신 버전이 있을 수 있습니다. 연결이 끊긴 환경에서 OLM 카탈로그를 업데이트하는 방법에 대한 자세한 내용은 제한된 네트워크에서 Operator Lifecycle Manager 사용을 참조하십시오.
로컬에서 설치한 OpenShift Update Service 및 로컬 미러 레지스트리를 사용하도록 클러스터를 구성한 후 다음 업데이트 방법을 사용할 수 있습니다.