Make hyperkube work on all platforms, bump dnsmasq to 1.3 and addon-manager to v3, and always use the latest manifests

pull/6/head
Lucas Käldström 2016-06-19 17:15:17 +03:00
parent 8f5d081194
commit 6c53c6a997
18 changed files with 40 additions and 260 deletions

View File

@ -17,7 +17,7 @@
# If you update this image please bump the tag value before pushing. # If you update this image please bump the tag value before pushing.
# #
# Usage: # Usage:
# [ARCH=amd64] [TAG=1.0] [REGISTRY=gcr.io/google_containers] [BASEIMAGE=busybox] make container # [ARCH=amd64] [TAG=1.3] [REGISTRY=gcr.io/google_containers] [BASEIMAGE=busybox] make (container|push)
# Default registry, arch and tag. This can be overwritten by arguments to make # Default registry, arch and tag. This can be overwritten by arguments to make
PLATFORM?=linux PLATFORM?=linux
@ -26,7 +26,6 @@ TAG?=1.3
REGISTRY?=gcr.io/google_containers REGISTRY?=gcr.io/google_containers
GOLANG_VERSION=1.6 GOLANG_VERSION=1.6
GOARM=6
KUBE_ROOT=$(shell pwd)/../.. KUBE_ROOT=$(shell pwd)/../..
TEMP_DIR:=$(shell mktemp -d) TEMP_DIR:=$(shell mktemp -d)

View File

@ -6,9 +6,11 @@ are ready, not on every PR.
1. Build the container for testing: 1. Build the container for testing:
`make release` ```
`cd build/kube-dns` make release
`make container PREFIX=<your-docker-hub> TAG=rc` cd build/kube-dns
make container PREFIX=<your-docker-hub> TAG=rc
```
2. Manually deploy this to your own cluster by updating the replication 2. Manually deploy this to your own cluster by updating the replication
controller and deleting the running pod(s). controller and deleting the running pod(s).
@ -18,13 +20,12 @@ are ready, not on every PR.
4. Update the TAG version in `Makefile` and update the `Changelog`. Update the 4. Update the TAG version in `Makefile` and update the `Changelog`. Update the
`*.yaml.in` to point to the new tag. Send a PR but mark it as "DO NOT MERGE". `*.yaml.in` to point to the new tag. Send a PR but mark it as "DO NOT MERGE".
5. Once the PR is approved, build and push the container for real for all architectures: 5. Once the PR is approved, build and push the container for real **for all architectures**:
```console ```console
# Build for linux/amd64 (default) # Build for linux/amd64 (default)
$ make push ARCH=amd64 $ make push ARCH=amd64
# ---> gcr.io/google_containers/kube-dns-amd64:TAG # ---> gcr.io/google_containers/kube-dns-amd64:TAG
# ---> gcr.io/google_containers/kube-dns:TAG (image with backwards-compatible naming)
$ make push ARCH=arm $ make push ARCH=arm
# ---> gcr.io/google_containers/kube-dns-arm:TAG # ---> gcr.io/google_containers/kube-dns-arm:TAG

View File

@ -15,7 +15,7 @@
IMAGE=gcr.io/google-containers/kube-addon-manager IMAGE=gcr.io/google-containers/kube-addon-manager
ARCH?=amd64 ARCH?=amd64
TEMP_DIR:=$(shell mktemp -d) TEMP_DIR:=$(shell mktemp -d)
VERSION=v2 VERSION=v3
# amd64 and arm has "stable" binaries pushed for v1.2, arm64 and ppc64le hasn't so they have to fetch the latest alpha # amd64 and arm has "stable" binaries pushed for v1.2, arm64 and ppc64le hasn't so they have to fetch the latest alpha
# however, arm64 and ppc64le are very experimental right now, so it's okay # however, arm64 and ppc64le are very experimental right now, so it's okay
@ -29,12 +29,12 @@ ifeq ($(ARCH),arm)
QEMUARCH=arm QEMUARCH=arm
endif endif
ifeq ($(ARCH),arm64) ifeq ($(ARCH),arm64)
KUBECTL_VERSION?=v1.3.0-alpha.3 KUBECTL_VERSION?=v1.3.0-beta.0
BASEIMAGE?=aarch64/python:2.7-slim BASEIMAGE?=aarch64/python:2.7-slim
QEMUARCH=aarch64 QEMUARCH=aarch64
endif endif
ifeq ($(ARCH),ppc64le) ifeq ($(ARCH),ppc64le)
KUBECTL_VERSION?=v1.3.0-alpha.3 KUBECTL_VERSION?=v1.3.0-alpha.4
BASEIMAGE?=ppc64le/python:2.7-slim BASEIMAGE?=ppc64le/python:2.7-slim
QEMUARCH=ppc64le QEMUARCH=ppc64le
endif endif

View File

@ -1,5 +1,4 @@
# This file should be kept in sync with cluster/images/hyperkube/dashboard-rc.yaml # This file should be kept in sync with cluster/gce/coreos/kube-manifests/addons/dashboard/dashboard-controller.yaml
# and cluster/gce/coreos/kube-manifests/addons/dashboard/dashboard-controller.yaml
apiVersion: v1 apiVersion: v1
kind: ReplicationController kind: ReplicationController
metadata: metadata:

View File

@ -1,5 +1,4 @@
# This file should be kept in sync with cluster/images/hyperkube/dashboard-svc.yaml # This file should be kept in sync with cluster/gce/coreos/kube-manifests/addons/dashboard/dashboard-service.yaml
# and cluster/gce/coreos/kube-manifests/addons/dashboard/dashboard-service.yaml
apiVersion: v1 apiVersion: v1
kind: Service kind: Service
metadata: metadata:

View File

@ -17,7 +17,7 @@
# Usage: # Usage:
# [ARCH=amd64] [REGISTRY="gcr.io/google_containers"] make (build|push) VERSION={some_version_number e.g. v1.2.0} # [ARCH=amd64] [REGISTRY="gcr.io/google_containers"] make (build|push) VERSION={some_version_number e.g. v1.2.0}
REGISTRY?="gcr.io/google_containers" REGISTRY?=gcr.io/google_containers
ARCH?=amd64 ARCH?=amd64
TEMP_DIR:=$(shell mktemp -d) TEMP_DIR:=$(shell mktemp -d)
CNI_RELEASE=c864f0e1ea73719b8f4582402b0847064f9883b0 CNI_RELEASE=c864f0e1ea73719b8f4582402b0847064f9883b0
@ -54,9 +54,14 @@ ifndef VERSION
$(error VERSION is undefined) $(error VERSION is undefined)
endif endif
cp -r ./* ${TEMP_DIR} cp -r ./* ${TEMP_DIR}
mkdir -p ${TEMP_DIR}/cni mkdir -p ${TEMP_DIR}/cni ${TEMP_DIR}/addons
cp ../../saltbase/salt/helpers/safe_format_and_mount ${TEMP_DIR} cp ../../saltbase/salt/helpers/safe_format_and_mount ${TEMP_DIR}
cp ../../saltbase/salt/generate-cert/make-ca-cert.sh ${TEMP_DIR} cp ../../saltbase/salt/generate-cert/make-ca-cert.sh ${TEMP_DIR}
cp ../../saltbase/salt/kube-dns/skydns-rc.yaml.base ${TEMP_DIR}/addons/skydns-rc.yaml
cp ../../saltbase/salt/kube-dns/skydns-svc.yaml.base ${TEMP_DIR}/addons/skydns-svc.yaml
cp ../../addons/dashboard/dashboard-controller.yaml ${TEMP_DIR}/addons
cp ../../addons/dashboard/dashboard-service.yaml ${TEMP_DIR}/addons
cp kube-proxy-ds.yaml ${TEMP_DIR}/addons/kube-proxy.yaml
cp ../../../_output/dockerized/bin/linux/${ARCH}/hyperkube ${TEMP_DIR} cp ../../../_output/dockerized/bin/linux/${ARCH}/hyperkube ${TEMP_DIR}
cd ${TEMP_DIR} && sed -i.back "s|VERSION|${VERSION}|g" addons/*.yaml static-pods/*.json cd ${TEMP_DIR} && sed -i.back "s|VERSION|${VERSION}|g" addons/*.yaml static-pods/*.json
@ -64,6 +69,8 @@ endif
cd ${TEMP_DIR} && sed -i.back "s|ARCH|${ARCH}|g" addons/*.yaml static-pods/*.json cd ${TEMP_DIR} && sed -i.back "s|ARCH|${ARCH}|g" addons/*.yaml static-pods/*.json
cd ${TEMP_DIR} && sed -i.back "s|ARCH|${QEMUARCH}|g" Dockerfile cd ${TEMP_DIR} && sed -i.back "s|ARCH|${QEMUARCH}|g" Dockerfile
cd ${TEMP_DIR} && sed -i.back "s|BASEIMAGE|${BASEIMAGE}|g" Dockerfile cd ${TEMP_DIR} && sed -i.back "s|BASEIMAGE|${BASEIMAGE}|g" Dockerfile
cd ${TEMP_DIR} && sed -i.back "s|-amd64|-${ARCH}|g" addons/*.yaml
cd ${TEMP_DIR} && sed -i.back "s|__PILLAR__DNS__REPLICAS__|1|g;s|__PILLAR__DNS__SERVER__|10.0.0.10|g;s|__PILLAR__DNS__DOMAIN__|cluster.local|g" addons/skydns*.yaml
rm ${TEMP_DIR}/addons/*.back rm ${TEMP_DIR}/addons/*.back
# Make scripts executable before they are copied into the Docker image. If we make them executable later, in another layer # Make scripts executable before they are copied into the Docker image. If we make them executable later, in another layer

View File

@ -1,51 +0,0 @@
# 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.
# This file should be kept in sync with cluster/addons/dashboard/dashboard-controller.yaml
apiVersion: v1
kind: ReplicationController
metadata:
name: kubernetes-dashboard
namespace: kube-system
labels:
app: kubernetes-dashboard
version: v1.1.0-beta3
kubernetes.io/cluster-service: "true"
spec:
replicas: 1
selector:
app: kubernetes-dashboard
version: v1.1.0-beta3
kubernetes.io/cluster-service: "true"
template:
metadata:
labels:
app: kubernetes-dashboard
version: v1.1.0-beta3
kubernetes.io/cluster-service: "true"
spec:
containers:
- name: kubernetes-dashboard
# ARCH will be replaced with the architecture it's built for. Check out the Makefile for more details
image: gcr.io/google_containers/kubernetes-dashboard-ARCH:v1.1.0-beta3
imagePullPolicy: Always
ports:
- containerPort: 9090
protocol: TCP
livenessProbe:
httpGet:
path: /
port: 9090
initialDelaySeconds: 30
timeoutSeconds: 30

View File

@ -1,29 +0,0 @@
# 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.
# This file should be kept in sync with cluster/addons/dashboard/dashboard-service.yaml
kind: Service
apiVersion: v1
metadata:
name: kubernetes-dashboard
namespace: kube-system
labels:
app: kubernetes-dashboard
kubernetes.io/cluster-service: "true"
spec:
ports:
- port: 80
targetPort: 9090
selector:
app: kubernetes-dashboard

View File

@ -1,110 +0,0 @@
# 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.
# This file should be kept in sync with cluster/saltbase/salt/kube-dns/skydns-rc.yaml.in
apiVersion: v1
kind: ReplicationController
metadata:
name: kube-dns-v13
namespace: kube-system
labels:
k8s-app: kube-dns
version: v13
kubernetes.io/cluster-service: "true"
spec:
replicas: 1
selector:
k8s-app: kube-dns
version: v13
template:
metadata:
labels:
k8s-app: kube-dns
version: v13
kubernetes.io/cluster-service: "true"
spec:
containers:
- name: kubedns
# ARCH will be replaced with the architecture it's built for. Check out the Makefile for more details
image: gcr.io/google_containers/kubedns-ARCH:1.2
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=cluster.local
- --dns-port=10053
ports:
- containerPort: 10053
name: dns-local
protocol: UDP
- containerPort: 10053
name: dns-tcp-local
protocol: TCP
- name: dnsmasq
image: gcr.io/google_containers/dnsmasq-ARCH:1.1
args:
- --cache-size=1000
- --no-resolv
- --server=127.0.0.1#10053
ports:
- containerPort: 53
name: dns
protocol: UDP
- containerPort: 53
name: dns-tcp
protocol: TCP
- name: healthz
image: gcr.io/google_containers/exechealthz-ARCH: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.cluster.local 127.0.0.1 >/dev/null
- -port=8080
ports:
- containerPort: 8080
protocol: TCP
dnsPolicy: Default # Don't use cluster DNS.

View File

@ -1,35 +0,0 @@
# 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.
# This file should be kept in sync with cluster/saltbase/salt/kube-dns/skydns-svc.yaml.in
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: 10.0.0.10
ports:
- name: dns
port: 53
protocol: UDP
- name: dns-tcp
port: 53
protocol: TCP

View File

@ -11,7 +11,7 @@
"containers": [ "containers": [
{ {
"name": "kube-addon-manager", "name": "kube-addon-manager",
"image": "gcr.io/google-containers/kube-addon-manager-ARCH:v2", "image": "gcr.io/google-containers/kube-addon-manager-ARCH:v3",
"resources": { "resources": {
"requests": { "requests": {
"cpu": "5m", "cpu": "5m",

View File

@ -21,22 +21,22 @@
apiVersion: v1 apiVersion: v1
kind: ReplicationController kind: ReplicationController
metadata: metadata:
name: kube-dns-v14 name: kube-dns-v15
namespace: kube-system namespace: kube-system
labels: labels:
k8s-app: kube-dns k8s-app: kube-dns
version: v14 version: v15
kubernetes.io/cluster-service: "true" kubernetes.io/cluster-service: "true"
spec: spec:
replicas: __PILLAR__DNS__REPLICAS__ replicas: __PILLAR__DNS__REPLICAS__
selector: selector:
k8s-app: kube-dns k8s-app: kube-dns
version: v14 version: v15
template: template:
metadata: metadata:
labels: labels:
k8s-app: kube-dns k8s-app: kube-dns
version: v14 version: v15
kubernetes.io/cluster-service: "true" kubernetes.io/cluster-service: "true"
spec: spec:
containers: containers:
@ -83,7 +83,7 @@ spec:
name: dns-tcp-local name: dns-tcp-local
protocol: TCP protocol: TCP
- name: dnsmasq - name: dnsmasq
image: gcr.io/google_containers/dnsmasq:1.1 image: gcr.io/google_containers/kube-dnsmasq-amd64:1.3
args: args:
- --cache-size=1000 - --cache-size=1000
- --no-resolv - --no-resolv

View File

@ -21,22 +21,22 @@
apiVersion: v1 apiVersion: v1
kind: ReplicationController kind: ReplicationController
metadata: metadata:
name: kube-dns-v14 name: kube-dns-v15
namespace: kube-system namespace: kube-system
labels: labels:
k8s-app: kube-dns k8s-app: kube-dns
version: v14 version: v15
kubernetes.io/cluster-service: "true" kubernetes.io/cluster-service: "true"
spec: spec:
replicas: {{ pillar['dns_replicas'] }} replicas: {{ pillar['dns_replicas'] }}
selector: selector:
k8s-app: kube-dns k8s-app: kube-dns
version: v14 version: v15
template: template:
metadata: metadata:
labels: labels:
k8s-app: kube-dns k8s-app: kube-dns
version: v14 version: v15
kubernetes.io/cluster-service: "true" kubernetes.io/cluster-service: "true"
spec: spec:
containers: containers:
@ -83,7 +83,7 @@ spec:
name: dns-tcp-local name: dns-tcp-local
protocol: TCP protocol: TCP
- name: dnsmasq - name: dnsmasq
image: gcr.io/google_containers/dnsmasq:1.1 image: gcr.io/google_containers/kube-dnsmasq-amd64:1.3
args: args:
- --cache-size=1000 - --cache-size=1000
- --no-resolv - --no-resolv

View File

@ -21,22 +21,22 @@
apiVersion: v1 apiVersion: v1
kind: ReplicationController kind: ReplicationController
metadata: metadata:
name: kube-dns-v14 name: kube-dns-v15
namespace: kube-system namespace: kube-system
labels: labels:
k8s-app: kube-dns k8s-app: kube-dns
version: v14 version: v15
kubernetes.io/cluster-service: "true" kubernetes.io/cluster-service: "true"
spec: spec:
replicas: $DNS_REPLICAS replicas: $DNS_REPLICAS
selector: selector:
k8s-app: kube-dns k8s-app: kube-dns
version: v14 version: v15
template: template:
metadata: metadata:
labels: labels:
k8s-app: kube-dns k8s-app: kube-dns
version: v14 version: v15
kubernetes.io/cluster-service: "true" kubernetes.io/cluster-service: "true"
spec: spec:
containers: containers:
@ -83,7 +83,7 @@ spec:
name: dns-tcp-local name: dns-tcp-local
protocol: TCP protocol: TCP
- name: dnsmasq - name: dnsmasq
image: gcr.io/google_containers/dnsmasq:1.1 image: gcr.io/google_containers/kube-dnsmasq-amd64:1.3
args: args:
- --cache-size=1000 - --cache-size=1000
- --no-resolv - --no-resolv

View File

@ -30,7 +30,7 @@ metadata:
spec: spec:
selector: selector:
k8s-app: kube-dns k8s-app: kube-dns
clusterIP: __PILLAR__DNS__SERVER__ clusterIP: __PILLAR__DNS__SERVER__
ports: ports:
- name: dns - name: dns
port: 53 port: 53

View File

@ -30,7 +30,7 @@ metadata:
spec: spec:
selector: selector:
k8s-app: kube-dns k8s-app: kube-dns
clusterIP: {{ pillar['dns_server'] }} clusterIP: {{ pillar['dns_server'] }}
ports: ports:
- name: dns - name: dns
port: 53 port: 53

View File

@ -30,7 +30,7 @@ metadata:
spec: spec:
selector: selector:
k8s-app: kube-dns k8s-app: kube-dns
clusterIP: $DNS_SERVER_IP clusterIP: $DNS_SERVER_IP
ports: ports:
- name: dns - name: dns
port: 53 port: 53