elasticsearch в kubernetes — обнаружение узлов

Мы пытаемся запустить Elasticsearch поверх кластера kubernetes/flannel/coreos.

Поскольку фланель не поддерживает многоадресную рассылку, мы не можем использовать обнаружение многоадресной рассылки Zen, чтобы позволить узлам находить друг друга, образуют кластер и общаются.

Помимо жесткого кодирования IP-адресов всех узлов kubernetes в ES-config-file, есть ли другой метод, который мы можем использовать для помощи в обнаружении? Возможно, вы используете etcd2 или какой-либо другой сервис обнаружения, совместимый с kubernetes?


person DrGecko    schedule 24.09.2015    source источник
comment
Short of hard-coding the IP addresses: сколько у вас конкретно узлов? Поможет ли kubernetes-elasticsearch-cluster?   -  person Val    schedule 25.09.2015
comment
ааа, на данный момент всего два узла, но нам нужна возможность масштабирования при необходимости. Я взглянул на этот упомянутый проект, но я не уверен, как управлять постоянным хранилищем в конфигурации такого типа.   -  person DrGecko    schedule 25.09.2015


Ответы (3)


Версия 6.2.0 поддерживает автоматическое обнаружение kubernetes.

обновите свой elasticsearch.yml следующим образом

discovery.zen.ping.unicast.hosts: «имя службы kubernetes»

person krish    schedule 19.03.2018
comment
я должен открыть 9200 на службе или контейнере или обоих? - person Dzmitry Lahoda; 23.09.2019

Существует плагин обнаружения, который использует API kubernetes для обнаружения кластера:

https://github.com/fabric8io/elasticsearch-cloud-kubernetes

Установите плагин:

/usr/share/elasticsearch/bin/plugin -i io.fabric8/elasticsearch-cloud-kubernetes/1.3.0 --verbose

Создайте сервис Kubernetes для обнаружения:

apiVersion: v1
kind: Service
metadata:
  name: elasticsearch-cluster
spec:
  ports:
    - port: 9300
  selector:
    app: elasticsearch

И elasticsearch.yml:

cloud.k8s.servicedns: elasticsearch-cluster
discovery.type: io.fabric8.elasticsearch.discovery.k8s.K8sDiscoveryModule
person kjv    schedule 05.10.2015

Поместите контейнеры в службу Kubernetes. API Kubernetes предоставляет API «конечных точек», в котором перечислены IP-адреса всех членов службы. Этот набор конечных точек будет динамически уменьшаться и увеличиваться по мере увеличения количества модулей.

Вы можете получить доступ к конечным точкам с помощью:

kubectl get endpoints <service-name>

или напрямую через API Kubernetes, см.:

https://github.com/kubernetes/kubernetes/blob/master/examples/cassandra/java/src/io/k8s/cassandra/KubernetesSeedProvider.java#L106

для примера того, как это было сделано для Кассандры.

person brendan    schedule 28.09.2015