kubeadm init时需要的镜像的默认的镜像仓库地址在国内是无法访问的,且文档中给的阿里云的加速服务goole_container好像也无法使用了,那我们可以自己制作一个加速服务。
可以使用kubeadm config images list查看初始化时所需的镜像列表
> kubeadm config images listk8s.gcr.io/kube-apiserver:v1.21.0k8s.gcr.io/kube-controller-manager:v1.21.0k8s.gcr.io/kube-scheduler:v1.21.0k8s.gcr.io/kube-proxy:v1.21.0k8s.gcr.io/pause:3.4.1k8s.gcr.io/etcd:3.4.13-0k8s.gcr.io/coredns/coredns:v1.8.0
制作过程:
- 在阿里云的容器镜像服务中创建一个存放k8s需要加速的镜像的命名空间: kube-images

然后在命名空间下创建需要加速的镜像,如k8s.gcr.io/kube-apiserver:v1.21.0
- 准备kube-apiserver的同步文件Dcokerfile.
在github上准备一个专门存放镜像同步文件的仓库:kube-images
在仓库中创建kube-apiserver的同步文件/kube-apiserver/Dockerfile
FROM k8s.gcr.io/kube-apiserver:v1.21.0
- 在kube-images下创建kube-apiserver镜像仓库, 并将同步文件Dockerfile所在仓库绑定到此仓库,并勾选海外机器构建

- 创建成功后,进入仓库,添加构建规则,然后点击构建

如何在kubeadm初始化时指定?
可以直接使用参数—image-repository=registry.cn-hongkong.aliyuncs.com/kube-images(刚才创建的namespace的地址)指定
如果使用config初始化,可以将修改文件中的imageRepository
apiVersion: kubeadm.k8s.io/v1beta2
bootstrapTokens:
- groups:
- system:bootstrappers:kubeadm:default-node-token
token: abcdef.0123456789abcdef
ttl: 24h0m0s
usages:
- signing
- authentication
kind: InitConfiguration
localAPIEndpoint:
advertiseAddress: host-ip
bindPort: 6443
nodeRegistration:
criSocket: /var/run/dockershim.sock
name: node
taints: null
---
apiServer:
timeoutForControlPlane: 4m0s
apiVersion: kubeadm.k8s.io/v1beta2
certificatesDir: /etc/kubernetes/pki
clusterName: kubernetes
controllerManager: {}
dns:
type: CoreDNS
etcd:
local:
dataDir: /var/lib/etcd
imageRepository: registry.cn-hongkong.aliyuncs.com/kube-images
kind: ClusterConfiguration
kubernetesVersion: 1.21.0
networking:
dnsDomain: cluster.local
serviceSubnet: 10.96.0.0/12
podSubnet: 10.244.0.0/16
scheduler: {}
