构建 CKafka 资源

最近更新时间:2024-12-20 18:23:32

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

定义 XRD

首先我们需要创建自定义 API,即为后面创建的复合资源,定义该复合资源对应的参数和类型。
我们在 xrd.yaml 定义了 MySQL 相关的配置(如:规格,内存,计费类型等)和 VPC、子网资源配置。
其中vpcNamesubnetNamezoneIdchargeType 为必选参数,用于创建 VPC、子网和 KafKa 实例。
# xrd.yaml
apiVersion: apiextensions.crossplane.io/v1
kind: CompositeResourceDefinition
metadata:
name: xckafka.crd.tencentcloud.crossplane.io
spec:
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.yaml
apiVersion: apiextensions.crossplane.io/v1
kind: Composition
metadata:
name: composition-ckafka
spec:
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.yaml
apiVersion: crd.tencentcloud.crossplane.io/v1alpha1
kind: XCkafka
metadata:
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.yaml
kubectl apply -f composition.yaml
kubectl apply -f xckafka.yaml
执行结果如下:
创建了前缀为 xckafka-example- 的 VPC,子网和 CKafka 实例。
kubectl get managed
NAME READY SYNCED EXTERNAL-NAME AGE
instance.kafka.tencentcloud.crossplane.io/xckafka-example-2fpsm False False ckafka-xjvq5d5p 6m31s

NAME READY SYNCED EXTERNAL-NAME AGE
subnet.vpc.tencentcloud.crossplane.io/xckafka-example-gdjb4 True True subnet-8ylo7i5s 6m31s

NAME READY SYNCED EXTERNAL-NAME AGE
vpc.vpc.tencentcloud.crossplane.io/xckafka-example-z8x5z True True vpc-kkmy0ikp 6m31s
此时,您可在控制台查看刚才创建的CKafka 资源



查看 VPC 资源



查看 子网资源