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-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

配置说明​

  1. ​资源分配​

    • ​FE + BE Pod​ :FE 和 BE 容器各占 1C/2G,总和为 2C/4G
    • ​独立 BE Pod​ :BE 容器独占 2C/4G,但 JVM 内存限制为 2GB(需确保容器内存足够)。
  2. ​节点隔离​

    • 使用 podAntiAffinity 强制每个 Pod 调度到不同节点(通过 topologyKey: kubernetes.io/hostname)。
  3. ​存储隔离​

    • FE 和每个 BE 均挂载独立 PVC,路径分别为 /var/lib/starrocks/fe/var/lib/starrocks/be
  4. ​版本验证​

    • 镜像 starrocks:3.4.2 已内置 Java 11,无需额外配置。

部署步骤​

  1. 创建 StorageClass

  2. 应用 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 为实际存储类型(如 gp2standard)。
  • ​网络策略​:确保 Kubernetes 集群节点间网络互通(尤其是 BE 之间的通信)。
相关推荐
蝎子莱莱爱打怪8 小时前
GitLab CI/CD + Docker Registry + K8s 部署完整实战指南
后端·docker·kubernetes
阿里云云原生3 天前
阿里云获评 Agentic AI 开发平台领导者,函数计算 AgentRun 赢下关键分!
云原生
蝎子莱莱爱打怪4 天前
Centos7中一键安装K8s集群以及Rancher安装记录
运维·后端·kubernetes
崔小汤呀4 天前
Docker部署Nacos
docker·容器
缓解AI焦虑4 天前
Docker + K8s 部署大模型推理服务:资源划分与多实例调度
docker·容器
阿里云云原生4 天前
MSE Nacos Prompt 管理:让 AI Agent 的核心配置真正可治理
微服务·云原生
阿里云云原生4 天前
当 AI Agent 接管手机:移动端如何进行观测
云原生·agent
阿里云云原生4 天前
AI 原生应用开源开发者沙龙·深圳站精彩回顾 & PPT下载
云原生
阿里云云原生4 天前
灵感启发:日产文章 100 篇,打造“实时热点洞察”引擎
云原生
1candobetter4 天前
Docker Compose Build 与 Up 的区别:什么时候必须重建镜像
docker·容器·eureka