Manage StarRocks with KubeBlocks
StarRocks is a next-gen, high-performance analytical data warehouse that enables real-time, multi-dimensional, and highly concurrent data analysis.
This tutorial illustrates how to create and manage a StarRocks cluster by kbcli
, kubectl
or a YAML file. You can find the YAML examples and guides in the GitHub repository.
Before you start
-
Install kbcli if you want to manage the StarRocks cluster with
kbcli
. -
To keep things isolated, create a separate namespace called
demo
throughout this tutorial.kubectl create namespace demo
Create a cluster
KubeBlocks implements a Cluster
CRD to define a cluster. Here is an example of creating a StarRocks cluster. If you only have one node for deploying a cluster with multiple replicas, configure the cluster affinity by setting spec.schedulingPolicy
or spec.componentSpecs.schedulingPolicy
. For details, you can refer to the API docs. But for a production environment, it is not recommended to deploy all replicas on one node, which may decrease the cluster availability.
cat <<EOF | kubectl apply -f -
apiVersion: apps.kubeblocks.io/v1
kind: Cluster
metadata:
name: mycluster
namespace: demo
spec:
terminationPolicy: Delete
componentSpecs:
- name: fe
componentDef: starrocks-ce-fe
serviceAccountName: kb-starrocks-cluster
replicas: 1
resources:
limits:
cpu: '1'
memory: 1Gi
requests:
cpu: '1'
memory: 1Gi
- name: be
componentDef: starrocks-ce-be
replicas: 2
resources:
limits:
cpu: '1'
memory: 1Gi
requests:
cpu: '1'
memory: 1Gi
volumeClaimTemplates:
- name: data
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 20Gi
EOF
Field | Definition |
---|---|
spec.terminationPolicy | It is the policy of cluster termination. Valid values are DoNotTerminate , Delete , WipeOut . For the detailed definition, you can refer to Termination Policy. |
spec.componentSpecs | It is the list of ClusterComponentSpec objects that define the individual Components that make up a Cluster. This field allows customized configuration of each component within a cluster. Note: shardingSpecs and componentSpecs cannot both be empty; at least one must be defined to configure a cluster. ClusterComponentSpec defines the specifications for a Component in a Cluster. |
spec.componentSpecs.replicas | It specifies the number of replicas of the component. |
spec.componentSpecs.resources | It specifies the resources required by the Component. |
spec.componentSpecs.volumeClaimTemplates | It specifies a list of PersistentVolumeClaim templates that define the storage requirements for the Component. |
spec.componentSpecs.volumeClaimTemplates.name | It refers to the name of a volumeMount defined in componentDefinition.spec.runtime.containers[*].volumeMounts . |
spec.componentSpecs.volumeClaimTemplates.spec.storageClassName | It is the name of the StorageClass required by the claim. If not specified, the StorageClass annotated with storageclass.kubernetes.io/is-default-class=true will be used by default. |
spec.componentSpecs.volumeClaimTemplates.spec.resources.storage | You can set the storage size as needed. |
For more API fields and descriptions, refer to the API Reference.
KubeBlocks operator watches for the Cluster
CRD and creates the cluster and all dependent resources. You can get all the resources created by the cluster with kubectl get all,secret,rolebinding,serviceaccount -l app.kubernetes.io/instance=mycluster -n demo
.
kubectl get all,secret,rolebinding,serviceaccount -l app.kubernetes.io/instance=mycluster -n demo
Run the following command to see the created StarRocks cluster object:
kubectl get cluster mycluster -n demo -o yaml
Scale
Scale vertically
Before you start
Check whether the cluster status is Running
. Otherwise, the following operations may fail.
- kubectl
- kbcli
kubectl get cluster mycluster -n demo
>
NAME CLUSTER-DEFINITION VERSION TERMINATION-POLICY STATUS AGE
mycluster starrocks starrocks-3.1.1 Delete Running 4m29s
kbcli cluster list mycluster -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
Steps
- OpsRequest
- Edit cluster YAML file
- kbcli
-
Apply an OpsRequest to the specified cluster. Configure the parameters according to your needs.
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 -
Check the operation status to validate the vertical scaling.
kubectl get ops -n demo
>
NAMESPACE NAME TYPE CLUSTER STATUS PROGRESS AGE
demo mycluster-vertical-scaling VerticalScaling mycluster Succeed 3/3 6mIf an error occurs, you can troubleshoot with
kubectl describe ops -n demo
command to view the events of this operation. -
Check whether the corresponding resources change.
kubectl describe cluster mycluster -n demo
-
Change the configuration of
spec.componentSpecs.resources
in the YAML file.spec.componentSpecs.resources
controls the requirement and limit of resources and changing them triggers a vertical scaling.kubectl edit cluster mycluster -n demo
Edit the values of
spec.componentSpecs.resources
....
spec:
clusterDefinitionRef: starrocks-ce
clusterVersionRef: starrocks-ce-3.1.1
componentSpecs:
- name: fe
componentDefRef: fe
replicas: 2
resources: # Change the values of resources
requests:
memory: "2Gi"
cpu: "1"
limits:
memory: "4Gi"
cpu: "2"
... -
Check whether the corresponding resources change.
kubectl describe cluster mycluster -n demo
-
Set the
--cpu
and--memory
values according to your needs and run the following command to perform vertical scaling.kbcli cluster vscale mycluster -n demo --cpu=2 --memory=20Gi --components=be
Please wait a few seconds until the scaling process is over.
-
Validate the vertical scaling operation.
-
View the OpsRequest progress.
KubeBlocks outputs a command automatically for you to view the OpsRequest progress. The output includes the status of this OpsRequest and Pods. When the status is
Succeed
, this OpsRequest is completed.kbcli cluster describe-ops mycluster-verticalscaling-smx8b -n demo
-
Check the cluster status.
kbcli cluster list mycluster -n demo
>
NAME NAMESPACE CLUSTER-DEFINITION VERSION TERMINATION-POLICY STATUS CREATED-TIME
mycluster demo starrocks starrocks-3.1.1 Delete Updating Jul 17,2024 19:06 UTC+0800- STATUS=Updating: it means the vertical scaling is in progress.
- STATUS=Running: it means the vertical scaling operation has been applied.
- STATUS=Abnormal: it means the vertical scaling is abnormal. The reason may be that the number of the normal instances is less than that of the total instance or the leader instance is running properly while others are abnormal.
To solve the problem, you can manually check whether this error is caused by insufficient resources. Then if AutoScaling is supported by the Kubernetes cluster, the system recovers when there are enough resources. Otherwise, you can create enough resources and troubleshoot with
kubectl describe
command.
-
-
After the OpsRequest status is
Succeed
or the cluster status isRunning
again, check whether the corresponding resources change.kbcli cluster describe mycluster -n demo
Scale horizontally
Horizontal scaling changes the amount of pods. For example, you can scale out replicas from three to five.
From v0.9.0, besides replicas, KubeBlocks also supports scaling in and out instances, refer to the Horizontal Scale tutorial for more details and examples.
Before you start
Check whether the cluster status is Running
. Otherwise, the following operations may fail.
- kubectl
- kbcli
kubectl get cluster mycluster -n demo
>
NAME CLUSTER-DEFINITION VERSION TERMINATION-POLICY STATUS AGE
mycluster starrocks starrocks-3.1.1 Delete Running 4m29s
kbcli cluster list mycluster -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
Steps
- OpsRequest
- Edit cluster YAML file
- kbcli
-
Apply an OpsRequest to a specified cluster. Configure the parameters according to your needs.
The example below means adding two replicas for the component
fe
.kubectl apply -f - <<EOF
apiVersion: apps.kubeblocks.io/v1alpha1
kind: OpsRequest
metadata:
name: mycluster-horizontal-scaling
namespace: demo
spec:
clusterName: mycluster
type: HorizontalScaling
horizontalScaling:
- componentName: fe
scaleOut:
replicaChanges: 2
EOFIf you want to scale in replicas, replace
scaleOut
withscaleIn
.The example below means deleting two replicas for the component
fe
.kubectl apply -f - <<EOF
apiVersion: apps.kubeblocks.io/v1alpha1
kind: OpsRequest
metadata:
name: mycluster-horizontal-scaling
namespace: demo
spec:
clusterName: mycluster
type: HorizontalScaling
horizontalScaling:
- componentName: fe
scaleIn:
replicaChanges: 2
EOF -
Check the operation status to validate the horizontal scaling status.
kubectl get ops -n demo
>
NAMESPACE NAME TYPE CLUSTER STATUS PROGRESS AGE
demo mycluster-horizontal-scaling HorizontalScaling mycluster Succeed 3/3 6mIf an error occurs, you can troubleshoot with
kubectl describe ops -n demo
command to view the events of this operation. -
Check whether the corresponding resources change.
kubectl describe cluster mycluster -n demo
-
Change the configuration of
spec.componentSpecs.replicas
in the YAML file.spec.componentSpecs.replicas
stands for the pod amount and changing this value triggers a horizontal scaling of a cluster.kubectl edit cluster mycluster -n demo
Edit the values of
spec.componentSpecs.replicas
....
spec:
clusterDefinitionRef: starrocks-ce
clusterVersionRef: starrocks-ce-3.1.1
componentSpecs:
- name: fe
componentDefRef: fe
replicas: 2 # Change this value
... -
Check whether the corresponding resources change.
kubectl describe cluster mycluster -n demo
-
Configure the parameters
--components
and--replicas
, and run the command.kbcli cluster hscale mycluster --replicas=3 --components=be -n demo
--components
describes the component name ready for horizontal scaling.--replicas
describes the replica amount of the specified components. Edit the amount based on your demands to scale in or out replicas.
Please wait a few seconds until the scaling process is over.
-
Validate the vertical scaling.
-
View the OpsRequest progress.
KubeBlocks outputs a command automatically for you to view the OpsRequest progress. The output includes the status of this OpsRequest and Pods. When the status is
Succeed
, this OpsRequest is completed.kbcli cluster describe-ops mycluster-horizontalscaling-ffp9p -n demo
-
View the cluster status.
kbcli cluster list mycluster -n demo
- STATUS=Updating: it means horizontal scaling is in progress.
- STATUS=Running: it means horizontal scaling has been applied.
-
-
After the OpsRequest status is
Succeed
or the cluster status isRunning
again, check whether the corresponding resources change.kbcli cluster describe mycluster -n demo
Volume expansion
Before you start
Check whether the cluster status is Running
. Otherwise, the following operations may fail.
- kubectl
- kbcli
kubectl get cluster mycluster -n demo
>
NAME CLUSTER-DEFINITION VERSION TERMINATION-POLICY STATUS AGE
mycluster starrocks starrocks-3.1.1 Delete Running 4m29s
kbcli cluster list mycluster -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
Steps
- OpsRequest
- Edit cluster YAML file
- kbcli
-
Change the value of storage according to your need and run the command below to expand the volume of a cluster.
kubectl apply -f - <<EOF
apiVersion: apps.kubeblocks.io/v1alpha1
kind: OpsRequest
metadata:
name: mycluster-volume-expansion
namespace: demo
spec:
clusterName: mycluster
type: VolumeExpansion
volumeExpansion:
- componentName: be
volumeClaimTemplates:
- name: be-storage
storage: "40Gi"
EOF -
Validate the volume expansion operation.
kubectl get ops -n demo
>
NAMESPACE NAME TYPE CLUSTER STATUS PROGRESS AGE
demo mycluster-volume-expansion VolumeExpansion mycluster Succeed 3/3 6mIf an error occurs, you can troubleshoot with
kubectl describe ops -n demo
command to view the events of this operation. -
Check whether the corresponding cluster resources change.
kubectl describe cluster mycluster -n demo
-
Change the value of
spec.componentSpecs.volumeClaimTemplates.spec.resources
in the cluster YAML file.spec.componentSpecs.volumeClaimTemplates.spec.resources
is the storage resource information of the pod and changing this value triggers the volume expansion of a cluster.kubectl edit cluster mycluster -n demo
Edit the values of
spec.componentSpecs.volumeClaimTemplates.spec.resources
....
spec:
clusterDefinitionRef: starrocks-ce
clusterVersionRef: starrocks-ce-3.1.1
componentSpecs:
- name: be
componentDefRef: be
volumeClaimTemplates:
- name: be-storage
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 40Gi # Change the volume storage size
... -
Check whether the corresponding cluster resources change.
kubectl describe cluster mycluster -n demo
-
Set the
--storage
value according to your need and run the command to expand the volume.kbcli cluster volume-expand mycluster -n demo --storage=40Gi --components=be
The volume expansion may take a few minutes.
-
Validate the volume expansion operation.
-
View the OpsRequest progress.
KubeBlocks outputs a command automatically for you to view the details of the OpsRequest progress. The output includes the status of this OpsRequest and PVC. When the status is
Succeed
, this OpsRequest is completed.kbcli cluster describe-ops mycluster-volumeexpansion-5pbd2 -n demo
-
View the cluster status.
kbcli cluster list mycluster -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
-
-
After the OpsRequest status is
Succeed
or the cluster status isRunning
again, check whether the corresponding resources change.kbcli cluster describe mycluster -n demo
Restart
- OpsRequest
- kbcli
-
Restart a cluster.
kubectl apply -f - <<EOF
apiVersion: apps.kubeblocks.io/v1alpha1
kind: OpsRequest
metadata:
name: mycluster-restart
namespace: demo
spec:
clusterName: mycluster
type: Restart
restart:
- componentName: be
EOF -
Check the pod and operation status to validate the restarting.
kubectl get pod -n demo
kubectl get ops ops-restart -n demoDuring the restarting process, there are two status types for pods.
- STATUS=Terminating: it means the cluster restart is in progress.
- STATUS=Running: it means the cluster has been restarted.
-
Configure the values of
components
andttlSecondsAfterSucceed
and run the command below to restart a specified cluster.kbcli cluster restart mycluster -n demo --components="starrocks" --ttlSecondsAfterSucceed=30
components
describes the component name that needs to be restarted.ttlSecondsAfterSucceed
describes the time to live of an OpsRequest job after the restarting succeeds.
-
Validate the restarting.
Run the command below to check the cluster status to check the restarting status.
kbcli cluster list mycluster -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- STATUS=Updating: it means the cluster restart is in progress.
- STATUS=Running: it means the cluster has been restarted.
Stop/Start a cluster
You can stop/start a cluster to save computing resources. When a cluster is stopped, the computing resources of this cluster are released, which means the pods of Kubernetes are released, but the storage resources are reserved. You can start this cluster again by snapshots if you want to restore the cluster resources.
Stop a cluster
-
Configure the name of your cluster and run the command below to stop this cluster.
- OpsRequest
- Edit Cluster YAML File
- kbcli
Apply an OpsRequest to restart a cluster.
kubectl apply -f - <<EOF
apiVersion: apps.kubeblocks.io/v1alpha1
kind: OpsRequest
metadata:
name: mycluster-stop
namespace: demo
spec:
clusterName: mycluster
type: Stop
EOFkubectl edit cluster mycluster -n demo
Configure replicas as 0 to delete pods.
...
spec:
clusterDefinitionRef: starrocks-ce
clusterVersionRef: starrocks-ce-3.1.1
terminationPolicy: Delete
affinity:
podAntiAffinity: Preferred
topologyKeys:
- kubernetes.io/hostname
tolerations:
- key: kb-data
operator: Equal
value: 'true'
effect: NoSchedule
componentSpecs:
- name: fe
componentDefRef: fe
serviceAccountName: kb-starrocks-cluster
replicas: 0 # Change this value
- name: be
componentDefRef: be
replicas: 0 # Change this valuekbcli cluster stop mycluster -n demo
-
Check the status of the cluster to see whether it is stopped.
- kubectl
- kbcli
kubectl get cluster mycluster -n demo
kbcli cluster list mycluster -n demo
Start a cluster
-
Configure the name of your cluster and run the command below to start this cluster.
- OpsRequest
- Edit Cluster YAML File
- kbcli
Apply an OpsRequest to start a cluster.
kubectl apply -f - <<EOF
apiVersion: apps.kubeblocks.io/v1alpha1
kind: OpsRequest
metadata:
name: ops-start
namespace: demo
spec:
clusterName: mycluster
type: Start
EOFkubectl edit cluster mycluster -n demo
Change replicas back to the original amount to start this cluster again.
spec:
clusterDefinitionRef: starrocks-ce
clusterVersionRef: starrocks-ce-3.1.1
terminationPolicy: Delete
affinity:
podAntiAffinity: Preferred
topologyKeys:
- kubernetes.io/hostname
tolerations:
- key: kb-data
operator: Equal
value: 'true'
effect: NoSchedule
componentSpecs:
- name: fe
componentDefRef: fe
serviceAccountName: kb-starrocks-cluster
replicas: 1 # Change this value
- name: be
componentDefRef: be
replicas: 2 # Change this valuekbcli cluster start mycluster -n demo
-
Check the status of the cluster to see whether it is running again.
- kubectl
- kbcli
kubectl get cluster mycluster -n demo
kbcli cluster list mycluster -n demo
Delete a cluster
Termination policy
The termination policy determines how a cluster is deleted.
terminationPolicy | Deleting Operation |
---|---|
DoNotTerminate | DoNotTerminate prevents deletion of the Cluster. This policy ensures that all resources remain intact. |
Delete | Delete deletes Cluster resources like Pods, Services, and Persistent Volume Claims (PVCs), leading to a thorough cleanup while removing all persistent data. |
WipeOut | WipeOut is an aggressive policy that deletes all Cluster resources, including volume snapshots and backups in external storage. This results in complete data removal and should be used cautiously, primarily in non-production environments to avoid irreversible data loss. |
To check the termination policy, execute the following command.
- kubectl
- kbcli
kubectl get cluster mycluster -n demo
>
NAME CLUSTER-DEFINITION VERSION TERMINATION-POLICY STATUS AGE
mycluster starrocks starrocks-3.1.1 Delete Running 34m
kbcli cluster list mycluster -n demo
>
NAME NAMESPACE CLUSTER-DEFINITION VERSION TERMINATION-POLICY STATUS CREATED-TIME
mycluster demo Delete Running Sep 30,2024 13:03 UTC+0800
Steps
Run the command below to delete a specified cluster.
- kubectl
- kbcli
If you want to delete a cluster and its all related resources, you can modify the termination policy to WipeOut
, then delete the cluster.
kubectl patch -n demo cluster mycluster -p '{"spec":{"terminationPolicy":"WipeOut"}}' --type="merge"
kubectl delete -n demo cluster mycluster
kbcli cluster delete mycluster -n demo