From a92ea560241bd369591aa1f43b0c5057b8d8da8c Mon Sep 17 00:00:00 2001 From: Abhishek Shah Date: Wed, 4 May 2016 16:29:22 -0700 Subject: [PATCH] added build stuff for kube-dns --- build/kube-dns/Dockerfile | 18 ++++ build/kube-dns/Makefile | 66 +++++++++++++++ cluster/saltbase/salt/kube-addons/init.sls | 8 +- .../saltbase/salt/kube-dns/kubedns-rc.yaml.in | 83 +++++++++++++++++++ .../salt/kube-dns/kubedns-svc.yaml.in | 20 +++++ hack/lib/golang.sh | 2 + 6 files changed, 193 insertions(+), 4 deletions(-) create mode 100644 build/kube-dns/Dockerfile create mode 100644 build/kube-dns/Makefile create mode 100644 cluster/saltbase/salt/kube-dns/kubedns-rc.yaml.in create mode 100644 cluster/saltbase/salt/kube-dns/kubedns-svc.yaml.in diff --git a/build/kube-dns/Dockerfile b/build/kube-dns/Dockerfile new file mode 100644 index 00000000000..6e72d95a750 --- /dev/null +++ b/build/kube-dns/Dockerfile @@ -0,0 +1,18 @@ +# Copyright 2016 The Kubernetes Authors All rights reserved. +# +# 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 BASEIMAGE +MAINTAINER Tim Hockin +ADD kube-dns / +ENTRYPOINT ["/kube-dns"] diff --git a/build/kube-dns/Makefile b/build/kube-dns/Makefile new file mode 100644 index 00000000000..86b3a669e4d --- /dev/null +++ b/build/kube-dns/Makefile @@ -0,0 +1,66 @@ +# Copyright 2016 The Kubernetes Authors All rights reserved. +# +# 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. + +# Makefile for the Docker image gcr.io/google_containers/kube2sky +# MAINTAINER: Tim Hockin +# If you update this image please bump the tag value before pushing. +# +# Usage: +# [ARCH=amd64] [TAG=1.0] [REGISTRY=gcr.io/google_containers] [BASEIMAGE=busybox] make container + +# Default registry, arch and tag. This can be overwritten by arguments to make +PLATFORM?=linux +ARCH?=amd64 +TAG?=1.0 +REGISTRY?=gcr.io/google_containers + +GOLANG_VERSION=1.6 +GOARM=6 +KUBE_ROOT=$(shell pwd)/../.. +TEMP_DIR:=$(shell mktemp -d) + +ifeq ($(ARCH),amd64) + BASEIMAGE?=busybox +endif +ifeq ($(ARCH),arm) + BASEIMAGE?=armel/busybox +endif +ifeq ($(ARCH),arm64) + BASEIMAGE?=aarch64/busybox +endif +ifeq ($(ARCH),ppc64le) + BASEIMAGE?=ppc64le/busybox +endif + + +all: container + +container: + # Copy the content in this dir to the temp dir + cp $(KUBE_ROOT)/_output/local/bin/$(PLATFORM)/$(ARCH)/kube-dns $(TEMP_DIR) + cp $(KUBE_ROOT)/build/kube-dns/Dockerfile $(TEMP_DIR) + + # Replace BASEIMAGE with the real base image + cd $(TEMP_DIR) && sed -i "s|BASEIMAGE|$(BASEIMAGE)|g" Dockerfile + + # And build the image + docker build -t $(REGISTRY)/kubedns-$(ARCH):$(TAG) $(TEMP_DIR) + + # delete temp dir + rm -rf $(TEMP_DIR) + +push: container + gcloud docker push $(REGISTRY)/kubedns-$(ARCH):$(TAG) + +.PHONY: all container push diff --git a/cluster/saltbase/salt/kube-addons/init.sls b/cluster/saltbase/salt/kube-addons/init.sls index 39d845a91ac..4ea840218ad 100644 --- a/cluster/saltbase/salt/kube-addons/init.sls +++ b/cluster/saltbase/salt/kube-addons/init.sls @@ -73,17 +73,17 @@ addon-dir-create: {% endif %} {% if pillar.get('enable_cluster_dns', '').lower() == 'true' %} -/etc/kubernetes/addons/dns/skydns-svc.yaml: +/etc/kubernetes/addons/dns/kubedns-svc.yaml: file.managed: - - source: salt://kube-addons/dns/skydns-svc.yaml.in + - source: salt://kube-dns/kubedns-svc.yaml.in - template: jinja - group: root - dir_mode: 755 - makedirs: True -/etc/kubernetes/addons/dns/skydns-rc.yaml: +/etc/kubernetes/addons/dns/kubedns-rc.yaml: file.managed: - - source: salt://kube-addons/dns/skydns-rc.yaml.in + - source: salt://kube-dns/kubedns-rc.yaml.in - template: jinja - group: root - dir_mode: 755 diff --git a/cluster/saltbase/salt/kube-dns/kubedns-rc.yaml.in b/cluster/saltbase/salt/kube-dns/kubedns-rc.yaml.in new file mode 100644 index 00000000000..631939edc6f --- /dev/null +++ b/cluster/saltbase/salt/kube-dns/kubedns-rc.yaml.in @@ -0,0 +1,83 @@ +apiVersion: v1 +kind: ReplicationController +metadata: + name: kube-dns-v12 + namespace: kube-system + labels: + k8s-app: kube-dns + version: v12 + kubernetes.io/cluster-service: "true" +spec: + replicas: {{ pillar['dns_replicas'] }} + selector: + k8s-app: kube-dns + version: v12 + template: + metadata: + labels: + k8s-app: kube-dns + version: v12 + kubernetes.io/cluster-service: "true" + spec: +{% if grains['cloud'] is defined and grains['cloud'] in [ 'vsphere', 'photon-controller' ] %} + hostNetwork: true +{% endif %} + containers: + - name: kubedns + image: artfulcoder/kubedns-amd64:1.0 + resources: + # TODO: Set memory limits when we've profiled the container for large + # clusters, then set request = limit to keep this container in + # guaranteed class. Currently, this container falls into the + # "burstable" category so the kubelet doesn't backoff from restarting it. + limits: + cpu: 100m + memory: 200Mi + requests: + cpu: 100m + memory: 50Mi + livenessProbe: + httpGet: + path: /healthz + port: 8080 + scheme: HTTP + initialDelaySeconds: 60 + timeoutSeconds: 5 + successThreshold: 1 + failureThreshold: 5 + readinessProbe: + httpGet: + path: /readiness + port: 8081 + scheme: HTTP + # we poll on pod startup for the Kubernetes master service and + # only setup the /readiness HTTP server once that's available. + initialDelaySeconds: 30 + timeoutSeconds: 5 + args: + # command = "/kube-dns" + - --domain={{ pillar['dns_domain'] }}. + ports: + - containerPort: 53 + name: dns + protocol: UDP + - containerPort: 53 + name: dns-tcp + protocol: TCP + - name: healthz + image: gcr.io/google_containers/exechealthz:1.0 + resources: + # keep request = limit to keep this container in guaranteed class + limits: + cpu: 10m + memory: 20Mi + requests: + cpu: 10m + memory: 20Mi + args: + - -cmd=nslookup kubernetes.default.svc.{{ pillar['dns_domain'] }} 127.0.0.1 >/dev/null + - -port=8080 + ports: + - containerPort: 8080 + protocol: TCP + dnsPolicy: Default # Don't use cluster DNS. diff --git a/cluster/saltbase/salt/kube-dns/kubedns-svc.yaml.in b/cluster/saltbase/salt/kube-dns/kubedns-svc.yaml.in new file mode 100644 index 00000000000..242c8871eec --- /dev/null +++ b/cluster/saltbase/salt/kube-dns/kubedns-svc.yaml.in @@ -0,0 +1,20 @@ +apiVersion: v1 +kind: Service +metadata: + name: kube-dns + namespace: kube-system + labels: + k8s-app: kube-dns + kubernetes.io/cluster-service: "true" + kubernetes.io/name: "KubeDNS" +spec: + selector: + k8s-app: kube-dns + clusterIP: {{ pillar['dns_server'] }} + ports: + - name: dns + port: 53 + protocol: UDP + - name: dns-tcp + port: 53 + protocol: TCP diff --git a/hack/lib/golang.sh b/hack/lib/golang.sh index 1d9b21dde4e..9206cebfd8e 100755 --- a/hack/lib/golang.sh +++ b/hack/lib/golang.sh @@ -30,6 +30,7 @@ fi # kube::build::source_targets in build/common.sh as well. kube::golang::server_targets() { local targets=( + cmd/kube-dns cmd/kube-proxy cmd/kube-apiserver cmd/kube-controller-manager @@ -159,6 +160,7 @@ readonly KUBE_ALL_BINARIES=("${KUBE_ALL_TARGETS[@]##*/}") readonly KUBE_STATIC_LIBRARIES=( kube-apiserver kube-controller-manager + kube-dns kube-scheduler kube-proxy kubectl