导入现有资源

如果您有已经在 Provider 中配置好的资源,您可以将它们作为受管资源导入,并让 Crossplane 对其进行管理。 受管资源的 managementPolicies 字段可以将外部资源导入 crossplane。

crossplane 可以手动自动.

手动导入资源

通过匹配托管资源中的 “crossplane.io/external-name “注解,crossplane 可以发现并导入现有的 Provider 资源。

要导入 Provider 中的现有外部资源,请创建一个带有 “crossplane.io/external-name “注解的新托管资源。 将注解值设置为 Provider 中的资源名称。

例如,要导入名为的现有 GCP 网络的现有 GCP 网络,创建一个新的托管资源,并使用my-existing-network在 Annotations 中使用。

1apiVersion: compute.gcp.crossplane.io/v1beta1
2kind: Network
3metadata:
4  annotations:
5    crossplane.io/external-name: my-existing-network

元数据 元数据名称字段可以是任何你想要的内容,例如导入的网络.

Note
该名称是 Kubernetes 对象的名称,与 Provider 内的资源名称无关。
1apiVersion: compute.gcp.crossplane.io/v1beta1
2kind: Network
3metadata:
4  name: imported-network
5  annotations:
6    crossplane.io/external-name: my-existing-network

spec.forProvider字段为空。 crossplane 会导入设置并自动应用到托管资源。

Important

如果托管资源的spec.forProvider字段,则必须将其添加到 forProvider 字段中。

这些字段的值必须与 Provider 内的值一致,否则 crossplane 会覆盖现有值。

1apiVersion: compute.gcp.crossplane.io/v1beta1
2kind: Network
3metadata:
4  name: imported-network
5  annotations:
6    crossplane.io/external-name: my-existing-network
7spec:
8  forProvider: {}

Crossplane 现在控制并管理该导入资源。 对管理资源 spec 的任何更改都会更改外部资源。

自动导入资源

通过 “观察”[管理策略]自动导入外部资源(https://crossplane.devops.gold/master/concepts/managed-resources/#managementpolicies).

crossplane 导入只观察资源,但从不更改或删除资源。

Important

managed resource managementPolicies选项是测试版功能。

请参阅 “提供方 “的文件,查看 “提供方 “是否支持管理政策。

###应用观察管理策略

创建一个与apiVersion类型的受管资源,并添加管理策略: ["观察"]添加到规格

例如,要导入一个 GCP SQL 数据库实例,请创建一个新资源,并使用 管理策略: ["观察"]。设置。

1apiVersion: sql.gcp.upbound.io/v1beta1
2kind: DatabaseInstance
3spec:
4  managementPolicies: ["Observe"]

添加外部名称 Annotations

添加 crossplane.io/external-name该名称必须与 Provider 内部的名称一致。

例如,对于名为我的外部数据库的 GCP 数据库,应用crossplane.io/external-nameAnnotations 的值为我的外部数据库.

1apiVersion: sql.gcp.upbound.io/v1beta1
2kind: DatabaseInstance
3metadata:
4  annotations:
5    crossplane.io/external-name: my-external-database
6spec:
7  managementPolicies: ["Observe"]

创建 Kubernetes 对象名称

创建一个 名称以用于 Kubernetes 对象。

例如,将 Kubernetes 对象命名为我的导入数据库.

1apiVersion: sql.gcp.upbound.io/v1beta1
2kind: DatabaseInstance
3metadata:
4  name: my-imported-database
5  annotations:
6    crossplane.io/external-name: my-external-database
7spec:
8  managementPolicies: ["Observe"]

确定特定的外部资源

如果 Provider 中有多个资源使用相同的名称,则应使用唯一的spec.forProvider字段来标识特定资源。

例如,只在us-central1区域的 GCP SQL 数据库。

 1apiVersion: sql.gcp.upbound.io/v1beta1
 2kind: DatabaseInstance
 3metadata:
 4  name: my-imported-database
 5  annotations:
 6    crossplane.io/external-name: my-external-database
 7spec:
 8  managementPolicies: ["Observe"]
 9  forProvider:
10    region: "us-central1"

应用管理的资源

应用新的托管资源。 crossplane 会将云中外部资源的状态与新创建的托管资源同步。

查看发现的资源

crossplane 会发现受管资源并填充status.atProvider字段中填入外部资源的 Values 值。

 1apiVersion: sql.gcp.upbound.io/v1beta1
 2kind: DatabaseInstance
 3metadata:
 4  name: my-imported-database
 5  annotations:
 6    crossplane.io/external-name: my-external-database
 7spec:
 8  managementPolicies: ["Observe"]
 9  forProvider:
10    region: us-central1
11status:
12  atProvider:
13    connectionName: crossplane-playground:us-central1:my-external-database
14    databaseVersion: POSTGRES_14
15    deletionProtection: true
16    firstIpAddress: 35.184.74.79
17    id: my-external-database
18    publicIpAddress: 35.184.74.79
19    region: us-central1
20    # Removed for brevity
21    settings:
22    - activationPolicy: ALWAYS
23      availabilityType: REGIONAL
24      diskSize: 100
25      # Removed for brevity
26      pricingPlan: PER_USE
27      tier: db-custom-4-26624
28      version: 4
29  conditions:
30  - lastTransitionTime: "2023-02-22T07:16:51Z"
31    reason: Available
32    status: "True"
33    type: Ready
34  - lastTransitionTime: "2023-02-22T07:16:51Z"
35    reason: ReconcileSuccess
36    status: "True"
37    type: Synced

控制导入的 ObserveOnly 资源

通过在导入后更改 “managementPolicies”,crossplane 可以主动控制只观察导入的资源。

更改 管理策略字段改为["*"].

status.atProvider中的参数值,并在 spec.forProvider.

Tip
手动将重要的 spec.atProvider Values 复制到 spec.forProvider
 1apiVersion: sql.gcp.upbound.io/v1beta1
 2kind: DatabaseInstance
 3metadata:
 4  name: my-imported-database
 5  annotations:
 6    crossplane.io/external-name: my-external-database
 7spec:
 8  managementPolicies: ["*"]
 9  forProvider:
10    databaseVersion: POSTGRES_14
11    region: us-central1
12    settings:
13    - diskSize: 100
14      tier: db-custom-4-26624
15status:
16  atProvider:
17    databaseVersion: POSTGRES_14
18    region: us-central1
19    # Removed for brevity
20    settings:
21    - diskSize: 100
22      tier: db-custom-4-26624
23      # Removed for brevity
24  conditions:
25    - lastTransitionTime: "2023-02-22T07:16:51Z"
26      reason: Available
27      status: "True"
28      type: Ready
29    - lastTransitionTime: "2023-02-22T11:16:45Z"
30      reason: ReconcileSuccess
31      status: "True"
32      type: Synced

Crossplane 现在可以完全管理导入的资源。 Crossplane 会在 Provider 的外部资源中应用对所管理资源的任何更改。