云资源自动化 for Crossplane 构建 CKafka 资源

如何创建一个包含 CKafka、VPC和对应子网的复合资源 XCKafka。为了构建XCKafka资源,需要创建并定义xrd.yaml、composition.yaml、xckafka.yaml,然后执行这三个配置文件。

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

一、定义 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.io names: kind: XCkafka plural: xckafka versions: – name: v1alpha1 served: true referenceable: true schema: openAPIV3Schema: type: object properties: spec: type: object properties: vpcName: # VPC名称 type: string subnetName: # 子网名称 type: string vpcAvailabilityZone: # VPC可用区 type: string default: ap-guangzhou-3 chargeType: # 计费类型 type: string zoneId: # Ckafka可用区,需要与VPC可用区匹配 type: integer diskSize: # 磁盘容量 type: integer diskType: # 磁盘类型 type: string bandWidth: # 带宽 type: integer partition: # 分区 type: integer instanceName: # 实例名称 type: string default: test-crossplane-ckafka-instance period: # 计费时长,用于包年包月类型 type: string required: – vpcName – subnetName – zoneId – chargeType 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

接着,在 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/v1alpha1 kind: XCkafka resources: – name: vpc base: apiVersion: vpc.tencentcloud.crossplane.io/v1alpha1 kind: VPC spec: forProvider: cidrBlock: "10.1.0.0/16" patches: – fromFieldPath: spec.vpcName toFieldPath: spec.forProvider.name – type: ToCompositeFieldPath fromFieldPath: status.atProvider.id toFieldPath: status.share.vpcId
– name: subnet base: apiVersion: vpc.tencentcloud.crossplane.io/v1alpha1 kind: Subnet spec: forProvider: cidrBlock: "10.1.2.0/24" patches: – fromFieldPath: status.share.vpcId # 使用上面定义的 VPC toFieldPath: spec.forProvider.vpcId – fromFieldPath: spec.subnetName toFieldPath: spec.forProvider.name – fromFieldPath: spec.vpcAvailabilityZone # VPC 的可用区 toFieldPath: spec.forProvider.availabilityZone – type: ToCompositeFieldPath fromFieldPath: status.atProvider.id toFieldPath: status.share.subnetId – name: ckafka base: apiVersion: kafka.tencentcloud.crossplane.io/v1alpha1 kind: Instance spec: forProvider: kafkaVersion: 2.4.1 patches: – fromFieldPath: status.share.vpcId toFieldPath: spec.forProvider.vpcId – fromFieldPath: status.share.subnetId toFieldPath: spec.forProvider.subnetId – fromFieldPath: spec.zoneId toFieldPath: spec.forProvider.zoneId – fromFieldPath: spec.chargeType toFieldPath: spec.forProvider.chargeType – fromFieldPath: spec.instanceName toFieldPath: spec.forProvider.instanceName – fromFieldPath: spec.diskSize toFieldPath: spec.forProvider.diskSize – fromFieldPath: spec.bandWidth toFieldPath: spec.forProvider.bandWidth – fromFieldPath: spec.partition toFieldPath: spec.forProvider.partition – fromFieldPath: spec.diskType toFieldPath: spec.forProvider.diskType – type: ToCompositeFieldPath fromFieldPath: status.atProvider.id toFieldPath: status.share.ckafkaId # 实例Id

三、创建 XCkafka 资源

现在,在 xckafka.yaml 中为复合资源设置子网和实例配置。

# xckafka.yamlapiVersion: crd.tencentcloud.crossplane.io/v1alpha1kind: XCkafkametadata: name: xckafka-example # 复合资源前缀spec: # 指定子网和可用区 vpcName: test-crossplane-vpc subnetName: test-crossplane-subnet vpcAvailabilityZone: ap-guangzhou-7 # 实例配置 zoneId: 100007 chargeType: POSTPAID_BY_HOUR instanceName: test-crossplane-ckafka-instance diskSize: 200 bandWidth: 20 partition: 400 diskType: 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

此时,你可在控制台查看刚才创建的CKafka 资源。

查看 VPC 资源。

查看 子网资源。

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