2.4.3. Operator Lifecycle Manager 워크플로
이 가이드에서는 OpenShift Container Platform의 OLM(Operator Lifecycle Manager)의 워크플로를 간략하게 설명합니다.
2.4.3.1. OLM의 Operator 설치 및 업그레이드 워크플로
OLM(Operator Lifecycle Manager) 에코시스템에서 다음 리소스를 사용하여 Operator 설치 및 업그레이드를 확인합니다.
-
ClusterServiceVersion
(CSV) -
CatalogSource
-
서브스크립션
CSV에 정의된 Operator 메타데이터는 카탈로그 소스라는 컬렉션에 저장할 수 있습니다. OLM은 Operator Registry API를 사용하는 카탈로그 소스를 통해 사용 가능한 Operator와 설치된 Operator의 업그레이드를 쿼리합니다.
그림 2.3. 카탈로그 소스 개요
Operator는 카탈로그 소스 내에서 패키지와 채널이라는 업데이트 스트림으로 구성되는데, 채널은 웹 브라우저와 같이 연속 릴리스 주기에서 OpenShift Container Platform 또는 기타 소프트웨어에 친숙한 업데이트 패턴이어야 합니다.
그림 2.4. 카탈로그 소스의 패키지 및 채널
사용자는 서브스크립션의 특정 카탈로그 소스에서 특정 패키지 및 채널(예: etcd
패키지 및 해당 alpha
채널)을 나타냅니다. 네임스페이스에 아직 설치되지 않은 패키지에 서브스크립션이 생성되면 해당 패키지의 최신 Operator가 설치됩니다.
OLM에서는 의도적으로 버전을 비교하지 않으므로 지정된 카탈로그
각 CSV에는 교체 대상 Operator를 나타내는 replaces
매개변수가 있습니다. 이 매개변수를 통해 OLM에서 쿼리할 수 있는 CSV 그래프가 빌드되고 업데이트를 채널 간에 공유할 수 있습니다. 채널은 업데이트 그래프의 진입점으로 간주할 수 있습니다.
그림 2.5. 사용 가능한 채널 업데이트의 OLM 그래프
패키지에 포함된 채널의 예
packageName: example channels: - name: alpha currentCSV: example.v0.1.2 - name: beta currentCSV: example.v0.1.3 defaultChannel: alpha
OLM에서 카탈로그 소스, 패키지, 채널, CSV와 관련된 업데이트를 쿼리하려면 카탈로그에서 입력 CSV를 replaces
하는 단일 CSV를 모호하지 않게 결정적으로 반환할 수 있어야 합니다.
2.4.3.1.1. 업그레이드 경로의 예
업그레이드 시나리오 예제에서는 CSV 버전 0.1.1
에 해당하는 Operator가 설치되어 있는 것으로 간주합니다. OLM은 카탈로그 소스를 쿼리하고 구독 채널에서 이전 버전이지만 설치되지 않은 CSV 버전 0.1.2
를 교체하는(결국 설치된 이전 CSV 버전 0.1.1
을 교체함) 새 CSV 버전 0.1.3
이 포함된 업그레이드를 탐지합니다.
OLM은 CSV에 지정된 replaces
필드를 통해 채널 헤드에서 이전 버전으로 돌아가 업그레이드 경로 0.1.3
0.1.2
0.1.1
을 결정합니다. 화살표 방향은 전자가 후자를 대체함을 나타냅니다. OLM은 채널 헤드에 도달할 때까지 Operator 버전을 한 번에 하나씩 업그레이드합니다.
지정된 이 시나리오의 경우 OLM은 Operator 버전 0.1.2
를 설치하여 기존 Operator 버전 0.1.1
을 교체합니다. 그런 다음 Operator 버전 0.1.3
을 설치하여 이전에 설치한 Operator 버전 0.1.2
를 대체합니다. 이 시점에 설치한 Operator 버전 0.1.3
이 채널 헤드와 일치하며 업그레이드가 완료됩니다.
2.4.3.1.2. 업그레이드 건너뛰기
OLM의 기본 업그레이드 경로는 다음과 같습니다.
- 카탈로그 소스는 Operator에 대한 하나 이상의 업데이트로 업데이트됩니다.
- OLM은 카탈로그 소스에 포함된 최신 버전에 도달할 때까지 Operator의 모든 버전을 트래버스합니다.
그러나 경우에 따라 이 작업을 수행하는 것이 안전하지 않을 수 있습니다. 게시된 버전의 Operator가 아직 설치되지 않은 경우 클러스터에 설치해서는 안 되는 경우가 있습니다. 예를 들면 버전에 심각한 취약성이 있기 때문입니다.
이러한 경우 OLM에서는 두 가지 클러스터 상태를 고려하여 다음을 둘 다 지원하는 업데이트 그래프를 제공해야 합니다.
- "잘못"된 중간 Operator가 클러스터에 표시되고 설치되었습니다.
- "잘못된" 중간 Operator가 클러스터에 아직 설치되지 않았습니다.
새 카탈로그를 제공하고 건너뛰기 릴리스를 추가하면 클러스터 상태 및 잘못된 업데이트가 있는지와 관계없이 OLM에서 항상 고유한 단일 업데이트를 가져올 수 있습니다.
릴리스를 건너뛰는 CSV의 예
apiVersion: operators.coreos.com/v1alpha1 kind: ClusterServiceVersion metadata: name: etcdoperator.v0.9.2 namespace: placeholder annotations: spec: displayName: etcd description: Etcd Operator replaces: etcdoperator.v0.9.0 skips: - etcdoperator.v0.9.1
기존 CatalogSource 및 새 CatalogSource의 다음 예제를 고려하십시오.
그림 2.6. 업데이트 건너뛰기
이 그래프에는 다음이 유지됩니다.
- 기존 CatalogSource에 있는 모든 Operator에는 새 CatalogSource에 단일 대체 항목이 있습니다.
- 새 CatalogSource에 있는 모든 Operator에는 새 CatalogSource에 단일 대체 항목이 있습니다.
- 잘못된 업데이트가 아직 설치되지 않은 경우 설치되지 않습니다.
2.4.3.1.3. 여러 Operator 교체
설명된 새 CatalogSource를 생성하려면 하나의 Operator를 replace
하지만 여러 Operator를 건너뛸
수 있는 CSV를 게시해야 합니다. 이 작업은 skipRange
주석을 사용하여 수행할 수 있습니다.
olm.skipRange: <semver_range>
여기서 <semver_range>
에는 semver 라이브러리에서 지원하는 버전 범위 형식이 있습니다.
카탈로그에서 업데이트를 검색할 때 채널 헤드에 skipRange
주석이 있고 현재 설치된 Operator에 범위에 해당하는 버전 필드가 있는 경우 OLM이 채널의 최신 항목으로 업데이트됩니다.
우선순위 순서는 다음과 같습니다.
-
기타 건너뛰기 기준이 충족되는 경우 서브스크립션의
sourceName
에 지정된 소스의 채널 헤드 -
sourceName
에 지정된 소스의 현재 Operator를 대체하는 다음 Operator - 기타 건너뛰기 조건이 충족되는 경우 서브스크립션에 표시되는 다른 소스의 채널 헤드.
- 서브스크립션에 표시되는 모든 소스의 현재 Operator를 대체하는 다음 Operator.
skipRange
가 있는 CSV의 예
apiVersion: operators.coreos.com/v1alpha1 kind: ClusterServiceVersion metadata: name: elasticsearch-operator.v4.1.2 namespace: <namespace> annotations: olm.skipRange: '>=4.1.0 <4.1.2'
2.4.3.1.4. z-stream 지원
마이너 버전이 동일한 경우 z-stream 또는 패치 릴리스로 이전 z-stream 릴리스를 모두 교체해야 합니다. OLM은 메이저, 마이너 또는 패치 버전을 구분하지 않으므로 카탈로그에 올바른 그래프만 빌드해야 합니다.
즉 OLM은 이전 CatalogSource에서와 같이 그래프를 가져올 수 있어야 하고 이전과 유사하게 새 CatalogSource에서와 같이 그래프를 생성할 수 있어야 합니다.
그림 2.7. 여러 Operator 교체
이 그래프에는 다음이 유지됩니다.
- 기존 CatalogSource에 있는 모든 Operator에는 새 CatalogSource에 단일 대체 항목이 있습니다.
- 새 CatalogSource에 있는 모든 Operator에는 새 CatalogSource에 단일 대체 항목이 있습니다.
- 이전 CatalogSource의 모든 z-stream 릴리스가 새 CatalogSource의 최신 z-stream 릴리스로 업데이트됩니다.
- 사용할 수 없는 릴리스는 "가상" 그래프 노드로 간주할 수 있습니다. 해당 콘텐츠가 존재할 필요는 없으며 그래프가 이와 같은 경우 레지스트리에서 응답하기만 하면 됩니다.