在 AWS 上的部署建议
AWS 容器服务 EKS
新建集群
EKS 集群中运行的容器是托管在 EC2 实例上的, 需要根据 Doris 的要求对 EC2 实例进行系统级配置。在集群创建时,需要用户确认 EKS 模式,自治模式或普通模式。 这里推荐不使用自治模式,因为自治模式的计算资源是通过内置节点池来分配和回收资源,在每一次的资源申请或则释放,都会进行现有资源的重新整合,对于 statefulset 这类有状态服务尤其是启动耗时长和 Doris 这种有严格的分布式协同要求的服务,会造成共享节点池的所有服务动荡,直接现象就是,有可能引起整个 Doris 集群的全部节点漂移(这比重启更恐怖,这个过程不会滚动重启,而是之前稳定运行的服务在节点上时,该节点被强制释放,K8s 调度这些 pod 去新的节点)对生产环境有很大的安全隐患。
- 如上内容,自治模式适用于无状态的服务运维部署,安装Doris集群 推荐非自治模式
- 推荐使用操作系统镜像:Amazon Linux 2
已有集群
在已有集群上(非自治模式),可以通过 Doris Operator 运行 Doris 集群,除非该集群被限制使用 K8s 的特权模式。 建议已有集群配置新的节点组来单独进行 Doris 集群资源的部署和维护,涉及到 Doris BE 运行的系统设置,可能会对宿主机的系统参数进行调整。
镜像仓库访问
在 EKS 上如果 需要访问 DockerHub 公共镜像仓库,需要为 集群添加 Amazon VPC CNI
, CoreDNS
, kube-proxy
等网络插件,并为集群配置 VPC 时,选择可访问公共环境的子网。
特权模式说明
EKS 下,EC2 实例是完全属于当前 EKS 用户的,不存在不同用户集群在资源池中相互影响而禁掉 K8s 特权模式的情况。
- 若您的 EKS 允许特权模式(默认允许),则无需关心系统参数, Doris Operator 默认会为 Doris 运行调整系统参数。
- 若不允许特权模式,则需要在宿主机上进行如下系统参数调整:
- 修改虚拟内存区域数量:
sysctl -w vm.max_map_count=2000000
调整虚拟内存的最大映射数量。通过sysctl vm.max_map_count
查看。 - 关闭透明大页:透明大页对性能可能有不利影响,因此需要关闭它。通过 cat /sys/kernel/mm/transparent_hugepage/enabled 是否包含 never 来判断。
- 设置最大打开文件句柄数:通过修改
/etc/security/limits.conf
来调整最大文件句柄数。通过ulimit -n
来查看。 - 禁用 swap:
swapoff -a
用于禁用所有 swap 分区和文件。通过swapon --show
验证, 未开启则无输出。
- 修改虚拟内存区域数量:
存储配置
Doris Operator 在生产环境一定需要用到持久化配置,用来保存节点状态,推荐 EBS 存储。
需要有以下注意事项:
- 在集群配置安装或者管理界面,为其添加 EBS 存储插件,若使用 EKS 自治模式(不推荐),则推荐安装 EFS,并且存储插件需要拥有相应的 角色权限
- 保证 EKS 节点的 IAM 角色有以下权限:
- AmazonEC2FullAccess
- AmazonEKSWorkerNodePolicy
- AmazonEKS_CNI_Policy
- AmazonSSMManagedInstanceCore
计算资源池配置
-
节点组配置(推荐)
可以在集群创建界面创建节点组,也可以在集群初始化完成后进行节点组的添加。通过 EC2 > 启动模版 > 创建启动模板 来设置节点池的节点组启动模板。通过模板 注入脚本来自动化调整 EC2 实例的系统环境配置,确保节点在启动时自动配置所需的系统参数。通过配置节点模板的方式,也可以实现在使用 EKS 自动弹性扩缩容的时候,自动配置新增节点系统参数的能力。
示例启动脚本:#!/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
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另外,创建节点组的时候,若想通过命令行访问,需要配置远程节点访问权限。
-
内置节点池配置(不推荐)
开启 EKS 自治模式使用的资源池,在创建节点池时,您可以选择自定义 EC2 实例类型,调整实例的 CPU、内存等资源。在节点池配置时,可以为 EC2 实例添加启动脚本来进行系统参数的调整。但是此类型资源池需要使用自治模式,并且对集群的管理自由度降低。具体修改操作详情参考:操作系统检查