diff --git a/cluster/gce/gci/configure.sh b/cluster/gce/gci/configure.sh index f8fa6e9f389..0d343835977 100644 --- a/cluster/gce/gci/configure.sh +++ b/cluster/gce/gci/configure.sh @@ -98,13 +98,20 @@ function split-commas { echo $1 | tr "," "\n" } -function install-rkt { - local -r rkt_binary="rkt-v1.18.0" - local -r rkt_sha1="75fc8f29c79bc9e505f3e7f6e8fadf2425c21967" - download-or-bust "${rkt_sha1}" "https://storage.googleapis.com/kubernetes-release/rkt/${rkt_binary}" - local -r rkt_dst="${KUBE_HOME}/bin/rkt" - mv "${KUBE_HOME}/${rkt_binary}" "${rkt_dst}" - chmod a+x "${rkt_dst}" +function install-gci-mounter-tools { + local -r rkt_version="v1.18.0" + local -r gci_mounter_version="v2" + local -r rkt_binary_sha1="75fc8f29c79bc9e505f3e7f6e8fadf2425c21967" + local -r rkt_stage1_fly_sha1="474df5a1f934960ba669b360ab713d0a54283091" + local -r gci_mounter_sha1="4e524f5c0fa4668a1d26cf7a1d00e16bfe9544c3" + download-or-bust "${rkt_binary_sha1}" "https://storage.googleapis.com/kubernetes-release/rkt/${rkt_version}/rkt" + download-or-bust "${rkt_stage1_fly_sha1}" "https://storage.googleapis.com/kubernetes-release/rkt/${rkt_version}/stage1-fly.aci" + download-or-bust "${gci_mounter_sha1}" "https://storage.googleapis.com/kubernetes-release/gci-mounter/gci-mounter-${gci_mounter_version}.aci" + local -r rkt_dst="${KUBE_HOME}/bin/" + mv "${KUBE_HOME}/rkt" "${rkt_dst}/rkt" + mv "${KUBE_HOME}/stage1-fly.aci" "${rkt_dst}/stage1-fly.aci" + mv "${KUBE_HOME}/gci-mounter-${gci_mounter_version}.aci" "${rkt_dst}/gci-mounter-${gci_mounter_version}.aci" + chmod a+x "${rkt_dst}/rkt" } # Downloads kubernetes binaries and kube-system manifest tarball, unpacks them, @@ -184,8 +191,8 @@ function install-kube-binary-config { cp "${dst_dir}/kubernetes/gci-trusty/health-monitor.sh" "${KUBE_HOME}/bin/health-monitor.sh" chmod -R 755 "${kube_bin}" - # Install rkt binary to allow mounting storage volumes in GCI - install-rkt + # Install gci mounter related artifacts to allow mounting storage volumes in GCI + install-gci-mounter-tools # Clean up. rm -rf "${KUBE_HOME}/kubernetes" diff --git a/cluster/gce/gci/mounter/Makefile b/cluster/gce/gci/mounter/Makefile index 2cc4eaa43c1..72efa3b77c4 100644 --- a/cluster/gce/gci/mounter/Makefile +++ b/cluster/gce/gci/mounter/Makefile @@ -24,4 +24,7 @@ container: push: gcloud docker -- push ${REGISTRY}/${IMAGE}:${TAG} +upload: + ./stage-upload.sh ${TAG} ${REGISTRY}/${IMAGE}:${TAG} + .PHONY: all container push diff --git a/cluster/gce/gci/mounter/mounter b/cluster/gce/gci/mounter/mounter index 0cdf788c856..3d826fad603 100755 --- a/cluster/gce/gci/mounter/mounter +++ b/cluster/gce/gci/mounter/mounter @@ -14,13 +14,16 @@ # See the License for the specific language governing permissions and # limitations under the License. -set -e +set -o errexit +set -o nounset set -o pipefail -MOUNTER_DOCKER_IMAGE=gcr.io/google_containers/gci-mounter -MOUNTER_DOCKER_VERSION=v2 +MOUNTER_VERSION=v2 MOUNTER_USER=root -RKT_BINARY=/home/kubernetes/bin/rkt +ROOT_DIR=/home/kubernetes/bin +RKT_BINARY=${ROOT_DIR}/rkt +STAGE1_ACI=${ROOT_DIR}/stage1-fly.aci +MOUNTER_ACI=${ROOT_DIR}/gci-mounter-${MOUNTER_VERSION}.aci function gc { # Attempt to garbage collect rkt pods with 5 retries. @@ -36,8 +39,12 @@ function gc { # Garbage collect old rkt containers on exit trap gc EXIT -${RKT_BINARY} run --stage1-name="coreos.com/rkt/stage1-fly:1.18.0" \ - --insecure-options=image \ - --volume=kubelet,kind=host,source=/var/lib/kubelet,readOnly=false,recursive=true \ - --mount volume=kubelet,target=/var/lib/kubelet \ - docker://${MOUNTER_DOCKER_IMAGE}:${MOUNTER_DOCKER_VERSION} --user=${MOUNTER_USER} --exec /bin/mount -- "$@" +echo "Running mount using a rkt fly container" + +${RKT_BINARY} run --stage1-path=${STAGE1_ACI} \ + --insecure-options=image \ + --volume=kubelet,kind=host,source=/var/lib/kubelet,readOnly=false,recursive=true \ + --mount volume=kubelet,target=/var/lib/kubelet \ + file://${MOUNTER_ACI} --user=${MOUNTER_USER} --exec /bin/mount -- "$@" + +echo "Successfully ran mount using a rkt fly container" diff --git a/cluster/gce/gci/mounter/stage-upload.sh b/cluster/gce/gci/mounter/stage-upload.sh new file mode 100755 index 00000000000..4fbc706af14 --- /dev/null +++ b/cluster/gce/gci/mounter/stage-upload.sh @@ -0,0 +1,67 @@ +#!/bin/sh + +set -o errexit +set -o pipefail +set -o nounset + +RKT_VERSION="v1.18.0" +DOCKER2ACI_VERSION="v0.13.0" +MOUNTER_VERSION=$1 +DOCKER_IMAGE=docker://$2 +MOUNTER_ACI_IMAGE=gci-mounter-${MOUNTER_VERSION}.aci +RKT_GCS_DIR=gs://kubernetes-release/rkt/ +MOUNTER_GCS_DIR=gs://kubernetes-release/gci-mounter/ + +TMPDIR=/tmp +# Setup a working directory +DOWNLOAD_DIR=$(mktemp --tmpdir=${TMPDIR} -d gci-mounter-build.XXXXXXXXXX) + +# Setup a staging directory +STAGING_DIR=$(mktemp --tmpdir=${TMPDIR} -d gci-mounter-staging.XXXXXXXXXX) +RKT_DIR=${STAGING_DIR}/${RKT_VERSION} +ACI_DIR=${STAGING_DIR}/gci-mounter +CWD=${PWD} + +# Cleanup the temporary directories +function cleanup { + rm -rf ${DOWNLOAD_DIR} + rm -rf ${STAGING_DIR} + cd ${CWD} +} + +# Delete temporary directories on exit +trap cleanup EXIT + +mkdir ${RKT_DIR} +mkdir ${ACI_DIR} + +# Download rkt +cd ${DOWNLOAD_DIR} +echo "Downloading rkt ${RKT_VERSION}" +wget "https://github.com/coreos/rkt/releases/download/${RKT_VERSION}/rkt-${RKT_VERSION}.tar.gz" &> /dev/null +echo "Extracting rkt ${RKT_VERSION}" +tar xzf rkt-${RKT_VERSION}.tar.gz + +# Stage rkt into working directory +cp rkt-${RKT_VERSION}/rkt ${RKT_DIR}/rkt +cp rkt-${RKT_VERSION}/stage1-fly.aci ${RKT_DIR}/ + +# Convert docker image to aci and stage it +echo "Downloading docker2aci ${DOCKER2ACI_VERSION}" +wget "https://github.com/appc/docker2aci/releases/download/${DOCKER2ACI_VERSION}/docker2aci-${DOCKER2ACI_VERSION}.tar.gz" &> /dev/null +echo "Extracting docker2aci ${DOCKER2ACI_VERSION}" +tar xzf docker2aci-${DOCKER2ACI_VERSION}.tar.gz +ACI_IMAGE=$(${DOWNLOAD_DIR}/docker2aci-${DOCKER2ACI_VERSION}/docker2aci ${DOCKER_IMAGE} 2>/dev/null | tail -n 1) +cp ${ACI_IMAGE} ${ACI_DIR}/${MOUNTER_ACI_IMAGE} + +# Upload the contents to gcs +echo "Uploading rkt artifacts in ${RKT_DIR} to ${RKT_GCS_DIR}" +gsutil cp -R ${RKT_DIR} ${RKT_GCS_DIR} +echo "Uploading gci mounter ACI in ${ACI_DIR} to ${MOUNTER_GCS_DIR}" +gsutil cp ${ACI_DIR}/${MOUNTER_ACI_IMAGE} ${MOUNTER_GCS_DIR} + +echo "Upload completed" +echo "Update rkt, stag1-fly.aci & gci-mounter ACI versions and SHA1 in cluster/gce/gci/configure.sh" +echo "${RKT_VERSION}/rkt sha1: $(sha1sum ${RKT_DIR}/rkt)" +echo "${RKT_VERSION}/stage1-fly.aci sha1: $(sha1sum ${RKT_DIR}/stage1-fly.aci)" +echo "${MOUNTER_ACI_IMAGE} hash: $(sha1sum ${ACI_DIR}/${MOUNTER_ACI_IMAGE})" diff --git a/pkg/apis/componentconfig/BUILD b/pkg/apis/componentconfig/BUILD index bd1ce3906b8..d76601bc3ef 100644 --- a/pkg/apis/componentconfig/BUILD +++ b/pkg/apis/componentconfig/BUILD @@ -16,6 +16,7 @@ go_library( "doc.go", "helpers.go", "register.go", + "types.generated.go", "types.go", "zz_generated.deepcopy.go", ], @@ -26,6 +27,7 @@ go_library( "//pkg/runtime:go_default_library", "//pkg/util/config:go_default_library", "//pkg/util/net:go_default_library", + "//vendor:github.com/ugorji/go/codec", ], )