4

解决K8S安装镜像的问题

 3 years ago
source link: http://www.chenshake.com/solve-the-problem-of-the-k8s-installation-mirror-image/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

其实在我经历过的环境,k8s安装,最大的问题都是在镜像的下载,怎么解决这个问题,都是老生常谈的问题。

  • docker hub
  • quay.io
  • k8s.gcr.io

基本就是涉及这3个仓库。解决的办法,其实就是做香港搞一台虚拟机,装上nexus,搞定。自己搭建,自己使用,稳定性就好很多。

Docker mirror

大家用docker久了,其实都会去设置docker的mirrors。目前国内好几个厂商提供的mirrors都还是比较好用,尤其是阿里云的。

我和大家一样,天真的认为,我设置quay,gcr的mirror,不就可以了嘛。docker本身的限制,只能设置docker hub的mirror。不能设置别的hub的mirror。这个其实在国外也很多人问过这样的问题。

国内厂商提供的mirror,例如quay的。

docker pull quay.io/prometheus/node-exporter:v0.18.1
# 替换成如下格式
docker pull quay-mirror.qiniu.com/prometheus/node-exporter:v0.18.1

Nexus proxy and group

Nexus,可以提供各个hub的proxy的功能,并且还能把这些hub,通过group的功能,统一用一个端口发布出来。

docker pull k8s.gcr.io/kube-proxy:v1.20.8

这个时候,你就需要改成

docker pull hub.chenshake.site/kube-proxy:v1.20.8

这样你去nexus搭建的仓库下载,如果没有,他会自动去上游下载。这个nexus做的还是非常智能。如果你下载quay的镜像

docker pull quay.io/coreos/flannel:v0.14.0

你只需要改成

docker pull hub.chenshake.site/coreos/flannel:v0.14.0

简单理解,就是nexus多做了一步,等于把所有的hub的镜像,都做了一个类似索引,帮你下载。如果有相同的名字,是有可能下载错误,或者下载的不是你需要的镜像。

docker pull hub.chenshake.site/nginx

结果你看一下镜像

所以你可以做docker 配置mirror , 其他仓库,就是 hub.chenshake.site/*****

这样很大程度避免了这个问题。如果你决定构建自己的私有仓库,这个方案,就可以满足,但是需要你改变所有的镜像的地址,这也是一个很繁琐的事情。

Containerd 完美方案

现在都去docker化,但是对我来说,不用docker的理由就是这个,不能分别给hub设置不同的mirror。那么Containerd是可以完美的支持。

nexus的配置调整一下,dockerhub,gcr,quay的,proxy 模式,不使用group访问通过不同的端口来区分

你做contained 配置 /etc/containerd/config.toml

[plugins."io.containerd.grpc.v1.cri".registry]
      [plugins."io.containerd.grpc.v1.cri".registry.mirrors]
        [plugins."io.containerd.grpc.v1.cri".registry.mirrors."docker.io"]
          endpoint = ["https://hub.chenshake.site:8181"]
        [plugins."io.containerd.grpc.v1.cri".registry.mirrors."k8s.gcr.io"]
          endpoint = ["https://hub.chenshake.site:8182"]
        [plugins."io.containerd.grpc.v1.cri".registry.mirrors."gcr.io"]
          endpoint = ["https://hub.chenshake.site:8183"]
        [plugins."io.containerd.grpc.v1.cri".registry.mirrors."ghcr.io"]
          endpoint = ["https://hub.chenshake.site:8184"]
        [plugins."io.containerd.grpc.v1.cri".registry.mirrors."quay.io"]
          endpoint = ["https://hub.chenshake.site:8185"]

这个时候,你如果需要下载镜像。

ctr image pull docker.io/calico/node:v3.11.2

什么都不需要修改,直接搞定。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK