4

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

由于 flannel不支持多播,我们无法使用 Zen 多播发现来让节点相互发现、组成集群并进行通信。

除了将所有 kubernetes 节点的 IP 地址硬编码到 ES-config-file 中之外,还有其他方法可以用来帮助发现吗?可能使用 etcd2 或其他一些与 kubernetes 兼容的发现服务?

4

4 回答 4

6

6.2.0 版本支持 Kubernetes 自动发现

更新您的 elasticsearch.yml 如下

discovery.zen.ping.unicast.hosts: "kubernetes 服务名称"

于 2018-03-19T10:46:52.403 回答
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
于 2015-10-05T20:57:29.640 回答
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 完成此操作的示例。

于 2015-09-28T03:02:38.443 回答
0

它仅在此配置中对我有用。
重要的!flannel 必须使用 vxlan 启用。

集群.yaml

network:
  plugin: flannel
  options:
    flannel_backend_type: vxlan

弹性搜索.yaml

apiVersion: elasticsearch.k8s.elastic.co/v1
kind: Elasticsearch
metadata:
  name: elastic-cluster
spec:
  version: 7.0.1
  nodeSets:
    - name: node
      count: 3
      config:
        node.master: true
        node.data: true
        node.ingest: true
        xpack.ml.enabled: true
        node.store.allow_mmap: true
        indices.query.bool.max_clause_count: 100000

#        Fixed flannel kubernetes network plugin
        discovery.seed_hosts:
        {{ range $i, $e := until (3 | int) }}
          - elastic-cluster-es-node-{{ $i }}
        {{ end }}

      podTemplate:
        spec:
          containers:
            - name: elasticsearch
              env:
                - name: ES_JAVA_OPTS
                  value: "-Xms4g -Xmx4g"
                - name: READINESS_PROBE_TIMEOUT
                  value: "60"
              resources:
                requests:
                  memory: 5Gi
#                  cpu: 1
                limits:
                  memory: 6Gi
      volumeClaimTemplates:
        - metadata:
            name: elasticsearch-data
          spec:
            storageClassName: local-elasticsearch-storage
            accessModes:
              - ReadWriteOnce
            resources:
              requests:
                storage: 5G
于 2021-12-14T06:58:26.843 回答