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

기존 리소스 가져오기

원문 보기 위키 갱신

기존 리소스 가져오기 (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)