3步极速部署!Apache Doris Kubernetes容器化实践指南

3步极速部署!Apache Doris Kubernetes容器化实践指南

【免费下载链接】doris Apache Doris is an easy-to-use, high performance and unified analytics database. 【免费下载链接】doris 项目地址: https://gitcode.com/gh_mirrors/dori/doris

你还在为Apache Doris的复杂部署流程头疼吗?手动配置节点、协调FE(Frontend)与BE(Backend)通信、处理存储卷挂载——这些步骤不仅耗时,还容易出现版本兼容问题。本文将带你通过3个核心步骤,在Kubernetes环境下实现Apache Doris的容器化部署,全程无需复杂命令,即使是新手也能1小时内完成集群搭建。读完本文你将掌握:

  • 自动节点发现的StatefulSet部署方案
  • 计算/存储分离的云原生架构配置
  • 动态扩缩容与故障自愈的最佳实践

部署架构概览

Apache Doris在K8s环境中的部署采用计算与存储分离架构,通过StatefulSet管理有状态服务,结合Headless Service实现Pod间自动发现。核心组件包括:

mermaid

前置准备

环境要求

  • Kubernetes集群版本 ≥ 1.21
  • 每个节点至少2核8GB资源
  • 已安装StorageClass(推荐使用LocalPV或云厂商存储)
  • 网络插件支持Headless Service通信(如Calico、Flannel)

配置文件准备

从项目仓库获取3个核心YAML配置文件:

git clone https://gitcode.com/gh_mirrors/dori/doris.git
cd doris/docker/runtime/k8s

部署步骤

步骤1:部署FE集群(元数据节点)

FE节点通过StatefulSet部署,利用K8s的DNS服务实现节点自动发现。关键配置项说明:

  • enable_fqdn_mode: true:启用域名模式,解决Pod重建IP变化问题
  • enable_deploy_manager: k8s:自动管理BE/CN节点的添加与移除
  • 环境变量FE_SERVICE指定Headless Service名称,实现集群内部通信
# 核心配置片段来自 [docker/runtime/k8s/doris_follower.yml](https://link.gitcode.com/i/38072d49f2b028c73851c7d8d98b5fb5)
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: doris-follower-cluster1
spec:
  serviceName: doris-follower-cluster1  # Headless Service名称
  replicas: 3
  template:
    spec:
      containers:
      - name: doris-follower-cluster1
        env:
        - name: FE_SERVICE
          value: "doris-follower-cluster1"  # 用于节点发现的服务名
        - name: BE_SERVICE
          value: "doris-be-cluster1"  # 关联BE集群
        ports:
        - containerPort: 9010
          name: edit-log-port  # Raft协议通信端口

执行部署命令:

kubectl apply -f doris_follower.yml

步骤2:部署BE与CN集群(存储与计算节点)

BE节点负责数据存储,CN节点专注计算任务,两者通过be_node_role参数区分角色。配置文件中通过priority_networks指定通信网段,避免跨节点网络隔离问题:

# BE节点角色配置 [docker/runtime/k8s/doris_be.yml](https://link.gitcode.com/i/69bccf3515ca22305e78c35e1fe1c759)
data:
  be.conf: |
    be_node_role = storage  # 存储节点角色
    priority_networks = 172.16.0.0/24  # 内部通信网段

# CN节点角色配置 [docker/runtime/k8s/doris_cn.yml](https://link.gitcode.com/i/432e1653bfca524f8bcd1044df4bebf8)
data:
  be.conf: |
    be_node_role = computation  # 计算节点角色

同时部署BE与CN集群:

kubectl apply -f doris_be.yml
kubectl apply -f doris_cn.yml

步骤3:验证集群状态

  1. 检查Pod状态,确保所有StatefulSet的3个副本均就绪:
kubectl get pods -o wide
# 预期输出包含 doris-follower-cluster1-0/1 Running
# doris-be-cluster1-0/1 Running
# doris-cn-cluster1-0/1 Running
  1. 进入FE容器验证节点注册情况:
kubectl exec -it doris-follower-cluster1-0 -- sh
cd /opt/apache-doris/fe/bin
./mysql-client -h 127.0.0.1 -P 9030 -u root

在MySQL客户端执行以下SQL查看节点状态:

SHOW PROC '/frontends'\G
SHOW PROC '/backends'\G

高级配置

资源优化

根据业务负载调整资源请求与限制,推荐配置:

组件CPU请求内存请求CPU限制内存限制
FE2核4Gi4核8Gi
BE4核8Gi8核16Gi
CN4核8Gi16核32Gi

修改对应StatefulSet的resources字段:

resources:
  requests:
    cpu: "4"
    memory: "8Gi"
  limits:
    cpu: "16"
    memory: "32Gi"

存储配置

BE节点需配置持久化存储,推荐使用LocalPV或云厂商提供的SSD存储类:

volumeClaimTemplates:
- metadata:
    name: data
  spec:
    storageClassName: "local-ssd"  # 替换为实际存储类名
    accessModes: [ "ReadWriteOnce" ]
    resources:
      requests:
        storage: 100Gi  # 单节点存储容量

常见问题解决

节点注册失败

现象:BE/CN节点启动后未出现在SHOW PROC '/backends'结果中
排查

  1. 检查FE日志:kubectl logs doris-follower-cluster1-0 -c doris-follower-cluster1
  2. 确认Headless Service是否正常:kubectl describe service doris-be-cluster1
  3. 验证网络策略是否允许9050端口通信

计算节点扩容

通过修改CN集群的副本数实现弹性扩缩容:

kubectl scale statefulset doris-cn-cluster1 --replicas=5

系统将自动创建新的CN节点并注册到FE,无需手动执行ALTER SYSTEM ADD COMPUTE NODE命令。

总结与展望

本文介绍的K8s部署方案通过以下特性实现云原生最佳实践:

  • 自动运维:StatefulSet+Headless Service实现节点身份持久化与自动发现
  • 弹性伸缩:计算节点独立扩缩容,应对查询峰值
  • 故障自愈:Pod异常时自动重建,Raft协议保障数据一致性

后续可结合项目中的监控工具 tools/pipeline-tracing/ 实现查询性能追踪,或通过 docker/runtime/k8s/ 目录下的Prometheus配置实现指标采集。

通过容器化部署,Apache Doris真正实现了"一键启动、弹性扩展"的云原生体验,为实时分析场景提供高效稳定的计算平台。

【免费下载链接】doris Apache Doris is an easy-to-use, high performance and unified analytics database. 【免费下载链接】doris 项目地址: https://gitcode.com/gh_mirrors/dori/doris

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值