고아 리소스 모니터링

고아 리소스 모니터링 (Orphaned Resources Monitoring) — 주인 없는 리소스를 찾아서

쿠버네티스에는 어떤 Argo CD 애플리케이션에도 속하지 않은 최상위 네임스페이스 리소스가 생기곤 해요. 이런 고아 리소스는 클러스터를 어지럽히고 누구도 관리하지 않는 구멍이 되기 쉬워요. 고아 리소스 모니터링 기능은 이런 리소스를 감지하고, UI에서 확인·제거하며 경고까지 띄워서 클러스터 상태를 깔끔하게 유지해 줘요.

출처: https://argo-cd.readthedocs.io/en/stable/user-guide/orphaned-resources/

본문

고아 리소스 모니터링은 Project 설정에서 활성화해요. AppProject 커스텀 리소스로 켜는 예시를 볼게요.

kind: AppProject
metadata:
  ...
spec:
  ...
  orphanedResources:
    warn: true

기능을 켜면 대상 네임스페이스에 고아 리소스가 있는 프로젝트의 각 애플리케이션이 경고를 받아요. 애플리케이션 상세 페이지에서 "Show Orphaned" 필터를 켜면 고아 리소스를 직접 찾아볼 수 있어요.

처음 활성화할 때는 경고를 먼저 꺼두고 싶을 수 있어요. warn: false로 지정하면 경고는 없애면서도 UI에서 고아 리소스를 계속 확인할 수 있어요.

spec:
  orphanedResources:
    warn: false  # 경고 비활성화

모든 리소스가 고아로 취급되는 건 아니에요. 다른 오퍼레이터(cert-manager가 Secret을 만드는 것 같은)가 자동으로 만드는 리소스까지 고아로 보면 안 되니까, Argo CD는 다음 리소스는 절대 고아로 간주하지 않아요.

  • 프로젝트에서 거부된 네임스페이스 리소스
  • 이름이 defaultServiceAccount(자동 생성된 ServiceAccountToken 포함)
  • default 네임스페이스의 이름이 kubernetesService
  • 모든 네임스페이스의 이름이 kube-root-ca.crtConfigMap

특정 리소스가 고아로 선언되지 않게 막고 싶다면 Group, Kind, Name을 정의한 ignore 규칙 목록을 주면 돼요.

spec:
  orphanedResources:
    ignore:
      - kind: ConfigMap
        name: orphaned-but-ignored-configmap

name은 glob 패턴도 지원해요. 예를 들어 특정 도메인으로 끝나는 Secret을 모두 제외하고 싶다면 이렇게 써요.

spec:
  orphanedResources:
    ignore:
      - kind: Secret
        name: "*.example.com"

더 알아보기

  • Projects — 역할을 나눠서 애플리케이션을 격리하는 단위
  • 애플리케이션 삭제 — 관리 리소스 정리를 안전하게 마무리하기
  • Argo CD 핵심 개념 — GitOps 배포를 이해하는 첫 단추