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
前置准备
环境要求
- 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:验证集群状态
- 检查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真正实现了"一键启动、弹性扩展"的云原生体验,为实时分析场景提供高效稳定的计算平台。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



