解决kubeadm部署kubernetes集群镜像问题

时间:2022-01-12 14:08:52

kubeadm 是kubernetes 的集群安装工具,能够快速安装kubernetes 集群。kubeadm init 命令默认使用的docker镜像仓库为k8s.gcr.io,国内无法直接访问,需要中转一下才可以使用。

首先查看kubenets需要哪些镜像

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

通过 docker.io/mirrorgooglecontainers中转一下https://hub.docker.com/u/mirrorgooglecontainers

批量下载及转换标签

  #下载需要的镜像
kubeadm config images list |sed -e 's/^/docker pull /g' -e 's#k8s.gcr.io#mirrorgooglecontainers#g' |sh -x
kubeadm config images list |sed -e 's/^/docker pull /g' -e 's#k8s.gcr.io#docker.io/mirrorgooglecontainers#g' |sh -x
#重命名镜像
docker images |grep mirrorgooglecontainers |awk '{print "docker tag ",$1":"$2,$1":"$2}' |sed -e 's#mirrorgooglecontainers#k8s.gcr.io#2' |sh -x 
#删除mirrorgooglecontainers镜像
docker images |grep mirrorgooglecontainers |awk '{print "docker rmi ", $1":"$2}' |sh -x 

coredns没包含在docker.io/mirrorgooglecontainers中,需要手工从coredns官方镜像转换下。

docker pull coredns/coredns:1.3.1

解决kubeadm部署kubernetes集群镜像问题

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.1.3

查看镜像列表

解决kubeadm部署kubernetes集群镜像问题

另外一种方法是使用kubeadm配置文件,通过在配置文件中指定docker仓库地址,便于内网快速部署。

生成配置文件

kubeadm config print-defaults --api-objects ClusterConfiguration >kubeadm.conf

将配置文件中的

imageRepository: k8s.gcr.io

改为你自己的私有docker仓库,比如

imageRepository: docker.io/mirrorgooglecontainers

kubeadm生成的配置文件目前不够完善,需要修改kubernetes版本

kubernetesVersion: v1.13.1

改为

kubernetesVersion: v1.14.0
kubeadm config images list --config kubeadm.conf
kubeadm config images pull --config kubeadm.conf
kubeadm init --config kubeadm.conf