Способы развернуть 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Полный контроль"]Вариант 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 безопасность включена по умолчанию, так что без этой переменной контейнер сам сгенерирует пароль и напечатает его в логах.
Проверьте, что 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, разницы с локальным кластером с точки зрения кода нет.
Вариант 3. Self-managed — установка на свои серверы
Если у вас есть собственные серверы или виртуальные машины, можно поставить ES напрямую. Elastic предоставляет пакеты для большинства Linux-дистрибутивов:
| Способ | Команда | Когда уместен |
|---|---|---|
| DEB (Debian/Ubuntu) | apt install elasticsearch | VPS, dedicated servers |
| RPM (RHEL/CentOS) | yum install elasticsearch | Enterprise 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: falsekubectl apply -f elasticsearch.yamlECK сам создаст StatefulSet, настроит TLS, сгенерирует секрет с паролем elastic и обеспечит rolling upgrade при смене версии.
Плюсы: идеально для команд, которые уже работают с Kubernetes; операторная модель устраняет ручные операции; масштабирование — правка count в YAML.
Минусы: требует работающего Kubernetes-кластера и понимания его концепций. Для старта с нуля — значительный порог вхождения.
Актуальная версия оператора (ECK 3.4.0) поддерживает ES 8.x и позволяет управлять не только Elasticsearch, но и Kibana, APM Server, Fleet и другими компонентами Elastic Stack.
Как выбрать?
Практическое правило: для изучения справочника и разработки — Docker. Быстро, воспроизводимо, легко сбросить. Когда придёт время деплоить в продакшн — выбор между Elastic Cloud, self-managed и ECK зависит от вашей инфраструктуры, бюджета и того, есть ли в команде DevOps.
Во всех вариантах REST API идентичен. Запросы из остальных статей справочника работают одинаково — неважно, поднят ES в Docker на ноутбуке или в managed-кластере на AWS.