云资源自动化 for Crossplane Crossplane 核心概念

Crossplane 扩展了 Kubernetes,使其能够创建和管理 Kubernetes 集群外部的资源。Crossplane 使用了多个核心组件来管理通过 Kubernetes 构建和管理外部资源的各个元素。它们之间的关系如下。

相关产品
云资源自动化 for Crossplane 产品页,含版本规格、价格与购买入口。

这篇向你介绍以上核心组件的概念和使用。你也可参考 示例教程 获取以上概念的示例。

一、云资源供应商(Provider)

云资源供应商(Provider)使 Crossplane 能够在外部服务上配置基础设施。Provider 创建新的 Kubernetes API 并将它们映射到外部 API。云资源供应商负责连接非 Kubernetes 资源的各个方面。腾讯云作为 Crossplane 的供应商 一员,提供对应腾讯云资源的支持和服务。

二、安装 Provider

在开始使用 Crossplane 前,我们需要先安装 Provider 程序。

apiVersion: pkg.crossplane.io/v1
kind: Provider
metadata:
name: provider-tencentcloud
spec:
package: xpkg.upbound.io/crossplane-contrib/provider-tencentcloud:v0.7.1

三、托管资源(Managed Resources,MR)

托管资源(Managed Resources,MR)是表示 Provider 在 Kubernetes 外部创建的事物的 Kubernetes 对象。在 Kubernetes 中创建托管资源需要 Provider 来创建相应的外部资源。删除托管资源需要提供者删除关联的外部资源。例如,腾讯云提供了 CVM、MySQL、Ckafka 等资源,这些资源在 Kubernetes 中以托管资源的形式存在。

一个可用的托管资源如下:

apiVersion: vpc.tencentcloud.crossplane.io/v1alpha1kind: VPCmetadata: name: resource-vpc namespace: crossplane-systemspec: forProvider: cidrBlock: 10.1.0.0/16 name: crossplane-test-vpc

四、group,kind 和 version

每个托管资源都是一个独特的 API 端点,具有自己的组、种类和版本信息。

例如,以下定义了一个组、种类和版本分别为 vpc.tencentcloud.crossplane.io、VPC、v1alpha1的资源。

apiVersion: vpc.tencentcloud.crossplane.io/v1alpha1kind: VPC

五、forProvider

spec.forProvider 用于定义映射到外部资源的参数。

spec: forProvider: # 定义外部资源的参数 cidrBlock: 10.1.0.0/16 # cidr name: crossplane-test-vpc # 名称

六、name

name 标识该资源在 Kubernetes 中的名称,EXTERNAL-NAME 为该资源的真实 Id。

❯ k get managedNAME READY SYNCED EXTERNAL-NAME AGEresource-vpc-m8zgg True True vpc-hbgs1o5r 2d16h

七、组合(Composition)

组合是用于将多个托管资源创建为单个对象的模板。组合描述了更复杂的部署,组合了多个托管资源和任何资源自定义,例如数据库或云提供商区域的大小。

以下是一个名为 "composition-cvm" 的组合示例:

apiVersion: apiextensions.crossplane.io/v1kind: Compositionmetadata: name: composition-cvmspec: compositeTypeRef: apiVersion: crd.tencentcloud.crossplane.io/v1alpha1 kind: XCvm resources: – name: vpc (略) – name: subnet (略) – name: cvm (略)

在这个示例中,我们将多个不同类型的资源(vpc、subnet、cvm)定义在一起,以便一并进行部署和管理。

八、compositeTypeRef

定义了该组合实际应用于哪个 Composite Resource Definition (XRD) 上,通过apiVersion和kind匹配对应的 XRD。

九、base

base用于定义该资源实际应用在哪个资源上,通过 apiVersion 和 kind 匹配实际资源。

resources: – name: cvm base: apiVersion: cvm.tencentcloud.crossplane.io/v1alpha1 kind: Instance spec: forProvider: # imageId: "img-9qrfy1xt" patches: (略)

十、patches

patches用户定义外部资源和配置中参数的映射,你可以通过该字段,将不同名称或来源的参数在此进行映射匹配。

例如,在上述示例中,为 cvm 资源的vpcId和subnetId参数定义来源。

resources: – name: cvm base: (略) patches: – fromFieldPath: status.share.vpcId toFieldPath: spec.forProvider.vpcId – fromFieldPath: status.share.subnetId toFieldPath: spec.forProvider.subnetId

十一、复合资源定义(Composition Resource Definition,XRD)

XRD 代表自定义 API,由平台工程师创建并由开发人员或最终用户使用。最终用户参考 XRD,即可知道如何使用该复合资源。

以下为一个 XRD 的示例:

apiVersion: apiextensions.crossplane.io/v1kind: CompositeResourceDefinitionmetadata: name: xcvms.crd.tencentcloud.crossplane.iospec: group: crd.tencentcloud.crossplane.io names: kind: XCvm plural: xcvms versions: – name: v1alpha1 served: true referenceable: true schema: openAPIV3Schema: type: object properties: spec: type: object properties: vpcName: type: string (略) required: – vpcName (略) status: description: A Status represents the observed state properties: share: (略) type: object

十二、group、kind

group和kind字段用于匹配 组合(Composition)里的compositeTypeRef字段。

# composition.yamlapiVersion: apiextensions.crossplane.io/v1kind: Compositionmetadata: name: composition-cvmspec: compositeTypeRef: apiVersion: crd.tencentcloud.crossplane.io/v1alpha1 kind: XCvm

十三、versions

可为 XRD 定义多套参数,提供给多个 Composition 复用,用版本进行管理。

十四、properties

用于定义spec和status。

·spec

定义组合可以接收的参数。required 为必选参数。

properties: spec: type: object properties: vpcName: type: string (略) required: – vpcName (略)

·status

定义组合可以提供访问的参数。用户通过share.status访问。

properties: status: description: A Status represents the observed state properties: share: description: Freeform field containing status information type: object x-kubernetes-preserve-unknown-fields: true type: object

十五、复合资源(Composition Resource,XR)

复合资源将一组托管资源表示为单个 Kubernetes 对象。当用户访问 XRD 中定义的自定义 API 时,Crossplane 会创建复合资源。

用户参考 XRD 中的参数定义,在 XR 中指定实际参数值。

以下为一个复合资源的示例:

apiVersion: crd.tencentcloud.crossplane.io/v1alpha1kind: XCvmmetadata: name: xcvm-examplespec: vpcName: xvpcName # 指定具体vpcName subnetName: xsubnetName # 指定具体subnetName availabilityZone: ap-guangzhou-3 # 指定可用区 # imageId: img-9qrfy1xt # 指定镜像(非必选参数)

十六、声明(Claim)

类似于复合资源,但存在于 Kubernetes 命名空间中。每个声明都链接到单个集群范围的复合资源。平台用户在其独特的命名空间中创建声明,将其资源与其他命名空间中的其他团队隔离。详情请参见页面文档,获取 Claims 更多信息。

赞 (0)
上一篇 4天前
下一篇 4天前