리소스 추적
리소스 추적 (Resource Tracking)
Argo CD가 Kubernetes 리소스를 추적하는 방법을 다룹니다. 어노테이션 기반, 라벨 기반, 그리고 두 가지를 결합한 추적 방식을 설명하고, 설치 ID, 커스텀 라벨, 추적 방법 선택 방법을 안내합니다.
출처: 문서
본문
리소스 추적
어노테이션으로 Kubernetes 리소스 추적
Argo CD는 추적에 다음 방법을 사용하도록 지시할 수 있습니다:
annotation(기본값) — Argo CD는argocd.argoproj.io/tracking-id어노테이션을 사용해 애플리케이션 리소스를 추적합니다. 라벨과 어노테이션을 모두 유지할 필요가 없을 때 이 방법을 사용하세요.annotation+label— Argo CD는app.kubernetes.io/instance라벨을 사용하지만 정보 제공 목적으로만 사용합니다. 이 라벨은 추적 목적으로 사용되지 않으며, 값은 여전히 63자를 초과하면 잘립니다. 애플리케이션 리소스를 추적하려면 대신argocd.argoproj.io/tracking-id어노테이션이 사용됩니다. Argo CD로 관리하지만 instance 라벨이 필요한 다른 도구와의 호환성이 여전히 필요한 리소스에 이 방법을 사용하세요.label— Argo CD는app.kubernetes.io/instance라벨을 사용합니다.
리소스 추적에 어노테이션 방법을 사용하는 예시:
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-deployment
namespace: default
annotations:
argocd.argoproj.io/tracking-id: my-app:apps/Deployment:default/my-deployment
tracking id 어노테이션을 사용하는 장점은 다른 Kubernetes 도구와의 충돌이 더 이상 없고 Argo CD가 리소스의 소유자에 대해 혼동하지 않는다는 것입니다. 다른 도구가 Argo CD가 관리하는 리소스를 이해하길 원한다면 annotation+label도 사용할 수 있습니다.
설치 ID (Installation ID)
하나의 클러스터를 여러 Argo CD 인스턴스로 관리한다면 Argo CD ConfigMap에서 installationID를 설정해야 합니다. 이는 다른 Argo CD 인스턴스 간의 충돌을 방지합니다:
- 각 관리 리소스에는
argocd.argoproj.io/installation-id: <installation-id>어노테이션이 있습니다. - Argo CD 인스턴스에서 같은 이름의 애플리케이션을 충돌 없이 가질 수 있습니다.
비자기참조 어노테이션 (Non self-referencing annotations)
annotation 또는 annotation+label 추적 방법을 사용할 때 Argo CD는 어노테이션의 리소스 속성(name, namespace, group, kind)을 고려하여 리소스를 원하는 상태와 비교해야 하는지 결정합니다. 추적 어노테이션이 적용되는 리소스를 참조하지 않는다면, 그 리소스는 애플리케이션의 동기화 상태에 영향을 주지도 않고 프루닝 대상으로 표시되지도 않습니다.
이를 통해 다른 kubernetes 도구(예: HNC)가 Argo CD 애플리케이션의 동기화 상태에 영향을 주지 않고 리소스를 다른 네임스페이스로 복사할 수 있습니다. 복사된 리소스는 UI 최상위에 표시됩니다. 동기화 상태가 없으며 애플리케이션의 동기화 상태에 영향을 주지 않습니다.
라벨로 Kubernetes 리소스 추적
이 모드에서 Argo CD는 관리되는(Git에서 조정되는) 모든 리소스에 애플리케이션 instance 라벨을 관리하는 Application의 이름으로 설정하여 자신이 관리하는 리소스를 식별합니다. 기본 라벨은 잘 알려진 app.kubernetes.io/instance 라벨입니다.
예시:
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-deployment
namespace: default
labels:
app.kubernetes.io/instance: some-application
이 접근 방식은 대부분의 경우 잘 작동합니다. 라벨 이름이 표준화되어 있어 Kubernetes 생태계의 다른 도구가 이해할 수 있기 때문입니다.
그러나 몇 가지 제한이 있습니다:
- 라벨은 63자로 잘립니다. 라벨의 크기에 따라 애플리케이션에 더 긴 이름을 저장하고 싶을 수 있습니다.
- 다른 외부 도구가 이 라벨에 쓰거나 추가하여 Argo CD와 충돌을 만들 수 있습니다. 예를 들어 여러 Helm 차트와 운영자가 생성된 매니페스트에 이 라벨을 사용해 Argo CD가 애플리케이션의 소유자에 대해 혼동하게 만듭니다.
- 같은 클러스터에(클러스터 전체 권한으로) 하나 이상의 Argo CD 인스턴스를 배포하고, 어떤 리소스가 어떤 Argo CD 인스턴스에 의해 관리되는지 쉽게 식별하고 싶을 수 있습니다.
커스텀 라벨 사용
리소스 추적에 기본 app.kubernetes.io/instance 라벨 대신 커스텀 라벨을 사용하도록 Argo CD를 구성할 수 있습니다. 아래 예시는 리소스 추적 라벨을 argocd.argoproj.io/instance로 설정합니다.
apiVersion: v1
kind: ConfigMap
metadata:
name: argocd-cm
labels:
app.kubernetes.io/name: argocd-cm
app.kubernetes.io/part-of: argocd
data:
application.instanceLabelKey: argocd.argoproj.io/instance
추적 방법 선택
선호하는 추적 방법을 실제로 선택하려면 argocd-cm configmap 안에 있는 resourceTrackingMethod 값을 편집하세요.
apiVersion: v1
kind: ConfigMap
metadata:
name: argocd-cm
labels:
app.kubernetes.io/name: argocd-cm
app.kubernetes.io/part-of: argocd
data:
application.resourceTrackingMethod: annotation
가능한 값은 위에서 설명한 대로 label, annotation+label, annotation입니다. 값을 변경하면 변경 사항을 적용하기 위해 애플리케이션을 다시 동기화해야(또는 동기화 메커니즘이 작동하기를 기다려야) 합니다.
configmap을 다시 변경해 이전 선택으로 되돌릴 수 있습니다.