我们正试图在kubernetes / flannel / coreos集群之上运行Elasticsearch。
作为法兰绒does not support multicast,我们不能使用Zen多播发现来允许节点找到对方,形成群集并进行通信。
如果没有将所有kubernetes节点的IP地址硬编码到ES-config文件中,我们可以使用另一种方法来帮助发现吗?可能使用etcd2或其他一些与kubernetes兼容的发现服务?
答案 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,请参阅:
以了解如何为Cassandra做的事。
答案 2 :(得分:2)
版本6.2.0支持kubernetes自动发现
按照以下
更新您的elasticsearch.ymldiscovery.zen.ping.unicast.hosts:“kubernetes service name”