集群由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-be
labels:
app: starrocks
component: fe
spec:
containers:
# FE 容器
- name: fe
image: starrocks/starrocks:3.4.2
imagePullPolicy: IfNotPresent
ports:
- containerPort: 9030 # HTTP 端口
- containerPort: 9010 # BEACON 端口
env:
- name: JAVA_OPTS
value: "-Xmx1024m -Xms1024m" # FE JVM 1GB
volumeMounts:
- name: fe-storage
mountPath: /var/lib/starrocks/fe
resources:
requests:
cpu: "1"
memory: "2Gi"
limits:
cpu: "1"
memory: "2Gi"
# 与 FE 同 Pod 的 BE 容器
- name: be
image: starrocks/starrocks:3.4.2
imagePullPolicy: IfNotPresent
ports:
- containerPort: 9060 # BE 主端口
env:
- name: JAVA_OPTS
value: "-Xmx1024m -Xms1024m" # BE JVM 1GB
volumeMounts:
- name: be-storage-1
mountPath: /var/lib/starrocks/be
resources:
requests:
cpu: "1"
memory: "2Gi"
limits:
cpu: "1"
memory: "2Gi"
affinity:
podAntiAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
- labelSelector:
matchExpressions:
- key: app
operator: In
values: ["starrocks"]
topologyKey: kubernetes.io/hostname
volumes:
# FE 数据卷
- name: fe-storage
persistentVolumeClaim:
claimName: fe-pvc
# BE 数据卷
- name: be-storage-1
persistentVolumeClaim:
claimName: be-pvc-1
2. 第二个 Pod(独立 BE)
# pod-be-2.yaml
apiVersion: v1
kind: Pod
metadata:
name: starrocks-be-2
labels:
app: starrocks
component: be
spec:
containers:
- name: be
image: starrocks/starrocks:3.4.2
imagePullPolicy: IfNotPresent
ports:
- containerPort: 9060
env:
- name: JAVA_OPTS
value: "-Xmx2048m -Xms2048m" # BE JVM 2GB
volumeMounts:
- name: be-storage-2
mountPath: /var/lib/starrocks/be
resources:
requests:
cpu: "1"
memory: "2Gi"
limits:
cpu: "1"
memory: "2Gi"
affinity:
podAntiAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
- labelSelector:
matchExpressions:
- key: app
operator: In
values: ["starrocks"]
topologyKey: kubernetes.io/hostname
volumes:
- name: be-storage-2
persistentVolumeClaim:
claimName: be-pvc-2
3. 第三个 Pod(独立 BE)
# pod-be-3.yaml
apiVersion: v1
kind: Pod
metadata:
name: starrocks-be-3
labels:
app: starrocks
component: be
spec:
containers:
- name: be
image: starrocks/starrocks:3.4.2
imagePullPolicy: IfNotPresent
ports:
- containerPort: 9060
env:
- name: JAVA_OPTS
value: "-Xmx2048m -Xms2048m" # BE JVM 2GB
volumeMounts:
- name: be-storage-3
mountPath: /var/lib/starrocks/be
resources:
requests:
cpu: "1"
memory: "2Gi"
limits:
cpu: "1"
memory: "2Gi"
affinity:
podAntiAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
- labelSelector:
matchExpressions:
- key: app
operator: In
values: ["starrocks"]
topologyKey: kubernetes.io/hostname
volumes:
- name: be-storage-3
persistentVolumeClaim:
claimName: be-pvc-3
4. 数据卷声明(PVC)
# pvc.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: fe-pvc
spec:
accessModes:
- ReadWriteOnce
storageClassName: "ssd-storage" # 替换为实际存储类
resources:
requests:
storage: 100Gi
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: be-pvc-1
spec:
accessModes:
- ReadWriteOnce
storageClassName: "ssd-storage"
resources:
requests:
storage: 500Gi
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: be-pvc-2
spec:
accessModes:
- ReadWriteOnce
storageClassName: "ssd-storage"
resources:
requests:
storage: 500Gi
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: be-pvc-3
spec:
accessModes:
- ReadWriteOnce
storageClassName: "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 之间的通信)。