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 之间的通信)。
相关推荐
AKAMAI5 小时前
利用DataStream和TrafficPeak实现大数据可观察性
人工智能·云原生·云计算
Johny_Zhao6 小时前
CentOS Stream 9上部署FTP应用服务的两种方法(传统安装和docker-compose)
linux·网络安全·信息安全·kubernetes·云计算·containerd·ftp·yum源·系统运维
鼠鼠我捏,要死了捏7 小时前
多租户Kubernetes集群架构设计实践——隔离、安全与弹性扩缩容
kubernetes·architecture·multi-tenancy
ldj20208 小时前
docker 自定义网桥作用
docker·容器
java叶新东老师8 小时前
k8s常用命令
云原生·容器·kubernetes
阿里云云原生8 小时前
阿里云正式开源 LoongSuite:打造 AI 时代的高性能低成本可观测采集套件
云原生
阿里云云原生8 小时前
从一起知名线上故障,谈配置灰度发布的重要性
云原生
liux352811 小时前
从零构建:Jenkins与Kubernetes集成的完整指南
java·kubernetes·jenkins
岚天start13 小时前
在K8S环境中,telnet nodePort端口是通的,但是 ss 获取不到端口号原因解析
iptables·kubernetes·k8s·telnet·ss
GEM的左耳返13 小时前
Java面试实战:从基础到架构的全方位技术交锋
spring boot·微服务·云原生·java面试·技术解析·ai集成