Способы развернуть Elasticsearch 8: Docker, Elastic Cloud, self-managed и ECK

Прежде чем слать первый запрос, нужно решить один вопрос: где будет жить ваш Elasticsearch? Вариантов четыре — и они принципиально отличаются по сложности, стоимости и тому, сколько времени вы тратите на ops вместо разработки.

flowchart TD A[Где запустить Elasticsearch 8?] --> B{Есть Kubernetes?} A --> C{Нужен продакшн без ops?} A --> D{Изучение / разработка?} A --> E{Свои серверы / VMs?} B -->|Да| F[ECK — Elastic Cloud on Kubernetes] C -->|Да| G[Elastic Cloud — managed SaaS] D -->|Да| H[Docker / Docker Compose] E -->|Да| I[Self-managed: deb / rpm / tar] H --> J["localhost:9200\nБыстрый старт"] G --> K["cloud.elastic.co\nАвтобэкапы, TLS, мультинода"] F --> L["kubectl apply\nДекларативное управление"] I --> M["/etc/elasticsearch/elasticsearch.yml\nПолный контроль"]
flowchart TD
    A[Где запустить Elasticsearch 8?] --> B{Есть Kubernetes?}
    A --> C{Нужен продакшн без ops?}
    A --> D{Изучение / разработка?}
    A --> E{Свои серверы / VMs?}
    B -->|Да| F[ECK — Elastic Cloud on Kubernetes]
    C -->|Да| G[Elastic Cloud — managed SaaS]
    D -->|Да| H[Docker / Docker Compose]
    E -->|Да| I[Self-managed: deb / rpm / tar]
    H --> J["localhost:9200\nБыстрый старт"]
    G --> K["cloud.elastic.co\nАвтобэкапы, TLS, мультинода"]
    F --> L["kubectl apply\nДекларативное управление"]
    I --> M["/etc/elasticsearch/elasticsearch.yml\nПолный контроль"]
Дерево выбора варианта деплоя Elasticsearch 8

Вариант 1. Docker — для экспериментов и разработки

Для старта и обучения Docker — лучший выбор. Вы получаете работающий ES за одну команду, без установки JVM и правки конфигов. Именно так стоит идти, если вы сейчас изучаете справочник.

Один контейнер, один узел:

docker run -d \
  --name elasticsearch \
  -p 9200:9200 \
  -e "discovery.type=single-node" \
  -e "ELASTIC_PASSWORD=changeme" \
  docker.elastic.co/elasticsearch/elasticsearch:8.19.0

Что тут происходит:

  • -p 9200:9200 — пробрасывает REST API на localhost:9200. Порт 9300 (межнодовый транспорт) для одиночного узла пробрасывать не нужно.
  • discovery.type=single-node — говорит ES не ждать других нод и не устраивать выборы мастера.
  • ELASTIC_PASSWORD=changeme — задаёт пароль встроенного пользователя elastic. В ES 8 безопасность включена по умолчанию, так что без этой переменной контейнер сам сгенерирует пароль и напечатает его в логах.
Проверь себя
Вы запустили контейнер командой `docker run ... -e "discovery.type=single-node" ...`. Почему важен именно этот параметр? Что произойдёт, если его не указать?

Проверьте, что ES поднялся:

curl -u elastic:changeme https://localhost:9200 --cacert /tmp/ca.crt

Подождите — здесь нет опечатки. ES 8 слушает на HTTPS, а не HTTP. Сертификат генерируется при первом старте. Как с этим работать, разобрано в статье Безопасность по умолчанию в Elasticsearch 8.

Если сертификат мешает при локальных экспериментах, можно временно отключить TLS:

docker run -d \
  --name elasticsearch \
  -p 9200:9200 \
  -e "discovery.type=single-node" \
  -e "xpack.security.enabled=false" \
  docker.elastic.co/elasticsearch/elasticsearch:8.19.0

> ⚠️ xpack.security.enabled=false — только для локальной разработки. Никогда в продакшне.

Docker Compose с Kibana — удобнее для постоянной работы. Kibana даёт графический интерфейс и Dev Tools Console, через которую мы будем слать большинство запросов из примеров справочника. Пример compose-файла:

services:
  elasticsearch:
    image: docker.elastic.co/elasticsearch/elasticsearch:8.19.0
    environment:
      - discovery.type=single-node
      - ELASTIC_PASSWORD=changeme
      - xpack.security.http.ssl.enabled=false  # упрощаем для dev
    ports:
      - "9200:9200"

  kibana:
    image: docker.elastic.co/kibana/kibana:8.19.0
    ports:
      - "5601:5601"
    environment:
      - ELASTICSEARCH_HOSTS=http://elasticsearch:9200
      - ELASTICSEARCH_USERNAME=kibana_system
      - ELASTICSEARCH_PASSWORD=changeme
    depends_on:
      - elasticsearch

После docker compose up -d Kibana доступна на http://localhost:5601.

Ограничения Docker-варианта: данные живут внутри контейнера — при удалении контейнера данные пропадают. Для постоянного хранения добавляйте volume: -v esdata:/usr/share/elasticsearch/data. Для продакшна Docker-контейнер на одном хосте не даёт ни отказоустойчивости, ни масштабирования.


Вариант 2. Elastic Cloud — управляемый сервис

Elastic Cloud — это официальный SaaS от Elastic: вы заходите на cloud.elastic.co, нажимаете «Create deployment», выбираете регион и размер — и через несколько минут получаете готовый кластер с Kibana, TLS и автоматическими бэкапами. Вся операционная часть на стороне Elastic.

Что вы получаете:

  • Кластер с несколькими нодами «из коробки» — никакой ручной настройки.
  • Автоматические снапшоты.
  • Интеграция с AWS, GCP, Azure — можно выбрать регион рядом с вашим бэкендом.
  • Бесплатный пробный период (14 дней без карты).

Минусы: дорого при больших объёмах данных и постоянной нагрузке. Меньше контроля над конфигурацией железа и JVM.

Для подключения вы получаете эндпоинт вида https://my-cluster.es.us-east-1.aws.elastic.cloud:443 и API-ключ или логин/пароль. Все запросы — стандартный REST API, разницы с локальным кластером с точки зрения кода нет.

Проверь себя
Чем Elastic Cloud принципиально отличается от Docker-варианта с точки зрения кода, который вы пишете для работы с ES?

Вариант 3. Self-managed — установка на свои серверы

Если у вас есть собственные серверы или виртуальные машины, можно поставить ES напрямую. Elastic предоставляет пакеты для большинства Linux-дистрибутивов:

СпособКомандаКогда уместен
DEB (Debian/Ubuntu)apt install elasticsearchVPS, dedicated servers
RPM (RHEL/CentOS)yum install elasticsearchEnterprise Linux
TAR.GZраспаковать и запуститьmacOS, Windows, нестандартные среды

После установки ES запускается как системный сервис:

systemctl enable elasticsearch
systemctl start elasticsearch

Конфигурация живёт в /etc/elasticsearch/elasticsearch.yml. Именно здесь настраивают имя кластера, имя ноды, адрес биндинга, пути к данным и логам, параметры дискавери для многонодового кластера.

Плюсы: полный контроль, нет оверхеда виртуализации, максимальная производительность на правильно настроенном железе.

Минусы: вы сами отвечаете за обновления, мониторинг, снапшоты, TLS-сертификаты и всё остальное. Для небольшой команды без DevOps-экспертизы это ощутимая нагрузка.


Вариант 4. ECK — Elasticsearch на Kubernetes

ECK (Elastic Cloud on Kubernetes) — официальный Kubernetes-оператор от Elastic. Оператор расширяет API Kubernetes кастомными ресурсами (Elasticsearch, Kibana и др.) и управляет жизненным циклом кластера декларативно: вы описываете желаемое состояние в YAML, оператор следит за тем, чтобы реальность ему соответствовала.

Минимальный манифест ES-кластера:

apiVersion: elasticsearch.k8s.elastic.co/v1
kind: Elasticsearch
metadata:
  name: quickstart
spec:
  version: 8.19.0
  nodeSets:
  - name: default
    count: 1
    config:
      node.store.allow_mmap: false
kubectl apply -f elasticsearch.yaml

ECK сам создаст StatefulSet, настроит TLS, сгенерирует секрет с паролем elastic и обеспечит rolling upgrade при смене версии.

Плюсы: идеально для команд, которые уже работают с Kubernetes; операторная модель устраняет ручные операции; масштабирование — правка count в YAML.

Минусы: требует работающего Kubernetes-кластера и понимания его концепций. Для старта с нуля — значительный порог вхождения.

Актуальная версия оператора (ECK 3.4.0) поддерживает ES 8.x и позволяет управлять не только Elasticsearch, но и Kibana, APM Server, Fleet и другими компонентами Elastic Stack.

Проверь себя
ECK использует «операторную модель». Что это означает на практике — что делает оператор вместо вас?

Как выбрать?

Практическое правило: для изучения справочника и разработки — Docker. Быстро, воспроизводимо, легко сбросить. Когда придёт время деплоить в продакшн — выбор между Elastic Cloud, self-managed и ECK зависит от вашей инфраструктуры, бюджета и того, есть ли в команде DevOps.

Во всех вариантах REST API идентичен. Запросы из остальных статей справочника работают одинаково — неважно, поднят ES в Docker на ноутбуке или в managed-кластере на AWS.


Быстрое повторение
За какие операционные задачи вы отвечаете при self-managed Elasticsearch?
Быстрое повторение
Какой основной недостаток Elastic Cloud при больших объёмах данных?
Быстрое повторение
Для чего нужна переменная окружения `discovery.type=single-node` при запуске Elasticsearch в Docker?

См. также

Источники

  1. Start a single-node cluster in Docker | Elastic Docs
  2. Elastic Cloud on Kubernetes | Elastic Docs
  3. Install ECK using the YAML manifests | Elastic Docs
  4. Running Elasticsearch in Docker: Setup, Compose, and Production Tips