사용하지 않는 관리 리소스 비활성화하기
사용하지 않는 관리 리소스 비활성화하기 (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를 확인하세요.