容器化进阶之路

minikube镜像缓存

2020-03-17  本文已影响0人  hyperjiang

概述

为了能够离线使用和加快速度,我们可以把minikube所需的docker images缓存到本地文件系统,特别对于墙内的同学们是非常有用的。

查看本地缓存

minikube cache list

注:这些image文件实际上存放在~/.minikube/cache/images下面。

添加缓存

首先,在添加缓存之前,我们可以先运行eval $(minikube docker-env)让主机可以访问到minikube虚拟机里面运行的docker

跑完上面那个命令,你可以试试docker images看看minikube虚拟机里面已经有哪些image了,然后就可以开始添加image缓存了。

比如下面的命令是把kubernetesui/dashboard:v2.0.0-beta8kubernetesui/metrics-scraper:v1.0.2加入缓存:

minikube cache add kubernetesui/dashboard:v2.0.0-beta8
minikube cache add kubernetesui/metrics-scraper:v1.0.2

小技巧:上面这两个image在阿里云的缓存里面已经存在的,所以实际上我们可以从阿里云目录复制一份出来到kubernetesui目录下面,比如

cd ~/.minikube/cache/images
cp registry.cn-hangzhou.aliyuncs.com/google_containers/dashboard_v2.0.0-beta8 ./kubernetesui/
cp registry.cn-hangzhou.aliyuncs.com/google_containers/metrics-scraper_v1.0.2 ./kubernetesui/

然后再运行添加缓存的命令就不需要去docker仓库下载,能省掉很多时间。

我们在第一次启动minikube的时候很多image本地都没有,所以下载会花一些时间,这时候你如果运行kubectl get pod -A可以看到一些pod的状态是ContainerCreating,这其实就是还在下载image,如果由于网络问题下载失败,状态就会变成ImagePullBackOff进行重试,如果还失败就会变成ErrImagePull,这时候我们可以通过kubectl describe命令来看看是拉取什么image失败了,比如:

kubectl describe -n kube-system pod nginx-ingress-controller-6fc5bcc8c9-s5tns

我们可以发现是拉取quay.io/kubernetes-ingress-controller/nginx-ingress-controller:0.26.1失败了,一种解决方案是我们可以先用虚拟机里面的docker从中国镜像把image拉取下来,比如:

docker pull quay.azk8s.cn/kubernetes-ingress-controller/nginx-ingress-controller:0.26.1

然后打上原本的tag:

docker tag quay.azk8s.cn/kubernetes-ingress-controller/nginx-ingress-controller:0.26.1 quay.io/kubernetes-ingress-controller/nginx-ingress-controller:0.26.1

然后运行下面的命令加入到minikube缓存:

minikube cache add quay.io/kubernetes-ingress-controller/nginx-ingress-controller:0.26.1

再举个例子,缓存vault:1.3.3

docker pull docker.mirrors.ustc.edu.cn/library/vault:1.3.3
docker tag docker.mirrors.ustc.edu.cn/library/vault:1.3.3 vault:1.3.3
minikube cache add vault:1.3.3 --logtostderr

删除缓存

minikube cache delete <image name>
上一篇下一篇

猜你喜欢

热点阅读