目前不管是K8S还是普通的Docker/Containerd容器部署,都强依赖于Docker镜像的下载,目前主流大多数的镜像都在DockerHub当中,但是因为墙的原因,在国内进行镜像的下载,变得极其困难。
我们可以从https://docker.aityp.com/当中根据镜像名称找到国内可用的镜像,可以使用docker pull
(对于Docker)/ctr images pull
(对于Containerd)将镜像拉取到本地之后,这个镜像有几种方式给我们进行使用。
- 1.直接使用国内云厂商镜像的地址,比如
swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.elastic.co/elasticsearch/elasticsearch:8.7.0
,好处是很方便,坏处是如果这个私有镜像的地址不可用,那么可能会大范围影响我们内部的服务进行镜像的拉取。 - 2.(推荐)在内部部署一个私有的Docker镜像仓库Harbor,将云厂商的镜像地址转换成为我们内部维护的Harbor仓库的地址,比如
harbor.example.com/docker.elastic.co/elasticsearch/elasticsearch:8.7.0
,我们直接在部署服务时,直接基于我们的Harbor仓库进行镜像的拉取即可。 - 3.重新打个tag,放到本地进行使用,比如我们可以将
swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.elastic.co/elasticsearch/elasticsearch:8.7.0
去重新打个tag变成docker.elastic.co/elasticsearch/elasticsearch:8.7.0
进行使用,在一些内网的场景下可能用到,比如说机器不能连接外网,可以基于压缩包的方式去上传,并在内网服务器上进行镜像的加载。
1.Docker
比如如果无法拉取到镜像docker.io/kubesphere/pause:3.9
,此时可以找一台可以拉取外部镜像的机器去下载镜像,并打包再上传到目标机器上进行解压。
首先,我们找一台机器基于Docker去拉取镜像,并打包成为压缩包。
# 拉取镜像
docker pull kubesphere/pause:3.9
# 打包镜像成为压缩包
docker save -o pause.tar kubesphere/pause:3.9
接着将pause.tar上传到需要加载镜像的机器,使用docker load
命令加载镜像,根据压缩包去导入成为镜像并放到到机器的Docker本地仓库。
docker load -i pause.tar
2.Containerd
如果无法拉取到镜像docker.io/kubesphere/pause:3.9
,此时可以找一台可以拉取外部镜像的机器去下载镜像,并打包再上传到目标机器上进行解压。
首先,我们找一台机器基于Docker去拉取镜像,并打包成为压缩包。
# 拉取镜像
docker pull kubesphere/pause:3.9
# 打包镜像成为压缩包
docker save -o pause.tar kubesphere/pause:3.9
接着将pause.tar上传到需要加载镜像的机器,使用ctr images import
命令,根据压缩包去导入成为镜像并放到到机器的本地Containerd镜像仓库。
# 将镜像解压缩并上传到containerd的本地仓库
ctr images import pause.tar
# 验证pause镜像是否已经被我们上传成功
ctr images list | grep pause
注意:如果是给K8S使用的镜像,需要指定Namespace为k8s.io,因为Containerd是存在有Namespace的概念的,K8S需要使用自己独有的Namespace。
ctr --namespace k8s.io images import pause.tar
ctr --namespace k8s.io images list | grep pause