用 KubeBlocks 管理 StarRocks
StarRocks 是一款高性能分析型数据仓库,使用向量化、MPP 架构、CBO、智能物化视图、可实时更新的列式存储引擎等技术实现多维、实时、高并发的数据分析。
本文档展示了如何通过 kbcli、kubectl 或 YAML 文件等当时创建和管理 StarRocks 集群。您可以在 GitHub 仓库查看 YAML 示例。
开始之前
- 如果您想通过
kbcli创建并连接 StarRocks 集群,请先安装 kbcli。 - 安装 KubeBlocks。
- 安装并启用 starrocks 引擎。
创建集群
步骤:
- kubectl
- kbcli
KubeBlocks 通过 Cluster 定义集群。以下是创建 StarRocks 集群的示例。Pod 默认分布在不同节点。但如果您只有一个节点可用于部署集群,可将 spec.affinity.topologyKeys 设置为 null。
生产环境中,不建议将所有副本部署在同一个节点上,因为这可能会降低集群的可用性。
cat <<EOF | kubectl apply -f -
apiVersion: apps.kubeblocks.io/v1alpha1
kind: Cluster
metadata:
name: mycluster
namespace: demo
spec:
clusterDefinitionRef: starrocks-ce
terminationPolicy: Delete
topology: shared-nothing
tolerations:
- key: kb-data
operator: Equal
value: 'true'
effect: NoSchedule
componentSpecs:
- name: fe
componentDef: starrocks-ce-fe
serviceVersion: 3.3.0
replicas: 1
resources:
limits:
cpu: "1"
memory: "1Gi"
requests:
cpu: "1"
memory: "1Gi"
volumeClaimTemplates:
- name: data # ref clusterDefinition components.containers.volumeMounts.name
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 20Gi
- name: be
componentDef: starrocks-ce-be
serviceVersion: 3.3.0
replicas: 1
resources:
limits:
cpu: "1"
memory: "1Gi"
requests:
cpu: "1"
memory: "1Gi"
volumeClaimTemplates:
- name: data
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: "20Gi"
EOF
| 字段 | 定义 |
|---|---|
spec.terminationPolicy | 集群的终止策略,默认值为 Delete,有效值为 DoNotTerminate、Halt、Delete 和 WipeOut。具体定义可参考 终止策略。 |
spec.affinity | 为集群的 Pods 定义了一组节点亲和性调度规则。该字段可控制 Pods 在集群中节点上的分布。 |
spec.affinity.podAntiAffinity | 定义了不在同一 component 中的 Pods 的反亲和性水平。该字段决定了 Pods 以何种方式跨节点分布,以提升可用性和性能。 |
spec.affinity.topologyKeys | 用于定义 Pod 反亲和性和 Pod 分布约束的拓扑域的节点标签值。 |
spec.tolerations | 该字段为数组,用于定义集群中 Pods 的容忍,确保 Pod 可被调度到具有匹配污点的节点上。 |
spec.componentSpecs | 集群 components 列表,定义了集群 components。该字段允许对集群中的每个 component 进行自定义配置。 |
spec.componentSpecs.componentDefRef | 表示 cluster definition 中定义的 component definition 的名称,可通过执行 kubectl get clusterdefinition starrocks -o json | jq '.spec.componentDefs[].name' 命令获取 component definition 名称。 |
spec.componentSpecs.name | 定义了 component 的名称。 |
spec.componentSpecs.disableExporter | 定义了是否开启监控功能。 |
spec.componentSpecs.replicas | 定义了 component 中 replicas 的数量。 |
spec.componentSpecs.resources | 定义了 component 的资源要求。 |
KubeBlocks operator 监控 Cluster CRD 并创建集群和全部依赖资源。您可执行以下命令获取集群创建的所有资源信息。
kubectl get all,secret,rolebinding,serviceaccount -l app.kubernetes.io/instance=mycluster -n demo
执行以下命令,查看已创建的 StarRocks 集群。
kubectl get cluster mycluster -n demo -o yaml
-
执行以下命令,创建 StarRocks 集群。
kbcli cluster create mycluster --cluster-definition=starrocks -n demo如果您需要自定义集群规格,kbcli 也提供了诸多参数,如支持设置引擎版本、终止策略、CPU、内存规格。您可通过在命令结尾添加 --help 或 -h 来查看具体说明。比如,
kbcli cluster create --help
kbcli cluster create -h -
验证集群是否创建成功。
kbcli cluster list -n demo
>
NAME NAMESPACE CLUSTER-DEFINITION VERSION TERMINATION-POLICY STATUS CREATED-TIME
mycluster demo starrocks starrocks-3.1.1 Delete Running Jul 17,2024 19:06 UTC+0800 -
查看集群信息。
kbcli cluster describe mycluster -n demo
>
Name: mycluster Created Time: Jul 17,2024 19:06 UTC+0800
NAMESPACE CLUSTER-DEFINITION VERSION STATUS TERMINATION-POLICY
demo starrocks starrocks-3.1.1 Running Delete
Endpoints:
COMPONENT MODE INTERNAL EXTERNAL
fe ReadWrite mycluster-fe.default.svc.cluster.local:9030 <none>
Topology:
COMPONENT INSTANCE ROLE STATUS AZ NODE CREATED-TIME
be mycluster-be-0 <none> Running <none> minikube/192.168.49.2 Jul 17,2024 19:06 UTC+0800
fe mycluster-fe-0 <none> Running <none> minikube/192.168.49.2 Jul 17,2024 19:06 UTC+0800
Resources Allocation:
COMPONENT DEDICATED CPU(REQUEST/LIMIT) MEMORY(REQUEST/LIMIT) STORAGE-SIZE STORAGE-CLASS
fe false 1 / 1 1Gi / 1Gi data:20Gi standard
be false 1 / 1 1Gi / 1Gi data:20Gi standard
Images:
COMPONENT TYPE IMAGE
fe fe docker.io/starrocks/fe-ubuntu:2.5.4
be be docker.io/starrocks/be-ubuntu:2.5.4
Show cluster events: kbcli cluster list-events -n demo mycluster
扩缩容
垂直扩缩容
开始之前
确认集群状态是否为 Running。否则,后续相关操作可能会失败。
- kubectl
- kbcli
kubectl get cluster mycluster -n demo
>
NAME CLUSTER-DEFINITION VERSION TERMINATION-POLICY STATUS AGE
mycluster starrocks starrocks-ce-3.1.1 Delete Running 47m
kbcli cluster list -n demo
>
NAME NAMESPACE CLUSTER-DEFINITION VERSION TERMINATION-POLICY STATUS CREATED-TIME
mycluster demo starrocks starrocks-3.1.1 Delete Running Jul 17,2024 19:06 UTC+0800
步骤
- OpsRequest
- 修改集群 YAML 文件
- kbcli
-
对指定的集群应用 OpsRequest,可根据您的需求配置参数。
kubectl apply -f - <<EOF
apiVersion: apps.kubeblocks.io/v1alpha1
kind: OpsRequest
metadata:
name: mycluster-vertical-scaling
namespace: demo
spec:
clusterName: mycluster
type: VerticalScaling
verticalScaling:
- componentName: fe
requests:
memory: "2Gi"
cpu: "1"
limits:
memory: "4Gi"
cpu: "2"
EOF -
查看运维任务状态,验证垂直扩缩容操作是否成功。
kubectl get ops -n demo
>
NAMESPACE NAME TYPE CLUSTER STATUS PROGRESS AGE
demo mycluster-vertical-scaling VerticalScaling mycluster Succeed 3/3 6m如果有报错,可执行
kubectl describe ops -n demo命令查看该运维操作的相关事件,协助排障。 -
当 OpsRequest 状态为
Succeed或集群状态再次回到Running后,查看相应资源是否变更。kubectl describe cluster mycluster -n demo
-
修改 YAML 文件中
spec.componentSpecs.resources的配置。spec.componentSpecs.resources控制资源的请求值和限制值,修改参数值将触发垂直扩缩容。apiVersion: apps.kubeblocks.io/v1alpha1
kind: Cluster
metadata:
name: mycluster
namespace: demo
spec:
clusterDefinitionRef: starrocks-ce
clusterVersionRef: starrocks-ce-3.1.1
componentSpecs:
- name: fe
componentDefRef: fe
replicas: 2
resources: # 修改 resources 下的参数值
requests:
memory: "2Gi"
cpu: "1"
limits:
memory: "4Gi"
cpu: "2" -
当集群状态再次回到
Running后,查看相应资源是否变更。kubectl describe cluster mycluster -n demo
-
更改配置。
配置参数
--components、--memory和--cpu,并执行以下命令。kbcli cluster vscale mycluster --cpu=2 --memory=20Gi --components=be -n demo -
通过以下任意一种方式验证垂直扩容是否完成。
-
查看 OpsRequest 进度。
执行命令后,KubeBlocks 会自动输出查看 OpsRequest 进度的命令,可通过该命令查看 OpsRequest 进度的细节,包括 OpsRequest 的状态、Pod 状态等。当 OpsRequest 的状态为 Succeed 时,表明这一任务已完成。
kbcli cluster describe-ops mycluster-verticalscaling-smx8b -n demo -
查看集群状态。
kbcli cluster list mycluster -n demo
-