跳到主要内容

阿里云容器服务部署 Doris 集群指南

阿里云容器服务概述

阿里云提供两种容器服务:

服务说明适用场景
ACK (Container Service for Kubernetes)购买 ECS 实例后托管的容器化服务,可获得完全访问控制权限需要控制底层 ECS、需特权模式部署 BE 节点
ACS (Container Service ACS)以 K8s 为界面的云计算服务,按需计费,无需关注底层 ECS纯弹性算力、按需付费

本文档分别介绍这两种服务上使用 Doris Operator 部署集群的方法。

ACK 部署

ACK 属于购买 ECS 实例后托管的容器化服务,可获得完全访问控制权限进行系统参数调整。使用 Alibaba Cloud Linux 3 镜像时,当前系统参数完全满足 Doris 运行需求;其他镜像可通过 K8s 特权模式在容器内修正参数。

使用 ACK + Doris Operator 部署时,大多数 ECS 默认配置即可满足要求,未满足的参数 Operator 会自行修正。

场景一:已有集群

如果容器服务集群已创建,按以下步骤检查并修正参数:

步骤 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

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

场景二:新建集群

如需创建新集群,可在阿里云容器服务 ACK 控制台点击”创建集群”。在节点池配置步骤的”实例预自定义数据”中添加以下脚本:

#!/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

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

ACS 部署

ACS 是以 K8s 为界面的云计算服务,提供按需计费的弹性算力。无需关注底层 ECS,但 BE 节点启动需要特权模式来修改系统参数(如 vm.max_map_count)。

提示

如果当前集群无法使用特权模式,则无法启动 BE 节点。建议选择 ACK + 宿主机的形式部署。

步骤 1:配置镜像仓库

ACS 推荐使用配套的阿里云镜像仓库 Container Registry (ACR),分为个人版和企业版。

将 Doris 官方镜像迁移到阿里云镜像仓库后,如使用私有镜像需创建 secret:

kubectl create secret docker-registry image-hub-secret \
--docker-server={your-server} \
--docker-username={your-username} \
--docker-password={your-pwd}

步骤 2:配置 DCR 使用私有镜像

在 DorisCluster CR 中配置 imagePullSecrets

spec:
feSpec:
replicas: 1
image: <your-acr-registry>/selectdb-test/doris.fe-ubuntu:3.0.3
imagePullSecrets:
- name: image-hub-secret
beSpec:
replicas: 3
image: <your-acr-registry>/selectdb-test/doris.be-ubuntu:3.0.3
imagePullSecrets:
- name: image-hub-secret
systemInitialization:
initImage: <your-acr-registry>/selectdb-test/alpine:latest

步骤 3:配置 Service

ACS 不存在常规 Node 概念,Service 限制使用 NodePort 模式。可用以下模式:

ClusterIP 模式(默认)

Operator 默认网络模式,参考 Kubernetes Service 文档

负载均衡模式

方式一:通过 DCR 配置 annotations

feSpec:
replicas: 3
image: <your-image>
service:
type: LoadBalancer
annotations:
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-address-type: "intranet"

方式二:通过 ACS 控制台托管

  1. DCR 中 serviceType 设为 ClusterIP(默认)
  2. 在 ACS 控制台:容器计算服务 ACS → 集群列表 → 集群 → 服务 → 创建
  3. 选择新建的 LB 进行绑定。该 Service 随 Doris Operator 管理,不受 Operator 管控。

常见问题

Q: BE 节点无法启动怎么办?

检查以下几点:

  1. 特权模式未开启:ACS 需要特权模式修改 vm.max_map_count,如无法开启请使用 ACK
  2. 镜像拉取失败:检查 imagePullSecrets 是否正确配置
  3. 虚拟内存区域数量不足:执行 sysctl vm.max_map_count,确保不小于 262144

Q: 集群节点显示为 virtual-kubelet 正常吗?

正常。ACS 使用虚拟节点调度容器,节点名类似 virtual-kubelet-cn-hongkong-d 是 ACS 的正常行为。

Q: 阿里云地域未开启特权模式怎么办?

提交工单申请开启 ACS 特权模式能力加白。

Q: 如何选择 ACK 还是 ACS?

场景推荐
需要完全控制底层 ECSACK
纯弹性按需付费,无需关注底层ACS
BE 节点需要特权模式ACK