From 85378ad34fc5cd33aceb2ee0a4d7c1772ad2a816 Mon Sep 17 00:00:00 2001 From: Angus Lees Date: Tue, 7 Mar 2017 17:33:37 +1100 Subject: [PATCH 1/2] Arrange for elasticsearch to shutdown cleanly Kubernetes initiates "graceful shutdown" by sending SIGTERM to pid 1. The way the existing startup scripts worked, this signal arrived at the shell wrapper, not elasticsearch, and the shell wrapper exited, killing the container immediately. Before this change: 1 ? Ss 0:00 /bin/sh -c /run.sh 6 ? S 0:00 /bin/bash /run.sh 13 ? S 0:00 \_ /bin/su -c /elasticsearch/bin/elasticsearch elasticsearch 14 ? Ss 0:00 \_ sh -c /elasticsearch/bin/elasticsearch 15 ? Sl 19:18 \_ /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java ... org.elasticsearch.bootstrap.Elasticsearch start After this change: 1 ? Ssl 0:29 /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java ... org.elasticsearch.bootstrap.Elasticsearch start --- cluster/addons/fluentd-elasticsearch/es-controller.yaml | 2 +- cluster/addons/fluentd-elasticsearch/es-image/Dockerfile | 4 ++-- cluster/addons/fluentd-elasticsearch/es-image/Makefile | 2 +- cluster/addons/fluentd-elasticsearch/es-image/run.sh | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/cluster/addons/fluentd-elasticsearch/es-controller.yaml b/cluster/addons/fluentd-elasticsearch/es-controller.yaml index 75ff11205b4..7fc0d231b15 100644 --- a/cluster/addons/fluentd-elasticsearch/es-controller.yaml +++ b/cluster/addons/fluentd-elasticsearch/es-controller.yaml @@ -21,7 +21,7 @@ spec: kubernetes.io/cluster-service: "true" spec: containers: - - image: gcr.io/google_containers/elasticsearch:v2.4.1-1 + - image: gcr.io/google_containers/elasticsearch:v2.4.1-2 name: elasticsearch-logging resources: # need more cpu upon initialization, therefore burstable class diff --git a/cluster/addons/fluentd-elasticsearch/es-image/Dockerfile b/cluster/addons/fluentd-elasticsearch/es-image/Dockerfile index 1e26aa6dfd7..6e8b6ec0f8b 100644 --- a/cluster/addons/fluentd-elasticsearch/es-image/Dockerfile +++ b/cluster/addons/fluentd-elasticsearch/es-image/Dockerfile @@ -23,7 +23,7 @@ ENV DEBIAN_FRONTEND noninteractive ENV ELASTICSEARCH_VERSION 2.4.1 RUN apt-get update \ - && apt-get install -y curl \ + && apt-get install -y curl gosu \ && apt-get clean RUN set -x \ @@ -48,4 +48,4 @@ RUN useradd --no-create-home --user-group elasticsearch \ VOLUME ["/data"] EXPOSE 9200 9300 -CMD /run.sh \ No newline at end of file +CMD ["/run.sh"] diff --git a/cluster/addons/fluentd-elasticsearch/es-image/Makefile b/cluster/addons/fluentd-elasticsearch/es-image/Makefile index f6bba5a25e0..8e11043a5d7 100755 --- a/cluster/addons/fluentd-elasticsearch/es-image/Makefile +++ b/cluster/addons/fluentd-elasticsearch/es-image/Makefile @@ -16,7 +16,7 @@ # The current value of the tag to be used for building and # pushing an image to gcr.io -TAG = v2.4.1-1 +TAG = v2.4.1-2 build: elasticsearch_logging_discovery docker build --pull -t gcr.io/google_containers/elasticsearch:$(TAG) . diff --git a/cluster/addons/fluentd-elasticsearch/es-image/run.sh b/cluster/addons/fluentd-elasticsearch/es-image/run.sh index 6d334f693f1..137557b25d6 100755 --- a/cluster/addons/fluentd-elasticsearch/es-image/run.sh +++ b/cluster/addons/fluentd-elasticsearch/es-image/run.sh @@ -25,4 +25,4 @@ export MINIMUM_MASTER_NODES=${MINIMUM_MASTER_NODES:-2} chown -R elasticsearch:elasticsearch /data -/bin/su -c /elasticsearch/bin/elasticsearch elasticsearch +exec gosu elasticsearch /elasticsearch/bin/elasticsearch From 3390deac31be692a65f412121417db7c0b002f05 Mon Sep 17 00:00:00 2001 From: Angus Lees Date: Fri, 10 Mar 2017 11:24:22 +1100 Subject: [PATCH 2/2] Fix `metav1` typo in previous commit Fix typo in 469df1203884b49fdfe1010fdd544cc42f3ec216 by using `metav1` consistently rather than an error-producing mix of `metav1` and `meta_v1`. --- .../es-image/elasticsearch_logging_discovery.go | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/cluster/addons/fluentd-elasticsearch/es-image/elasticsearch_logging_discovery.go b/cluster/addons/fluentd-elasticsearch/es-image/elasticsearch_logging_discovery.go index 265000be66a..eeccc823726 100644 --- a/cluster/addons/fluentd-elasticsearch/es-image/elasticsearch_logging_discovery.go +++ b/cluster/addons/fluentd-elasticsearch/es-image/elasticsearch_logging_discovery.go @@ -24,7 +24,7 @@ import ( "time" "github.com/golang/glog" - meta_v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" restclient "k8s.io/client-go/rest" "k8s.io/kubernetes/pkg/api" clientset "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset" @@ -56,7 +56,7 @@ func main() { namespace := metav1.NamespaceSystem envNamespace := os.Getenv("NAMESPACE") if envNamespace != "" { - if _, err := client.Core().Namespaces().Get(envNamespace, meta_v1.GetOptions{}); err != nil { + if _, err := client.Core().Namespaces().Get(envNamespace, metav1.GetOptions{}); err != nil { glog.Fatalf("%s namespace doesn't exist: %v", envNamespace, err) } namespace = envNamespace @@ -66,7 +66,7 @@ func main() { // Look for endpoints associated with the Elasticsearch loggging service. // First wait for the service to become available. for t := time.Now(); time.Since(t) < 5*time.Minute; time.Sleep(10 * time.Second) { - elasticsearch, err = client.Core().Services(namespace).Get("elasticsearch-logging", meta_v1.GetOptions{}) + elasticsearch, err = client.Core().Services(namespace).Get("elasticsearch-logging", metav1.GetOptions{}) if err == nil { break } @@ -83,7 +83,7 @@ func main() { // Wait for some endpoints. count := 0 for t := time.Now(); time.Since(t) < 5*time.Minute; time.Sleep(10 * time.Second) { - endpoints, err = client.Core().Endpoints(namespace).Get("elasticsearch-logging", meta_v1.GetOptions{}) + endpoints, err = client.Core().Endpoints(namespace).Get("elasticsearch-logging", metav1.GetOptions{}) if err != nil { continue }