본문 바로가기
WIKI 기술 지식 베이스

관리 리소스 활성화 정책

원문 보기 위키 갱신

관리 리소스 활성화 정책 (Managed Resource Activation Policies / MRAP)

이 기능은 v2에서 도입됐어요. 자세한 내용은 Crossplane 기능 수명주기를 읽어보세요.

관리 리소스 활성화 정책은 관리 리소스 정의(ManagedResourceDefinitions)와 함께 동작해요. Crossplane v2.0+ 는 이를 기본적으로 활성화해요. 이 동작을 비활성화하려면 Crossplane 설치 시 --enable-custom-to-managed-resource-conversion=false를 설정해요.

ManagedResourceActivationPolicy(MRAP)은 클러스터에서 어떤 ManagedResourceDefinitions가 활성화될지 제어해요. MRAP은 Provider 리소스의 선택적 설치를 가능하게 해, Provider가 제공하는 100개 이상의 관리 리소스 중 실제로 필요한 10개만 활성화할 수 있게 해줘요.

출처: 문서

본문

선택적 활성화 문제 (The selective activation problem)

현대 Crossplane Provider는 수십 또는 수백 개의 관리 리소스를 제공하지만, 대부분의 사용자는 그중 작은 부분만 필요로 해요. MRAP 이전에는 "모두 또는 하나도 없는" 방식이라서 Provider를 설치하면 지원하는 모든 관리 리소스를 얻어 불필요한 클러스터 리소스를 소비했어요.

MRAP은 ManagedResourceDefinitions의 패턴 기반 활성화를 제공해 어떤 Provider 리소스를 활성화할지 고를 수 있게 해 이 문제를 해결해요.

MRAP 작동 방식 (How MRAPs work)

MRAP은 ManagedResourceDefinition 이름과 일치하는 활성화 패턴을 포함해요. MRAP을 만들거나 업데이트하면 Crossplane은:

  • 클러스터의 모든 MRD를 나열
  • 활성화 패턴과 MRD 이름을 일치
  • 일치하는 MRD의 상태를 Active로 설정해 활성화
  • 활성화된 리소스 목록으로 MRAP 상태를 업데이트
apiVersion: apiextensions.crossplane.io/v1alpha1
kind: ManagedResourceActivationPolicy
metadata:
  name: aws-core-resources
spec:
  activate:
  - buckets.s3.aws.m.crossplane.io      # Modern v2 style S3 buckets
  - instances.rds.aws.m.crossplane.io   # Modern v2 style RDS instances
  - "*.ec2.aws.m.crossplane.io"         # All modern v2 style EC2 resources

이 MRAP을 적용하면 Crossplane은 지정한 S3 Bucket, RDS Instance, 그리고 모든 EC2 리소스를 활성화하고, 다른 AWS 리소스는 비활성으로 남겨요.

주요 기능 (Key features)

  • 패턴 기반 일치 — 와일드카드로 리소스 그룹 활성화
  • 다중 정책 지원 — 서로 다른 MRAP이 서로 다른 리소스 집합을 활성화
  • 상태 추적 — 각 정책이 어떤 리소스를 활성화했는지 확인
  • 자동 활성화 — 기존 패턴과 일치하는 새 MRD는 자동으로 활성화

패턴 매칭 (Pattern matching)

정확한 매칭 (Exact matching)

정밀한 제어를 위해 완전한 MRD 이름을 지정해요.

spec:
  activate:
  - buckets.s3.aws.m.crossplane.io
  - databases.rds.aws.m.crossplane.io
  - clusters.eks.aws.m.crossplane.io

완전한 MRD 이름을 사용할 때는 복수(plural) 이름을 사용해요. 이는 Kubernetes가 CRD의 완전한 이름을 표현하는 방식과 일치해요. 예를 들어 buckets.s3.aws.m.crossplane.io에서 bucket이 아닌 buckets를 사용하세요.

와일드카드 패턴 (Wildcard patterns)

* 와일드카드로 여러 리소스를 일치시켜요.

spec:
  activate:
  - "*.s3.aws.m.crossplane.io"      # All S3 resources
  - "*.ec2.aws.m.crossplane.io"     # All EC2 resources
  - "*.rds.aws.m.crossplane.io"     # All RDS databases

MRAP은 정규식이 아닌 프리픽스 전용 와일드카드를 사용해요. 패턴 시작 부분의 *만 동작해요 (예: *.s3.aws.m.crossplane.io). s3.*.aws.m.crossplane.io나 *.s3.* 같은 패턴은 유효하지 않아요.

유연한 활성화를 위해 정확한 이름과 와일드카드를 섞을 수 있어요.

spec:
  activate:
  - buckets.s3.aws.m.crossplane.io        # Exact S3 buckets
  - "*.ec2.aws.m.crossplane.io"           # All EC2 resources
  - clusters.eks.aws.m.crossplane.io      # Exact EKS clusters

레거시·모던 리소스 버전 (Legacy and modern resource versions)

Crossplane v2는 두 가지 스타일의 관리 리소스를 지원해요.

  • 모던 v2 스타일 (권장) — 더 나은 격리와 보안을 위해 네임스페이스 관리 리소스에 *.m.crossplane.io 도메인 사용
  • 레거시 v1 스타일 — 클러스터 스코프 관리 리소스에 *.crossplane.io 도메인 사용 (하위 호환성 유지)

모던 리소스 활성화 (Activating modern resources)

이 가이드의 대부분 예는 모던 v2 스타일 리소스를 사용해요.

spec:
  activate:
  - buckets.s3.aws.m.crossplane.io         # Modern v2 S3 bucket
  - "*.ec2.aws.m.crossplane.io"            # All modern v2 EC2 resources

레거시 리소스 활성화 (Activating legacy resources)

레거시 v1 스타일 리소스를 활성화하려면 .m이 없는 패턴을 사용해요.

spec:
  activate:
  - buckets.s3.aws.crossplane.io           # Legacy v1 S3 bucket
  - "*.ec2.aws.crossplane.io"              # All legacy v1 EC2 resources

혼합 활성화 (Mixed activation)

같은 MRAP에서 모던과 레거시 리소스를 모두 활성화할 수 있어요.

spec:
  activate:
  - "*.aws.m.crossplane.io"                # All modern AWS resources
  - "*.aws.crossplane.io"                  # All legacy AWS resources

일반적인 활성화 전략 (Common activation strategies)

모두 활성화 (Activate everything, default behavior)

Crossplane Helm 차트는 모든 리소스를 활성화하는 기본 MRAP을 만들어요.

apiVersion: apiextensions.crossplane.io/v1alpha1
kind: ManagedResourceActivationPolicy
metadata:
  name: default
spec:
  activate:
  - "*"  # Activate all MRDs

설치 중 이 설정을 커스터마이즈할 수 있어요.

# Disable default activations entirely
helm install crossplane crossplane-stable/crossplane \
  --set provider.defaultActivations={}

# Or provide custom default activations
helm install crossplane crossplane-stable/crossplane \
  --set provider.defaultActivations={\
    "*.s3.aws.m.crossplane.io","*.ec2.aws.m.crossplane.io"}

Provider별 활성화 (Provider-specific activation)

특정 Provider의 모든 리소스를 활성화해요.

apiVersion: apiextensions.crossplane.io/v1alpha1
kind: ManagedResourceActivationPolicy
metadata:
  name: aws-provider-resources
spec:
  activate:
  - "*.aws.crossplane.io"     # All AWS resources
  - "*.aws.m.crossplane.io"   # All AWS managed resources (v2 style)

서비스별 활성화 (Service-specific activation)

특정 클라우드 서비스의 리소스를 활성화해요.

apiVersion: apiextensions.crossplane.io/v1alpha1
kind: ManagedResourceActivationPolicy
metadata:
  name: storage-and-compute
spec:
  activate:
  - "*.s3.aws.m.crossplane.io"         # AWS S3 resources
  - "*.ec2.aws.m.crossplane.io"        # AWS EC2 resources
  - "*.storage.gcp.m.crossplane.io"    # GCP Storage resources
  - "*.compute.gcp.m.crossplane.io"    # GCP Compute resources

최소 활성화 (Minimal activation)

필요하다고 아는 리소스만 활성화해요.

apiVersion: apiextensions.crossplane.io/v1alpha1
kind: ManagedResourceActivationPolicy
metadata:
  name: minimal-footprint
spec:
  activate:
  - buckets.s3.aws.m.crossplane.io       # Just S3 buckets
  - instances.ec2.aws.m.crossplane.io    # Just EC2 instances
  - databases.rds.aws.m.crossplane.io    # Just RDS databases

여러 MRAP (Multiple MRAPs)

클러스터에 여러 MRAP을 가질 수 있어요. Crossplane은 모든 MRAP을 함께 처리하고, 하나 이상의 패턴과 일치하는 MRD는 모두 활성화해요.

팀 기반 활성화 (Team-based activation)

서로 다른 팀이 자신의 활성화 정책을 관리할 수 있어요.

# Storage team MRAP
apiVersion: apiextensions.crossplane.io/v1alpha1
kind: ManagedResourceActivationPolicy
metadata:
  name: storage-team
spec:
  activate:
  - "*.s3.aws.m.crossplane.io"
  - "*.storage.gcp.m.crossplane.io"
---
# Database team MRAP
apiVersion: apiextensions.crossplane.io/v1alpha1
kind: ManagedResourceActivationPolicy
metadata:
  name: database-team
spec:
  activate:
  - "*.rds.aws.m.crossplane.io"
  - "*.sql.gcp.m.crossplane.io"

구성 패키지 활성화 (Configuration package activation)

Configuration 패키지는 MRAP을 포함해 리소스 의존성을 선언할 수 있어요.

# In your Configuration package
apiVersion: apiextensions.crossplane.io/v1alpha1
kind: ManagedResourceActivationPolicy
metadata:
  name: web-platform-dependencies
spec:
  activate:
  - buckets.s3.aws.m.crossplane.io       # For static assets
  - instances.ec2.aws.m.crossplane.io    # For web servers
  - databases.rds.aws.m.crossplane.io    # For application data
  - certificates.acm.aws.m.crossplane.io # For HTTPS

MRAP 작업하기 (Working with MRAPs)

MRAP 만들기 (Creating MRAPs)

다른 Kubernetes 리소스처럼 MRAP을 적용해요.

kubectl apply -f my-activation-policy.yaml

MRAP 보기 (Viewing MRAPs)

모든 MRAP 나열:

kubectl get managedresourceactivationpolicies

MRAP 상세와 상태 보기:

kubectl describe mrap aws-core-resources

활성화 상태 확인 (Checking activation status)

MRAP은 어떤 리소스를 활성화했는지 추적해요.

status:
  conditions:
  - type: Healthy
    status: "True"
    reason: Running
  activated:
  - buckets.s3.aws.m.crossplane.io
  - instances.ec2.aws.m.crossplane.io
  - instances.rds.aws.m.crossplane.io
  - securitygroups.ec2.aws.m.crossplane.io
  - subnets.ec2.aws.m.crossplane.io
  - vpcs.ec2.aws.m.crossplane.io

MRAP 상태 조건 (MRAP status conditions)

Healthy 조건 (Healthy condition)

  • Healthy: True, Reason: Running — MRAP이 동작 중
  • Healthy: Unknown, Reason: EncounteredErrors — 일부 MRD가 활성화 실패

MRAP 문제 해결 (Troubleshooting MRAPs)

MRAP은 있지만 리소스가 활성화되지 않음

증상: MRAP에 activated: []가 표시되거나 예상 리소스가 없음

원인·해결책:

  • 패턴이 MRD 이름과 일치하지 않음
# List available MRDs
kubectl get mrds

# Check your pattern matches
kubectl get mrds -o name | grep "your-pattern"
  • MRD가 아직 존재하지 않음 — 필요한 Provider를 먼저 설치해요
  • Provider가 시작할 때 MRD를 만들어요
  • Provider가 활성화를 지원하지 않음
# Check provider capabilities
kubectl get providerrevision  \
  -o jsonpath='{.status.capabilities}'
# Look for "safe-start"

MRAP이 활성화 오류를 표시

증상: MRAP에 오류와 함께 Healthy: Unknown 상태

상태 조건 예:

conditions:
- type: Healthy
  status: "Unknown"
  reason: EncounteredErrors
  message: "failed to activate 2 of 5 ManagedResourceDefinitions"

해결책: 특정 실패 상세를 위해 MRAP 이벤트를 확인해요.

kubectl describe mrap 
# Look at the Events section for activation errors

예상치 못한 시점에 리소스가 활성화됨

증상: 예상보다 많은 리소스가 활성화됨

원인: 패턴이 겹치는 여러 MRAP (이것은 정상 동작)

해결책: 어떤 정책이 어떤 리소스를 활성화하는지 이해하기 위해 모든 MRAP 패턴을 검토해요.

# List all MRAP activation patterns
kubectl get mrap \
  -o jsonpath='{range .items[*]}{.metadata.name}: {.spec.activate}{"\n"}{end}'

# Check which MRAPs activated each resource
kubectl get mrap \
  -o jsonpath='{range .items[*]}{.metadata.name}: {.status.activated}{"\n"}{end}'

모범 사례 (Best practices)

MRAP은 추가적(additive)이에요 — 여러 MRAP이 충돌 없이 같은 리소스를 활성화할 수 있어요. 이는 팀 기반 활성화 전략과 Configuration 패키지 의존성을 가능하게 해요.

  • 구체적으로 시작하고 필요에 따라 넓히기 — 정확한 리소스 이름(각 리소스의 복수 이름)으로 시작하고, 유지보수에 유익할 때만 와일드카드를 추가해요.
  • Provider 진화 계획 — Provider가 새 리소스를 추가할 때 수용하는 와일드카드 패턴 설계 (예: *.s3.aws.m.crossplane.io는 향후 S3 리소스에 동작)
  • 관련 리소스를 논리적으로 그룹화 — 팀이 실제로 함께 사용하는 리소스를 활성화하는 MRAP 생성
  • Configuration 패키지에 활성화 의존성 포함 — Configuration 패키지는 리소스가 있다고 가정하는 대신 필요한 MRD를 선언해야 해요.
  • 공유 환경에서 보수적인 패턴 사용 — 여러 팀이 Provider를 공유할 때 불필요한 리소스를 활성화하는 과도하게 넓은 와일드카드를 피해요.

다음 단계 (Next steps)

  • MRAP이 무엇을 활성화하는지 이해하려면 ManagedResourceDefinitions 알아보기
  • 단계별 구현을 위한 disabling unused managed resources 가이드 보기
  • 완전한 MRAP 스키마 문서를 위한 API reference 확인

더 알아보기 (Learn more)