From e055ee692944268cbaa749c74a195c0d8219482a Mon Sep 17 00:00:00 2001 From: Priya Wadhwa Date: Thu, 6 Feb 2020 13:12:43 -0800 Subject: [PATCH 1/6] Preload docker images into kic base image Adds support for specifying kubernetes version and preloading docker images into the kic base image. Though this increases the kic base image by ~1.6G, it should improve start latency in conjunction with removing 'kubeadm pull images' in another PR. --- Makefile | 11 +++++-- hack/images/kicbase.Dockerfile | 29 +++++++++++------ .../generate-preloaded-images-tar.sh | 32 +++++++++++++++++++ 3 files changed, 59 insertions(+), 13 deletions(-) create mode 100755 hack/preload-images/generate-preloaded-images-tar.sh diff --git a/Makefile b/Makefile index fab65a73164f..ab84c37f9db1 100755 --- a/Makefile +++ b/Makefile @@ -19,6 +19,8 @@ VERSION_BUILD ?= 1 RAW_VERSION=$(VERSION_MAJOR).$(VERSION_MINOR).${VERSION_BUILD} VERSION ?= v$(RAW_VERSION) +KUBERNETES_VERSION ?= $(shell cat pkg/minikube/constants/constants.go | grep "DefaultKubernetesVersion =" | cut -d ' ' -f4 | sed 's/"//g') + # Default to .0 for higher cache hit rates, as build increments typically don't require new ISO versions ISO_VERSION ?= v$(VERSION_MAJOR).$(VERSION_MINOR).0 # Dashes are valid in semver, but not Linux packaging. Use ~ to delimit alpha/beta @@ -500,10 +502,13 @@ storage-provisioner-image: out/storage-provisioner-$(GOARCH) ## Build storage-pr docker build -t $(STORAGE_PROVISIONER_IMAGE) -f deploy/storage-provisioner/Dockerfile --build-arg arch=$(GOARCH) . .PHONY: kic-base-image -kic-base-image: ## builds the base image used for kic. - docker rmi -f $(REGISTRY)/kicbase:v0.0.5-snapshot || true - docker build -f ./hack/images/kicbase.Dockerfile -t $(REGISTRY)/kicbase:v0.0.5-snapshot --build-arg COMMIT_SHA=${VERSION}-$(COMMIT) . +kic-base-image: generate-preloaded-images-tar ## builds the base image used for kic. + docker rmi -f $(REGISTRY)/kicbase:v0.0.5-k8s-${KUBERNETES_VERSION} || true + docker build -f ./hack/images/kicbase.Dockerfile -t $(REGISTRY)/kicbase:v0.0.5-k8s-${KUBERNETES_VERSION} --build-arg COMMIT_SHA=${VERSION}-$(COMMIT) --build-arg KUBERNETES_VERSION=${KUBERNETES_VERSION} . +.PHONY: generate-preloaded-images-tar +generate-preloaded-images-tar: out/minikube + KUBERNETES_VERSION=${KUBERNETES_VERSION} ./hack/preload-images/generate-preloaded-images-tar.sh .PHONY: push-storage-provisioner-image diff --git a/hack/images/kicbase.Dockerfile b/hack/images/kicbase.Dockerfile index 836f359a66b0..841c8b82084e 100644 --- a/hack/images/kicbase.Dockerfile +++ b/hack/images/kicbase.Dockerfile @@ -2,7 +2,7 @@ ARG COMMIT_SHA # using base image created by kind https://github.com/kubernetes-sigs/kind # which is an ubuntu 19.10 with an entry-point that helps running systemd # could be changed to any debian that can run systemd -FROM kindest/base:v20200122-2dfe64b2 +FROM kindest/base:v20200122-2dfe64b2 as base USER root RUN apt-get update && apt-get install -y \ sudo \ @@ -34,12 +34,21 @@ USER root # https://github.com/kubernetes-sigs/kind/blob/master/images/base/files/usr/local/bin/entrypoint RUN mkdir -p /kind RUN rm -rf \ - /var/cache/debconf/* \ - /var/lib/apt/lists/* \ - /var/log/* \ - /tmp/* \ - /var/tmp/* \ - /usr/share/doc/* \ - /usr/share/man/* \ - /usr/share/local/* \ -RUN echo "kic! Build: ${COMMIT_SHA} Time :$(date)" > "/kic.txt" + /var/cache/debconf/* \ + /var/lib/apt/lists/* \ + /var/log/* \ + /tmp/* \ + /var/tmp/* \ + /usr/share/doc/* \ + /usr/share/man/* \ + /usr/share/local/* \ + RUN echo "kic! Build: ${COMMIT_SHA} Time :$(date)" > "/kic.txt" + + +FROM busybox +ARG KUBERNETES_VERSION +COPY out/preloaded-images-k8s-$KUBERNETES_VERSION.tar /preloaded-images.tar +RUN tar xvf /preloaded-images.tar -C / + +FROM base +COPY --from=1 /var/lib/docker /var/lib/docker diff --git a/hack/preload-images/generate-preloaded-images-tar.sh b/hack/preload-images/generate-preloaded-images-tar.sh new file mode 100755 index 000000000000..cc24c1490ebc --- /dev/null +++ b/hack/preload-images/generate-preloaded-images-tar.sh @@ -0,0 +1,32 @@ +#!/bin/bash + +# 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. + +set -ex + +PROFILE=generate-preloaded-images-tar +KUBERNETES_VERSION=${KUBERNETES_VERSION:-""} +TARBALL_FILENAME=preloaded-images-k8s-$KUBERNETES_VERSION.tar + +function delete_minikube { + out/minikube delete --profile=$PROFILE +} + +trap "delete_minikube" ERR + +out/minikube start --memory=10000 --profile=$PROFILE --kubernetes-version=$KUBERNETES_VERSION +out/minikube ssh --profile=$PROFILE -- sudo tar cvf $TARBALL_FILENAME /var/lib/docker +scp -o StrictHostKeyChecking=no -i $(out/minikube ssh-key --profile=$PROFILE) docker@$(out/minikube ip --profile=$PROFILE):/home/docker/$TARBALL_FILENAME out/$TARBALL_FILENAME +delete_minikube From 4a0fb0eeb109c6da7320b5b47fb83909d61022c3 Mon Sep 17 00:00:00 2001 From: Priya Wadhwa Date: Fri, 7 Feb 2020 11:15:34 -0800 Subject: [PATCH 2/6] Add separate makefile target for preloaded images and convert shell script to go script --- Makefile | 10 +- .../generate-preloaded-images-tar.sh | 32 ----- hack/preload-images/preload_images.go | 116 ++++++++++++++++++ 3 files changed, 124 insertions(+), 34 deletions(-) delete mode 100755 hack/preload-images/generate-preloaded-images-tar.sh create mode 100644 hack/preload-images/preload_images.go diff --git a/Makefile b/Makefile index ab84c37f9db1..49cc0628e45d 100755 --- a/Makefile +++ b/Makefile @@ -502,13 +502,19 @@ storage-provisioner-image: out/storage-provisioner-$(GOARCH) ## Build storage-pr docker build -t $(STORAGE_PROVISIONER_IMAGE) -f deploy/storage-provisioner/Dockerfile --build-arg arch=$(GOARCH) . .PHONY: kic-base-image -kic-base-image: generate-preloaded-images-tar ## builds the base image used for kic. +kic-base-image: ## builds the base image used for kic. + docker rmi -f $(REGISTRY)/kicbase:v0.0.5-snapshot || true + docker build -f ./hack/images/kicbase.Dockerfile -t $(REGISTRY)/kicbase:v0.0.5-snapshot --build-arg COMMIT_SHA=${VERSION}-$(COMMIT) . + + +.PHONY: kic-preloaded-base-image +kic-preloaded-base-image: generate-preloaded-images-tar ## builds the base image used for kic. docker rmi -f $(REGISTRY)/kicbase:v0.0.5-k8s-${KUBERNETES_VERSION} || true docker build -f ./hack/images/kicbase.Dockerfile -t $(REGISTRY)/kicbase:v0.0.5-k8s-${KUBERNETES_VERSION} --build-arg COMMIT_SHA=${VERSION}-$(COMMIT) --build-arg KUBERNETES_VERSION=${KUBERNETES_VERSION} . .PHONY: generate-preloaded-images-tar generate-preloaded-images-tar: out/minikube - KUBERNETES_VERSION=${KUBERNETES_VERSION} ./hack/preload-images/generate-preloaded-images-tar.sh + KUBERNETES_VERSION=${KUBERNETES_VERSION} go run ./hack/preload-images/preload_images.go .PHONY: push-storage-provisioner-image diff --git a/hack/preload-images/generate-preloaded-images-tar.sh b/hack/preload-images/generate-preloaded-images-tar.sh deleted file mode 100755 index cc24c1490ebc..000000000000 --- a/hack/preload-images/generate-preloaded-images-tar.sh +++ /dev/null @@ -1,32 +0,0 @@ -#!/bin/bash - -# 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. - -set -ex - -PROFILE=generate-preloaded-images-tar -KUBERNETES_VERSION=${KUBERNETES_VERSION:-""} -TARBALL_FILENAME=preloaded-images-k8s-$KUBERNETES_VERSION.tar - -function delete_minikube { - out/minikube delete --profile=$PROFILE -} - -trap "delete_minikube" ERR - -out/minikube start --memory=10000 --profile=$PROFILE --kubernetes-version=$KUBERNETES_VERSION -out/minikube ssh --profile=$PROFILE -- sudo tar cvf $TARBALL_FILENAME /var/lib/docker -scp -o StrictHostKeyChecking=no -i $(out/minikube ssh-key --profile=$PROFILE) docker@$(out/minikube ip --profile=$PROFILE):/home/docker/$TARBALL_FILENAME out/$TARBALL_FILENAME -delete_minikube diff --git a/hack/preload-images/preload_images.go b/hack/preload-images/preload_images.go new file mode 100644 index 000000000000..7723838ce882 --- /dev/null +++ b/hack/preload-images/preload_images.go @@ -0,0 +1,116 @@ +/* +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. +*/ + +package main + +import ( + "bytes" + "fmt" + "io/ioutil" + "os" + "os/exec" + "path/filepath" + "strings" + + "github.com/pkg/errors" +) + +const ( + profile = "generate-preloaded-images-tar" + minikubePath = "out/minikube" +) + +var ( + kubernetesVersion = "" + tarballFilename = "" +) + +func init() { + if kv := os.Getenv("KUBERNETES_VERSION"); kv != "" { + kubernetesVersion = kv + } else { + fmt.Println("Please pass in kubernetes version via the KUBERNETES_VERSION environment variable") + os.Exit(1) + } + tarballFilename = fmt.Sprintf("preloaded-images-k8s-%s.tar", kubernetesVersion) +} + +func main() { + if err := executePreloadImages(); err != nil { + fmt.Println(err) + os.Exit(1) + } +} + +func executePreloadImages() error { + defer deleteMinikube() + if err := startMinikube(); err != nil { + return err + } + if err := createImageTarball(); err != nil { + return err + } + return copyTarballToHost() +} + +func startMinikube() error { + cmd := exec.Command(minikubePath, "start", "-p", profile, "--memory", "10000", "--kubernetes-version", kubernetesVersion) + cmd.Stdout = os.Stdout + return cmd.Run() +} + +func createImageTarball() error { + cmd := exec.Command(minikubePath, "ssh", "-p", profile, "--", "sudo", "tar", "cvf", tarballFilename, "/var/lib/docker") + cmd.Stdout = os.Stdout + return cmd.Run() +} + +func copyTarballToHost() error { + sshKey, err := runCmdCaptureStdout([]string{minikubePath, "ssh-key", "-p", profile}) + if err != nil { + return errors.Wrap(err, "getting ssh-key") + } + + ip, err := runCmdCaptureStdout([]string{minikubePath, "ip", "-p", profile}) + if err != nil { + return errors.Wrap(err, "getting ip") + } + + dest := filepath.Join("out/", tarballFilename) + args := fmt.Sprintf("scp -o StrictHostKeyChecking=no -i %s docker@%s:/home/docker/%s %s", sshKey, ip, tarballFilename, dest) + _, err = runCmdCaptureStdout(strings.Split(args, " ")) + return err +} + +func deleteMinikube() error { + cmd := exec.Command(minikubePath, "delete", "-p", profile) + cmd.Stdout = os.Stdout + return cmd.Run() +} + +func runCmdCaptureStdout(command []string) (string, error) { + cmd := exec.Command(command[0], command[1:]...) + buf := bytes.NewBuffer([]byte{}) + cmd.Stdout = buf + if err := cmd.Run(); err != nil { + return "", err + } + stdout, err := ioutil.ReadAll(buf) + if err != nil { + return "", err + } + return strings.Trim(string(stdout), "\n "), nil +} From 75d0ee5e8781db486d10934220f0555a2115e4c1 Mon Sep 17 00:00:00 2001 From: Priya Wadhwa Date: Fri, 7 Feb 2020 11:17:28 -0800 Subject: [PATCH 3/6] Add target flag to build only kicbase for kicbase makefile target --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 49cc0628e45d..4832e7773bba 100755 --- a/Makefile +++ b/Makefile @@ -504,7 +504,7 @@ storage-provisioner-image: out/storage-provisioner-$(GOARCH) ## Build storage-pr .PHONY: kic-base-image kic-base-image: ## builds the base image used for kic. docker rmi -f $(REGISTRY)/kicbase:v0.0.5-snapshot || true - docker build -f ./hack/images/kicbase.Dockerfile -t $(REGISTRY)/kicbase:v0.0.5-snapshot --build-arg COMMIT_SHA=${VERSION}-$(COMMIT) . + docker build -f ./hack/images/kicbase.Dockerfile -t $(REGISTRY)/kicbase:v0.0.5-snapshot --build-arg COMMIT_SHA=${VERSION}-$(COMMIT) --target base . .PHONY: kic-preloaded-base-image From c35bd75b5cccd88c3b3f64df8fe88300de1d6e2e Mon Sep 17 00:00:00 2001 From: Priya Wadhwa Date: Fri, 7 Feb 2020 14:19:44 -0800 Subject: [PATCH 4/6] fix lint --- hack/images/kicbase.Dockerfile | 2 +- hack/preload-images/preload_images.go | 8 ++++++-- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/hack/images/kicbase.Dockerfile b/hack/images/kicbase.Dockerfile index 841c8b82084e..14d084e91dfe 100644 --- a/hack/images/kicbase.Dockerfile +++ b/hack/images/kicbase.Dockerfile @@ -51,4 +51,4 @@ COPY out/preloaded-images-k8s-$KUBERNETES_VERSION.tar /preloaded-images.tar RUN tar xvf /preloaded-images.tar -C / FROM base -COPY --from=1 /var/lib/docker /var/lib/docker +COPY --from=1 /var/lib/docker /var/lib/docker diff --git a/hack/preload-images/preload_images.go b/hack/preload-images/preload_images.go index 7723838ce882..41be2f56fa63 100644 --- a/hack/preload-images/preload_images.go +++ b/hack/preload-images/preload_images.go @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors All rights reserved. +Copyright 2020 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. @@ -56,7 +56,11 @@ func main() { } func executePreloadImages() error { - defer deleteMinikube() + defer func() { + if err := deleteMinikube(); err != nil { + fmt.Println(err) + } + }() if err := startMinikube(); err != nil { return err } From 7f0f3dcbdd9f18ab36e4d955ee17ae3b215996af Mon Sep 17 00:00:00 2001 From: Priya Wadhwa Date: Mon, 10 Feb 2020 17:55:04 -0800 Subject: [PATCH 5/6] Addressed review comments, still need to copy over /var/lib/minikube/binaries --- Makefile | 13 +++++----- hack/preload-images/preload_images.go | 35 +++++++++------------------ 2 files changed, 18 insertions(+), 30 deletions(-) diff --git a/Makefile b/Makefile index 4832e7773bba..4ac3dc48bea0 100755 --- a/Makefile +++ b/Makefile @@ -19,13 +19,14 @@ VERSION_BUILD ?= 1 RAW_VERSION=$(VERSION_MAJOR).$(VERSION_MINOR).${VERSION_BUILD} VERSION ?= v$(RAW_VERSION) -KUBERNETES_VERSION ?= $(shell cat pkg/minikube/constants/constants.go | grep "DefaultKubernetesVersion =" | cut -d ' ' -f4 | sed 's/"//g') +KUBERNETES_VERSION ?= $(shell egrep "^var DefaultKubernetesVersion" pkg/minikube/constants/constants.go | cut -d \" -f2) # Default to .0 for higher cache hit rates, as build increments typically don't require new ISO versions ISO_VERSION ?= v$(VERSION_MAJOR).$(VERSION_MINOR).0 # Dashes are valid in semver, but not Linux packaging. Use ~ to delimit alpha/beta DEB_VERSION ?= $(subst -,~,$(RAW_VERSION)) RPM_VERSION ?= $(DEB_VERSION) +KIC_VERSION ?= 0.0.5 # used by hack/jenkins/release_build_and_upload.sh and KVM_BUILD_IMAGE, see also BUILD_IMAGE below GO_VERSION ?= 1.13.4 @@ -503,18 +504,18 @@ storage-provisioner-image: out/storage-provisioner-$(GOARCH) ## Build storage-pr .PHONY: kic-base-image kic-base-image: ## builds the base image used for kic. - docker rmi -f $(REGISTRY)/kicbase:v0.0.5-snapshot || true - docker build -f ./hack/images/kicbase.Dockerfile -t $(REGISTRY)/kicbase:v0.0.5-snapshot --build-arg COMMIT_SHA=${VERSION}-$(COMMIT) --target base . + docker rmi -f $(REGISTRY)/kicbase:v$(KIC_VERSION)-snapshot || true + docker build -f ./hack/images/kicbase.Dockerfile -t $(REGISTRY)/kicbase:v$(KIC_VERSION)-snapshot --build-arg COMMIT_SHA=${VERSION}-$(COMMIT) --target base . .PHONY: kic-preloaded-base-image kic-preloaded-base-image: generate-preloaded-images-tar ## builds the base image used for kic. - docker rmi -f $(REGISTRY)/kicbase:v0.0.5-k8s-${KUBERNETES_VERSION} || true - docker build -f ./hack/images/kicbase.Dockerfile -t $(REGISTRY)/kicbase:v0.0.5-k8s-${KUBERNETES_VERSION} --build-arg COMMIT_SHA=${VERSION}-$(COMMIT) --build-arg KUBERNETES_VERSION=${KUBERNETES_VERSION} . + docker rmi -f $(REGISTRY)/kicbase:v$(KIC_VERSION)-k8s-${KUBERNETES_VERSION} || true + docker build -f ./hack/images/kicbase.Dockerfile -t $(REGISTRY)/kicbase:v$(KIC_VERSION)-k8s-${KUBERNETES_VERSION} --build-arg COMMIT_SHA=${VERSION}-$(COMMIT) --build-arg KUBERNETES_VERSION=${KUBERNETES_VERSION} . .PHONY: generate-preloaded-images-tar generate-preloaded-images-tar: out/minikube - KUBERNETES_VERSION=${KUBERNETES_VERSION} go run ./hack/preload-images/preload_images.go + go run ./hack/preload-images/preload_images.go -kubernetes-version ${KUBERNETES_VERSION} .PHONY: push-storage-provisioner-image diff --git a/hack/preload-images/preload_images.go b/hack/preload-images/preload_images.go index 41be2f56fa63..0309bd281891 100644 --- a/hack/preload-images/preload_images.go +++ b/hack/preload-images/preload_images.go @@ -17,9 +17,8 @@ limitations under the License. package main import ( - "bytes" + "flag" "fmt" - "io/ioutil" "os" "os/exec" "path/filepath" @@ -39,12 +38,8 @@ var ( ) func init() { - if kv := os.Getenv("KUBERNETES_VERSION"); kv != "" { - kubernetesVersion = kv - } else { - fmt.Println("Please pass in kubernetes version via the KUBERNETES_VERSION environment variable") - os.Exit(1) - } + flag.StringVar(&kubernetesVersion, "kubernetes-version", "", "desired kubernetes version, for example `v1.17.2`") + flag.Parse() tarballFilename = fmt.Sprintf("preloaded-images-k8s-%s.tar", kubernetesVersion) } @@ -71,7 +66,7 @@ func executePreloadImages() error { } func startMinikube() error { - cmd := exec.Command(minikubePath, "start", "-p", profile, "--memory", "10000", "--kubernetes-version", kubernetesVersion) + cmd := exec.Command(minikubePath, "start", "-p", profile, "--memory", "4000", "--kubernetes-version", kubernetesVersion, "--wait=false") cmd.Stdout = os.Stdout return cmd.Run() } @@ -83,19 +78,19 @@ func createImageTarball() error { } func copyTarballToHost() error { - sshKey, err := runCmdCaptureStdout([]string{minikubePath, "ssh-key", "-p", profile}) + sshKey, err := runCmd([]string{minikubePath, "ssh-key", "-p", profile}) if err != nil { return errors.Wrap(err, "getting ssh-key") } - ip, err := runCmdCaptureStdout([]string{minikubePath, "ip", "-p", profile}) + ip, err := runCmd([]string{minikubePath, "ip", "-p", profile}) if err != nil { return errors.Wrap(err, "getting ip") } dest := filepath.Join("out/", tarballFilename) - args := fmt.Sprintf("scp -o StrictHostKeyChecking=no -i %s docker@%s:/home/docker/%s %s", sshKey, ip, tarballFilename, dest) - _, err = runCmdCaptureStdout(strings.Split(args, " ")) + args := []string{"scp", "-o", "StrictHostKeyChecking=no", "-i", string(sshKey), fmt.Sprintf("docker@%s:/home/docker/%s", ip, tarballFilename), dest} + _, err = runCmd(args) return err } @@ -105,16 +100,8 @@ func deleteMinikube() error { return cmd.Run() } -func runCmdCaptureStdout(command []string) (string, error) { +func runCmd(command []string) (string, error) { cmd := exec.Command(command[0], command[1:]...) - buf := bytes.NewBuffer([]byte{}) - cmd.Stdout = buf - if err := cmd.Run(); err != nil { - return "", err - } - stdout, err := ioutil.ReadAll(buf) - if err != nil { - return "", err - } - return strings.Trim(string(stdout), "\n "), nil + output, err := cmd.Output() + return strings.Trim(string(output), "\n "), err } From a2564e4eed511da3878aed9cb5bc5ca3f3da2b84 Mon Sep 17 00:00:00 2001 From: Priya Wadhwa Date: Mon, 10 Feb 2020 18:51:05 -0800 Subject: [PATCH 6/6] Preload /var/lib/minikube/binaries --- hack/images/kicbase.Dockerfile | 1 + hack/preload-images/preload_images.go | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/hack/images/kicbase.Dockerfile b/hack/images/kicbase.Dockerfile index 14d084e91dfe..9c7be31eb666 100644 --- a/hack/images/kicbase.Dockerfile +++ b/hack/images/kicbase.Dockerfile @@ -52,3 +52,4 @@ RUN tar xvf /preloaded-images.tar -C / FROM base COPY --from=1 /var/lib/docker /var/lib/docker +COPY --from=1 /var/lib/minikube/binaries /var/lib/minikube/binaries diff --git a/hack/preload-images/preload_images.go b/hack/preload-images/preload_images.go index 0309bd281891..609ef0971a1c 100644 --- a/hack/preload-images/preload_images.go +++ b/hack/preload-images/preload_images.go @@ -72,7 +72,7 @@ func startMinikube() error { } func createImageTarball() error { - cmd := exec.Command(minikubePath, "ssh", "-p", profile, "--", "sudo", "tar", "cvf", tarballFilename, "/var/lib/docker") + cmd := exec.Command(minikubePath, "ssh", "-p", profile, "--", "sudo", "tar", "cvf", tarballFilename, "/var/lib/docker", "/var/lib/minikube/binaries") cmd.Stdout = os.Stdout return cmd.Run() }