기존 리소스 가져오기
기존 리소스 가져오기 (Import Existing Resources)
Provider에 이미 프로비저닝된 리소스가 있다면, 이를 관리 리소스로 가져와서 Crossplane이 관리하게 할 수 있습니다. 관리 리소스의 managementPolicies 필드를 사용하면 외부 리소스를 Crossplane으로 가져올 수 있어요.
출처: 문서
본문
관찰 전용 모드로 리소스 가져오기 (Import resources in observe only mode)
먼저 Observe 관리 정책으로 외부 리소스를 가져오세요. Crossplane은 관찰 전용 리소스를 가져오지만 리소스를 절대 변경하거나 삭제하지 않습니다.
⚠️ 중요: 관리 리소스
managementPolicies옵션은 beta 기능입니다. Provider가 관리 정책을 지원하는지 여부는 Provider 문서를 참고해야 해요.
Observe 관리 정책 적용하기
가져오려는 리소스의 apiVersion과 kind와 일치하는 새 관리 리소스를 만들고, spec에 managementPolicies: ["Observe"]를 추가하세요. 예를 들어 GCP SQL DatabaseInstance를 가져오려면 managementPolicies: ["Observe"]가 설정된 새 리소스를 만듭니다.
apiVersion: sql.gcp.upbound.io/v1beta1
kind: DatabaseInstance
spec:
managementPolicies: ["Observe"]
external-name 어노테이션 추가하기
리소스에 crossplane.io/external-name 어노테이션을 추가하세요. 이 이름은 Provider 내부의 이름과 일치해야 합니다. 예를 들어 my-external-database이라는 GCP 데이터베이스의 경우, 값이 my-external-database인 crossplane.io/external-name 어노테이션을 적용합니다.
apiVersion: sql.gcp.upbound.io/v1beta1
kind: DatabaseInstance
metadata:
annotations:
crossplane.io/external-name: my-external-database
spec:
managementPolicies: ["Observe"]
Kubernetes 객체 이름 만들기
Kubernetes 객체에 사용할 name을 만드세요. 예를 들어 Kubernetes 객체의 이름을 my-imported-database로 지정합니다.
apiVersion: sql.gcp.upbound.io/v1beta1
kind: DatabaseInstance
metadata:
name: my-imported-database
annotations:
crossplane.io/external-name: my-external-database
spec:
managementPolicies: ["Observe"]
특정 외부 리소스 식별하기
Provider 내부에서 같은 이름을 가진 리소스가 하나 이상 있다면, 고유한 spec.forProvider 필드로 특정 리소스를 식별하세요. 예를 들어 us-central1 리전의 GCP SQL 데이터베이스만 가져옵니다.
apiVersion: sql.gcp.upbound.io/v1beta1
kind: DatabaseInstance
metadata:
name: my-imported-database
annotations:
crossplane.io/external-name: my-external-database
spec:
managementPolicies: ["Observe"]
forProvider:
region: "us-central1"
관리 리소스 적용하기
새 관리 리소스를 적용하세요. Crossplane은 클라우드에 있는 외부 리소스의 상태를 새로 만든 관리 리소스와 동기화합니다.
발견된 리소스 보기
Crossplane은 관리 리소스를 발견하고 status.atProvider 필드를 외부 리소스의 값으로 채웁니다.
apiVersion: sql.gcp.upbound.io/v1beta1
kind: DatabaseInstance
metadata:
name: my-imported-database
annotations:
crossplane.io/external-name: my-external-database
spec:
managementPolicies: ["Observe"]
forProvider:
region: us-central1
status:
atProvider:
connectionName: crossplane-playground:us-central1:my-external-database
databaseVersion: POSTGRES_14
deletionProtection: true
firstIpAddress: 35.184.74.79
id: my-external-database
publicIpAddress: 35.184.74.79
region: us-central1
# Removed for brevity
settings:
- activationPolicy: ALWAYS
availabilityType: REGIONAL
diskSize: 100
# Removed for brevity
pricingPlan: PER_USE
tier: db-custom-4-26624
version: 4
conditions:
- lastTransitionTime: "2023-02-22T07:16:51Z"
reason: Available
status: "True"
type: Ready
- lastTransitionTime: "2023-02-22T07:16:51Z"
reason: ReconcileSuccess
status: "True"
type: Synced
가져온 관찰 전용 리소스 제어하기 (Control imported observe only resources)
Crossplane은 import 후 managementPolicies를 변경해 관찰 전용으로 가져온 리소스를 능동적으로 제어할 수 있습니다. 관리 리소스의 managementPolicies 필드를 ["*"]로 변경하세요. status.atProvider에서 필요한 매개변수 값을 복사해서 spec.forProvider에 제공하세요.
💡 Tip: 중요한
status.atProvider값을spec.forProvider로 수동 복사하세요.
apiVersion: sql.gcp.upbound.io/v1beta1
kind: DatabaseInstance
metadata:
name: my-imported-database
annotations:
crossplane.io/external-name: my-external-database
spec:
managementPolicies: ["*"]
forProvider:
databaseVersion: POSTGRES_14
region: us-central1
settings:
- diskSize: 100
tier: db-custom-4-26624
status:
atProvider:
databaseVersion: POSTGRES_14
region: us-central1
# Removed for brevity
settings:
- diskSize: 100
tier: db-custom-4-26624
# Removed for brevity
conditions:
- lastTransitionTime: "2023-02-22T07:16:51Z"
reason: Available
status: "True"
type: Ready
- lastTransitionTime: "2023-02-22T11:16:45Z"
reason: ReconcileSuccess
status: "True"
type: Synced
이제 Crossplane이 가져온 리소스를 완전히 관리합니다. Crossplane은 Provider의 외부 리소스에 관리 리소스의 변경 사항을 적용합니다.
더 알아보기 (Learn more)
- 관리 리소스 - 관리 리소스 개념 이해하기
- 관리 리소스 시작하기 - 관리 리소스로 시작하기