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 之间的通信)。
相关推荐
wdxylb27 分钟前
云原生俱乐部-RH134知识点总结(2)
linux·云原生
deeper_wind1 小时前
k8s-单主机Master集群部署+单个pod部署lnmp论坛服务(小白的“升级打怪”成长之路)
云原生·容器·kubernetes
zhenshanrenhao3 小时前
#买硬盘欲安装k8s记
云原生·容器·kubernetes
bing.shao5 小时前
微服务容错与监控体系设计
微服务·云原生·架构
tb_first5 小时前
k8sday09
linux·云原生·容器·kubernetes
稚辉君.MCA_P8_Java6 小时前
豆包 Java的23种设计模式
java·linux·jvm·设计模式·kubernetes
天上掉下来个程小白8 小时前
Docker-14.项目部署-DockerCompose
运维·docker·微服务·容器
星霜笔记11 小时前
Docker 部署 MariaDB+phpMyAdmin+Nextcloud 完整教程
运维·数据库·docker·容器·mariadb
数据知道14 小时前
容器化部署:用Docker封装机器翻译模型与服务详解
docker·容器·机器翻译
40kuai20 小时前
kubernetes中数据存储etcd
容器·kubernetes·etcd