3步极速部署!Apache Doris Kubernetes容器化实践指南
你还在为Apache Doris的复杂部署流程头疼吗?手动配置节点、协调FE(Frontend)与BE(Backend)通信、处理存储卷挂载——这些步骤不仅耗时,还容易出现版本兼容问题。本文将带你通过3个核心步骤,在Kubernetes环境下实现Apache Doris的容器化部署,全程无需复杂命令,即使是新手也能1小时内完成集群搭建。读完本文你将掌握:
- 自动节点发现的StatefulSet部署方案
- 计算/存储分离的云原生架构配置
- 动态扩缩容与故障自愈的最佳实践
部署架构概览
Apache Doris在K8s环境中的部署采用计算与存储分离架构,通过StatefulSet管理有状态服务,结合Headless Service实现Pod间自动发现。核心组件包括:
- FE集群:由3个Follower节点组成,通过Raft协议实现元数据高可用,对应配置文件 docker/runtime/k8s/doris_follower.yml
- BE集群:3个存储节点负责数据持久化,配置文件 docker/runtime/k8s/doris_be.yml
- CN集群:3个计算节点处理查询请求,实现弹性扩缩容,配置文件 docker/runtime/k8s/doris_cn.yml
graph TD
Client[用户客户端] -->|9030端口| Service[K8s Service]
Service -->|查询请求| CN[计算节点集群]
CN -->|数据交互| BE[存储节点集群]
BE -->|元数据同步| FE[Follower节点集群]
FE -->|Raft协议| FE1[FE节点1]
FE --> FE2[FE节点2]
FE --> FE3[FE节点3]
前置准备
环境要求
- 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://gitcode.com/gh_mirrors/dori/doris/blob/c47399cc0d0dbd0e97ed31810b8c777577a72f96/docker/runtime/k8s/doris_follower.yml?utm_source=gitcode_repo_files)
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://gitcode.com/gh_mirrors/dori/doris/blob/c47399cc0d0dbd0e97ed31810b8c777577a72f96/docker/runtime/k8s/doris_be.yml?utm_source=gitcode_repo_files)
data:
be.conf: |
be_node_role = storage # 存储节点角色
priority_networks = 172.16.0.0/24 # 内部通信网段
# CN节点角色配置 [docker/runtime/k8s/doris_cn.yml](https://gitcode.com/gh_mirrors/dori/doris/blob/c47399cc0d0dbd0e97ed31810b8c777577a72f96/docker/runtime/k8s/doris_cn.yml?utm_source=gitcode_repo_files)
data:
be.conf: |
be_node_role = computation # 计算节点角色
同时部署BE与CN集群:
kubectl apply -f doris_be.yml
kubectl apply -f doris_cn.yml
步骤3:验证集群状态
- 检查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
- 进入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限制 | 内存限制 |
|---|---|---|---|---|
| FE | 2核 | 4Gi | 4核 | 8Gi |
| BE | 4核 | 8Gi | 8核 | 16Gi |
| CN | 4核 | 8Gi | 16核 | 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'结果中
排查:
- 检查FE日志:
kubectl logs doris-follower-cluster1-0 -c doris-follower-cluster1 - 确认Headless Service是否正常:
kubectl describe service doris-be-cluster1 - 验证网络策略是否允许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真正实现了"一键启动、弹性扩展"的云原生体验,为实时分析场景提供高效稳定的计算平台。
atomcodeClaude Code 的开源替代方案。连接任意大模型,编辑代码,运行命令,自动验证 — 全自动执行。用 Rust 构建,极致性能。 | An open-source alternative to Claude Code. Connect any LLM, edit code, run commands, and verify changes — autonomously. Built in Rust for speed. Get StartedRust0212
cann-learning-hubCANN 学习中心仓,支持在线互动运行、边学边练,提供教程、示例与优化方案,一站式助力昇腾开发者快速上手。Jupyter Notebook0136
JoyAI-EchoJoyAI-Echo,这是一个独立的、仅用于推理的版本,旨在实现分钟级多镜头音视频生成。它采用了经过蒸馏的DMD生成器、配对的跨模态记忆以及故事级别的一致性。其性能的核心在于,一个跨模态视听记忆库能够在长达五分钟的视频中保持角色外观和语音音色的一致性。同时,一个训练后处理流程将基于记忆的强化学习与分布匹配蒸馏相结合,实现了7.5倍的速度提升,显著增强了视觉质量和对齐效果。00
GLM-5.2智谱开源 GLM-5.2,这是针对长文本任务的最新旗舰模型。相较于前代产品 GLM-5.1,它在长文本任务处理能力上实现了显著飞跃,并且首次在稳定的 100 万 token 上下文中提供这一能力。Jinja00
SwanLab⚡️SwanLab - an open-source, modern-design AI training tracking and visualization tool. Supports Cloud / Self-hosted use. Integrated with PyTorch / Transformers / LLaMA Factory / veRL/ Swift / Ultralytics / MMEngine / Keras etc.Python00
tiny-universe《大模型白盒子构建指南》:一个全手搓的Tiny-UniverseJupyter Notebook03