Skip to content

ucloud镜像加速

更新于:2024年3月8日

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

img

1、背景

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

2、技术实现

ucloud的 容器镜像库-UHub服务提供了镜像加速功能,可以很方便地将国外镜像拉取到国内,供国内用户使用。

目前,该镜像服务是免费的,但镜像加速需要手动配置。 未查询到相关的官方APl,工单咨询客服得到的答复是未提供创建镜像加速任务的 APl。

具体的操作都是web浏览器中完成的,比较简单。这里仅截图示意。

  • 打开ucloud官网,并注册:

https:### 说明:本脚本用于从互联网上获取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=Kubernetesbaseurl=http:enabled=1gpgcheck=1repo_gpgcheck=1gpgkey=http:http:EOF### 指定安装的kubeadm等软件的版本。小版本不影响该脚本的使用k8s_version=("1.18.20""1.19.12""1.20.8""1.21.2")### 循环安装不同版本的kubeadm ,以便于获取不同版本的k8s镜像fork8s in${k8s_version[@]};do### 卸载kubeadm等软件yumremove-ykubeletkubeadmkubectl### 安装指定版本的kubeadm等软件yuminstall-ykubelet-${k8s} kubeadm-${k8s} kubectl-${k8s} --disableexcludes=kubernetes### 获取所有k8s安装所需的镜像名称及版本等信息images_list=`/usr/bin/kubeadm config images list|awk -F '/' '{print $NF}'`forimage in${images_list[@]};do### 从ucloud下载镜像到本地dockerpull${ucloud_url}/${image}if[$?-eq0];thenecho"从ucloud容器镜像库成功拉取${image}镜像"elseecho"从ucloud容器镜像库成功拉取${image}镜像失败"exit1fi### 打标签dockertag${ucloud_url}/${image} ${harbor_url}/${image}### 推送到本地私有的harbor仓库dockerpush${harbor_url}/${image}if[$?-eq0];thenecho"成功将${image}推送到harbor仓库"elseecho"推送${image}镜像失败"fidonedone

img

img

img

img

2.获取指定tag的镜像

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

bash
###!/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"in18)VERSION="1.18.20";;19)VERSION="1.19.12";;20)VERSION="1.20.8";;21)VERSION="1.21.2";;*)echo"请您核对输入的镜像版本!"exit1;;esac### 配置yum源。用于安装kubeadm等软件cat<<EOF>/etc/yum.repos.d/kubernetes.repo[kubernetes]name=Kubernetesbaseurl=http:enabled=1gpgcheck=1repo_gpgcheck=1gpgkey=http:http:EOF### 卸载kubeadm等软件。这里采用偷懒的做法,不管是否符合预期,都是先卸载在安装yumremove-ykubeletkubeadmkubectl### 指定安装的kubeadm等软件的版本。小版本不影响该脚本的使用yuminstall-ykubelet-${VERSION} kubeadm-${VERSION} kubectl-${VERSION} --disableexcludes=kubernetes### 导出k8s配置文件kubeadmconfigprintinit-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}'`forimage in${images_list[@]};do### 从ucloud下载镜像到本地dockerpull${ucloud_url}/${image}if[$?-eq0];thenecho"从ucloud容器镜像库成功拉取${image}镜像"elseecho"从ucloud容器镜像库成功拉取${image}镜像失败"exit1fi### 打标签dockertag${ucloud_url}/${image} ${harbor_url}/${image}### 推送到本地私有的harbor仓库dockerpush${harbor_url}/${image}if[$?-eq0];thenecho"成功将${image}推送到harbor仓库"elseecho"推送${image}镜像失败"fidone

img

img

img

FAQ

ucloud官网

https:

版权:此文章版权归 One 所有,如有转载,请注明出处!

链接:可点击右上角分享此页面复制文章链接

上次更新时间:

最近更新