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

Crossplane 제거하기

원문 보기 위키 갱신

Crossplane 제거하기 (Uninstall)

경고: Crossplane이 올바른 순서로 제거되지 않으면 Crossplane이 만든 리소스가 삭제되지 않을 수 있어요. 이 경우 클라우드 리소스가 계속 실행 중일 수 있으므로 수동으로 삭제해야 해요.

Crossplane 리소스의 대부분은 다른 Crossplane 리소스에 대한 의존성을 갖고 있어요. 예를 들어 관리 리소스(Managed Resource)는 프로바이더에 의존해요.

Crossplane 리소스를 순서대로 삭제하지 않으면 Crossplane이 프로비저닝한 외부 리소스를 삭제하지 못할 수 있어요.

출처: 문서

본문

순서에 따른 Crossplane 제거

Crossplane 리소스 제거는 다음 순서로 이루어져야 해요:

  • 모든 복합 리소스 정의(Composite Resource Definitions) 제거
  • 남은 모든 관리 리소스 제거
  • 모든 프로바이더 제거

Crossplane 파드를 삭제하면 남은 Crossplane 구성 요소가 제거돼요.

팁: kubectl get managed로 모든 외부 리소스의 인벤토리를 수집하세요. Kubernetes API 서버의 크기와 리소스 수에 따라 이 명령이 결과를 반환하는 데 몇 분이 걸릴 수 있어요.

kubectl get managed 예시:

NAME                                                 READY   SYNCED   EXTERNAL-NAME          AGE
securitygroup.ec2.aws.m.upbound.io/my-db-7mc7h-j84h8   True    True     sg-0da6e9c29113596b6   3m1s
securitygroup.ec2.aws.m.upbound.io/my-db-8bhr2-9wsx9   True    True     sg-02695166f010ec05b   2m26s

NAME                                         READY   SYNCED   EXTERNAL-NAME                       AGE
route.ec2.aws.m.upbound.io/my-db-7mc7h-vw985   True    True     r-rtb-05822b8df433e4e2b1080289494   3m1s
route.ec2.aws.m.upbound.io/my-db-8bhr2-7m2wq   False   True                                         2m26s

...

복합 리소스 정의 제거

설치된 복합 리소스 정의(Composite Resource Definitions)를 제거하면 해당 정의가 만든 복합 리소스와 그 복합 리소스가 만든 관리 리소스도 함께 제거돼요.

kubectl get xrd로 설치된 복합 리소스 정의를 확인하세요.

kubectl get xrd
NAME                                                ESTABLISHED   OFFERED   AGE
compositepostgresqlinstances.database.example.org   True          True      40s

kubectl delete xrd로 복합 리소스 정의를 삭제하세요.

kubectl delete xrd compositepostgresqlinstances.database.example.org

관리 리소스 제거

수동으로 생성한 관리 리소스를 수동으로 삭제하세요.

kubectl get managed로 남은 관리 리소스를 확인하세요.

kubectl get managed
NAME                                                   READY   SYNCED   EXTERNAL-NAME                 AGE
bucket.s3.aws.m.upbound.io/crossplane-bucket-867737b10   True    True     crossplane-bucket-867737b10   8h

kubectl delete로 리소스를 제거하세요.

kubectl delete bucket.s3.aws.m.upbound.io/crossplane-bucket-867737b10

Crossplane 프로바이더 제거

kubectl get providers로 설치된 프로바이더를 확인하세요.

kubectl get providers
NAME                   INSTALLED   HEALTHY   PACKAGE                                        AGE
crossplane-contrib-provider-aws-s3   True        True      xpkg.crossplane.io/crossplane-contrib/provider-aws-s3:v2.0.0     8h

kubectl delete provider로 설치된 프로바이더를 제거하세요.

kubectl delete provider crossplane-contrib-provider-aws

Crossplane 배포 제거

helm uninstall로 Helm을 사용해 Crossplane을 제거하세요.

helm uninstall crossplane --namespace crossplane-system

kubectl get pods로 Helm이 Crossplane 파드를 제거했는지 확인하세요.

kubectl get pods -n crossplane-system
No resources found in crossplane-system namespace.

Crossplane 네임스페이스 삭제

Helm이 Crossplane을 설치할 때 crossplane-system 네임스페이스를 생성해요. Helm은 helm uninstall로 이 네임스페이스를 제거하지 않아요.

kubectl delete namespace로 Crossplane 네임스페이스를 수동으로 삭제하세요.

kubectl delete namespace crossplane-system

kubectl get namespaces로 Kubernetes가 네임스페이스를 제거했는지 확인하세요.

kubectl get namespace
NAME              STATUS   AGE
default           Active   2m45s
kube-flannel      Active   2m42s
kube-node-lease   Active   2m47s
kube-public       Active   2m47s
kube-system       Active   2m47s

경고: 커스텀 리소스 정의(CRDs)는 helm uninstall로 자동 제거되지 않아요.

이름이 *.crossplane.io로 끝나는 CRD는 Crossplane을 제거한 후에도 클러스터에 남아 있어요. 원한다면 이 CRD들을 수동으로 삭제하세요:

# View remaining Crossplane CRDs
kubectl get crd | grep crossplane.io

# Example: Delete a specific CRD
kubectl delete crd providers.pkg.crossplane.io

중요: CRD를 삭제하면 해당 유형의 모든 커스텀 리소스가 제거돼요. 삭제 전에 중요한 데이터가 없는지 확인하세요.

더 알아보기 (Learn more)