这篇向你介绍以上核心组件的概念和使用。你也可参考 示例教程 获取以上概念的示例。
一、云资源供应商(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 更多信息。