1장. 애플리케이션 관리
다음 주제를 검토하여 애플리케이션 생성, 배포 및 관리에 대해 자세히 알아보십시오. 이 가이드에서는 Kubernetes 개념 및 용어에 대해 잘 알고 있다고 가정합니다. 주요 Kubernetes 용어 및 구성 요소는 정의되지 않습니다. Kubernetes 개념에 대한 자세한 내용은 Kubernetes 설명서를 참조하십시오.
애플리케이션 관리 기능을 사용하면 애플리케이션 및 애플리케이션 업데이트를 구성하고 배포하기 위한 통합적이고 단순화된 옵션을 사용할 수 있습니다. 이러한 기능을 통해 개발자와 DevOps 직원은 채널 및 서브스크립션 기반 자동화를 통해 환경 전반에서 애플리케이션을 생성하고 관리할 수 있습니다.
중요: 애플리케이션 이름은 37자를 초과할 수 없습니다.
다음 항목을 참조하십시오.
1.1. 애플리케이션 모델 및 정의
애플리케이션 모델은 관리 클러스터에 배포된 리소스가 포함된 하나 이상의 Kubernetes 리소스 리포지토리(채널 리소스)에 가입하는 것을 기반으로 합니다. 단일 클러스터 애플리케이션과 다중 클러스터 애플리케이션 모두 동일한 Kubernetes 사양을 사용하지만 다중 클러스터 애플리케이션은 배포 및 애플리케이션 관리 라이프사이클을 더욱 자동화해야 합니다.
애플리케이션 모델에 대한 자세한 내용은 다음 이미지를 참조하십시오.
다음 애플리케이션 리소스 섹션을 확인합니다.
모범 사례: 채널 및 서브스크립션 모델 대신 GitOps Operator 또는 Argo CD 통합을 사용합니다. GitOps 개요 에서 자세히 알아보십시오.
1.1.1. 애플리케이션
Red Hat Advanced Cluster Management for Kubernetes의 애플리케이션(application.app.k8s.io
)은 애플리케이션을 구성하는 Kubernetes 리소스를 그룹화하는 데 사용됩니다.
Kubernetes 애플리케이션용 Red Hat Advanced Cluster Management의 모든 애플리케이션 구성 요소 리소스는 YAML 파일 사양 섹션에 정의되어 있습니다. 애플리케이션 구성 요소 리소스를 생성하거나 업데이트해야 하는 경우 리소스를 정의하는 레이블을 포함하도록 적절한 섹션을 생성하거나 편집해야 합니다.
OpenShift Container Platform GitOps 또는 클러스터에 설치된 Argo CD Operator에서 검색한 애플리케이션인 Discovered 애플리케이션에서도 작업할 수 있습니다. 동일한 리포지토리를 공유하는 애플리케이션은 이 보기에서 함께 그룹화됩니다.
1.1.2. 서브스크립션
서브스크립션(subscription.apps.open-cluster-management.io
)을 사용하면 클러스터에서 Git 리포지토리, Helm 릴리스 레지스트리 또는 오브젝트 스토리지 리포지토리의 유형일 수 있는 소스 리포지토리(채널)를 구독할 수 있습니다.
허브 클러스터가 자체 관리인 경우 서브스크립션을 통해 허브 클러스터에 로컬로 애플리케이션 리소스를 배포할 수 있습니다. 그런 다음 토폴로지에서 로컬 클러스터
(자체 관리 허브 클러스터) 서브스크립션을 볼 수 있습니다. 리소스 요구 사항은 허브 클러스터 성능에 부정적인 영향을 미칠 수 있습니다.
서브스크립션은 새 리소스 또는 업데이트된 리소스 템플릿을 식별하기 위해 채널 또는 스토리지 위치를 가리킬 수 있습니다. 그런 다음 서브스크립션 Operator는 스토리지 위치에서 직접 다운로드하고 허브 클러스터를 먼저 확인하지 않고 대상 관리 클러스터에 배포할 수 있습니다. 서브스크립션을 통해 서브스크립션 Operator는 허브 클러스터 대신 새 리소스 또는 업데이트된 리소스에 대한 채널을 모니터링할 수 있습니다.
다음 서브스크립션 아키텍처 이미지를 참조하십시오.
1.1.2.1. 채널
채널(channel.apps.open-cluster-management.io
)은 클러스터가 서브스크립션으로 구독할 수 있는 소스 리포지토리를 정의하고 허브 클러스터의 Git, Helm 릴리스 및 오브젝트 스토리지 리포지토리 및 리소스 템플릿일 수 있습니다.
권한이 부여된 Git 리포지토리와 같이 권한이 필요한 채널에서 Kubernetes 리소스 또는 Helm 차트가 필요한 애플리케이션이 있는 경우 보안을 사용하여 이러한 채널에 대한 액세스를 제공할 수 있습니다. 서브스크립션은 데이터 보안을 유지하면서 이러한 채널에서 배포하기 위해 Kubernetes 리소스 및 Helm 차트에 액세스할 수 있습니다.
채널은 허브 클러스터 내에서 네임스페이스를 사용하고 배포를 위해 리소스가 저장되는 물리적 위치를 가리킵니다. 클러스터는 채널을 구독하여 각 클러스터에 배포할 리소스를 식별할 수 있습니다.
참고: 고유 네임스페이스에 각 채널을 생성하는 것이 좋습니다. 그러나 Git 채널에서는 Git, Helm, 오브젝트 스토리지를 포함한 다른 유형의 채널과 네임스페이스를 공유할 수 있습니다.
채널 내의 리소스에는 해당 채널을 구독하는 클러스터만 액세스할 수 있습니다.
1.1.2.1.1. 지원되는 Git 리포지토리 서버
- GitHub
- GitLab
- Bitbucket
- Gogs
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 인스턴스를 통해 클러스터에 설치되고 cluster-administrator 중심 시나리오의 지원에 추가 기능을 추가하여 보완합니다. ApplicationSet
컨트롤러는 다음 기능을 제공합니다.
- 단일 Kubernetes 매니페스트를 사용하여 GitOps Operator를 사용하여 여러 Kubernetes 클러스터를 대상으로 하는 기능입니다.
- 단일 Kubernetes 매니페스트를 사용하여 GitOps Operator가 있는 하나 이상의 Git 리포지토리에서 여러 애플리케이션을 배포하는 기능
- Argo CD의 컨텍스트에 있는 monorepo에 대한 지원 개선, 단일 Git 리포지토리에 정의된 여러 Argo CD 애플리케이션 리소스입니다.
- 다중 테넌트 클러스터 내에서 개별 클러스터 테넌트가 대상 클러스터/네임스페이스를 활성화하는 데 권한 있는 클러스터 관리자를 사용하지 않고도 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 sources: [ { 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
ApplicationSets
에 대한 자세한 내용은 Cluster Decision Resource Generator 를 참조하십시오.
1.1.4. 애플리케이션 문서
다음 문서에서 자세히 알아보십시오.