Merge pull request #6326 from ArtfulCoder/docker_image_creation

Create Docker images for master components
pull/6/head
Dawn Chen 2015-04-02 13:12:17 -07:00
commit 9b2f835a01
4 changed files with 53 additions and 0 deletions

View File

@ -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
@ -554,6 +561,8 @@ function kube::release::package_server_tarballs() {
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[@]}")
if [[ "${platform%/*}" == "windows" ]]; then
@ -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() {

View File

@ -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"
@ -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

View File

@ -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#

View File

@ -3,4 +3,5 @@ base:
- mine
- cluster-params
- logging
- docker-images
- privilege