From abf35cfbc15b52b1d5149f66d9224a6fa7d742a3 Mon Sep 17 00:00:00 2001 From: Priya Wadhwa Date: Mon, 23 Mar 2020 17:41:06 -0700 Subject: [PATCH 1/3] Upgrade podman and add libglib2.0-0 to kicbase image The `TestOffline/group/crio` integration test was failing with the error: ``` crio load image: sudo podman load -i /var/lib/minikube/images/storage-provisioner_v1.8.1: exit status 125 ``` I tried SSH'ing into minikube and running the command myself, and got the error: ``` Error: could not get runtime: please update to v2.0.1 or later: outdated conmon version ``` I then tried updating conmon, but got the error: ``` conmon: error while loading shared libraries: libglib-2.0.so.0: cannot open shared object file: No such file or directory ``` I then tried adding the libglib2.0-0 library to the kic base image and upgrading podman, which seems to have resolved the issue. --- hack/images/kicbase.Dockerfile | 4 +++- pkg/drivers/kic/types.go | 4 ++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/hack/images/kicbase.Dockerfile b/hack/images/kicbase.Dockerfile index baadf88df3..5afbe6e146 100644 --- a/hack/images/kicbase.Dockerfile +++ b/hack/images/kicbase.Dockerfile @@ -12,6 +12,8 @@ RUN apt-get update && apt-get install -y --no-install-recommends \ docker.io=19.03.2-0ubuntu1 \ openssh-server=1:8.0p1-6build1 \ dnsutils=1:9.11.5.P4+dfsg-5.1ubuntu2.1 \ + # libglib2.0-0 is required for conmon, which is required for podman + libglib2.0-0=2.62.1-1 \ && rm /etc/crictl.yaml # install cri-o based on https://github.com/cri-o/cri-o/commit/96b0c34b31a9fc181e46d7d8e34fb8ee6c4dc4e1#diff-04c6e90faac2675aa89e2176d2eec7d8R128 RUN sh -c "echo 'deb http://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/xUbuntu_19.10/ /' > /etc/apt/sources.list.d/devel:kubic:libcontainers:stable.list" && \ @@ -19,7 +21,7 @@ RUN sh -c "echo 'deb http://download.opensuse.org/repositories/devel:/kubic:/lib apt-key add - < Release.key && apt-get update && \ apt-get install -y --no-install-recommends cri-o-1.17=1.17.0-3 # install podman -RUN apt-get install -y --no-install-recommends podman=1.8.0~7 +RUN apt-get install -y --no-install-recommends podman=1.8.2~1 # disable non-docker runtimes by default RUN systemctl disable containerd && systemctl disable crio && rm /etc/crictl.yaml # enable docker which is default diff --git a/pkg/drivers/kic/types.go b/pkg/drivers/kic/types.go index 32e2950396..d31aac0b85 100644 --- a/pkg/drivers/kic/types.go +++ b/pkg/drivers/kic/types.go @@ -30,9 +30,9 @@ const ( DefaultPodCIDR = "10.244.0.0/16" // Version is the current version of kic - Version = "v0.0.7" + Version = "v0.0.8" // SHA of the kic base image - baseImageSHA = "a6f288de0e5863cdeab711fa6bafa38ee7d8d285ca14216ecf84fcfb07c7d176" + baseImageSHA = "2f3380ebf1bb0c75b0b47160fd4e61b7b8fef0f1f32f9def108d3eada50a7a81" // OverlayImage is the cni plugin used for overlay image, created by kind. // CNI plugin image used for kic drivers created by kind. From 091059b88619b6ff1c6764f309de66acb7dcee63 Mon Sep 17 00:00:00 2001 From: Priya Wadhwa Date: Mon, 23 Mar 2020 17:55:00 -0700 Subject: [PATCH 2/3] Add timeout on needsTransfer function needsTransfer requires a network connection as it tries to get the digest of the image it is verifying. When running `TestOffline/group/crio`, LoadImages takes 6m30s to complete because it's waiting for i/o timeout. With this timeout, LoadImages takes ~45 seconds when running that integratin test. --- pkg/minikube/machine/cache_images.go | 28 +++++++++++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-) diff --git a/pkg/minikube/machine/cache_images.go b/pkg/minikube/machine/cache_images.go index 34b4379314..dd3fc58d9e 100644 --- a/pkg/minikube/machine/cache_images.go +++ b/pkg/minikube/machine/cache_images.go @@ -92,7 +92,11 @@ func LoadImages(cc *config.ClusterConfig, runner command.Runner, images []string for _, image := range images { image := image g.Go(func() error { - err := needsTransfer(imgClient, image, cr) + // Put a ten second limit on deciding if an image needs transfer + // because it takes much less than that time to just transfer the image. + // This is needed because if running in offline mode, we can spend minutes here + // waiting for i/o timeout. + err := timedNeedsTransfer(imgClient, image, cr, 10*time.Second) if err == nil { return nil } @@ -107,6 +111,28 @@ func LoadImages(cc *config.ClusterConfig, runner command.Runner, images []string return nil } +func timedNeedsTransfer(imgClient *client.Client, imgName string, cr cruntime.Manager, t time.Duration) error { + timeout := make(chan bool, 1) + go func() { + time.Sleep(t) + timeout <- true + }() + + transferFinished := make(chan bool, 1) + var err error + go func() { + err = needsTransfer(imgClient, imgName, cr) + transferFinished <- true + }() + + select { + case <-transferFinished: + return err + case <-timeout: + return fmt.Errorf("needs transfer timed out in %f seconds", t.Seconds()) + } +} + // needsTransfer returns an error if an image needs to be retransfered func needsTransfer(imgClient *client.Client, imgName string, cr cruntime.Manager) error { imgDgst := "" // for instance sha256:7c92a2c6bbcb6b6beff92d0a940779769c2477b807c202954c537e2e0deb9bed From 3c37556627b8932f76e3db46b6ebdae8dc0ed156 Mon Sep 17 00:00:00 2001 From: Priya Wadhwa Date: Mon, 23 Mar 2020 18:06:53 -0700 Subject: [PATCH 3/3] update vm podman to same version --- deploy/iso/minikube-iso/package/podman/podman.hash | 1 + deploy/iso/minikube-iso/package/podman/podman.mk | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/deploy/iso/minikube-iso/package/podman/podman.hash b/deploy/iso/minikube-iso/package/podman/podman.hash index af242fcc80..fda1df9870 100644 --- a/deploy/iso/minikube-iso/package/podman/podman.hash +++ b/deploy/iso/minikube-iso/package/podman/podman.hash @@ -12,3 +12,4 @@ sha256 2e027c1b935f3a03f27ef7f17823ccf334607a17d033d4ce53a90b98294e7f68 v1.4.4.t sha256 61b44b739c485125f179044f7aa7dc58c820f771bce4ce495fa555a38dc68b57 v1.6.3.tar.gz sha256 6e59821320b435543bc7554e73faa66d5956e4ad3f7e7f4ea03bebd6726758e9 v1.6.4.tar.gz sha256 50960293c2019e38ce69e4cf5f0a683e7fea1562b180e38e38c9355fcd7c4f0d v1.6.5.tar.gz +sha256 69f7ff81da1510ebf2962c1de3170675ca3cd8a24bc00c93742a24bcce17c752 v1.8.2.tar.gz diff --git a/deploy/iso/minikube-iso/package/podman/podman.mk b/deploy/iso/minikube-iso/package/podman/podman.mk index 911dc30cf3..8781c0b0b9 100644 --- a/deploy/iso/minikube-iso/package/podman/podman.mk +++ b/deploy/iso/minikube-iso/package/podman/podman.mk @@ -1,5 +1,5 @@ -PODMAN_VERSION = v1.6.5 -PODMAN_COMMIT = 45e7be192ef99e870c59a1cd2c1fa7940b0af2d6 +PODMAN_VERSION = v1.8.2 +PODMAN_COMMIT = 028e3317eb1494b9b2acba4a0a295df80fae66cc PODMAN_SITE = https://github.com/containers/libpod/archive PODMAN_SOURCE = $(PODMAN_VERSION).tar.gz PODMAN_LICENSE = Apache-2.0