From f9fba827306f8091c32a1c1acd1182c9587c87cb Mon Sep 17 00:00:00 2001 From: Peter Razumovsky Date: Mon, 13 Mar 2017 11:13:27 +0000 Subject: [PATCH] [WIP] Add elasticsearch support Not tested WIP. Services separated on master, client and data. Need to build and deploy it. Change-Id: I0b9fbe28ab129ee38c14caf852249a45e582c7d0 --- docker/elasticsearch/Dockerfile.j2 | 16 +++++++---- service/elasticsearch-client.yaml | 23 +++++++++++++++ service/elasticsearch-data.yaml | 28 +++++++++++++++++++ ...csearch.yaml => elasticsearch-master.yaml} | 15 ++++++---- service/files/defaults.yaml | 8 +++++- service/files/elasticsearch.yml.j2 | 23 ++++++++------- 6 files changed, 92 insertions(+), 21 deletions(-) create mode 100644 service/elasticsearch-client.yaml create mode 100644 service/elasticsearch-data.yaml rename service/{elasticsearch.yaml => elasticsearch-master.yaml} (80%) diff --git a/docker/elasticsearch/Dockerfile.j2 b/docker/elasticsearch/Dockerfile.j2 index d886791..b80bdbe 100644 --- a/docker/elasticsearch/Dockerfile.j2 +++ b/docker/elasticsearch/Dockerfile.j2 @@ -3,18 +3,24 @@ MAINTAINER {{ maintainer }} ENV JAVA_HOME /usr/lib/jvm/java-1.8.0-openjdk-amd64/ +ADD {{ url.elasticsearch.repo }}/elasticsearch-{{ elasticsearch_version }}.tar.gz /tmp/elasticsearch.tar.gz + RUN apt-get -y install --no-install-recommends -t jessie-backports openjdk-8-jre \ - && curl https://download.elastic.co/elasticsearch/release/org/elasticsearch/distribution/deb/elasticsearch/{{ elasticsearch_version }}/elasticsearch-{{ elasticsearch_version }}.deb -o /tmp/elasticsearch.deb \ - && dpkg -i /tmp/elasticsearch.deb \ - && rm -f /tmp/elasticsearch.deb \ && apt-get clean -RUN usermod -a -G microservices elasticsearch \ - && chown -R elasticsearch: /usr/share/elasticsearch +RUN useradd --user-group elasticsearch \ + && usermod -a -G microservices elasticsearch \ + && cd /usr/share \ + && tar xf /tmp/elasticsearch.tar.gz \ + && rm /tmp/elasticsearch.tar.gz \ + && mv elasticsearch-{{ elasticsearch_version }} elasticsearch \ + && chown -R elasticsearch:elasticsearch /usr/share/elasticsearch # by default elasticsearch shell is /bin/false, we need # /bin/bash to run elasticsearch as non-root # https://discuss.elastic.co/t/running-as-non-root-user-service-wrapper-has-changed/7863 RUN usermod -s /bin/bash elasticsearch -d /usr/share/elasticsearch +RUN /usr/share/elasticsearch/bin/elasticsearch-plugin install io.fabric8:elasticsearch-cloud-kubernetes:5.2.2 + USER elasticsearch diff --git a/service/elasticsearch-client.yaml b/service/elasticsearch-client.yaml new file mode 100644 index 0000000..a5bb209 --- /dev/null +++ b/service/elasticsearch-client.yaml @@ -0,0 +1,23 @@ +dsl_version: 0.8.0 +service: + name: elasticsearch-client + headless: true + ports: + - {{ elasticsearch.port }} + - {{ elasticsearch.cluster_port }} + containers: + - name: elasticsearch-client + image: elasticsearch + env: + - name: NODE_DATA + value: "false" + - name: NODE_MASTER + value: "false" + daemon: + files: + - elasticsearch.yml + command: /usr/share/elasticsearch/bin/elasticsearch +files: + elasticsearch.yml: + path: /usr/share/elasticsearch/config/elasticsearch.yml + content: elasticsearch.yml.j2 diff --git a/service/elasticsearch-data.yaml b/service/elasticsearch-data.yaml new file mode 100644 index 0000000..c67ac91 --- /dev/null +++ b/service/elasticsearch-data.yaml @@ -0,0 +1,28 @@ +dsl_version: 0.8.0 +service: + name: elasticsearch-data + headless: true + ports: + - {{ elasticsearch.port }} + - {{ elasticsearch.cluster_port }} + containers: + - name: elasticsearch-data + image: elasticsearch + volumes: + - name: elasticsearch-data + path: /usr/share/elasticsearch/data + type: empty-dir + readOnly: false + env: + - name: NODE_DATA + value: "true" + - name: NODE_MASTER + value: "false" + daemon: + files: + - elasticsearch.yml + command: /usr/share/elasticsearch/bin/elasticsearch +files: + elasticsearch.yml: + path: /usr/share/elasticsearch/config/elasticsearch.yml + content: elasticsearch.yml.j2 diff --git a/service/elasticsearch.yaml b/service/elasticsearch-master.yaml similarity index 80% rename from service/elasticsearch.yaml rename to service/elasticsearch-master.yaml index 1969012..ba37585 100644 --- a/service/elasticsearch.yaml +++ b/service/elasticsearch-master.yaml @@ -1,16 +1,22 @@ -dsl_version: 0.7.0 +dsl_version: 0.8.0 service: - name: elasticsearch + name: elasticsearch-master + headless: true ports: - {{ elasticsearch.port }} - {{ elasticsearch.cluster_port }} containers: - - name: elasticsearch + - name: elasticsearch-master image: elasticsearch + env: + - name: NODE_DATA + value: "false" + - name: NODE_MASTER + value: "true" daemon: - command: /usr/share/elasticsearch/bin/elasticsearch files: - elasticsearch.yml + command: /usr/share/elasticsearch/bin/elasticsearch - name: cron image: cron daemon: @@ -19,7 +25,6 @@ service: - es-curator-config - es-curator-action-delete-indice - es-curator-cronjob - files: elasticsearch.yml: path: /usr/share/elasticsearch/config/elasticsearch.yml diff --git a/service/files/defaults.yaml b/service/files/defaults.yaml index 176491e..2055f7e 100644 --- a/service/files/defaults.yaml +++ b/service/files/defaults.yaml @@ -5,6 +5,12 @@ configs: cluster_port: cont: 9300 retention_period: 30 + namespace: ccp + +url: + elasticsearch: + repo: https://artifacts.elastic.co/downloads/elasticsearch + versions: - elasticsearch_version: "2.4.0" + elasticsearch_version: "5.2.2" elasticsearch_curator_version: "4.1.0" diff --git a/service/files/elasticsearch.yml.j2 b/service/files/elasticsearch.yml.j2 index 6179552..1b2125d 100644 --- a/service/files/elasticsearch.yml.j2 +++ b/service/files/elasticsearch.yml.j2 @@ -1,11 +1,14 @@ -node.name: "{{ network_topology["private"]["address"] }}" -network.host: [ "127.0.0.1", "{{ network_topology["private"]["address"] }}" ] -cluster.name: "ELASTIC" -node.master: true -node.data: true -gateway.expected_nodes: 1 +node.data: ${NODE_DATA} +node.master: ${NODE_MASTER} -path.conf: "/etc/elasticsearch" -path.data: "/var/lib/elasticsearch/data" -path.logs: "/var/log/elasticsearch" -path.scripts: "/etc/elasticsearch/scripts" +network.host: 0.0.0.0 + +cloud: + kubernetes: + service: elasticsearch + namespace: {{ namespace }} + +discovery: + type: kubernetes + +plugin.mandatory: discovery-kubernetes