DevOps文化 & SRE实战分享平台

0%

怎样优雅的拉取Docker镜像[长期维护]


文章声明:此文基于木子实操撰写
生产环境:Docker 19.03.8,Kubernetes v1.18.2
论证耗时:2h
撰文耗时:1h
校文耗时:15m
问题关键字:Docker镜像拉取异常


写在最前面

自从Docker诞生以来,Docker镜像的拉取一直是一个老大难的问题。在前几年Docker在国内还没有普及的时候,基本上国内没有镜像源,部署一套Kubernetes因为镜像问题就吓退了一批同学。随着国内Docker应用的普及,国内的Docker镜像源开始慢慢多起来了,但稳定性也是一个让人头疼的问题,这不使用了多年的gcr.azk8s.cnquay.azk8s.cndockerhub.azk8s.cn最近也陨落了403。今天木子梳理了一下当前国内还可用源,分享给各位同学,希望对各位同学有所帮助。

镜像下载异常处理

引发木子写这篇文章的主要原因是因为有同事反馈说无法获取kubernetes资源使用信息,为此木子查看了tiller deploy,发现报错ImagePullBackOff,于是查看对应describe信息,发现是拉取gcr.azk8s.cn/kubernetes-helm/tiller:v2.14.2失败,于是木子试着手动拉取了一下,发现拉取不到对应镜像,从此gcr.azk8s.cn陨落。中科大(docker.mirrors.ustc.edu.cn)就不用说了,不管是哪种镜像都很不稳定,偶尔用用还可以,长期不建议使用。目前来看阿里的镜像源还算是比较稳定的。对于这个问题的解决,也希望能够让更多的同学了解怎样快速切换镜像源。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#查看Pod事件日志
[root@k8sm02 ~]# kubectl describe pod tiller-deploy-d4d7b9495-zgnfx -n kube-system
......
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal BackOff 15m (x17185 over 2d17h) kubelet, k8sw01 Back-off pulling image "gcr.azk8s.cn/kubernetes-helm/tiller:v2.14.2"
Warning Failed 4m52s (x17230 over 2d17h) kubelet, k8sw01 Error: ImagePullBackOff
#拉取镜像
[root@k8sm02 ~]# docker pull registry.cn-shenzhen.aliyuncs.com/google_containers/tiller:v2.14.2
#修改对应deploy配置,将镜像地址改为阿里云地址【当然重新tag镜像名称,也就不需要进行下一步操作了,但这并不是一个好的方法,因为下一次POD重启有可能不会部署到这个节点,那这个镜像拉取问题又可能重新出现了,所以更新镜像地址相对来说比较安全。】
[root@k8sm02 ~]# kubectl edit deploy tiller-deploy -n kube-system
image: registry.cn-shenzhen.aliyuncs.com/google_containers/tiller:v2.14.2
#这时候查看对应容器就已经正常启动了
[root@k8sm02 ~]# kubectl get pods -n kube-system | grep tiller
tiller-deploy-76986974bd-x6wcx 1/1 Running 0 152m

通过阿里云代理基本问题不大,但如果万一用不了,我们还可以在国外的一台服务器上下载对应镜像,然后重新tag,再推送到国内仓库(比如:aliyun、qcloud、huaweicloud等),因为这个是公共镜像,所以这个仓库我们可以设置为公共,这样就不用每次登录去拉取镜像了。

1
2
[root@k8sm02 ~]# docker tag registry.cn-shenzhen.aliyuncs.com/public/tiller:v2.14.2 registry.cn-shenzhen.aliyuncs.com/oubayun/public/tiller:v2.14.2
[root@k8sm02 ~]# docker push registry.cn-shenzhen.aliyuncs.com/oubayun/public/tiller:v2.14.2

通过以上操作,我们就完成了Docker镜像换源的操作。

Docker镜像加速器列表

以上算是解决了镜像下载问题,为了能够更方便自己和各位同学使用,木子将在这里维护一套镜像下载地址,如存在已挂的情况,请各位同学及时通知木子更新(可在评论区留言)。

镜像加速器厂商 镜像加速器地址 加速项目 备注
中科大 {docker,gcr,quay}.mirrors.ustc.edu.cn Docker.io、gcr.io、quay.io 不稳定
阿里云 registry.aliyuncs.com/google_containers Docker.io、gcr.io 稳定,Docker hub需要在阿里云后台分配
七牛云 {reg,quay-mirror}.qiniu.com Docker.io、quay.io 稳定
网易云 hub-mirror.c.163.com Docker.io 稳定
腾讯云 mirror.ccs.tencentyun.com Docker.io 稳定

这此镜像仓库也有一些坑的地方,比如:中科大的就不太稳定。使用阿里云域名解析(223.6.6.6或223.5.5.5等),使用腾讯云的仓库地址,就会出现域名解析的问题。国内还有很多Docker Hub加速器,但都需要注册才能够使用,所以木子这里就不列出来了。

Docker Hub镜像

1
2
3
4
5
6
7
8
9
10
11
12
13
#源地址
docker pull nginx
docker pull docker.io/library/nginx
#中科大
docker pull docker.mirrors.ustc.edu.cn/library/nginx
#阿里云【使用阿里云的同学,可以在镜像仓库获取对应的[镜像加速器]地址,才可以正常使用】
docker pull 2adxxxxx.mirror.aliyuncs.com/library/nginx
#七牛云
docker pull reg.qiniu.com/library/nginx
#网易云
docker pull hub-mirror.c.163.com/library/nginx
#腾讯云
docker pull mirror.ccs.tencentyun.com/library/nginx

gcr.io镜像源

1
2
3
4
5
6
#源地址
docker pull gcr.io/google_containers/kube-proxy:v1.18.2
#中科大
docker pull gcr.mirrors.ustc.edu.cn/google_containers/kube-proxy:v1.18.2
#阿里云
docker pull registry.aliyuncs.com/google_containers/kube-proxy:v1.18.2

quay.io镜像

1
2
3
4
5
6
#源地址
docker pull quay.io/coreos/flannel:v0.12.0-amd64
#中科大
docker pull quay.mirrors.ustc.edu.cn/coreos/flannel:v0.12.0-amd64
#七牛云
docker pull quay-mirror.qiniu.com/coreos/flannel:v0.12.0-amd64

写在最后

这个Docker镜像加速列表,木子将长期维护。个人可能没有办法及时发现和更新,如果各位同学发现有新的可用仓库地址以及木子没有收录到的,或者哪个仓库地址不可用了,可以在评论区留言,方便木子及时维护更新。

坚持原创技术分享,您的支持与鼓励,是我持续创作的动力!