关于kubernetes的弹性搜索 - 节点的发现

时间:2015-09-24 16:05:18

标签: elasticsearch kubernetes consul

我们正试图在kubernetes / flannel / coreos集群之上运行Elasticsearch。

作为法兰绒does not support multicast,我们不能使用Zen多播发现来允许节点找到对方,形成群集并进行通信。

如果没有将所有kubernetes节点的IP地址硬编码到ES-config文件中,我们可以使用另一种方法来帮助发现吗?可能使用etcd2或其他一些与kubernetes兼容的发现服务?

3 个答案:

答案 0 :(得分:5)

有一个使用kubernetes API进行集群发现的发现插件:

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

答案 1 :(得分:3)

将容器放入Kubernetes服务中心。 Kubernetes API提供了一个“端点”API,用于列出服务的所有成员的IP地址。在缩放pod数量时,此端点集将动态缩小和增长。

您可以使用以下方式访问端点:

kubectl get endpoints <service-name>

或直接通过Kubernetes API,请参阅:

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

以了解如何为Cassandra做的事。

答案 2 :(得分:2)

版本6.2.0支持kubernetes自动发现

按照以下

更新您的elasticsearch.yml

discovery.zen.ping.unicast.hosts:“kubernetes service name”