使用 Operator 部署 StarRocks 集群
本文介绍如何在 Kubernetes 集群上通过 StarRocks Operator 自动化部署和管理 StarRocks 集群。
工作原理

环境准备
创建 Kubernetes 集群
您可以使用云托管的 Kubernetes 服务,例如 Amazon Elastic Kubernetes Service (EKS) 或者 Google Kubernetes Engine (GKE) 集群,或者私有 Kubernetes 集群。
创建 Amazon EKS 集群
- 创建 EKS 集群前,请确保环境中已安装如下命令行工具。
- 安装并配置 AWS 的命令行工具 AWS CLI。
- 安装 EKS 集群命令行工具 eksctl。
- 安装 Kubernetes 集群命令行工具 kubectl。
- 创建 EKS 集群。支持以下两种方式:
创建 GKE 集群
创建前,请确保已经完成所有前置工作。创建步骤,请参考创建 GKE 集群。
创建私有 Kubernetes 集群
创建 Kubernetes 集群。如需快速体验本特性,则可以使用 Minikube 创建单节点 Kubernetes 集群。
部署 StarRocks Operator
-
添加定制资源 StarRocksCluster。
kubectl apply -f https://raw.githubusercontent.com/StarRocks/starrocks-kubernetes-operator/main/deploy/starrocks.com_starrocksclusters.yaml -
部署 StarRocks Operator。您可以选择使用默认配置文件或者自定义配置文件部署 StarRocks Operator。
-
使用默认配置文件部署 StarRocks Operator:
kubectl apply -f https://raw.githubusercontent.com/StarRocks/starrocks-kubernetes-operator/main/deploy/operator.yamlStarRocks Operator 会部署至 Namespace
starrocks,并且管理所有 Namespace 下的 StarRocks 集群。 -
使用自定义配置文件部署 StarRocks Operator:
-
下载用于部署 StarRocks Operator 的配置文件。
curl -O https://raw.githubusercontent.com/StarRocks/starrocks-kubernetes-operator/main/deploy/operator.yaml -
根据您的实际需要,修改配置文件
operator.yaml。 -
部署 StarRocks Operator。
kubectl apply -f operator.yaml
-
-
-
检查 StarRocks Operator 的运行状态。如果 Pod 处于
Running状态且 Pod 内所有容器都READY,则表示 StarRocks Operator 成功运行。$ kubectl -n starrocks get pods
NAME READY STATUS RESTARTS AGE
starrocks-controller-65bb8679-jkbtg 1/1 Running 0 5m6s
说明
如果您自定义 StarRocks Operator 所在 Namespace,则需要修改
starrocks为自定义的 Namespace。
部署 StarRocks 集群
您可以直接使用 StarRocks 提供的配置文件范例,部署 StarRocks 集群(定制资源 StarRocks Cluster 实例化的对象)。例如使用 starrocks-fe-and-be.yaml,部署一个 StarRocks 集群,包含三个 FE 和三个 BE 节点。
kubectl apply -f https://raw.githubusercontent.com/StarRocks/starrocks-kubernetes-operator/main/examples/starrocks/starrocks-fe-and-be.yaml
主要字段说明:
| 字段 | 说明 |
|---|---|
| Kind | 对象所属资源类型。取值必须为 StarRocksCluster。 |
| Metadata | 元数据。内嵌二级字段和说明如下:
|
| Spec | 对象的期望状态,包含 starRocksFeSpec、starRocksBeSpec、starRocksCnSpec。 |
您也可以根据需要修改配置文件,部署 StarRocks 集群。 支持的字段和详细说明,请参见 api.md 。
部署 StarRocks 集群需要一定时间,期间,您可以执行 kubectl -n starrocks get pods 查看 StarRocks 集群启动状态。如果 Pod 处于 Running 状态且 Pod 内所有容器都 READY,则表示 StarRocks 集群已经成功运行。
说明
如果您自定义 StarRocks 集群所在 Namespace,则需要修改
starrocks为自定义的 Namespace。
$ kubectl -n starrocks get pods
NAME READY STATUS RESTARTS AGE
starrocks-controller-65bb8679-jkbtg 1/1 Running 0 22h
starrockscluster-sample-be-0 1/1 Running 0 23h
starrockscluster-sample-be-1 1/1 Running 0 23h
starrockscluster-sample-be-2 1/1 Running 0 22h
starrockscluster-sample-fe-0 1/1 Running 0 21h
starrockscluster-sample-fe-1 1/1 Running 0 21h
starrockscluster-sample-fe-2 1/1 Running 0 22h
说明
如果部分 Pod 长时间仍无法启动,您可以通过
kubectl logs -n starrocks <pod_name>查看日志信息或者通过kubectl -n starrocks describe pod <pod_name>查看 Event 信息,以定位问题。
访问 StarRocks 集群
访问 StarRocks 集群的各个组件可以通过其关联的 Service 实现,比如 FE Service。Service 的详细说明和访问地址查看,请参考 api.md 和 Service。
说明
- 默认情况下,仅部署 FE Service。如需部署 BE Service 和 CN Service,则您需要在 StarRocks 集群配置文件
starRocksBeSpec、starRocksCnSpec中增加配置。- Service 的名称默认为
<集群名称>-<组件名称>-service,例如starrockscluster-sample-fe-service,您也可以在每个组件的 spec 中进行指定 Service 名称。
集群内访问 StarRocks 集群
在 Kubernetes 集群内,通过 FE Service 的 ClusterIP 访问 StarRocks 集群。
-
查看 FE Service 内部虚拟 IP
CLUSTER-IP和端口PORT(S)。$ kubectl -n starrocks get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
be-domain-search ClusterIP None <none> 9050/TCP 23m
fe-domain-search ClusterIP None <none> 9030/TCP 25m
starrockscluster-sample-fe-service ClusterIP 10.100.162.xxx <none> 8030/TCP,9020/TCP,9030/TCP,9010/TCP 25m -
在 Kubernetes 集群内通过 MySQL 客户端访问 StarRocks 集群。
mysql -h 10.100.162.xxx -P 9030 -uroot
集群外访问 StarRocks 集群
在 Kubernetes 集群外,支持通过 FE Service 的 LoadBalancer 和 NodePort 访问 StarRocks 集群。本文以 LoadBalancer 为例:
-
执行命令
kubectl -n starrocks edit src starrockscluster-sample更新 StarRocks 集群配置文件,修改starRocksFeSpec的 Service 类型为LoadBalancer。starRocksFeSpec:
image: starrocks/fe-ubuntu:3.0-latest
replicas: 3
requests:
cpu: 4
memory: 16Gi
service:
type: LoadBalancer # 指定为 LoadBalancer -
查询 FE Service 向外部暴露 的 IP 地址
EXTERNAL-IP和端口PORT(S)。$ kubectl -n starrocks get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
be-domain-search ClusterIP None <none> 9050/TCP 127m
fe-domain-search ClusterIP None <none> 9030/TCP 129m
starrockscluster-sample-fe-service LoadBalancer 10.100.162.xxx a7509284bf3784983a596c6eec7fc212-618xxxxxx.us-west-2.elb.amazonaws.com 8030:30629/TCP,9020:32544/TCP,9030:32244/TCP,9010:32024/TCP 129m ClusterIP None <none> 9030/TCP 23h -
登陆您的机器,通过 MySQL 客户端访问 StarRocks 集群。
mysql -h a7509284bf3784983a596c6eec7fc212-618xxxxxx.us-west-2.elb.amazonaws.com -P9030 -uroot
管理 StarRocks 集群
您可以执行命令 kubectl edit 或者 kubectl patch 更新 StarRocks 集群配置文件,来管理 StarRocks 集群。
升级 StarRocks 集群
升级 BE 节点
执行如下命令,指定新的 BE 镜像文件,例如 starrocks/be-ubuntu:latest。
kubectl -n starrocks patch starrockscluster starrockscluster-sample --type='merge' -p '{"spec":{"starRocksBeSpec":{"image":"starrocks/be-ubuntu:latest"}}}'
升级 FE 节点
执行如下命令,指定新的 FE 镜像文件,例如 starrocks/fe-ubuntu:latest。
kubectl -n starrocks patch starrockscluster starrockscluster-sample --type='merge' -p '{"spec":{"starRocksFeSpec":{"image":"starrocks/fe-ubuntu:latest"}}}'
升级过程会持续一段时间,您可以通过 kubectl -n starrocks get pods 命令观察升级进度。
扩缩容 StarRocks 集群
以扩缩容 BE 集群和 FE 集群为例。
扩容 BE 集群
执行如下命令,扩容 BE 集群至 9 个节点。
kubectl -n starrocks patch starrockscluster starrockscluster-sample --type='merge' -p '{"spec":{"starRocksBeSpec":{"replicas":9}}}'
缩容 BE 集群
BE 缩容时需要逐个缩容,每次缩容一个 BE 节点, 等待 BE 的 Tablet 在剩余 BE 节点上补齐后再继续扩容。如果存在单副本的表,BE 下线有可能造成数据丢失。 执行如下命令,将有 10 个 BE 节点的集群,缩容至 9 个节点。
kubectl -n starrocks patch starrockscluster starrockscluster-sample --type='merge' -p '{"spec":{"starRocksBeSpec":{"replicas":9}}}'
节点缩容后需要通过 SQL 命令手动 DROP alive 状态为 false 的节点。
下线的 BE 节点的 Tablet 自动补齐需要一些时间,可以通过执行 show proc '/statistic'; 命令查询副本修复进度。
扩容 FE 集群
执行如下命令,扩容 FE 集群至 4 个节点。
kubectl -n starrocks patch starrockscluster starrockscluster-sample --type='merge' -p '{"spec":{"starRocksFeSpec":{"replicas":4}}}'
扩容过程会持续一段时间,您可以通过 kubectl -n starrocks get pods 命令观察扩容进度。