2015-09-24 38 views
2

我們試圖在kubernetes/flannel/coreos集羣上運行Elasticsearch。kubernetes上的elasticsearch - 節點的發現

作爲法蘭絨does not support multicast,我們不能使用Zen多點傳送發現來允許節點找到對方,形成一個羣集並進行通信。

將所有kubernetes節點的IP地址硬編碼到ES-config文件中,我們可以使用另一種方法來協助發現嗎?可能使用etcd2或其他kubernetes兼容的發現服務?

+0

'對IP地址進行硬編碼的缺點':具體有多少個節點? [kubernetes-elasticsearch-cluster](https://github.com/pires/kubernetes-elasticsearch-cluster)可能有幫助嗎? – Val

+0

ahh此刻只有兩個節點,但我們希望能夠根據需要進行擴展。我確實看了看那個引用的項目,但我不確定如何管理該類型配置中的持久存儲。 – DrGecko

回答

3

將容器放入Kubernetes服務中。 Kubernetes API提供了可用的「端點」API,其中列出了服務的所有成員的IP地址。當您縮放Pod的數量時,此端點集將動態縮小和增長。

您可以訪問端點與:通過Kubernetes API

kubectl get endpoints <service-name> 

或直接,請參閱:

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

對於如何這對Cassandra的做了一個例子。

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 

And elasticsearch.yml

cloud.k8s.servicedns: elasticsearch-cluster 
discovery.type: io.fabric8.elasticsearch.discovery.k8s.K8sDiscoveryModule