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

사용하지 않는 관리 리소스 비활성화하기

원문 보기 위키 갱신

사용하지 않는 관리 리소스 비활성화하기 (Disabling Unused Managed Resources)

대규모 크로스플레인 프로바이더는 100개 이상의 관리 리소스 CRD를 설치할 수 있어, 하나 또는 두 개의 리소스 유형만 필요하더라도 상당한 클러스터 리소스를 소비합니다. 이 가이드는 ManagedResourceDefinitions와 ManagedResourceActivationPolicies를 사용하여 실제로 필요한 프로바이더 리소스만 설치하는 방법을 보여 줍니다.

출처: 문서

본문

이 기능은 v2에서 도입되었습니다. 자세한 내용은 크로스플레인의 기능 수명주기(Crossplane feature lifecycle) 문서를 참고하세요.

중요 이 가이드는 관리 리소스 정의(managed resource definitions)와 관리 리소스 활성화 정책(managed resource activation policies)을 사용합니다. 이 기능들은 Crossplane v2.0+에서 기본적으로 활성화됩니다. 이 동작을 비활성화하려면 크로스플레인을 설치할 때 --enable-custom-to-managed-resource-conversion=false를 설정하세요.

시작하기 전에 (Before you begin)

이 가이드에는 다음이 필요합니다.

  • 클러스터에 설치된 Crossplane v2.0+
  • safe-start 기능을 가진 프로바이더 (이 가이드는 provider-aws-ec2:v2.0.0을 사용합니다)
  • 쿠버네티스와 크로스플레인 개념에 대한 기본적인 이해

중요 ManagedResourceDefinitions와 ManagedResourceActivationPolicies는 Crossplane v2.0+의 알파(alpha) 기능입니다.

문제: 리소스 오버헤드 (The problem: Resource overhead)

크로스플레인에 대규모 클라우드 프로바이더를 설치하면 수백 개의 CRD가 생성됩니다.

# Before selective activation - provider-aws-ec2 installs ~200 CRDs
kubectl get crds | grep aws.crossplane.io | wc -l
# Output: 200

# Each CRD consumes ~3 MiB of API server memory
# 200 CRDs × 3 MiB = 600 MiB of memory usage

대부분의 사용자는 이 리소스들의 작은 하위 집합만 필요합니다. 선택적 활성화(selective activation)를 사용하면 필요한 만큼만 설치할 수 있습니다.

1단계: 자동 활성화 비활성화 (Disable automatic activation)

기본적으로 크로스플레인 Helm 차트는 모든 프로바이더 리소스를 활성화하는 활성화 정책을 생성합니다. 선택적 활성화를 사용하려면 이 기본 동작을 비활성화하세요.

옵션 A: Helm 설치

helm install crossplane crossplane-stable/crossplane \
  --namespace crossplane-system \
  --create-namespace \
  --set provider.defaultActivations={}

옵션 B: 기존 설치

기본 활성화 정책을 삭제합니다.

kubectl delete managedresourceactivationpolicy default

2단계: 프로바이더 설치 (Install your provider)

평소처럼 프로바이더를 설치합니다. 크로스플레인은 프로바이더의 CRD를 ManagedResourceDefinitions로 자동 변환합니다.

apiVersion: pkg.crossplane.io/v1
kind: Provider
metadata:
  name: provider-aws-ec2
spec:
  package: xpkg.crossplane.io/provider-aws-ec2:v2.0.0
kubectl apply -f https://docs.crossplane.io/latest/manifests/guides/disabling-unused-managed-resources/provider.yaml
# Wait for provider to be ready
kubectl wait --for=condition=Healthy provider/provider-aws-ec2 --timeout=5m

3단계: Crossplane이 MRD를 생성했는지 확인 (Verify Crossplane created MRDs)

프로바이더가 설치된 후 크로스플레인이 비활성 상태로 생성한 ManagedResourceDefinitions를 확인합니다.

# List ManagedResourceDefinitions
kubectl get managedresourcedefinitions

# Check their states (should be "Inactive")
kubectl get mrds -o jsonpath='{.items[*].spec.state}' \
  | tr ' ' '\n' | sort | uniq -c
# 200 Inactive

크로스플레인이 아직 CRD를 생성하지 않았음을 확인하세요.

kubectl get crds | grep ec2.aws.m.crossplane.io
# No output - CRDs don't exist until MRDs are activated

4단계: 활성화 정책 생성 (Create an activation policy)

필요한 리소스만 선택적으로 활성화하는 ManagedResourceActivationPolicy를 만듭니다.

apiVersion: apiextensions.crossplane.io/v1alpha1
kind: ManagedResourceActivationPolicy
metadata:
  name: my-app-resources
spec:
  activate:
  - instances.ec2.aws.m.crossplane.io        # EC2 instances for compute
  - securitygroups.ec2.aws.m.crossplane.io   # Security groups for networking
  - vpcs.ec2.aws.m.crossplane.io             # VPCs for isolation
kubectl apply -f https://docs.crossplane.io/latest/manifests/guides/disabling-unused-managed-resources/activation-policy.yaml

5단계: 선택적 활성화 검증 (Verify selective activation)

크로스플레인이 지정된 리소스만 활성화했는지 확인합니다.

# Check MRD states - only some should be Active now
kubectl get mrds \
  -o jsonpath='{range .items[*]}{.metadata.name}: {.spec.state}{"\n"}{end}' \
  | grep Active
# instances.ec2.aws.m.crossplane.io: Active
# securitygroups.ec2.aws.m.crossplane.io: Active
# vpcs.ec2.aws.m.crossplane.io: Active

# Verify Crossplane created corresponding CRDs
kubectl get crds | grep ec2.aws.m.crossplane.io
# instances.ec2.aws.m.crossplane.io
# securitygroups.ec2.aws.m.crossplane.io
# vpcs.ec2.aws.m.crossplane.io

# Count CRDs from EC2 provider - should match activated MRDs
kubectl get crds | grep ec2.aws.m.crossplane.io | wc -l
# 3 (only the activated resources)

6단계: 영향 측정 (Measure the impact)

리소스 오버헤드의 상당한 감소를 확인합니다.

# Count CRDs from EC2 provider - should be much lower than 200
kubectl get crds | grep aws.crossplane.io | wc -l
# 3 CRDs (99% reduction from 200)

# Calculate memory savings
echo "197 CRDs saved × 3 MiB = 591 MiB saved (99% reduction)"

# Verify inactive MRDs still exist but consume minimal resources
kubectl get mrds \
  -o jsonpath='{.items[?(@.spec.state=="Inactive")]..metadata.name}' | wc -w
# 197 inactive MRDs (~20 MiB total overhead vs 600 MiB for active CRDs)

# Check total MRDs (active + inactive)
kubectl get mrds | wc -l
# 200 total MRDs (3 active, 197 inactive)

선택적 활성화는 실제로 사용하는 리소스의 완전한 기능을 유지하면서 막대한 리소스 절감을 제공합니다.

다음 단계 (Next steps)

  • 상세한 개념과 문제 해결을 위해 ManagedResourceDefinitions에 대해 더 알아보세요.
  • 고급 활성화 전략과 모범 사례를 위해 ManagedResourceActivationPolicies를 살펴보세요.
  • 완전한 스키마 문서는 API reference를 확인하세요.

더 알아보기 (Learn more)