# elasticsearch-cloud-kubernetes **Repository Path**: ethanxzw/elasticsearch-cloud-kubernetes ## Basic Information - **Project Name**: elasticsearch-cloud-kubernetes - **Description**: No description available - **Primary Language**: Java - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2020-08-20 - **Last Updated**: 2024-06-05 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README This plugin is no longer under active development and can be replaced by utilizing a headless service as noted below ====== Kubernetes Cloud Plugin for Elasticsearch: ========================================= [![Build Status](https://travis-ci.org/fabric8io/elasticsearch-cloud-kubernetes.svg?branch=master)](https://travis-ci.org/fabric8io/elasticsearch-cloud-kubernetes) The Kubernetes Cloud plugin allows to use Kubernetes API for the unicast discovery mechanism. Alternatively, you can utilize [headless services](https://kubernetes.io/docs/concepts/services-networking/service/#headless-services): apiVersion: v1 kind: Service metadata: annotations: service.alpha.kubernetes.io/tolerate-unready-endpoints: "true" name: elasticsearch-cluster spec: clusterIP: None ports: - port: 9300 protocol: TCP targetPort: 9300 publishNotReadyAddresses: true selector: component: es sessionAffinity: None type: ClusterIP elasticsearch.yml: ... discovery.zen: minimum_master_nodes: ${NODE_QUORUM} ping.unicast.hosts: elasticsearch-cluster ... **NOTE**: You are highly encouraged to use headless services as the they obsolete this plugin. Installation ============ ``` elasticsearch-plugin install io.fabric8:elasticsearch-cloud-kubernetes:6.2.3.2 ``` Versions available ================== As of `2.0.0`, each released version of this plugin is compatible with the equal version of Elasticsearch, e.g. `2.2.0` of this plugin is compatible with `2.2.0` of Elasticsearch. **Older versions**: * `1.3.x` for Elasticsearch `1.6` and `1.7` Kubernetes Pod Discovery =============================== Kubernetes Pod discovery allows to use the kubernetes APIs to perform automatic discovery. Here is a simple sample configuration: ```yaml cloud: kubernetes: service: ${SERVICE} namespace: ${NAMESPACE} discovery.zen.hosts_provider: kubernetes path: data: /data/data logs: /data/log ``` ## Kubernetes auth The preferred way to authenticate to Kubernetes is to use [service accounts](https://github.com/GoogleCloudPlatform/kubernetes/blob/master/docs/design/service_accounts.md). This is fully supported by this Elasticsearch Kubernetes plugin as it uses the [Fabric8](http://fabric8.io) Kubernetes API client. As an example, to create a service account do something like: ``` cat < spec: serviceAccountName: elasticsearch ``` This will mount the service account token at `/var/run/secrets/kubernetes.io/servicaccount/token` & will be automatically read by the fabric8 kubernetes client when the request is made to the API server. # Kubernetes example In this example, we're going to use a headless service to look up the Elasticsearch cluster nodes to join. The following manifest uses 3 replication controllers to created Elasticsearch pods in 3 different modes: * master * data * coordinating-only We use 2 services as well: * One to target the coordinating-only pods so that all requests to the cluster go through the coordinating-only nodes * A headless service to list all cluster endpoints managed by all 3 RCs. ```yaml kind: "List" apiVersion: "v1" items: - apiVersion: "v1" kind: "Service" metadata: name: "elasticsearch" spec: ports: - port: 9200 targetPort: "http" selector: component: "elasticsearch" type: "coordinating-only" provider: "fabric8" type: "LoadBalancer" - apiVersion: "v1" kind: "Service" metadata: name: "elasticsearch-cluster" spec: clusterIP: "None" ports: - port: 9300 targetPort: 9300 selector: provider: "fabric8" component: "elasticsearch" - apiVersion: "v1" kind: "ReplicationController" metadata: name: "elasticsearch-data" spec: replicas: 1 selector: component: "elasticsearch" type: "data" provider: "fabric8" template: metadata: labels: component: "elasticsearch" type: "data" provider: "fabric8" spec: serviceAccount: elasticsearch serviceAccountName: elasticsearch containers: - env: - name: "SERVICE" value: "elasticsearch-cluster" - name: "KUBERNETES_NAMESPACE" valueFrom: fieldRef: fieldPath: "metadata.namespace" - name: "NODE_MASTER" value: "false" image: "fabric8/elasticsearch-k8s:6.2.3" name: "elasticsearch" ports: - containerPort: 9300 name: "transport" volumeMounts: - mountPath: "/usr/share/elasticsearch/data" name: "elasticsearch-data" readOnly: false volumes: - emptyDir: medium: "" name: "elasticsearch-data" - apiVersion: "v1" kind: "ReplicationController" metadata: name: "elasticsearch-master" spec: replicas: 1 selector: component: "elasticsearch" type: "master" provider: "fabric8" template: metadata: labels: component: "elasticsearch" type: "master" provider: "fabric8" spec: serviceAccount: elasticsearch serviceAccountName: elasticsearch containers: - env: - name: "SERVICE" value: "elasticsearch-cluster" - name: "KUBERNETES_NAMESPACE" valueFrom: fieldRef: fieldPath: "metadata.namespace" - name: "NODE_DATA" value: "false" image: "fabric8/elasticsearch-k8s:6.2.3" name: "elasticsearch" ports: - containerPort: 9300 name: "transport" - apiVersion: "v1" kind: "ReplicationController" metadata: name: "elasticsearch-coordinating-only" spec: replicas: 1 selector: component: "elasticsearch" type: "coordinating-only" provider: "fabric8" template: metadata: labels: component: "elasticsearch" type: "coordinating-only" provider: "fabric8" spec: serviceAccount: elasticsearch serviceAccountName: elasticsearch containers: - env: - name: "SERVICE" value: "elasticsearch-cluster" - name: "KUBERNETES_NAMESPACE" valueFrom: fieldRef: fieldPath: "metadata.namespace" - name: "NODE_DATA" value: "false" - name: "NODE_MASTER" value: "false" image: "fabric8/elasticsearch-k8s:6.2.3" name: "elasticsearch" ports: - containerPort: 9200 name: "http" - containerPort: 9300 name: "transport" ```