From 81cc0c5790c11273fb8a685fc621fb5e36562eb3 Mon Sep 17 00:00:00 2001 From: mbohlool Date: Tue, 9 Aug 2016 15:59:45 -0700 Subject: [PATCH] Add cleanup addon pod to remove empty keys in etcd --- .../etcd-empty-dir-cleanup.yaml | 13 +++++++ .../images/etcd-empty-dir-cleanup/Dockerfile | 24 ++++++++++++ .../images/etcd-empty-dir-cleanup/Makefile | 32 ++++++++++++++++ .../etcd-empty-dir-cleanup.sh | 37 +++++++++++++++++++ 4 files changed, 106 insertions(+) create mode 100644 cluster/addons/etcd-empty-dir-cleanup/etcd-empty-dir-cleanup.yaml create mode 100644 cluster/images/etcd-empty-dir-cleanup/Dockerfile create mode 100644 cluster/images/etcd-empty-dir-cleanup/Makefile create mode 100644 cluster/images/etcd-empty-dir-cleanup/etcd-empty-dir-cleanup.sh diff --git a/cluster/addons/etcd-empty-dir-cleanup/etcd-empty-dir-cleanup.yaml b/cluster/addons/etcd-empty-dir-cleanup/etcd-empty-dir-cleanup.yaml new file mode 100644 index 00000000000..474ddf7c5c5 --- /dev/null +++ b/cluster/addons/etcd-empty-dir-cleanup/etcd-empty-dir-cleanup.yaml @@ -0,0 +1,13 @@ +apiVersion: v1 +kind: Pod +metadata: + name: etcd-empty-dir-cleanup + namespace: kube-system + labels: + k8s-app: etcd-empty-dir-cleanup +spec: + hostNetwork: true + dnsPolicy: Default + containers: + - name: etcd-empty-dir-cleanup + image: gcr.io/google_containers/etcd-empty-dir-cleanup:0.0.1 diff --git a/cluster/images/etcd-empty-dir-cleanup/Dockerfile b/cluster/images/etcd-empty-dir-cleanup/Dockerfile new file mode 100644 index 00000000000..3daa63a9a6a --- /dev/null +++ b/cluster/images/etcd-empty-dir-cleanup/Dockerfile @@ -0,0 +1,24 @@ +# Copyright 2016 The Kubernetes Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +FROM gliderlabs/alpine +MAINTAINER Mehdy Bohlool + +RUN apk-install bash +ADD etcd-empty-dir-cleanup.sh etcd-empty-dir-cleanup.sh +ADD etcdctl etcdctl +ENV ETCDCTL /etcdctl +ENV SLEEP_SECOND 3600 +RUN chmod +x etcd-empty-dir-cleanup.sh +CMD bash /etcd-empty-dir-cleanup.sh diff --git a/cluster/images/etcd-empty-dir-cleanup/Makefile b/cluster/images/etcd-empty-dir-cleanup/Makefile new file mode 100644 index 00000000000..41f7daa8315 --- /dev/null +++ b/cluster/images/etcd-empty-dir-cleanup/Makefile @@ -0,0 +1,32 @@ +# Copyright 2016 The Kubernetes Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +.PHONY: build push + +ETCD_VERSION = 2.2.1 +IMAGE = gcr.io/google_containers/etcd-empty-dir-cleanup +TAG = 0.0.1 + +clean: + rm -rf etcdctl etcd-v$(ETCD_VERSION)-linux-amd64 etcd-v$(ETCD_VERSION)-linux-amd64.tar.gz + +build: clean + curl -L -O https://github.com/coreos/etcd/releases/download/v$(ETCD_VERSION)/etcd-v$(ETCD_VERSION)-linux-amd64.tar.gz + tar xzvf etcd-v$(ETCD_VERSION)-linux-amd64.tar.gz + cp etcd-v$(ETCD_VERSION)-linux-amd64/etcdctl . + docker build -t $(IMAGE):$(TAG) . + rm -rf etcdctl etcd-v$(ETCD_VERSION)-linux-amd64 etcd-v$(ETCD_VERSION)-linux-amd64.tar.gz + +push: build + gcloud docker push $(IMAGE):$(TAG) diff --git a/cluster/images/etcd-empty-dir-cleanup/etcd-empty-dir-cleanup.sh b/cluster/images/etcd-empty-dir-cleanup/etcd-empty-dir-cleanup.sh new file mode 100644 index 00000000000..cb0eb3109b4 --- /dev/null +++ b/cluster/images/etcd-empty-dir-cleanup/etcd-empty-dir-cleanup.sh @@ -0,0 +1,37 @@ +#!/bin/bash + +# Copyright 2016 The Kubernetes Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +echo "Removing empty directories from etcd..." + +cleanup_empty_dirs () { + if [[ $(${ETCDCTL} ls $1) ]]; then + for SUBDIR in $(${ETCDCTL} ls -p $1 | grep "/$") + do + cleanup_empty_dirs ${SUBDIR} + done + else + echo "Removing empty key $1 ..." + ${ETCDCTL} rmdir $1 + fi +} + +while true +do + echo "Starting cleanup..." + cleanup_empty_dirs "/registry" + echo "Done with cleanup." + sleep ${SLEEP_SECOND} +done \ No newline at end of file