1.4. 애플리케이션 리소스 관리
콘솔에서 Git 리포지토리, Helm 리포지토리 및 오브젝트 스토리지 리포지토리를 사용하여 애플리케이션을 생성할 수 있습니다.
중요: Git 채널은 Helm, 오브젝트 스토리지 및 기타 Git 네임스페이스 등 다른 모든 채널 유형과 네임스페이스를 공유할 수 있습니다.
다음 주제를 참조하여 앱 관리를 시작하십시오.
1.4.1. Git 리포지토리를 사용하여 앱 관리
애플리케이션을 사용하여 Kubernetes 리소스를 배포할 때 리소스는 특정 리포지토리에 있습니다. 다음 절차에서 Git 리포지토리에서 리소스를 배포하는 방법을 알아봅니다. 애플리케이션 모델 및 정의에서 애플리케이션 모델에 대해 자세히 알아보십시오.
사용자 액세스 권한: 애플리케이션을 생성할 수 있는 사용자 역할입니다. 역할이 할당된 작업만 수행할 수 있습니다. 역할 기반 액세스 제어 설명서에서 액세스 요구 사항에 대해 알아보십시오.
- 콘솔 탐색 메뉴에서 애플리케이션을 클릭하여 나열된 애플리케이션을 확인하고 새 애플리케이션을 생성합니다.
- 선택 사항: 생성할 애플리케이션 유형을 선택한 후 YAML: On 을 선택하여 애플리케이션을 생성하고 편집할 콘솔에서 YAML을 볼 수 있습니다. 주제의 뒷부분에 있는 YAML 샘플을 참조하십시오.
사용할 수 있는 리포지토리 목록에서 Git 을 선택하고 올바른 필드에 값을 입력합니다. 콘솔의 지침에 따라 입력에 따라 YAML 편집기 값이 변경되는지 확인합니다.
참고:
- 기존 Git 리포지토리 경로를 선택하는 경우 프라이빗 리포지토리인 경우 연결 정보를 지정할 필요가 없습니다. 연결 정보는 사전 설정되어 있으며 이러한 값을 볼 필요가 없습니다.
- 새 Git 리포지토리 경로를 입력하면 선택적으로 개인 Git 리포지토리인 경우 Git 연결 정보를 입력할 수 있습니다.
-
조정 옵션을 확인합니다.
merge
옵션은 기본 선택 사항이며, 이는 새 필드가 추가되고 리소스에서 기존 필드가 업데이트됨을 의미합니다.교체
를 선택할 수 있습니다.replace
옵션으로 기존 리소스가 Git 소스로 교체됩니다. 서브스크립션 조정 비율이낮은
것으로 설정되면 서브스크립션된 애플리케이션 리소스를 조정하는 데 최대 1시간이 걸릴 수 있습니다. 단일 애플리케이션 보기의 카드에서 동기화 를 클릭하여 수동으로 조정합니다.off
로 설정하면 조정되지 않습니다.
-
선택적 사전 배포 및 배포 후 작업을 설정합니다. 구독이 애플리케이션 리소스를 배포하기 전이나 후에 실행할 Ansible Automation Platform 작업이 있는 경우 Ansible Automation Platform 시크릿을 설정합니다. 작업을 정의하는 Ansible Automation Platform 작업은 이 리포지토리의
prehook
및posthook
폴더에 배치해야 합니다. - 콘솔을 사용하여 인증 정보를 추가해야 하는 경우 인증 정보 추가 를 클릭합니다. 콘솔의 지침을 따르십시오. Manage credentials overview에서 자세한 내용을 참조하십시오.
- 생성을 클릭합니다.
- 세부 사항 및 토폴로지를 볼 수 있는 개요 페이지로 리디렉션됩니다.
1.4.1.1. GitOps 패턴
클러스터를 관리하기 위해 Git 리포지토리를 조정하기 위한 모범 사례를 알아보십시오.
1.4.1.1.1. GitOps 예제 디렉터리
이 예제의 폴더는 정의되고 이름이 지정되며, 관리되는 클러스터에서 실행되는 애플리케이션 또는 구성이 포함된 각 폴더가 있습니다.
-
루트 폴더
managed-subscriptions
:공통
관리 폴더를 대상으로 하는 서브스크립션이 포함되어 있습니다. -
하위 폴더
앱/
:managed-clusters
에 배치를 사용하여 공통 관리 -
하위 폴더
config/
:managed-clusters
에 배치를 사용하여 공통 관리 -
하위 폴더
정책/
: 배치와 함께관리 클러스터에
정책을 적용하는 데 사용됩니다. -
folder
root-subscription/
:managed-subscriptions
폴더를 서브스크립션하는 hub 클러스터의 초기 서브스크립션입니다.
디렉터리의 예제를 참조하십시오.
common-managed/ apps/ app-name-0/ app-name-1/ config/ config001/ config002/ managed-subscriptions apps/ config/ policies/ root-subscription/
1.4.1.1.2. GitOps flow
디렉터리 구조는 root-subscription
> managed-subscriptions
> common-managed
용으로 생성됩니다.
-
root-subscription/
의 단일 서브스크립션은 CLI 터미널에서 hub 클러스터로 적용됩니다. 서브스크립션 및 정책은
managed-subscription
폴더의 hub 클러스터에 다운로드하여 적용됩니다.-
그런 다음
managed-subscription
폴더의 서브스크립션 및 정책은 배치에 따라 관리 클러스터에서 작업을 수행합니다. -
placement는 각 서브스크립션 또는 정책에 영향을 미치는
관리 클러스터를
결정합니다. - 서브스크립션 또는 정책은 배치와 일치하는 클러스터에 대한 내용을 정의합니다.
-
그런 다음
-
서브스크립션은
공통 관리
폴더의 내용을 배치 규칙과 일치하는managed-cluster
에 적용합니다. 이는 배치 규칙과 일치하는 모든관리 클러스터에
공통 애플리케이션 및 구성도 적용합니다.
1.4.1.1.3. 더 많은 예
-
root-subscription/
의 예는application-subscribe-all
을 참조하십시오. -
동일한 리포지토리의 다른 폴더를 가리키는 서브스크립션의 예는
subscribe-all
을 참조하십시오. -
nginx-apps
리포지토리에서 애플리케이션 아티팩트가 있는common-managed
폴더의 예를 참조하십시오. - 정책 컬렉션의 정책 예제를 참조하십시오.
1.4.1.2. Git을 사용하여 서브스크립션을 삭제한 후 배포된 리소스 유지
Git 리포지토리를 사용하여 서브스크립션을 생성할 때 서브스크립션을 삭제한 후 do-not-delete
주석을 추가하여 특정 배포된 리소스를 유지할 수 있습니다. do-not-delete
주석은 최상위 배포 리소스에서만 작동합니다. do-not-delete
주석을 추가하려면 다음 단계를 완료합니다.
- 하나 이상의 리소스를 배포하는 서브스크립션을 생성합니다.
서브스크립션을 삭제한 후에도 유지하려는 리소스 또는 리소스에 다음 주석을 추가합니다.
apps.open-cluster-management.io/do-not-delete: 'true'
다음 예제를 참조하십시오.
apiVersion: v1 kind: PersistentVolumeClaim metadata: annotations: apps.open-cluster-management.io/do-not-delete: 'true' apps.open-cluster-management.io/hosting-subscription: sub-ns/subscription-example apps.open-cluster-management.io/reconcile-option: merge pv.kubernetes.io/bind-completed: "yes"
서브스크립션을 삭제한 후에도 다른 리소스가 삭제되는 동안 do-not-delete
주석이 있는 리소스는 계속 존재합니다.
참고: 네임스페이스에 바인드된 do-not-delete
주석을 사용하여 배포된 리소스입니다. 따라서 나머지 리소스를 제거할 때까지 네임스페이스를 삭제할 수 없습니다.
1.4.2. Helm 리포지터리를 사용하여 앱 관리
애플리케이션을 사용하여 Kubernetes 리소스를 배포할 때 리소스는 특정 리포지토리에 있습니다. 다음 절차에서 Helm 리포지터리에서 리소스를 배포하는 방법을 알아봅니다. 애플리케이션 모델 및 정의에서 애플리케이션 모델에 대해 자세히 알아보십시오.
사용자 액세스 권한: 애플리케이션을 생성할 수 있는 사용자 역할입니다. 역할이 할당된 작업만 수행할 수 있습니다. 역할 기반 액세스 제어 설명서에서 액세스 요구 사항에 대해 알아보십시오.
- 콘솔 탐색 메뉴에서 애플리케이션을 클릭하여 나열된 애플리케이션을 확인하고 새 애플리케이션을 생성합니다.
- 선택 사항: 생성할 애플리케이션 유형을 선택한 후 YAML: On 을 선택하여 애플리케이션을 생성하고 편집할 콘솔에서 YAML을 볼 수 있습니다. 주제의 뒷부분에 있는 YAML 샘플을 참조하십시오.
- 사용할 수 있는 리포지토리 목록에서 Helm 을 선택하고 올바른 필드에 값을 입력합니다. 콘솔의 지침에 따라 입력에 따라 YAML 편집기 값이 변경되는지 확인합니다.
- 생성을 클릭합니다.
- 세부 사항 및 토폴로지를 볼 수 있는 개요 페이지로 리디렉션됩니다.
1.4.2.1. YAML 샘플
다음 예제 채널 정의에서는 Helm 리포지터리를 채널로 추상화합니다.
참고: Helm의 경우 Helm 차트에 포함된 모든 Kubernetes 리소스에 레이블 릴리스가 있어야 합니다. 애플리케이션 토폴로지가 올바르게 표시되도록 하려면 {{ .release.Name }}'
입니다.
apiVersion: v1 kind: Namespace metadata: name: hub-repo --- apiVersion: apps.open-cluster-management.io/v1 kind: Channel metadata: name: helm namespace: hub-repo spec: pathname: [https://kubernetes-charts.storage.googleapis.com/] # URL points to a valid chart URL. type: HelmRepo
다음 채널 정의는 Helm 리포지터리 채널의 또 다른 예를 보여줍니다.
apiVersion: apps.open-cluster-management.io/v1 kind: Channel metadata: name: predev-ch namespace: ns-ch labels: app: nginx-app-details spec: type: HelmRepo pathname: https://kubernetes-charts.storage.googleapis.com/
참고: REST API를 보려면 API를 사용합니다.
1.4.2.2. Helm을 사용하여 서브스크립션을 삭제한 후 배포된 리소스 유지
Helm은 서브스크립션을 삭제한 후 특정 배포된 리소스를 유지하기 위한 주석을 제공합니다. 자세한 내용은 Helm Not Uninstall a Resource 를 참조하십시오.
참고: 주석은 Helm 차트에 있어야 합니다.
1.4.3. 오브젝트 스토리지 리포지토리를 사용하여 앱 관리
애플리케이션을 사용하여 Kubernetes 리소스를 배포할 때 리소스는 특정 리포지토리에 있습니다. 애플리케이션 모델 및 정의에서 애플리케이션 모델에 대해 자세히 알아보십시오.
사용자 액세스 권한: 애플리케이션을 생성할 수 있는 사용자 역할입니다. 역할이 할당된 작업만 수행할 수 있습니다. 역할 기반 액세스 제어 설명서에서 액세스 요구 사항에 대해 알아보십시오.
- 콘솔 탐색 메뉴에서 애플리케이션을 클릭하여 나열된 애플리케이션을 확인하고 새 애플리케이션을 생성합니다.
- 선택 사항: 생성할 애플리케이션 유형을 선택한 후 YAML: On 을 선택하여 애플리케이션을 생성하고 편집할 콘솔에서 YAML을 볼 수 있습니다. 주제의 뒷부분에 있는 YAML 샘플을 참조하십시오.
- 사용할 수 있는 리포지토리 목록에서 오브젝트 저장소를 선택하고 올바른 필드에 값을 입력합니다. 콘솔의 지침에 따라 입력에 따라 YAML 편집기 값이 변경되는지 확인합니다.
- 생성을 클릭합니다.
- 세부 사항 및 토폴로지를 볼 수 있는 개요 페이지로 리디렉션됩니다.
1.4.3.1. YAML 샘플
다음 예제 채널 정의는 오브젝트 스토리지를 채널로 추상화합니다.
apiVersion: apps.open-cluster-management.io/v1 kind: Channel metadata: name: dev namespace: ch-obj spec: type: Object storage pathname: [http://sample-ip:#####/dev] # URL is appended with the valid bucket name, which matches the channel name. secretRef: name: miniosecret gates: annotations: dev-ready: true
참고: REST API를 보려면 API를 사용합니다.
1.4.3.2. AWS(Amazon Web Services) S3 오브젝트 스토리지 버킷 생성
서브스크립션을 설정하여 Amazon Simple Storage Service(Amazon S3) 오브젝트 스토리지 서비스에 정의된 리소스를 구독할 수 있습니다. 다음 절차를 참조하십시오.
- AWS 계정, 사용자 이름 및 암호를 사용하여 AWS 콘솔에 로그인합니다.
- Amazon S3 > Buckets 로 이동하여 버킷 홈 페이지로 이동합니다.
- Create Bucket 을 클릭하여 버킷을 생성합니다.
- AWS S3 오브젝트 버킷을 연결하는 데 필요한 AWS 리전 을 선택합니다.
- 버킷 액세스 토큰을 생성합니다.
- 탐색 모음에서 사용자 이름으로 이동한 다음 드롭다운 메뉴에서 My Security Credentials 를 선택합니다.
- AWS IAM 인증 정보 탭에서 CLI, SDK 및 API 액세스에 대한 액세스 키로 이동하고 액세스 키 생성을 클릭합니다.
- 액세스 키 ID 를 저장, 시크릿 액세스 키.
- 오브젝트 YAML 파일을 버킷에 업로드합니다.
1.4.3.3. AWS 버킷의 오브젝트 구독
- 시크릿을 사용하여 오브젝트 버킷 유형 채널을 생성하여 AWS 버킷 연결을 위한 AccessKeyID,SecretAccessKey 및 Region 을 지정합니다. 세 개의 필드는 AWS 버킷이 생성될 때 생성됩니다.
URL을 추가합니다. URL은 URL에 s3
:// 또는
버킷에서 채널을 식별합니다. 예를 들어 다음 버킷 URL의 모든 AWS s3 버킷 식별자를 참조하십시오.s
3 및 aws 키워드가 포함된 경우 AWS S3https://s3.console.aws.amazon.com/s3/buckets/sample-bucket-1 s3://sample-bucket-1/ https://sample-bucket-1.s3.amazonaws.com/
참고: AWS S3 API와 버킷을 연결하는 데 AWS S3 오브젝트 버킷 URL이 필요하지 않습니다.
1.4.3.4. AWS 서브스크립션 샘플
다음 전체 AWS S3 오브젝트 버킷 채널 샘플 YAML 파일을 참조하십시오.
apiVersion: apps.open-cluster-management.io/v1 kind: Channel metadata: name: object-dev namespace: ch-object-dev spec: type: ObjectBucket pathname: https://s3.console.aws.amazon.com/s3/buckets/sample-bucket-1 secretRef: name: secret-dev --- apiVersion: v1 kind: Secret metadata: name: secret-dev namespace: ch-object-dev stringData: AccessKeyID: <your AWS bucket access key id> SecretAccessKey: <your AWS bucket secret access key> Region: <your AWS bucket region> type: Opaque
kind: PlacementRule
및 kind: Subscription
과 함께 다음 샘플 YAML에 표시된 대로 다른 AWS 서브스크립션 및 배치 규칙 오브젝트를 계속 생성할 수 있습니다.
apiVersion: apps.open-cluster-management.io/v1 kind: PlacementRule metadata: name: towhichcluster namespace: obj-sub-ns spec: clusterSelector: {} --- apiVersion: apps.open-cluster-management.io/v1 kind: Subscription metadata: name: obj-sub namespace: obj-sub-ns spec: channel: ch-object-dev/object-dev placement: placementRef: kind: PlacementRule name: towhichcluster
오브젝트 버킷의 특정 하위 폴더 내의 오브젝트를 구독할 수도 있습니다. 하위 폴더
주석을 서브스크립션에 추가하여 오브젝트 버킷 서브스크립션이 하위 폴더의 모든 리소스만 적용하도록 강제 적용합니다.
subfolder-1
이 있는 주석을 bucket-path
로 참조하십시오.
annotations: apps.open-cluster-management.io/bucket-path: <subfolder-1>
하위 폴더에 대한 다음 전체 샘플을 참조하십시오.
apiVersion: apps.open-cluster-management.io/v1 kind: Subscription metadata: annotations: apps.open-cluster-management.io/bucket-path: subfolder1 name: obj-sub namespace: obj-sub-ns labels: name: obj-sub spec: channel: ch-object-dev/object-dev placement: placementRef: kind: PlacementRule name: towhichcluster
1.4.3.5. 오브젝트 스토리지로 서브스크립션을 삭제한 후 배포된 리소스 유지
오브젝트 스토리지 리포지토리를 사용하여 서브스크립션을 생성할 때 서브스크립션을 삭제한 후 do-not-delete
주석을 추가하여 특정 배포된 리소스를 유지할 수 있습니다. do-not-delete
주석은 최상위 배포 리소스에서만 작동합니다. do-not-delete
주석을 추가하려면 다음 단계를 완료합니다.
- 하나 이상의 리소스를 배포하는 서브스크립션을 생성합니다.
서브스크립션을 삭제한 후에도 유지하려는 리소스 또는 리소스에 다음 주석을 추가합니다.
apps.open-cluster-management.io/do-not-delete: 'true'
다음 예제를 참조하십시오.
apiVersion: v1 kind: PersistentVolumeClaim metadata: annotations: apps.open-cluster-management.io/do-not-delete: 'true' apps.open-cluster-management.io/hosting-subscription: sub-ns/subscription-example apps.open-cluster-management.io/reconcile-option: merge pv.kubernetes.io/bind-completed: "yes"
서브스크립션을 삭제한 후에도 다른 리소스가 삭제되는 동안 do-not-delete
주석이 있는 리소스는 계속 존재합니다.
참고: 네임스페이스에 바인드된 do-not-delete
주석을 사용하여 배포된 리소스입니다. 따라서 나머지 리소스를 제거할 때까지 네임스페이스를 삭제할 수 없습니다.