Развёртывание кластера Doris в AWS EKS
Обзор контейнерного сервиса AWS EKS
AWS EKS поддерживает два режима работы:
| Режим | Описание | Сценарии использования |
|---|---|---|
| Неавтономный режим (рекомендуется) | Стандартный режим EKS с полным контролем над базовыми экземплярами EC2 | Производственные среды, сервисы с сохранением состояния, кластеры Doris |
| Автономный режим | Встроенный пул узлов с автоматическим эластичным масштабированием ресурсов | Сервисы без сохранения состояния, небольшие рабочие нагрузки |
Использовать автономный режим не рекомендуется. В этом режиме вычислительные ресурсы динамически выделяются и освобождаются через встроенный пул узлов, что может приводить к перемещению узлов кластера Doris и создавать риски для безопасности в производственных средах.
Сценарий 1: Создание нового кластера
Шаг 1: Создайте кластер EKS (неавтономный режим)
При создании кластера в консоли EKS выберите неавтономный режим.
Рекомендуемая конфигурация:
- Образ операционной системы: Amazon Linux 2
- Группа узлов: используйте выделенную группу узлов для развёртывания Doris
Шаг 2: Настройте скрипт запуска группы узлов
Настройте шаблон запуска для пула узлов в разделе EC2 > Шаблоны запуска > Создать шаблон запуска. Добавьте в шаблон следующий скрипт для автоматической настройки системных параметров:
#!/bin/bash
chmod +x /etc/rc.d/rc.local
# Disable the firewall
echo "sudo systemctl stop firewalld.service" >> /etc/rc.d/rc.local
echo "sudo systemctl disable firewalld.service" >> /etc/rc.d/rc.local
# Set the number of virtual memory areas
echo "sysctl -w vm.max_map_count=2000000" >> /etc/rc.d/rc.local
# Disable swap
echo "swapoff -a" >> /etc/rc.d/rc.local
# Set the file handle limit
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
Убедитесь, что роль IAM узла EKS имеет следующие разрешения:
- AmazonEC2FullAccess
- AmazonEKSWorkerNodePolicy
- AmazonEKS_CNI_Policy
- AmazonSSMManagedInstanceCore
Шаг 4: Настройте хранилище
Для производственных сред рекомендуется хранилище EBS. Добавьте плагин хранилища EBS в интерфейсе настройки кластера и убедитесь, что у плагина есть соответствующие разрешения роли.
Сценарий 2: Существующий кластер
Шаг 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 CNI, CoreDNS и kube-proxy, а при настройке VPC для кластера выберите подсеть с доступом к общедоступной сети.
Привилегированный режим
В EKS экземпляры EC2 полностью принадлежат текущему пользователю EKS, поэтому кластеры разных пользователей не влияют друг на друга в общем пуле ресурсов.
- Если в вашей среде EKS разрешён привилегированный режим (разрешён по умолчанию): вам не нужно беспокоиться о системных параметрах. По умолчанию Doris Operator автоматически настраивает системные параметры для Doris.
- Если привилегированный режим запрещён: необходимо внести следующие изменения в системные параметры хоста:
| Параметр | Команда | Проверка |
|---|---|---|
| Количество областей виртуальной памяти | sysctl -w vm.max_map_count=2000000 | sysctl vm.max_map_count |
| Прозрачные большие страницы памяти | Отключить | Убедитесь, что вывод содержит never |
| Максимальное количество файловых дескрипторов | Изменить /etc/security/limits.conf | ulimit -n |
| swap | swapoff -a | swapon --show (отсутствие вывода означает, что swap отключён) |
Подробнее см. в разделе Проверка операционной системы.
Часто задаваемые вопросы
Вопрос: Какие риски связаны с автономным режимом?
В автономном режиме вычислительные ресурсы динамически выделяются и освобождаются через встроенный пул узлов, а существующие ресурсы перераспределяются при каждом выделении или освобождении. Для сервисов с сохранением состояния на базе StatefulSet, особенно сервисов с длительным запуском и таких сервисов, как Doris, со строгими требованиями к распределённой координации, это может вызывать нестабильность всех сервисов, использующих общий пул узлов, и приводить к перемещению всех узлов кластера Doris.
Вопрос: Как настроить новую группу узлов в существующем кластере?
Для кластера Doris рекомендуется настроить выделенную группу узлов. Если требуется изменить системные настройки, связанные с работой BE, может потребоваться настройка системных параметров хоста. При создании группы узлов можно настроить её через EC2 > Шаблоны запуска > Создать шаблон запуска и использовать шаблон для добавления скриптов, автоматизирующих настройку системной среды экземпляров EC2.
Вопрос: Какие разрешения IAM нужны узлу EKS?
Ему нужны разрешения AmazonEC2FullAccess, AmazonEKSWorkerNodePolicy, AmazonEKS_CNI_Policy и AmazonSSMManagedInstanceCore.
Вопрос: Как проверить правильность настройки системных параметров?
Выполните проверки из сценария 2, чтобы убедиться, что состояние swap, количество файловых дескрипторов, количество областей виртуальной памяти и настройки прозрачных больших страниц памяти соответствуют требованиям.