k8s 国内镜像下载方案

众所周知,国内是不太容易下载k8s.gcr.io站点的镜像的

一、第一种方案:Azure中国镜像站

http://mirror.azure.cn/help/gcr-proxy-cache.html

Global Proxy in China (Azure中国镜像)
dockerhub (docker.io) dockerhub.azk8s.cn
gcr.io gcr.azk8s.cn
k8s.gcr.io gcr.azk8s.cn/google-containers
quay.io quay.azk8s.cn
#这两条语句是等效的
docker pull  k8s.gcr.io/kube-apiserver:v1.15.2
docker pull  gcr.azk8s.cn/google-containers/kube-apiserver:v1.15.2

#这两条也是等效的
docker pull quay.io/xxx/yyy:zzz
docker pull quay.azk8s.cn/xxx/yyy:zzz

二、第二种方案:直接 pull 用户mirrorgooglecontainers同步过的镜像

就当前来说,用户 mirrorgooglecontainers 在 docker hub 同步了所有 k8s 最新的镜像,先从这儿下载,然后修改 tag 即可

https://hub.docker.com/u/mirrorgooglecontainers

#这两条也是等效的
docker pull mirrorgooglecontainers/kube-scheduler:v1.15.2
docker pull k8s.gcr.io/kube-scheduler:v1.15.2

三、通过脚本进行批量下载

要下载镜像的名称,可以通过 kubeadm config images list命令获取

[root@node-1 yum.repos.d]# kubeadm config images list --kubernetes-version=v1.15.2
k8s.gcr.io/kube-apiserver:v1.15.2
k8s.gcr.io/kube-controller-manager:v1.15.2
k8s.gcr.io/kube-scheduler:v1.15.2
k8s.gcr.io/kube-proxy:v1.15.2
k8s.gcr.io/pause:3.1
k8s.gcr.io/etcd:3.3.10
k8s.gcr.io/coredns:1.3.1

脚本一:通过Azure中国镜像站进行下载

#!/bin/bash
# download k8s 1.15.2 images
# get image-list by 'kubeadm config images list --kubernetes-version=v1.15.2'
# gcr.azk8s.cn/google-containers == k8s.gcr.io

images=(
kube-apiserver:v1.15.2
kube-controller-manager:v1.15.2
kube-scheduler:v1.15.2
kube-proxy:v1.15.2
pause:3.1
etcd:3.3.10
coredns:1.3.1
)

for imageName in ${images[@]};do
    docker pull gcr.azk8s.cn/google-containers/$imageName  
    docker tag  gcr.azk8s.cn/google-containers/$imageName k8s.gcr.io/$imageName  
    docker rmi  gcr.azk8s.cn/google-containers/$imageName
done

脚本二:通过 Azure 中国镜像站进行下载,执行脚本时需要指定版本

#!/bin/bash
# download k8s 1.15.2 images
# get image-list by 'kubeadm config images list --kubernetes-version=v1.15.2'
# gcr.azk8s.cn/google-containers == k8s.gcr.io
#images=(
#kube-apiserver:v1.15.2
#kube-controller-manager:v1.15.2
#kube-scheduler:v1.15.2
#kube-proxy:v1.15.2
#pause:3.1
#etcd:3.3.10
#coredns:1.3.1
#)
if [ $# -ne 1 ];then
    echo "please user in: ./`basename $0` KUBERNETES-VERSION"
    exit 1
fi
version=$1

images=`kubeadm config images list --kubernetes-version=${version} |awk -F'/' '{print $2}'`

for imageName in ${images[@]};do
    docker pull gcr.azk8s.cn/google-containers/$imageName
    docker tag  gcr.azk8s.cn/google-containers/$imageName k8s.gcr.io/$imageName
    docker rmi  gcr.azk8s.cn/google-containers/$imageName
done

脚本三:通过用户mirrorgooglecontainers 在 docker hub的镜像进行下载

#!/bin/bash
# download k8s 1.15.2 images
# get image-list by 'kubeadm config images list --kubernetes-version=v1.15.2'

images=(
kube-apiserver:v1.15.2
kube-controller-manager:v1.15.2
kube-scheduler:v1.15.2
kube-proxy:v1.15.2
pause:3.1
etcd:3.3.10
)

for imageName in ${images[@]};do
    docker pull mirrorgooglecontainers/$imageName  
    docker tag  mirrorgooglecontainers/$imageName k8s.gcr.io/$imageName  
    docker rmi  mirrorgooglecontainers/$imageName
done


docker pull coredns/coredns:1.3.1
docker tag coredns/coredns:1.3.1  k8s.gcr.io/coredns:1.3.1
docker rmi coredns/coredns:1.3.1