k8s生成StarRocks集群模版
集群由1个fe+3个be组成,满足以下要求:
1、由3个pod组成,每pod分配2c4g
2、第一个pod里有一个be与一个fe,同在一个容器里,fe配置jvm内存设置为1024mb,be的jvm内存设置为1024MB
3、第二第三个pod里分别有一个be,jvm内存设置为2048MB
4、starrocks使用3.4.2镜像,已内置 Java 11
5、需要把数据挂载出来
6、pod需要再不同的node机器上
1. 第一个 Pod(FE + BE 共享 Pod)
# pod-fe-with-be.yaml
apiVersion: v1
kind: Pod
metadata:name: starrocks-fe-with-belabels:app: starrockscomponent: fe
spec:containers:# FE 容器- name: feimage: starrocks/starrocks:3.4.2imagePullPolicy: IfNotPresentports:- containerPort: 9030 # HTTP 端口- containerPort: 9010 # BEACON 端口env:- name: JAVA_OPTSvalue: "-Xmx1024m -Xms1024m" # FE JVM 1GBvolumeMounts:- name: fe-storagemountPath: /var/lib/starrocks/feresources:requests:cpu: "1"memory: "2Gi"limits:cpu: "1"memory: "2Gi"# 与 FE 同 Pod 的 BE 容器- name: beimage: starrocks/starrocks:3.4.2imagePullPolicy: IfNotPresentports:- containerPort: 9060 # BE 主端口env:- name: JAVA_OPTSvalue: "-Xmx1024m -Xms1024m" # BE JVM 1GBvolumeMounts:- name: be-storage-1mountPath: /var/lib/starrocks/beresources:requests:cpu: "1"memory: "2Gi"limits:cpu: "1"memory: "2Gi"affinity:podAntiAffinity:requiredDuringSchedulingIgnoredDuringExecution:- labelSelector:matchExpressions:- key: appoperator: Invalues: ["starrocks"]topologyKey: kubernetes.io/hostnamevolumes:# FE 数据卷- name: fe-storagepersistentVolumeClaim:claimName: fe-pvc# BE 数据卷- name: be-storage-1persistentVolumeClaim:claimName: be-pvc-1
2. 第二个 Pod(独立 BE)
# pod-be-2.yaml
apiVersion: v1
kind: Pod
metadata:name: starrocks-be-2labels:app: starrockscomponent: be
spec:containers:- name: beimage: starrocks/starrocks:3.4.2imagePullPolicy: IfNotPresentports:- containerPort: 9060env:- name: JAVA_OPTSvalue: "-Xmx2048m -Xms2048m" # BE JVM 2GBvolumeMounts:- name: be-storage-2mountPath: /var/lib/starrocks/beresources:requests:cpu: "1"memory: "2Gi"limits:cpu: "1"memory: "2Gi"affinity:podAntiAffinity:requiredDuringSchedulingIgnoredDuringExecution:- labelSelector:matchExpressions:- key: appoperator: Invalues: ["starrocks"]topologyKey: kubernetes.io/hostnamevolumes:- name: be-storage-2persistentVolumeClaim:claimName: be-pvc-2
3. 第三个 Pod(独立 BE)
# pod-be-3.yaml
apiVersion: v1
kind: Pod
metadata:name: starrocks-be-3labels:app: starrockscomponent: be
spec:containers:- name: beimage: starrocks/starrocks:3.4.2imagePullPolicy: IfNotPresentports:- containerPort: 9060env:- name: JAVA_OPTSvalue: "-Xmx2048m -Xms2048m" # BE JVM 2GBvolumeMounts:- name: be-storage-3mountPath: /var/lib/starrocks/beresources:requests:cpu: "1"memory: "2Gi"limits:cpu: "1"memory: "2Gi"affinity:podAntiAffinity:requiredDuringSchedulingIgnoredDuringExecution:- labelSelector:matchExpressions:- key: appoperator: Invalues: ["starrocks"]topologyKey: kubernetes.io/hostnamevolumes:- name: be-storage-3persistentVolumeClaim:claimName: be-pvc-3
4. 数据卷声明(PVC)
# pvc.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:name: fe-pvc
spec:accessModes:- ReadWriteOncestorageClassName: "ssd-storage" # 替换为实际存储类resources:requests:storage: 100Gi---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:name: be-pvc-1
spec:accessModes:- ReadWriteOncestorageClassName: "ssd-storage"resources:requests:storage: 500Gi---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:name: be-pvc-2
spec:accessModes:- ReadWriteOncestorageClassName: "ssd-storage"resources:requests:storage: 500Gi---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:name: be-pvc-3
spec:accessModes:- ReadWriteOncestorageClassName: "ssd-storage"resources:requests:storage: 500Gi
配置说明
-
资源分配
- FE + BE Pod:FE 和 BE 容器各占
1C/2G
,总和为2C/4G
。 - 独立 BE Pod:BE 容器独占
2C/4G
,但 JVM 内存限制为2GB
(需确保容器内存足够)。
- FE + BE Pod:FE 和 BE 容器各占
-
节点隔离
- 使用
podAntiAffinity
强制每个 Pod 调度到不同节点(通过topologyKey: kubernetes.io/hostname
)。
- 使用
-
存储隔离
- FE 和每个 BE 均挂载独立 PVC,路径分别为
/var/lib/starrocks/fe
和/var/lib/starrocks/be
。
- FE 和每个 BE 均挂载独立 PVC,路径分别为
-
版本验证
- 镜像
starrocks:3.4.2
已内置 Java 11,无需额外配置。
- 镜像
部署步骤
- 创建 StorageClass
- 应用 PVC 和 Pod 配置:
kubectl apply -f pvc.yaml kubectl apply -f pod-fe-with-be.yaml kubectl apply -f pod-be-2.yaml kubectl apply -f pod-be-3.yaml
注意事项
- 内存风险:BE 容器的 JVM 内存(2GB)接近 Pod 内存限制(4GB),建议实际部署时预留更多内存或优化 JVM 参数。
- 存储类:替换
ssd-storage
为实际存储类型(如gp2
、standard
)。 - 网络策略:确保 Kubernetes 集群节点间网络互通(尤其是 BE 之间的通信)。