Kafka 集群扩缩容
KubeBlocks 支持对 Kafka 集群进行垂直扩缩容和水平扩缩容。
垂直扩缩容
你可以通过更改资源需求和限制(CPU 和存储)来垂直扩展集群。例如,可通过垂直扩容将资源类别从 1C2G 调整为 2C4G。
开始之前
确保集群处于 Running
状态,否则以下操作可能会失败。
- kubectl
- kbcli
kubectl -n demo get cluster mycluster
>
NAME CLUSTER-DEFINITION VERSION TERMINATION-POLICY STATUS AGE
mycluster kafka kafka-3.3.2 Delete Running 19m
kbcli cluster list mycluster -n demo
>
NAME NAMESPACE CLUSTER-DEFINITION VERSION TERMINATION-POLICY STATUS CREATED-TIME
mycluster demo kafka kafka-3.3.2 Delete Running Sep 27,2024 15:15 UTC+0800
步骤
- OpsRequest
- 编辑集群 YAML 文件
- kbcli
-
对指定的集群应用 OpsRequest,可根据您的需求配置参数。
kubectl apply -f - <<EOF
apiVersion: apps.kubeblocks.io/v1alpha1
kind: OpsRequest
metadata:
name: ops-vertical-scaling
namespace: demo
spec:
clusterRef: mycluster
type: VerticalScaling
verticalScaling:
- componentName: broker
requests:
memory: "2Gi"
cpu: "1"
limits:
memory: "4Gi"
cpu: "2"
EOF -
查看运维任务状态,验证垂直扩缩容操作是否成功。
kubectl get ops -n demo
>
NAMESPACE NAME TYPE CLUSTER STATUS PROGRESS AGE
demo ops-vertical-scaling VerticalScaling mycluster Succeed 3/3 6m如果有报错,可执行
kubectl describe ops -n demo
命令查看该运维操作的相关事件,协助排障。 -
当 OpsRequest 状态为
Succeed
或集群状态再次回到Running
后,查看相应资源是否变更。kubectl describe cluster mycluster -n demo
>
...
Component Specs:
Component Def Ref: kafka
Enabled Logs:
running
DisableExporter: true
Name: kafka
Replicas: 2
Resources:
Limits:
Cpu: 2
Memory: 4Gi
Requests:
Cpu: 1
Memory: 2Gi
-
修改 YAML 文件中
spec.componentSpecs.resources
的配置。spec.componentSpecs.resources
控制资源的请求值和限制值,修改参数值将触发垂直扩缩容。apiVersion: apps.kubeblocks.io/v1alpha1
kind: Cluster
metadata:
name: mycluster
namespace: demo
spec:
clusterDefinitionRef: kafka
clusterVersionRef: kafka-3.3.2
componentSpecs:
- name: broker
componentDefRef: broker
replicas: 1
resources: # 修改参数值
requests:
memory: "2Gi"
cpu: "1"
limits:
memory: "4Gi"
cpu: "2"
volumeClaimTemplates:
- name: data
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
terminationPolicy: Delete -
当集群状态再次回到
Running
后,查看相应资源是否变更。kubectl describe cluster mycluster -n demo
>
...
Component Specs:
Component Def Ref: kafka
Enabled Logs:
running
DisableExporter: true
Name: kafka
Replicas: 2
Resources:
Limits:
Cpu: 2
Memory: 4Gi
Requests:
Cpu: 1
Memory: 2Gi
-
更改配置。
配置参数
--components
、--memory
和--cpu
,并执行以下命令。kbcli cluster vscale mycluster -n demo --components="broker" --memory="4Gi" --cpu="2"
--components
的值可以是broker
或controller
。- broker:在组合模式下表示所有节点;在分离模式下表示所有 broker 节点。
- controller:表示在分离模式下的所有对应节点。
--memory
表示组件内存的请求和限制大小。--cpu
表示组件 CPU 的请求和限制大小。
-
通过以下任意一种方式验证垂直扩容是否完成。
-
查看 OpsRequest 进度。
执行命令后,KubeBlocks 会自动输出查看 OpsRequest 进度的命令,可通过该命令查看 OpsRequest 进度的细节,包括 OpsRequest 的状态、Pod 状态等。当 OpsRequest 的状态为
Succeed
时,表明这一任务已完成。kbcli cluster describe-ops mycluster-verticalscaling-g67k9 -n demo
-
查看集群状态。
kbcli cluster list mycluster -n demo
>
NAME NAMESPACE CLUSTER-DEFINITION VERSION TERMINATION-POLICY STATUS CREATED-TIME
mycluster demo kafka kafka-3.3.2 Delete Updating Sep 27,2024 15:15 UTC+0800- STATUS=Updating 表示正在进行垂直扩容。
- STATUS=Running 表示垂直扩容已完成。
- STATUS=Abnormal 表示垂直扩容异常。原因可能是正常实例的数量少于总实例数,或者 Leader 实例正常运行而其他实例异常。
您可以手动检查是否由于资源不足而导致报错。如果 Kubernetes 集群支持 AutoScaling,系统在资源充足的情况下会执行自动恢复。或者你也可以创建足够的资源,并使用
kubectl describe
命令进行故障排除。
备注垂直扩容不会同步与 CPU 和内存相关的参数,需要手动调用配置的 OpsRequest 来进行更改。详情请参考配置。
-
-
当 OpsRequest 状态为
Succeed
或集群状态再次回到Running
后,检查资源是否已变更。kbcli cluster describe mycluster -n demo