From 966c3dae70da9261f62709d41081e50060ce07c7 Mon Sep 17 00:00:00 2001 From: Johan Euphrosine Date: Thu, 9 Oct 2014 21:42:48 -0700 Subject: [PATCH] boot2docker: add cluster bootstrap and doc --- build/common.sh | 1 + .../{make-run-image.sh => make-run-images.sh} | 1 + build/run-images/bootstrap/Dockerfile | 22 ++++++++ build/run-images/bootstrap/run.sh | 56 +++++++++++++++++++ .../run-images/controller-manager/Dockerfile | 1 - docs/getting-started-guides/docker.md | 49 ++++++++++++++++ hack/cluster-pod.yaml | 36 ------------ 7 files changed, 129 insertions(+), 37 deletions(-) rename build/{make-run-image.sh => make-run-images.sh} (97%) create mode 100644 build/run-images/bootstrap/Dockerfile create mode 100755 build/run-images/bootstrap/run.sh create mode 100644 docs/getting-started-guides/docker.md delete mode 100644 hack/cluster-pod.yaml diff --git a/build/common.sh b/build/common.sh index d44d5c23bc..f86555eecc 100644 --- a/build/common.sh +++ b/build/common.sh @@ -88,6 +88,7 @@ readonly KUBE_RUN_IMAGES=( proxy scheduler kubelet + bootstrap ) diff --git a/build/make-run-image.sh b/build/make-run-images.sh similarity index 97% rename from build/make-run-image.sh rename to build/make-run-images.sh index 279c9d8110..bd4a7cbc1d 100755 --- a/build/make-run-image.sh +++ b/build/make-run-images.sh @@ -24,6 +24,7 @@ set -o nounset set -o pipefail KUBE_ROOT=$(dirname "${BASH_SOURCE}")/.. +KUBE_BUILD_RUN_IMAGES=y source "$KUBE_ROOT/build/common.sh" kube::build::verify_prereqs diff --git a/build/run-images/bootstrap/Dockerfile b/build/run-images/bootstrap/Dockerfile new file mode 100644 index 0000000000..4b952e8f2f --- /dev/null +++ b/build/run-images/bootstrap/Dockerfile @@ -0,0 +1,22 @@ +# Copyright 2014 Google Inc. 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 creates a minimal container for running Kubernetes binaries + +FROM kubernetes +MAINTAINER Johan Euphrosine + +ADD . /kubernetes + +CMD ["/kubernetes/run.sh"] diff --git a/build/run-images/bootstrap/run.sh b/build/run-images/bootstrap/run.sh new file mode 100755 index 0000000000..055d60c244 --- /dev/null +++ b/build/run-images/bootstrap/run.sh @@ -0,0 +1,56 @@ +#! /bin/bash + +# Copyright 2014 Google Inc. 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. + +# see https://github.com/docker/docker/issues/8395 +HOST_IP=$(ip route show 0.0.0.0/0 | grep -Eo 'via \S+' | awk '{ print $2 }') + +KUBELET_IP=$(hostname -i) + +cat < pod.yaml +version: v1beta1 +id: cluster-pod +containers: + - name: etcd + image: coreos/etcd + command: ["-vv"] + ports: + - name: etcd-port + hostPort: 4001 + containerPort: 4001 + protocol: TCP + - name: apiserver + image: kubernetes + imagePullPolicy: never + ports: + - name: apiserver-port + hostPort: 8080 + containerPort: 8080 + protocol: TCP + command: ["/kubernetes/apiserver", "-v=5", "-address=0.0.0.0", "-etcd_servers=http://127.0.0.1:4001", "-machines=${KUBELET_IP}"] + - name: controller-manager + image: kubernetes + imagePullPolicy: never + command: ["/kubernetes/controller-manager", "-v=5", "-master=127.0.0.1:8080"] + - name: proxy + image: kubernetes + imagePullPolicy: never + command: ["/kubernetes/proxy", "-v=5", "-etcd_servers=http://127.0.0.1:4001"] + - name: scheduler + image: kubernetes + imagePullPolicy: never + command: ["/kubernetes/scheduler", "-v=5", "-master=127.0.0.1:8080"] +EOF +./kubelet -v=5 -address=0.0.0.0 -hostname_override=${KUBELET_IP} -etcd_servers=http://${HOST_IP}:4001 -config pod.yaml diff --git a/build/run-images/controller-manager/Dockerfile b/build/run-images/controller-manager/Dockerfile index 9af445627f..416369d0ba 100644 --- a/build/run-images/controller-manager/Dockerfile +++ b/build/run-images/controller-manager/Dockerfile @@ -17,7 +17,6 @@ FROM kubernetes MAINTAINER Joe Beda -ENV ETCD_SERVERS http://127.0.0.1:4001 ENV API_SERVER 127.0.0.1:8080 ADD . /kubernetes diff --git a/docs/getting-started-guides/docker.md b/docs/getting-started-guides/docker.md new file mode 100644 index 0000000000..21ac89c135 --- /dev/null +++ b/docs/getting-started-guides/docker.md @@ -0,0 +1,49 @@ +## Getting started locally with docker + +This method runs a local kubernetes cluster self hosted in Docker +itself. The Kubelet is started in a container with access to the +Docker API. It then launches a pod of containers that comprise the +rest of a local-only kubernetes cluster. + +### Pre-requisites + +#### With boot2docker +- Install [boot2docker](http://boot2docker.io/) +``` +boot2docker up +$(boot2docker shellinit) +export DOCKER_HOST_IP=$(boot2docker ip 2>/dev/null) +export KUBERNETES_MASTER=$DOCKER_HOST_IP:8080 +``` + +#### With local docker daemon +``` +export DOCKER_HOST_IP=127.0.0.1 +export KUBERNETES_MASTER=$DOCKER_HOST_IP:8080 +``` + +### Build the kubernetes docker images + +``` +./build/make-run-images.sh +``` + +### Bootstrap the cluster + +``` +docker run -v /var/run/docker.sock:/var/run/docker.sock kubernetes-bootstrap +``` + +### Build kubernetes clean + +``` +./build/make-client.sh +``` + +### Manage your pods +``` +kubecfg list /pods +kubecfg -p 8181:80 run nginx 1 kube-nginx +kubecfg list /pods +curl $DOCKER_HOST_IP:8181 +``` diff --git a/hack/cluster-pod.yaml b/hack/cluster-pod.yaml deleted file mode 100644 index 411706212e..0000000000 --- a/hack/cluster-pod.yaml +++ /dev/null @@ -1,36 +0,0 @@ -version: v1beta1 -id: cluster-pod -containers: - - name: etcd - image: coreos/etcd - - name: kubelet - image: kubernetes-kubelet - imagePullPolicy: never - volumeMounts: - - name: docker-socket - mountPath: /var/run/docker.sock - - name: apiserver - image: kubernetes-apiserver - imagePullPolicy: never - ports: - - name: apiserver-port - hostPort: 8080 - containerPort: 8080 - protocol: TCP - env: - - name: KUBE_MINIONS - value: 127.0.0.1 - - name: controller-manager - image: kubernetes-controller-manager - imagePullPolicy: never - - name: proxy - image: kubernetes-proxy - imagePullPolicy: never - - name: scheduler - image: kubernetes-scheduler - imagePullPolicy: never -volumes: - - name: docker-socket - source: - hostDir: - path: /var/run/docker.sock