本文介绍如何创建一个包含 CKafka、VPC和对应子网的复合资源
XCKafka
。为了构建XCKafka
资源,需要创建并定义xrd.yaml
、composition.yaml
、xckafka.yaml
,然后执行这三个配置文件。定义 XRD
首先我们需要创建自定义 API,即为后面创建的复合资源,定义该复合资源对应的参数和类型。
我们在
xrd.yaml
定义了 MySQL 相关的配置(如:规格,内存,计费类型等)和 VPC、子网资源配置。其中
vpcName
,subnetName
,zoneId
,chargeType
为必选参数,用于创建 VPC、子网和 KafKa 实例。# xrd.yamlapiVersion: apiextensions.crossplane.io/v1kind: CompositeResourceDefinitionmetadata:name: xckafka.crd.tencentcloud.crossplane.iospec:group: crd.tencentcloud.crossplane.ionames:kind: XCkafkaplural: xckafkaversions:- name: v1alpha1served: truereferenceable: trueschema:openAPIV3Schema:type: objectproperties:spec:type: objectproperties:vpcName: # VPC名称type: stringsubnetName: # 子网名称type: stringvpcAvailabilityZone: # VPC可用区type: stringdefault: ap-guangzhou-3chargeType: # 计费类型type: stringzoneId: # Ckafka可用区,需要与VPC可用区匹配type: integerdiskSize: # 磁盘容量type: integerdiskType: # 磁盘类型type: stringbandWidth: # 带宽type: integerpartition: # 分区type: integerinstanceName: # 实例名称type: stringdefault: test-crossplane-ckafka-instanceperiod: # 计费时长,用于包年包月类型type: stringrequired:- vpcName- subnetName- zoneId- chargeTypestatus:description: A Status represents the observed stateproperties:share:description: Freeform field containing status informationtype: objectx-kubernetes-preserve-unknown-fields: truetype: object
定义 Composition
接着,在
composition.yaml
中定义复合资源,包括一个 VPC,一个子网,和在该 VPC 下的 MySQL 实例。用户可在资源创建后,通过
status.share
获取 MySQL 的实例 Id。# composition.yamlapiVersion: apiextensions.crossplane.io/v1kind: Compositionmetadata:name: composition-ckafkaspec:compositeTypeRef:apiVersion: crd.tencentcloud.crossplane.io/v1alpha1kind: XCkafkaresources:- name: vpcbase:apiVersion: vpc.tencentcloud.crossplane.io/v1alpha1kind: VPCspec:forProvider:cidrBlock: "10.1.0.0/16"patches:- fromFieldPath: spec.vpcNametoFieldPath: spec.forProvider.name- type: ToCompositeFieldPathfromFieldPath: status.atProvider.idtoFieldPath: status.share.vpcId- name: subnetbase:apiVersion: vpc.tencentcloud.crossplane.io/v1alpha1kind: Subnetspec:forProvider:cidrBlock: "10.1.2.0/24"patches:- fromFieldPath: status.share.vpcId # 使用上面定义的 VPCtoFieldPath: spec.forProvider.vpcId- fromFieldPath: spec.subnetNametoFieldPath: spec.forProvider.name- fromFieldPath: spec.vpcAvailabilityZone # VPC 的可用区toFieldPath: spec.forProvider.availabilityZone- type: ToCompositeFieldPathfromFieldPath: status.atProvider.idtoFieldPath: status.share.subnetId- name: ckafkabase:apiVersion: kafka.tencentcloud.crossplane.io/v1alpha1kind: Instancespec:forProvider:kafkaVersion: 2.4.1patches:- fromFieldPath: status.share.vpcIdtoFieldPath: spec.forProvider.vpcId- fromFieldPath: status.share.subnetIdtoFieldPath: spec.forProvider.subnetId- fromFieldPath: spec.zoneIdtoFieldPath: spec.forProvider.zoneId- fromFieldPath: spec.chargeTypetoFieldPath: spec.forProvider.chargeType- fromFieldPath: spec.instanceNametoFieldPath: spec.forProvider.instanceName- fromFieldPath: spec.diskSizetoFieldPath: spec.forProvider.diskSize- fromFieldPath: spec.bandWidthtoFieldPath: spec.forProvider.bandWidth- fromFieldPath: spec.partitiontoFieldPath: spec.forProvider.partition- fromFieldPath: spec.diskTypetoFieldPath: spec.forProvider.diskType- type: ToCompositeFieldPathfromFieldPath: status.atProvider.idtoFieldPath: status.share.ckafkaId # 实例Id
创建 XCkafka 资源
现在,在
xckafka.yaml
中为复合资源设置子网和实例配置。# xckafka.yamlapiVersion: crd.tencentcloud.crossplane.io/v1alpha1kind: XCkafkametadata:name: xckafka-example # 复合资源前缀spec:# 指定子网和可用区vpcName: test-crossplane-vpcsubnetName: test-crossplane-subnetvpcAvailabilityZone: ap-guangzhou-7# 实例配置zoneId: 100007chargeType: POSTPAID_BY_HOURinstanceName: test-crossplane-ckafka-instancediskSize: 200bandWidth: 20partition: 400diskType: CLOUD_BASIC
使用
kubectl apply
命令依次执行上述配置文件,完成资源的创建。kubectl
apply -f xrd.yamlkubectl
apply -f composition.yamlkubectl
apply -f xckafka.yaml
执行结果如下:
创建了前缀为
xckafka-example-
的 VPC,子网和 CKafka 实例。❯kubectl
get managedNAME READY SYNCED EXTERNAL-NAME AGEinstance.kafka.tencentcloud.crossplane.io/xckafka-example-2fpsm False False ckafka-xjvq5d5p 6m31sNAME READY SYNCED EXTERNAL-NAME AGEsubnet.vpc.tencentcloud.crossplane.io/xckafka-example-gdjb4 True True subnet-8ylo7i5s 6m31sNAME READY SYNCED EXTERNAL-NAME AGEvpc.vpc.tencentcloud.crossplane.io/xckafka-example-z8x5z True True vpc-kkmy0ikp 6m31s





