原因
由于 kubernetes
安装时需要从 k8s.gcr.io
拉取镜像,但是该网站被我国屏蔽了,国内没法正常访问导致没法正常进行kubernetes
正常安装。
这里通过介绍从Docker
官方默认镜像平台拉取镜像并重新打tag
的方式来绕过对 k8s.gcr.io
的访问。
解决方案
通过执行 kubeadm config images list
获取到需要拉取的镜像列表,并通过 sed
格式化成需要执行的命令。
命令如下:
kubeadm config images list
kubeadm config images list 2>/dev/null | sed 's/k8s.gcr.io/docker pull mirrorgcrio/g' | sudo sh
kubeadm config images list 2>/dev/null | sed 's/k8s.gcr.io\(.*\)/docker tag mirrorgcrio\1 k8s.gcr.io\1/g' | sudo sh
kubeadm config images list 2>/dev/null | sed 's/k8s.gcr.io/docker image rm mirrorgcrio/g' | sudo sh
命令功能
其中第1行命令是打印信息用的,主要使用2-4行的命令来执行需要的指令。
kubeadm config images list 2>/dev/null | sed 's/k8s.gcr.io/docker pull mirrorgcrio/g'
kubeadm config images list 2>/dev/null | sed 's/k8s.gcr.io\(.*\)/docker tag mirrorgcrio\1 k8s.gcr.io\1/g'
kubeadm config images list 2>/dev/null | sed 's/k8s.gcr.io/docker image rm mirrorgcrio/g'
首先,通过命令 1
生成镜像拉取命令。
core@localhost ~ $ kubeadm config images list 2>/dev/null | sed 's/k8s.gcr.io/docker pull mirrorgcrio/g'
docker pull mirrorgcrio/kube-apiserver:v1.17.4
docker pull mirrorgcrio/kube-controller-manager:v1.17.4
docker pull mirrorgcrio/kube-scheduler:v1.17.4
docker pull mirrorgcrio/kube-proxy:v1.17.4
docker pull mirrorgcrio/pause:3.1
docker pull mirrorgcrio/etcd:3.4.3-0
docker pull mirrorgcrio/coredns:1.6.5
执行上述输出从 https://hub.docker.com//mirrorgcrio/xxx
拉取k8s.gcr.io
对应的镜像。
然后,通过命令 2
生成docker tag
命令对镜像重命名。
core@localhost ~ $ kubeadm config images list 2>/dev/null | sed 's/k8s.gcr.io\(.*\)/docker tag mirrorgcrio\1 k8s.gcr.io\1/g'
docker tag mirrorgcrio/kube-apiserver:v1.17.4 k8s.gcr.io/kube-apiserver:v1.17.4
docker tag mirrorgcrio/kube-controller-manager:v1.17.4 k8s.gcr.io/kube-controller-manager:v1.17.4
docker tag mirrorgcrio/kube-scheduler:v1.17.4 k8s.gcr.io/kube-scheduler:v1.17.4
docker tag mirrorgcrio/kube-proxy:v1.17.4 k8s.gcr.io/kube-proxy:v1.17.4
docker tag mirrorgcrio/pause:3.1 k8s.gcr.io/pause:3.1
docker tag mirrorgcrio/etcd:3.4.3-0 k8s.gcr.io/etcd:3.4.3-0
docker tag mirrorgcrio/coredns:1.6.5 k8s.gcr.io/coredns:1.6.5
执行上述输出会将 https://hub.docker.com//mirrorgcrio/xxx
的镜像通过打docker tag
重命名为k8s.gcr.io
格式。
最后,通过命令 3
生成docker image rm
命令删除原始镜像。
core@localhost ~ $ kubeadm config images list 2>/dev/null | sed 's/k8s.gcr.io/docker image rm mirrorgcrio/g'
docker image rm mirrorgcrio/kube-apiserver:v1.17.4
docker image rm mirrorgcrio/kube-controller-manager:v1.17.4
docker image rm mirrorgcrio/kube-scheduler:v1.17.4
docker image rm mirrorgcrio/kube-proxy:v1.17.4
docker image rm mirrorgcrio/pause:3.1
docker image rm mirrorgcrio/etcd:3.4.3-0
docker image rm mirrorgcrio/coredns:1.6.5
执行上述输出会将从 https://hub.docker.com//mirrorgcrio/xxx
拉取的镜像进行删除。
查看镜像
通过执行 docker image ls
确认镜像是否拉取成功。
core@localhost ~ $ docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
k8s.gcr.io/kube-proxy v1.17.4 6dec7cfde1e5 10 days ago 116MB
k8s.gcr.io/kube-apiserver v1.17.4 2e1ba57fe95a 10 days ago 171MB
k8s.gcr.io/kube-controller-manager v1.17.4 7f997fcf3e94 10 days ago 161MB
k8s.gcr.io/kube-scheduler v1.17.4 5db16c1c7aff 10 days ago 94.4MB
k8s.gcr.io/coredns 1.6.5 70f311871ae1 4 months ago 41.6MB
k8s.gcr.io/etcd 3.4.3-0 303ce5db0e90 4 months ago 288MB
k8s.gcr.io/pause 3.1 da86e6ba6ca1 2 years ago 742kB
到此为止,镜像已经拉取成功了,可以继续执行 kubernetes
的安装了。
版权声明:本文为kunyus原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。