欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

3条命令解决 kubernetes 从 k8s.gcr.io 拉取镜像失败的问题

程序员文章站 2022-07-13 22:13:03
...

原因

由于 kubernetes 安装时需要从 k8s.gcr.io 拉取镜像,但是该网站被我国屏蔽了,国内没法正常访问导致没法正常进行kubernetes正常安装。

这里通过介绍从Docker官方默认镜像平台拉取镜像并重新打tag的方式来绕过对 k8s.gcr.io 的访问。

解决方案

通过执行 kubeadm config images list 获取到需要拉取的镜像列表,并通过 sed 格式化成需要执行的命令。

使用下面3条命令来生成需要执行的指令。

  1. kubeadm config images list 2>/dev/null | sed 's/k8s.gcr.io/docker pull mirrorgcrio/g'
  2. kubeadm config images list 2>/dev/null | sed 's/k8s.gcr.io\(.*\)/docker tag mirrorgcrio\1 k8s.gcr.io\1/g'
  3. kubeadm config images list 2>/dev/null | sed 's/k8s.gcr.io/docker image rm mirrorgcrio/g'

首先,通过命令 1 生成镜像拉取命令。

[email protected] ~ $ 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命令对镜像重命名。

[email protected] ~ $ 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命令删除原始镜像。

[email protected] ~ $ 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 确认镜像是否拉取成功。

[email protected] ~ $ 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 的安装了。

相关标签: kubernetes