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 为实际存储类型(如 gp2、standard)。
  • ​网络策略​:确保 Kubernetes 集群节点间网络互通(尤其是 BE 之间的通信)。
相关推荐
寻林写彡1 小时前
云安全 | Docker 容器逃逸复盘(一):从隔离边界到运行时链路,如何确认自己身处容器
安全·云原生
小小龙学IT3 小时前
Kubernetes 深度实践:架构、API 与避坑指南
容器·架构·kubernetes
MrSYJ7 小时前
别人再问你路由表是啥,这篇文章摔它脸上
docker·云原生·kubernetes
羑悻8 小时前
穿越Docker内核迷雾:揭秘镜像分层存储的叠加态与卷挂载的多维空间穿梭技术
后端·docker·容器
运维开发王义杰8 小时前
ingress-nginx 退役后怎么选:Istio、Kong、Traefik 与 APISIX
云原生
吴声子夜歌9 小时前
Nginx应用与运维——Nginx在Kubernetes中的应用(一)
运维·nginx·kubernetes
for_ever_love__9 小时前
容器类型全家桶——list、tuple、dict、set 与推导式
python·容器·数据类型·大模型开发
筑梦之路9 小时前
docker-compose方式部署kafka集群(Kraft方式)——筑梦之路
docker·容器·kafka
JavaPub-rodert10 小时前
Docker 镜像地址总失效?基于 DockerHub 项目用 GitHub Actions 做一个自动检测状态页
docker·容器·github
天衍四九-10 小时前
Docker进阶实战系列(二):容器日志深度治理|驱动配置、自动切割、磁盘爆满彻底解决
docker·容器·eureka