Skip to content

Commit

Permalink
Merge pull request #6326 from ArtfulCoder/docker_image_creation
Browse files Browse the repository at this point in the history
Create Docker images for master components
  • Loading branch information
dchen1107 committed Apr 2, 2015
2 parents e03f035 + b1b779a commit 9b2f835
Show file tree
Hide file tree
Showing 4 changed files with 53 additions and 0 deletions.
33 changes: 33 additions & 0 deletions build/common.sh
Expand Up @@ -91,6 +91,13 @@ readonly DOCKER_DATA_MOUNT_ARGS=(
readonly RELEASE_STAGE="${LOCAL_OUTPUT_ROOT}/release-stage"
readonly RELEASE_DIR="${LOCAL_OUTPUT_ROOT}/release-tars"

# The set of master binaries that run in Docker (on Linux)
readonly KUBE_DOCKER_WRAPPED_BINARIES=(
kube-apiserver
kube-controller-manager
kube-scheduler
)

# ---------------------------------------------------------------------------
# Basic setup functions

Expand Down Expand Up @@ -553,6 +560,8 @@ function kube::release::package_server_tarballs() {
# KUBE_SERVER_BINARIES array.
cp "${KUBE_SERVER_BINARIES[@]/#/${LOCAL_OUTPUT_BINPATH}/${platform}/}" \
"${release_stage}/server/bin/"

kube::release::create_docker_images_for_server "${release_stage}/server/bin";

# Include the client binaries here too as they are useful debugging tools.
local client_bins=("${KUBE_CLIENT_BINARIES[@]}")
Expand All @@ -569,6 +578,30 @@ function kube::release::package_server_tarballs() {
done
}

# This will take binaries that run on master and creates Docker images
# that wrap the binary in them. (One docker image per binary)
function kube::release::create_docker_images_for_server() {
# Create a sub-shell so that we don't pollute the outer environment
(
local binary_name;
for binary_name in "${KUBE_DOCKER_WRAPPED_BINARIES[@]}"; do
echo "+++ Building docker image: ${binary_name}";
local docker_file_path="$1/Dockerfile";
local binary_file_path="$1/${binary_name}";
if [ -f ${docker_file_path} ]; then
rm ${docker_file_path};
fi;
printf " FROM scratch \n ADD ${binary_name} /${binary_name} \n ENTRYPOINT [ \"/${binary_name}\" ]\n" >> ${docker_file_path};
local md5_sum=$(md5sum ${binary_file_path} | awk '{print $1}')
local docker_image_tag=gcr.io/google_containers/$binary_name:$md5_sum
docker build -t "${docker_image_tag}" ${1};
docker save ${docker_image_tag} > ${1}/${binary_name}.tar;
echo $md5_sum > ${1}/${binary_name}.docker_tag;
rm ${docker_file_path};
done
)
}

# Package up the salt configuration tree. This is an optional helper to getting
# a cluster up and running.
function kube::release::package_salt_tarball() {
Expand Down
15 changes: 15 additions & 0 deletions cluster/saltbase/install.sh
Expand Up @@ -24,6 +24,12 @@ set -o pipefail
SALT_ROOT=$(dirname "${BASH_SOURCE}")
readonly SALT_ROOT

readonly KUBE_DOCKER_WRAPPED_BINARIES=(
kube-apiserver
kube-controller-manager
kube-scheduler
)

readonly SERVER_BIN_TAR=${1-}
if [[ -z "$SERVER_BIN_TAR" ]]; then
echo "!!! No binaries specified"
Expand Down Expand Up @@ -60,6 +66,15 @@ tar -xz -C "${KUBE_TEMP}" -f "$1"
mkdir -p /srv/salt-new/salt/kube-bins
cp -v "${KUBE_TEMP}/kubernetes/server/bin/"* /srv/salt-new/salt/kube-bins/

kube_bin_dir="/srv/salt-new/salt/kube-bins";
docker_images_sls_file="/srv/salt-new/pillar/docker-images.sls";
for docker_file in "${KUBE_DOCKER_WRAPPED_BINARIES[@]}"; do
docker load -i "${kube_bin_dir}/${docker_file}.tar";
docker_tag=$(cat ${kube_bin_dir}/${docker_file}.docker_tag);
sed -i "s/#${docker_file}_docker_tag_value#/${docker_tag}/" "${docker_images_sls_file}";
done


echo "+++ Swapping in new configs"
for dir in "${SALTDIRS[@]}"; do
if [[ -d "/srv/$dir" ]]; then
Expand Down
4 changes: 4 additions & 0 deletions cluster/saltbase/pillar/docker-images.sls
@@ -0,0 +1,4 @@
# This file is populated when kubernetes is built.
kube-apiserver_docker_tag: #kube-apiserver_docker_tag_value#
kube-controller-manager_docker_tag: #kube-controller-manager_docker_tag_value#
kube-scheduler_docker_tag: #kube-scheduler_docker_tag_value#
1 change: 1 addition & 0 deletions cluster/saltbase/pillar/top.sls
Expand Up @@ -3,4 +3,5 @@ base:
- mine
- cluster-params
- logging
- docker-images
- privilege

0 comments on commit 9b2f835

Please sign in to comment.