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 之间的通信)。
相关推荐
阿里云云原生1 小时前
理工科 MCP Server 神器,补足人工智能幻觉短板
云原生
人生偌只如初见2 小时前
Kubernetes学习笔记-配置Service对接第三方访问
kubernetes·k8s
阿里云云原生2 小时前
MCP Server 实践之旅第 1 站:MCP 协议解析与云上适配
云原生
liang89993 小时前
Docker(二):docker常用命令
spring cloud·docker·容器
启明真纳4 小时前
统信操作系统使用默认yum源安装 Docker 的踩坑
运维·docker·容器
云攀登者-望正茂5 小时前
Golang 遇见 Kubernetes:云原生开发的完美结合
云原生·golang·kubernetes
lee_yanyi5 小时前
《一键式江湖:Docker Compose中间件部署108式》开篇:告别“配置地狱”,从此笑傲云原生武林!》
docker·云原生·中间件
阿里云云原生5 小时前
Bolt.diy 一键部署,“一句话”实现全栈开发
云原生
weisian1516 小时前
云原生--核心组件-容器篇-1-Docker和云原生关系(Docker是云原生的基石)
docker·云原生·容器