实战:借助ucloud镜像加速功能下载镜像(亲测成功)-2022.1.1

实战:借助ucloud镜像加速功能下载镜像(亲测成功)-2022.1.1

目录

实验环境

docker环境

实验软件

1、背景

由于众所周知的原因,k8s安装期间无法直接从k8s.gcr.io获取镜像,需要经过额外的技术手段才能获取到镜像文件,很不便于k8s的安装部署。为了解决国际互联网下载镜像的各种痛点,需要将镜像拉取到国内的镜像仓库中。

2、技术实现

ucloud的 容器镜像库-UHub服务提供了镜像加速功能,可以很方便地将国外镜像拉取到国内,供国内用户使用。
目前,该镜像服务是免费的,但镜像加速需要手动配置。 未查询到相关的官方APl,工单咨询客服得到的答复是未提供创建镜像加速任务的 APl。
具体的操作都是web浏览器中完成的,比较简单。这里仅截图示意。

  • 打开ucloud官网,并注册:

https://www.ucloud.cn/

  • 在全部产品里搜索Uhub,找到容器镜像库Uhub

image-20211231175816936

  • 首先需要创建镜像加速任务:

image-20211231065418427

image-20211231065651573

  • 镜像加速下载后,我们可以到用户镜像这里看到已经下载好的镜像了:

image-20211231065735170

  • 验证:
docker pull uhub.service.ucloud.cn/k8s_dns_node_cache/k8s-dns-node-cache:1.21.1

image-20211231065859270

image-20211231065929912

  • 此时,我们可以将这里的镜像推送到我们的私有仓库就可以方便使用了(或者使用原有进项地址也是可以的)

完美,实验到此结束。

3、批量下载镜像并上传到私有仓库

由于涉及多个镜像,每个镜像又涉及到pull、tag、push操作,这里采用shell脚本实现批量操作。

3.1 获取当前最新的镜像

脚本名称get_k8s_images.sh,脚本内容如下:

#!/bin/bash
#  说明:本脚本用于从互联网上获取k8s部署时所需的镜像并保存到私有仓库
#  用法:  sudo  sh  get_k8s_images.sh
#  依赖:
1、本脚本依赖ucloud的镜像加速功能,该功能目前为免费功能。但当前不能通过API等方式自动创建镜像加速任务,需要手动创建。
2、上传到本地镜像仓库一般需要登录,请注意本地未保存harbor仓库登录信息时的影响
#  指定互联网地址
ucloud_url="uhub.service.ucloud.cn/kube_apiserver "
#  指定私有仓库地址
harbor_url="harbor.xxxx.xx/k8s"

#  配置yum源。用于安装kubeadm等软件
cat  <<EOF  >  /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF

#  指定安装的kubeadm等软件的版本。小版本不影响该脚本的使用
k8s_version=("1.18.20"  "1.19.12"  "1.20.8"  "1.21.2")

#  循环安装不同版本的kubeadm ,以便于获取不同版本的k8s镜像
for  k8s  in  ${k8s_version[@]};do
#  卸载kubeadm等软件
yum  remove  -y  kubelet  kubeadm  kubectl
#  安装指定版本的kubeadm等软件
yum  install  -y  kubelet-${k8s}  kubeadm-${k8s}  kubectl-${k8s}  --disableexcludes=kubernetes
#  获取所有k8s安装所需的镜像名称及版本等信息
images_list=`/usr/bin/kubeadm  config  images  list|awk  -F   '/'   '{print  $NF}'`
for  image  in  ${images_list[@]};do
#  从ucloud下载镜像到本地
docker  pull  ${ucloud_url}/${image}
if  [  $?  -eq  0  ];then
echo  "从ucloud容器镜像库成功拉取${image}镜像"
else
echo  "从ucloud容器镜像库成功拉取${image}镜像失败"
exit  1
fi
#  打标签
docker  tag  ${ucloud_url}/${image}  ${harbor_url}/${image}
#  推送到本地私有的harbor仓库
docker  push  ${harbor_url}/${image}
if  [  $?  -eq  0  ];then
echo  "成功将${image}推送到harbor仓库"
else
echo  "推送${image}镜像失败"
fi
done
done

image-20211231181907387

image-20220101194917544

image-20211231182037728

image-20211231182104838

3.2 获取指定tag的镜像

脚本名称get_k8s_images.sh,脚本内容如下:

#!/bin/bash
#  说明:本脚本用于从互联网上获取k8s部署时所需的镜像并保存到私有仓库
#  用法:  sudo  sh  get_k8s_images.sh  镜像版本
#  用法示例:  sudo  sh  get_k8s_images.sh  1.21.1
#  依赖:
1、本脚本依赖ucloud的镜像加速功能,该功能目前为免费功能。但当前不能通过API等方式自动创建镜像加速任务,需要手动创建。
2、上传到本地镜像仓库一般需要登录,请注意本地未保存harbor仓库登录信息时的影响
#  指定互联网地址
ucloud_url="uhub.service.ucloud.cn/kube_apiserver "
#  指定私有仓库地址
harbor_url="harbor.xxxx.xx/k8s"

#  指定kubeadm版本。根据传入的镜像版本自动匹配
TEMP_NUMBER=`echo  $1|awk  -F  '.'  '{print  $2}'`
case  "$TEMP_NUMBER"  in
18)
VERSION="1.18.20"
;;
19)
VERSION="1.19.12"
;;
20)
VERSION="1.20.8"
;;
21)
VERSION="1.21.2"
;;
*)
echo  "请您核对输入的镜像版本!  "
exit  1
;;
esac

#  配置yum源。用于安装kubeadm等软件
cat  <<EOF  >  /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF

#  卸载kubeadm等软件。这里采用偷懒的做法,不管是否符合预期,都是先卸载在安装
yum  remove  -y  kubelet  kubeadm  kubectl

#  指定安装的kubeadm等软件的版本。小版本不影响该脚本的使用
yum  install  -y  kubelet-${VERSION}  kubeadm-${VERSION}  kubectl-${VERSION}  --disableexcludes=kubernetes
#  导出k8s配置文件
kubeadm  config  print  init-defaults  >  /tmp/kubeadm.yaml
#  获取默认的镜像版本
k8s_version=`egrep  kubernetesVersion  /tmp/kubeadm.yaml`
#  将镜像版本替换为指定版本
sed  -i  "s#${k8s_version}#kubernetesVersion:  $1#g"  /tmp/kubeadm.yaml
#  获取所有k8s安装所需的镜像名称及版本等信息
images_list=`/usr/bin/kubeadm  config  images  list  --config  /tmp/kubeadm.yaml|awk  -F   '/'   '{print  $NF}'` for  image  in  ${images_list[@]};do
#  从ucloud下载镜像到本地
docker  pull  ${ucloud_url}/${image}
if  [  $?  -eq  0  ];then
echo  "从ucloud容器镜像库成功拉取${image}镜像"
else
echo  "从ucloud容器镜像库成功拉取${image}镜像失败"
exit  1
fi
#  打标签
docker  tag  ${ucloud_url}/${image}  ${harbor_url}/${image}
#  推送到本地私有的harbor仓库
docker  push  ${harbor_url}/${image}
if  [  $?  -eq  0  ];then
echo  "成功将${image}推送到harbor仓库"
else
echo  "推送${image}镜像失败"
fi
done

image-20220101195105361

image-20220101195121558

image-20220101195134114

4.Ucloud

https://www.ucloud.cn/

image-20211231070242307

image-20211231070434599

注意事项

📍 当时使用kubeadm安装k8s集群时使用的是阿里云的镜像仓库

⚠️ 下面这个需求自己当时安装并没有用到,先记录下来,我记得是使用阿里云的那个仓库地址就可以来着,感觉不需要再写一个sehll脚本这么麻烦来着的。

registry.aliyuncs.com/google_containers

image-20220101200051618

💥 还需要注意的是:这个registry.aliyuncs.com/google_containers仓库地址,是配置在k8s image位置的,但是我在docker里想单独配置,该如何配置呢?只不是只能使用ucloud来做镜像中转了。

(把这个配置在/etc/docker/daemon.json里是有问题的;)

image-20220101201223526

📍 其它方式

  • cloudshell

https://console.cloud.google.com/cloudshell,可以用这个,你搜搜使用方法把,就是通过这个下载镜像,然后推送到docker hub后,国内就可以下载了。

image-20220101201022544

image-20220101201108970

关于我

我的博客主旨:我希望每一个人拿着我的博客都可以做出实验现象,先把实验做出来,然后再结合理论知识更深层次去理解技术点,这样学习起来才有乐趣和动力。并且,我的博客内容步骤是很完整的,也分享源码和实验用到的软件,希望能和大家一起共同进步!

各位小伙伴在实际操作过程中如有什么疑问,可随时联系本人免费帮您解决问题:

  1. 个人微信二维码:x2675263825 (舍得), qq:2675263825。

    image-20211002091450217

  2. 个人博客地址:www.onlyonexl.cn

    image-20211002092057988

  3. 个人微信公众号:云原生架构师实战

    image-20211002141739664

  4. 个人csdn

    https://blog.csdn.net/weixin_39246554?spm=1010.2135.3001.5421

    image-20211002092344616

最后

​ 好了,关于借助ucloud镜像加速功能下载镜像实验就到这里了,感谢大家阅读,最后贴上我女神的photo,祝大家生活快乐,每天都过的有意义哦,我们下期见!

image-20220101195439097

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值