1장. 애플리케이션 관리
다음 주제를 검토하여 애플리케이션 생성, 배포 및 관리에 대해 자세히 알아보십시오. 이 가이드에서는 Kubernetes 개념 및 용어에 대해 숙지하고 있습니다. 주요 Kubernetes 용어 및 구성 요소는 정의되지 않습니다. Kubernetes 개념에 대한 자세한 내용은 Kubernetes 설명서를 참조하십시오.
애플리케이션 관리 기능은 애플리케이션 및 애플리케이션 업데이트를 구성하고 배포하기 위한 통합 및 단순화 옵션을 제공합니다. 이러한 기능을 통해 개발자와 DevOps 인력은 채널 및 서브스크립션 기반 자동화를 통해 환경 전반에 걸쳐 애플리케이션을 생성하고 관리할 수 있습니다.
중요: 애플리케이션 이름은 37자를 초과할 수 없습니다.
다음 주제를 참조하십시오.
- 애플리케이션 모델 및 정의
- 애플리케이션 콘솔
- 서브스크립션 보고서
- 애플리케이션 리소스 관리
- Git 리포지토리를 사용하여 앱 관리
- Helm 리포지터리를 사용하여 앱 관리
- 오브젝트 스토리지 리포지토리를 사용하여 앱 관리
- 애플리케이션 고급 구성
- Git 리소스 구독
- 서브스크립션 관리자 권한 부여
- 서브스크립션 관리자로 허용 및 거부 목록 생성
- 조정 옵션 추가
- 보안 Git 연결에 대한 애플리케이션 채널 및 서브스크립션 구성
- Ansible Tower 작업 설정
- 관리형 클러스터에서 GitOps 구성
- 배포 예약
- 패키지 덮어쓰기 구성
- 채널 샘플
- 서브스크립션 샘플
- 배치 규칙 샘플
- 애플리케이션 샘플
1.1. 애플리케이션 모델 및 정의
애플리케이션 모델은 관리 클러스터에 배포된 리소스가 포함된 하나 이상의 Kubernetes 리소스 리포지토리(채널 리소스)에 가입하는 것을 기반으로 합니다. 단일 클러스터 애플리케이션 및 다중 클러스터 애플리케이션 모두 동일한 Kubernetes 사양을 사용하지만 멀티 클러스터 애플리케이션은 배포 및 애플리케이션 관리 라이프사이클의 자동화가 향상됩니다.
애플리케이션 모델에 대한 자세한 내용은 다음 이미지를 참조하십시오.
다음 애플리케이션 리소스 섹션을 확인합니다.
1.1.1. 애플리케이션
Kubernetes용 Red Hat Advanced Cluster Management의 애플리케이션(application.app.k8s.io
)은 애플리케이션을 구성하는 Kubernetes 리소스를 그룹화하는 데 사용됩니다.
Kubernetes 애플리케이션용 Red Hat Advanced Cluster Management의 모든 애플리케이션 구성 요소 리소스는 YAML 파일 사양 섹션에서 정의합니다. 애플리케이션 구성 요소 리소스를 생성하거나 업데이트해야 하는 경우 리소스를 정의하는 레이블을 포함하도록 적절한 섹션을 생성하거나 편집해야 합니다.
검색된 애플리케이션(OpenShift Container Platform GitOps에서 검색한 애플리케이션 또는 클러스터에 설치된 Argo CD Operator)을 사용할 수도 있습니다. 동일한 리포지토리를 공유하는 애플리케이션은 이 보기에서 함께 그룹화됩니다.
1.1.2. 서브스크립션
서브스크립션(subscription.apps.open-cluster-management.io
)을 사용하면 클러스터에서 Git 리포지토리, Helm 릴리스 레지스트리 또는 오브젝트 스토리지 리포지토리의 유형일 수 있는 소스 리포지토리(채널)를 구독할 수 있습니다.
참고: 리소스가 hub 클러스터에 영향을 미칠 수 있으므로 hub 클러스터를 자체적으로 관리하는 것은 권장되지 않습니다.
허브 클러스터가 자체 관리되는 경우 서브스크립션을 통해 hub 클러스터에 애플리케이션 리소스를 로컬로 배포할 수 있습니다. 그런 다음 토폴로지에서 로컬 클러스터
(자체 관리 허브 클러스터) 서브스크립션을 볼 수 있습니다. 리소스 요구 사항은 허브 클러스터 성능에 부정적인 영향을 미칠 수 있습니다.
서브스크립션은 새 리소스 템플릿 또는 업데이트된 리소스 템플릿을 식별하기 위한 채널 또는 스토리지 위치를 가리킬 수 있습니다. 서브스크립션 운영자는 스토리지 위치에서 직접 다운로드하여 허브 클러스터를 먼저 확인하지 않고도 대상 관리 클러스터에 배포할 수 있습니다. 서브스크립션을 통해 서브스크립션 운영자는 hub 클러스터 대신 새 리소스 또는 업데이트된 리소스에 대한 채널을 모니터링할 수 있습니다.
다음 서브스크립션 아키텍처 이미지를 참조하십시오.
1.1.2.1. 채널
채널(channel.apps.open-cluster-management.io
)은 클러스터가 서브스크립션으로 구독할 수 있는 소스 리포지토리를 정의하고 hub 클러스터에서 Git, Helm 릴리스, 오브젝트 스토리지 리포지토리 및 리소스 템플릿과 같은 유형일 수 있습니다.
권한이 필요한 채널에 Kubernetes 리소스 또는 Helm 차트가 필요한 애플리케이션이 있는 경우(예: 권한이 부여된 Git 리포지토리) 보안을 사용하여 이러한 채널에 대한 액세스 권한을 제공할 수 있습니다. 서브스크립션은 데이터 보안을 유지하면서 이러한 채널에서 배포하기 위해 Kubernetes 리소스 및 Helm 차트에 액세스할 수 있습니다.
채널은 hub 클러스터 내의 네임스페이스를 사용하여 배포를 위해 리소스가 저장된 물리적 위치를 가리킵니다. 클러스터는 채널을 구독하여 각 클러스터에 배포할 리소스를 식별할 수 있습니다.
참고: 고유한 네임스페이스에 각 채널을 생성하는 것이 좋습니다. 그러나 Git 채널에서는 Git, Helm, 오브젝트 스토리지를 포함하여 다른 유형의 채널과 네임스페이스를 공유할 수 있습니다.
채널 내의 리소스는 해당 채널을 구독하는 클러스터에서만 액세스할 수 있습니다.
1.1.2.1.1. 지원되는 Git 리포지토리 서버
- GitHub
- GitLab
- Bitbucket
- Gogs
1.1.2.2. 배치 규칙
배치 규칙(placementrule.apps.open-cluster-management.io
)은 리소스 템플릿을 배포할 수 있는 대상 클러스터를 정의합니다. 배치 규칙을 사용하면 배포 가능한 다중 클러스터를 쉽게 배포할 수 있습니다. 배치 규칙은 거버넌스 및 위험 정책에도 사용됩니다. 방법에 대한 자세한 내용은 Governance 를 참조하십시오.
1.1.3. ApplicationSet
ApplicationSet
은 GitOps Operator에서 지원하는 Argo CD의 하위 프로젝트입니다. ApplicationSet
은 Argo CD 애플리케이션에 대한 다중 클러스터 지원을 추가합니다. Red Hat Advanced Cluster Management 콘솔에서 애플리케이션 세트를 생성할 수 있습니다.
참고: ApplicationSet
을 배포하기 위한 사전 요구 사항에 대한 자세한 내용은 GitOps에 관리 클러스터 등록을 참조하십시오.
OpenShift Container Platform GitOps는 Argo CD를 사용하여 클러스터 리소스를 유지 관리합니다. Argo CD는 애플리케이션의 CI/CD(연속 통합 및 연속 배포)에 사용되는 오픈 소스 선언 도구입니다. OpenShift Container Platform GitOps는 Argo CD를 컨트롤러(OpenShift Container Platform GitOps Operator)로 구현하므로 Git 리포지토리에 정의된 애플리케이션 정의 및 구성을 지속적으로 모니터링합니다. 그러면 Argo CD에서 이러한 구성의 지정된 상태를 클러스터의 라이브 상태와 비교합니다.
ApplicationSet
컨트롤러는 GitOps Operator 인스턴스를 통해 클러스터에 설치되고 클러스터 관리자 중심 시나리오 지원에서 추가 기능을 추가하여 보완합니다. ApplicationSet
컨트롤러는 다음 기능을 제공합니다.
- 단일 Kubernetes 매니페스트를 사용하여 GitOps Operator가 있는 여러 Kubernetes 클러스터를 대상으로 하는 기능입니다.
- 단일 Kubernetes 매니페스트를 사용하여 GitOps Operator가 있는 하나 또는 여러 Git 리포지토리에서 여러 애플리케이션을 배포하는 기능
- Argo CD의 컨텍스트에서 단일 Git 리포지토리에 정의된 여러 Argo CD 애플리케이션 리소스인 monorepo에 대한 지원 개선
- 다중 테넌트 클러스터에서 권한 있는 클러스터 관리자를 활성화할 필요 없이 개별 클러스터 테넌트가 Argo CD를 사용하여 애플리케이션을 배포할 수 있는 기능이 향상되었습니다.
ApplicationSet
Operator는 클러스터 의사 결정 생성기를 활용하여 사용자 정의 리소스별 논리를 사용하는 Kubernetes 사용자 정의 리소스를 사용하여 배포할 관리 클러스터를 결정합니다. 클러스터 결정 리소스는 관리 클러스터 목록을 생성한 후 ApplicationSet
리소스의 템플릿 필드로 렌더링됩니다. 이 작업은 참조된 Kubernetes 리소스의 전체 형태를 알 필요가 없는 duck-typing을 사용하여 수행됩니다.
ApplicationSet
내에서 generators.clusterDecisionResource
값의 다음 예제를 참조하십시오.
apiVersion: argoproj.io/v1alpha1 kind: ApplicationSet metadata: name: sample-application-set namespace: sample-gitops-namespace spec: generators: - clusterDecisionResource: configMapRef: acm-placement labelSelector: matchLabels: cluster.open-cluster-management.io/placement: sample-application-placement requeueAfterSeconds: 180 template: metadata: name: sample-application-{{name}} spec: project: default source: repoURL: https://github.com/sampleapp/apprepo.git targetRevision: main path: sample-application destination: namespace: sample-application server: "{{server}}" syncPolicy: syncOptions: - CreateNamespace=true - PruneLast=true - Replace=true - ApplyOutOfSyncOnly=true - Validate=false automated: prune: true allowEmpty: true selfHeal: true
apiVersion: argoproj.io/v1alpha1
kind: ApplicationSet
metadata:
name: sample-application-set
namespace: sample-gitops-namespace
spec:
generators:
- clusterDecisionResource:
configMapRef: acm-placement
labelSelector:
matchLabels:
cluster.open-cluster-management.io/placement: sample-application-placement
requeueAfterSeconds: 180
template:
metadata:
name: sample-application-{{name}}
spec:
project: default
source:
repoURL: https://github.com/sampleapp/apprepo.git
targetRevision: main
path: sample-application
destination:
namespace: sample-application
server: "{{server}}"
syncPolicy:
syncOptions:
- CreateNamespace=true
- PruneLast=true
- Replace=true
- ApplyOutOfSyncOnly=true
- Validate=false
automated:
prune: true
allowEmpty: true
selfHeal: true
다음 배치를
참조하십시오.
apiVersion: cluster.open-cluster-management.io/v1beta1 kind: Placement metadata: name: sample-application-placement namespace: sample-gitops-namespace spec: clusterSets: - sampleclusterset
apiVersion: cluster.open-cluster-management.io/v1beta1
kind: Placement
metadata:
name: sample-application-placement
namespace: sample-gitops-namespace
spec:
clusterSets:
- sampleclusterset
ApplicationSets
에 대한 자세한 내용은 Cluster Decision Resource Generator 를 참조하십시오.
1.1.4. 애플리케이션 문서
다음 문서에서 자세히 알아보십시오.