跳到主要内容

在 AWS EKS 上部署 Doris 集群

AWS 容器服务 EKS 概述

AWS EKS 提供两种运行模式:

模式说明适用场景
非自治模式(推荐)标准 EKS 模式,可完全控制底层 EC2 实例生产环境、有状态服务、Doris 集群
自治模式内置节点池,资源自动弹性扩缩无状态服务、轻量级工作负载
提示

不推荐使用自治模式。自治模式的计算资源通过内置节点池动态分配和回收,可能导致 Doris 集群节点漂移,对生产环境造成安全隐患。

场景一:新建集群

步骤 1:创建 EKS 集群(非自治模式)

在 EKS 控制台创建集群时,选择非自治模式

推荐配置

  • 操作系统镜像:Amazon Linux 2
  • 节点组:使用独立节点组部署 Doris

步骤 2:配置节点组启动脚本

通过 EC2 > 启动模板 > 创建启动模板来设置节点池的启动模板。在模板中添加以下脚本,自动化配置系统参数:

#!/bin/bash
chmod +x /etc/rc.d/rc.local

# 关闭防火墙
echo "sudo systemctl stop firewalld.service" >> /etc/rc.d/rc.local
echo "sudo systemctl disable firewalld.service" >> /etc/rc.d/rc.local

# 设置虚拟内存区域数量
echo "sysctl -w vm.max_map_count=2000000" >> /etc/rc.d/rc.local

# 禁用 swap
echo "swapoff -a" >> /etc/rc.d/rc.local

# 设置文件句柄限制
current_limit=$(ulimit -n)
desired_limit=1000000
config_file="/etc/security/limits.conf"
if [ "$current_limit" -ne "$desired_limit" ]; then
echo "* soft nofile 1000000" >> "$config_file"
echo "* hard nofile 1000000" >> "$config_file"
fi

集群启动后重启节点即可生效。

步骤 3:配置 IAM 角色权限

保证 EKS 节点的 IAM 角色有以下权限:

  • AmazonEC2FullAccess
  • AmazonEKSWorkerNodePolicy
  • AmazonEKS_CNI_Policy
  • AmazonSSMManagedInstanceCore

步骤 4:配置存储

生产环境推荐使用 EBS 存储。在集群配置界面添加 EBS 存储插件,并确保插件拥有相应的角色权限


场景二:已有集群

步骤 1:检查 swap 状态

swapon --show

预期结果:无输出(swap 已禁用)。如有关闭 swap 的输出,需执行 swapoff -a 并重启。

步骤 2:检查最大文件句柄数

ulimit -n

预期结果:不小于 65535。如低于此值,需在 /etc/security/limits.conf 中添加:

* soft nofile 1000000
* hard nofile 1000000

步骤 3:检查虚拟内存区域数量

sysctl vm.max_map_count

预期结果:不小于 262144。如需修改,执行 sysctl -w vm.max_map_count=2000000

步骤 4:检查透明大页

cat /sys/kernel/mm/transparent_hugepage/enabled

预期结果:包含 [never]。如为 [always],需执行:

echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag

镜像仓库访问

如需访问 DockerHub 公共镜像仓库,需要为集群添加 Amazon VPC CNICoreDNSkube-proxy 等网络插件,并为集群配置 VPC 时选择可访问公共环境的子网。


特权模式说明

EKS 下,EC2 实例完全属于当前 EKS 用户,不存在不同用户集群在资源池中相互影响的情况。

  • 若您的 EKS 允许特权模式(默认允许):无需关心系统参数,Doris Operator 默认会为 Doris 运行调整系统参数。
  • 若不允许特权模式:则需要在宿主机上进行以下系统参数调整:
参数命令检查方式
虚拟内存区域数量sysctl -w vm.max_map_count=2000000sysctl vm.max_map_count
透明大页关闭检查是否包含 never
最大文件句柄数修改 /etc/security/limits.confulimit -n
swapswapoff -aswapon --show(无输出则已禁用)

详细说明请参考:操作系统检查


常见问题

Q: 自治模式有哪些风险?

自治模式的计算资源通过内置节点池动态分配和回收,每次资源申请或释放都会进行现有资源的重新整合。对于 StatefulSet 有状态服务尤其是启动耗时长和 Doris 这种有严格分布式协同要求的服务,可能造成共享节点池的所有服务动荡,导致整个 Doris 集群全部节点漂移。

Q: 已有集群如何配置新的节点组?

建议为 Doris 集群配置独立的节点组。涉及 BE 运行的系统设置时,可能需要调整宿主机的系统参数。创建节点组时可通过 EC2 > 启动模板 > 创建启动模板来设置,并通过模板注入脚本自动化配置 EC2 实例的系统环境。

Q: EKS 节点需要哪些 IAM 权限?

需要 AmazonEC2FullAccess、AmazonEKSWorkerNodePolicy、AmazonEKS_CNI_Policy 和 AmazonSSMManagedInstanceCore 权限。

Q: 如何验证系统参数已正确配置?

参考场景二中的检查步骤,逐项验证 swap、文件句柄数、虚拟内存区域数量、透明大页等参数是否满足要求。