Kubernetes k8s拉取镜像失败最简单最快最完美解决方法 [ERROR ImagePull]: failed to pull image k8s.gcr.io/kube-apiserver
问题
由于国内网络原因,kubeadm init
会卡住不动,一卡就是半个小时,然后报出这种问题:
[ERROR ImagePull]: failed to pull image k8s.gcr.io/kube-apiserver:v1.18.5: output: Error response from daemon: Get https://k8s.gcr.io/v2/: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)
完整的错误日志如下:
root@ubuntu:/home/c# kubeadm init
W0709 04:14:45.954974 70230 configset.go:202] WARNING: kubeadm cannot validate component configs for API groups [kubelet.config.k8s.io kubeproxy.config.k8s.io]
[init] Using Kubernetes version: v1.18.5
[preflight] Running pre-flight checks
[preflight] Pulling images required for setting up a Kubernetes cluster
[preflight] This might take a minute or two, depending on the speed of your internet connection
[preflight] You can also perform this action in beforehand using 'kubeadm config images pull'
error execution phase preflight: [preflight] Some fatal errors occurred:[ERROR ImagePull]: failed to pull image k8s.gcr.io/kube-apiserver:v1.18.5: output: Error response from daemon: Get https://k8s.gcr.io/v2/: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)
, error: exit status 1[ERROR ImagePull]: failed to pull image k8s.gcr.io/kube-controller-manager:v1.18.5: output: Error response from daemon: Get https://k8s.gcr.io/v2/: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)
, error: exit status 1[ERROR ImagePull]: failed to pull image k8s.gcr.io/kube-scheduler:v1.18.5: output: Error response from daemon: Get https://k8s.gcr.io/v2/: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)
, error: exit status 1[ERROR ImagePull]: failed to pull image k8s.gcr.io/kube-proxy:v1.18.5: output: Error response from daemon: Get https://k8s.gcr.io/v2/: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)
, error: exit status 1[ERROR ImagePull]: failed to pull image k8s.gcr.io/pause:3.2: output: Error response from daemon: Get https://k8s.gcr.io/v2/: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)
, error: exit status 1[ERROR ImagePull]: failed to pull image k8s.gcr.io/etcd:3.4.3-0: output: Error response from daemon: Get https://k8s.gcr.io/v2/: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)
, error: exit status 1[ERROR ImagePull]: failed to pull image k8s.gcr.io/coredns:1.6.7: output: Error response from daemon: Get https://k8s.gcr.io/v2/: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)
, error: exit status 1
[preflight] If you know what you are doing, you can make a check non-fatal with `--ignore-preflight-errors=...`
To see the stack trace of this error execute with --v=5 or higher
原因显而易见,是因为要下载k8s.gcr.io的docker镜像,但是国内连不上https://k8s.gcr.io/v2/。
还有其它问题可以看我上一篇文章使用VMware虚拟机搭建Kubernetes的Master和Worker节点 最全教程(1)准备工作,有很详细的解决过程。接下来进入正题:
解决方法
使用阿里云镜像
运行kubeadm init时加上阿里云镜像的参数--image-repository=registry.aliyuncs.com/google_containers
,如下:(版本改为自己需要的)
kubeadm init --image-repository=registry.aliyuncs.com/google_containers --pod-network-cidr=10.244.0.0/16 --kubernetes-version=v1.18.5
如果还有问题,那可以用下面这个比较复杂的方法
从DockerHub的其它仓库拉取
网上搜了半天,很多人说从别的仓库一个一个拉取再改名,但是这些教程仓库名称不一,有的教程已经很老了,仓库很多年没更新,这里直接授之以渔,自己学怎么找仓库。
并且一个一个拉取改名太累了,可以写个脚本。
过程如下:
首先使用下面的命令获取需要的docker镜像名称:
kubeadm config images list
结果如下:
k8s.gcr.io/kube-apiserver:v1.22.15
k8s.gcr.io/kube-controller-manager:v1.22.15
k8s.gcr.io/kube-scheduler:v1.22.15
k8s.gcr.io/kube-proxy:v1.22.15
k8s.gcr.io/pause:3.5
k8s.gcr.io/etcd:3.5.0-0
k8s.gcr.io/coredns/coredns:v1.8.4
注意:新版本的coredns改名了,变成了coredns/coredns,需要特殊处理,不放在脚本中
首先要看看该在哪个地方拉取,可以去docker hub搜一搜哪里有kube-proxy之类的组件
进入dockerhub搜索:
https://hub.docker.com/search?q=kube-proxy&type=image
按照最近更新排序,结果如下,可以发现一个下载次数10k+,更新也很频繁的仓库:
然后开始编写脚本:
vim pull_k8s_images.sh
set -o errexit
set -o nounset
set -o pipefail##这里定义版本,按照上面得到的列表自己改一下版本号KUBE_VERSION=v1.22.15
KUBE_PAUSE_VERSION=3.5
ETCD_VERSION=3.5.0-0
# DNS_VERSION=1.8.4 # coredns需要特殊处理##这是原始仓库名,最后需要改名成这个
GCR_URL=k8s.gcr.io##这里就是写你要使用的仓库
DOCKERHUB_URL=gotok8s##这里是镜像列表,新版本要把coredns需要特殊处理
images=(
kube-proxy:${KUBE_VERSION}
kube-scheduler:${KUBE_VERSION}
kube-controller-manager:${KUBE_VERSION}
kube-apiserver:${KUBE_VERSION}
pause:${KUBE_PAUSE_VERSION}
etcd:${ETCD_VERSION}
# coredns:${DNS_VERSION} # coredns需要特殊处理
)##这里是拉取和改名的循环语句
for imageName in ${images[@]} ; dodocker pull $DOCKERHUB_URL/$imageNamedocker tag $DOCKERHUB_URL/$imageName $GCR_URL/$imageNamedocker rmi $DOCKERHUB_URL/$imageName
done
然后授予执行权限
chmod +x ./pull_k8s_images.sh
执行:
./pull_k8s_images.sh
执行过程中就会拉取镜像,完成后,使用docker images
命令查看所有镜像,如下:
然后要处理coredns,这个其实很好下载,直接拉取coredns/coredns,使用命令:(注意调成自己需要的版本)
docker pull coredns/coredns:1.8.4
然后改名:
docker tag coredns/coredns:1.8.4 k8s.gcr.io/coredns/coredns:1.8.4
这就完成了。
如果还有镜像没有拉取下来,比如我第一次用的不是gotok8s仓库,而是另一个仓库,但是它里面并没有最新的etcd,所以这个没有拉取下来,那就再去找一些仓库,直接搜索etcd,进入仓库后点击Tag,看是不是有你需要的版本,如下图:
如果有,假如这个仓库叫kubelibrary,然后使用vim命令再新建一个可执行文件。
vim pull_k8s_images2.sh
添加内容:
set -o errexit
set -o nounset
set -o pipefail## 这里只需要留下还需要下载的组件的版本号
ETCD_VERSION=3.5.0-0GCR_URL=k8s.gcr.io
## 这里写新的仓库地址
DOCKERHUB_URL=kubelibrary## 这里也只留下需要下载的镜像
images=(
etcd:${ETCD_VERSION}
)for imageName in ${images[@]} ; dodocker pull $DOCKERHUB_URL/$imageNamedocker tag $DOCKERHUB_URL/$imageName $GCR_URL/$imageNamedocker rmi $DOCKERHUB_URL/$imageName
done
然后授予执行权限
chmod +x ./pull_k8s_images2.sh
执行:
./pull_k8s_images2.sh
这下就应该没问题了
结果
再进行kubeadm init
,这次没有任何问题(如果有其它问题可以看我的另一篇文章使用VMware虚拟机搭建Kubernetes的Master和Worker节点 最全教程(1)准备工作,有很详细的解决过程。)
Kubernetes k8s拉取镜像失败最简单最快最完美解决方法 [ERROR ImagePull]: failed to pull image k8s.gcr.io/kube-apiserver相关推荐
- k8s 拉取镜像失败_Kubernetes:如何解决从k8s.gcr.io拉取镜像失败问题
安装k8s的时候需要从k8s.gcr.io拉取镜像 执行kubeadm init --pod-network-cidr=10.244.0.0/16 --apiserver-advertis ...
- k8s拉取镜像失败处理 ImagePullBackOff ErrImageNeverPull
目录 一.环境描述 二.pod失败状态 三.整体解决方案 四.补充一下Pod状态解释 一.环境描述 系统环境:CentOS Linux release 7.9.2009 (Core) 系统内核:Lin ...
- k8s 拉取镜像失败_k8s 拉取私有仓库失败
k8s 报错拉取镜像失败 Error response from daemon: pull access denied for istio/citadel, repository does not e ...
- k8s 拉取镜像失败_[k8s问题笔录] 记一次 kubectl 部署时,pull image 报错,拉取不到镜像...
部署一个简单的 demo 返现一个很奇妙的错误,yaml 文件内容在下方,镜像仓库是内网自建的 harbor-1.9.1 单节点仓库,测试就没有整高可用了. 用户名:admin 密码:admin123 ...
- k8s 拉取镜像失败_kubernetes k8s.gcr.io拉取镜像失败问题
kubeadm init默认用的是k8s.gcr.io这个仓库,由于国内被屏蔽了 搜了很多文章都是用脚本去解决,这个太繁琐了. 最后kubeadm init --help看了一下,发现其实可以指定im ...
- Kubernetes:如何解决从k8s.gcr.io拉取镜像失败问题
安装k8s的时候需要从k8s.gcr.io拉取镜像 kubeadm init --pod-network-cidr=10.244.0.0/16 --apiserver-advertise-addres ...
- 快速解决Kubernetes从k8s.gcr.io仓库拉取镜像失败问题
前言: 在部署Kubernetes的过程中,需要从k8s.grc.io仓库中拉取部署所需的镜像文件,但是由于国内对国外的防火墙问题导致无法正常拉取,下面介绍一个方法来解决此问题,完成Kubernet ...
- 解决从k8s.gcr.io/gcr.io/quay.io等地址拉取镜像失败问题(Kubernetes国内镜像仓库地址)
解决从k8s.gcr.io/gcr.io/quay.io等地址拉取镜像失败问题(Kubernetes国内镜像仓库地址) 参考文章: (1)解决从k8s.gcr.io/gcr.io/quay.io等地址 ...
- 解决k8s中node拉取镜像失败问题
在k8s集群的使用过程中,初学者可能会碰到这样的(怪异)问题: 在一个k8s集群里,部署服务(用的私有镜像仓库,如harbor)的时候,只有个别node的服务是部署成功的,其他都是部署失败的. 错误的 ...
最新文章
- 在idea中移除子模块Moudle后重新导入
- 转:去掉Flex4生成的SWF加载时的进度条
- 2014.09线上课堂报名帖:敏捷个人手机应用使用
- 视频会议的分类和适用范围详解
- 我爱Java系列---【mysql基础约束】
- python自动安装apk文件
- 【已解决】Unable to resolve column ‘name‘
- Exp3:MAL_免杀原理与实践
- Starting zookeeper ... already running as process 30988.
- maven命令打jar包
- 英特尔傲腾内存linux,英特尔至强6226R处理器性能测评,支持英特尔傲腾持久内存...
- mysql neq_ecshop中smarty比较操作符(eq,ne,neq)含义
- linux怎么取消文件隐藏命令,linux命令行下隐藏文件的操作
- Control Egress TCP Traffic
- jsp mysql问卷调查_课内资源 - 基于JSP的在线调查问卷系统
- scrapy ,Selenium 企查查模拟登录
- 一个普通计算机培训学校学生的迷茫。
- CodeBERT理解
- easyUI FileBox(文件框)的setValue不能用,回显文件名称则可以用prompt代替
- 世事洞明职场“行”(上篇)——刘墉力作《我不是教你诈》花絮采撷
热门文章
- 跨境电商亚马逊卖家最需要关注的四个维度的数据
- 基本数据结构(算法导论)与python
- 石家庄阿福卡4G问题
- 大三成长日记——第二弹(批处理bat篇)
- 在firefox下载不收费的HackBar
- 爬取中国空气质量在线监测分析平台
- 用户画像(profile v.s. persona)
- eayui input的坑坑洼洼
- 关闭tcp连接时有时发送FIN有时发送RST
- 2021高台一中高考成绩查询,2021年高考数学(理)一轮复习题型归纳与训练 专题1.3 简单的逻辑联结词、全称量词与存在量词(学生版).docx...