简单说明

  • 在《基于阿里云容器镜像服务加速K8S镜像下载》中介绍了使用阿里云镜像服务来解决一些不可达镜像的下载
  • 但是需要反复在阿里云容器镜像控制台添加仓库,这种操作实在太傻,是电脑这头蠢驴该干的事
  • 在阿里云官网找到了镜像服务相关的API文档,但是使用方法过于含糊
  • 最终找到了一篇播客 https://blog.csdn.net/catoop/article/details/90903890
  • 受该播客启发,最终形成了获取访问token,使用docker registry v2 api的方法的自动化批量镜像加速方案

具体部署步骤

  • 打开https://code.aliyun.com,添加一个新项目 docker-auto
  • 打开阿里云镜像服务,创建一个新的命名空间 vinc-auto,打开自动创建仓库的功能,并设置为公有仓库
  • 创建一个镜像仓库,image-auto,关联docker-auto,暂时不添加构建规则
  • 找一台能够上公网的Linux机器,依据《CentOS7部署安装Docker和Docker Compose工具简录》部署docker环境,开始我们的骚操作
ssh-keygen
ssh-copy-id -o StrictHostKeyChecking=no 127.0.0.1
cat ~/.ssh/id_rsa.pub
# 将公钥添加到https://code.aliyun.com对应的代码库中
cd /tmp
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
yum clean all && yum makecache faster
yum -y install jq git
git config --global user.name  "zwjqb"
git config --global user.email "zwjqb@126.com"
git clone git@code.aliyun.com:zwjqb/docker-auto.git
cd docker-auto
echo "FROM busybox">Dockerfile
git add .
git commit -m "new image: busybox"
git push -u origin master
# 此时可以打开镜像仓库,添加构建规则,并立即构建
# 镜像的hashvalue检测脚本
cat >/tmp/image-hash.sh<<EOF
#!/bin/bash
source ~/.bash_profile
User=\$1
Pass=\$2
ImageUrl=\$3
Repons=\$4
Repo=\$5
Key=Www-Authenticate
Content=\$(curl -s --head -X GET https://\${ImageUrl}/v2/\${Repons}/\${Repo}/manifests/latest|grep \${Key})
Realm=\$(echo \${Content}|awk -F'"' '{print \$2}')
Service=\$(echo \${Content}|awk -F'"' '{print \$4}')
Scope=\$(echo \${Content}|awk -F'"' '{print \$6}')
Token=\$(curl -s -u clientId:clientSecret -X POST \-d "username=\${User}\&password=\${Pass}&service=\${Service}&scope=\${Scope}" \"\${Realm}"|jq '.access_token'|sed 's/"//g')
# Repolist=\$(curl -s -u clientId:clientSecret \
#   -H "Accept: application/vnd.docker.distribution.manifest.v2+json" \
#   -H "Authorization: Bearer \${Token}" https://\${ImageUrl}/v2/\${Repons}/\${Repo}/tags/list)
# ImageName=\$(echo \${Repolist}|jq '.name'|sed 's/"//g')
# ImageTags=\$(echo \${Repolist}|jq '.tags[]'|sed 's/"//g'|awk '{printf \$0" "}')
ImageManifests=\$(curl -s -u clientId:clientSecret \-H "Accept: application/vnd.docker.distribution.manifest.v2+json" \-H "Authorization: Bearer \${Token}" https://\${ImageUrl}/v2/\${Repons}/\${Repo}/manifests/latest)
ImageHashValue=\$(echo \${ImageManifests}|jq '.config.digest'|sed 's/"//g')
echo \${ImageHashValue}
EOF
# 更新git仓库,自动触发构建,下载修改标签并回传的脚本
# 如果半小时内没有构建成功,则重新触发最多两次构建,两次后跨过该镜像的构建
cat >/tmp/image.sh<<EOF
#!/bin/bash
source ~/.bash_profile
cd /tmp/docker-auto
Log=/tmp/image.log
Username=\$1
Userpass=\$2
ImageUrl=\$3
Repons=\$4
Repo=\$5
echo ''>\${Log}
ImageHashValue=\$(bash /tmp/image-hash.sh \${Username} \${Userpass} \${ImageUrl} \${Repons} \${Repo})
cat /tmp/image-list.txt|while read line
doName=\$(basename \$(echo \${line}|awk -F':' '{print \$1}'))Tag=\$(echo \${line}|awk -F':' '{print \$2}')for i in \$(seq 180)doif [ \$((\${i}%60)) -eq 1 ]thenif [ \${i} -eq 1 ]thenecho "[+] \$(date +%F_%T) 开始构建镜像: \${line}">>\${Log}echo "FROM \${line}">Dockerfileelseecho "  [-] \$(date +%F_%T) 构建失败,重新触发构建镜像: \${line}">>\${Log}echo "# [-] \$(date +%F_%T) 构建失败,重新触发构建镜像: \${line} \${i}">>Dockerfilefigit add .git commit -m "new image: \${line}"git push -u origin masterelseif [ \${ImageHashValue} == "\$(bash /tmp/image-hash.sh \${Username} \${Userpass} \${ImageUrl} \${Repons} \${Repo})" ]thenecho "  [-] \$(date +%F_%T) 等待镜像构建...">>\${Log}sleep 30elseImageHashValue=\$(bash /tmp/image-hash.sh \${Username} \${Userpass} \${ImageUrl} \${Repons} \${Repo})docker pull \${ImageUrl}/\${Repons}/\${Repo}docker tag  \${ImageUrl}/\${Repons}/\${Repo} \${ImageUrl}/\${Repons}/\${Name}:\${Tag}docker push \${ImageUrl}/\${Repons}/\${Name}:\${Tag}docker rmi  \${ImageUrl}/\${Repons}/\${Repo}docker rmi  \${ImageUrl}/\${Repons}/\${Name}:\${Tag}echo "  [-] \$(date +%F_%T) 构建回传完成 \${ImageUrl}/\${Repons}/\${Name}:\${Tag}">>\${Log}breakfifidone
done
EOF
# 创建需要的镜像列表
cat >/tmp/image-list.txt<<EOF
gcr.io/google-containers/addon-resizer:1.8.3
gcr.io/google-containers/cluster-proportional-autoscaler-amd64:1.6.0
gcr.io/google-containers/k8s-dns-node-cache:1.15.8
gcr.io/google_containers/kube-registry-proxy:0.4
gcr.io/google_containers/kubernetes-dashboard-amd64:v1.10.1
gcr.io/google_containers/metrics-server-amd64:v0.3.3
gcr.io/google_containers/pause-amd64:3.1
gcr.io/kubernetes-helm/tiller:v2.16.1
quay.io/coreos/etcd:v3.3.10
quay.io/coreos/flannel-cni:v0.3.0
quay.io/coreos/flannel:v0.11.0
quay.io/external_storage/cephfs-provisioner:v2.1.0-k8s1.11
quay.io/external_storage/local-volume-provisioner:v2.3.2
quay.io/external_storage/rbd-provisioner:v2.1.1-k8s1.11
quay.io/jetstack/cert-manager-controller:v0.11.0
quay.io/kubernetes-ingress-controller/nginx-ingress-controller:0.26.1
quay.io/l23network/k8s-netchecker-agent:v1.0
quay.io/l23network/k8s-netchecker-server:v1.0
docker.io/calico/cni:v3.7.3
docker.io/calico/kube-controllers:v3.7.3
docker.io/calico/node:v3.7.3
docker.io/calico/pod2daemon-flexvol:v3.13.0
docker.io/calico/routereflector:v0.6.1
docker.io/calico/typha:v3.7.3
EOF
# 注意,镜像名字和版本不能重复,否则会被覆盖
cat /tmp/image-list.txt|awk -F'/' '{print $NF}'|sort|uniq -c|awk '{if($1!=1)print $0}'
# 设置阿里云镜像服务的用户名和密码,进行登陆验证,最终执行脚本
Username=zwjqb@126.com
Userpass=**********
ImageUrl=registry.cn-hangzhou.aliyuncs.com
Repons=vinc-auto
Repo=image-auto
docker login --username=${Username} ${ImageUrl}
bash /tmp/image.sh ${Username} ${Userpass} ${ImageUrl} ${Repons} ${Repo} &

[TOC]

基于阿里云容器镜像服务加速K8S镜像下载(二)相关推荐

  1. 基于阿里云容器镜像服务加速K8S镜像下载

    简单说明: 部署K8S最大的难题是镜像下载 可以使用阿里云容器镜像服务由海外机器构建 国内同时可以使用阿里云的镜像加速器加速镜像下载 仅需要将含有相关镜像的Dockerfile提交到阿里云即可 申请云 ...

  2. 基于阿里云容器服务的微服务实践 - Part 1. 微服务与Docker

    基于阿里云容器服务的微服务实践 基于阿里云容器服务的微服务实践 - Part 1. 微服务与Docker 作者:chszs,未经博主允许不得转载.经许可的转载需注明作者和博客主页:http://blo ...

  3. 阿里云高级技术专家林立翔:基于阿里云弹性GPU服务的神龙AI加速引擎,无缝提升AI训练性能

    2023 年 3 月 23 日 14:00,NVIDIA GTC 开发者大会阿里云开发者社区观看入口正式开放,阿里云高级技术专家林立翔带来了题为<基于阿里云弹性 GPU 服务的神龙 AI 加速引 ...

  4. 使用阿里云容器监控服务与第三方监控框架集成搭建自己的容器看板

    一.概述 阿里云容器监控服务日前正式上线,容器监控服务提供了非常简单快速地与第三方开源监控方案集成的能力.本篇文章就带领大家一起试用阿里云容器监控服务,并使用目前比较流行的第三方开源监控框架做集成,搭 ...

  5. 基于阿里云ECS,Ubuntu系统搭建离线下载服务器

    基于阿里云ECS,Ubuntu系统搭建离线下载服务器 很开心能参加本次阿里云训练营,使用的ECS是阿里云,ubuntu系统 1.了解什么是CCAA CCAA 是服务器离线下载解决⽅案包,组件包含了Ar ...

  6. 一小时快速搭建基于阿里云容器服务-Kubernetes的Web应用

    本文面向的读者 如果您是一个Kubernetes的初学者,本文可以帮助你快速在云上搭建一个可实际使用的集群环境,并发布自己的第一个应用.你无须提前准备任何的硬件资源或者下载任何的软件包.  如果您已经 ...

  7. Docker监控:基于阿里云容器服务构建自己的Docker监控框架

    微服务架构通过将一个复杂系统分解成一系列独立开发.部署和运维的服务,提升了整个系统的敏捷性,可以灵活的响应业务和规模的变化.而Docker技术则将服务的部署和环境完全解耦,利用Docker的可移植性和 ...

  8. 比心云平台基于阿里云容器服务 ACK 的弹性架构实践

    作者:韩韬|比心技术 前言 应用容器化改造后,不可避免地会面临这样一个问题:Kubernetes 集群的 Node 资源配置不足会导致 Pod 无法及时运行,购买过多的 Node 又会导致资源的闲置浪 ...

  9. 区块链应用@纸贵科技:基于阿里云容器服务护航内容版权

    摘要: 区块链如何护航内容版权? 区块链已经成为业界内外家喻户晓的一门技术,很多企业已经开始尝试将区块链应用于不同场景.目前,开源的Hyperledger Fabric区块链技术与容器技术的应用组合已 ...

最新文章

  1. 域名删除时间及whois状态说明
  2. cdatabase读取excel第一行数据_“蟒蛇”py对Excel的读取——数据操作用它,老板都得重新认识你...
  3. mybatis教程--查询缓存(一级缓存二级缓存和整合ehcache)
  4. 【Python基础】pandas的骚操作:一行 pandas 代码搞定 Excel “条件格式”!
  5. python 主函数 输入
  6. 计算机硬件配置和软件有哪些,BIM软件对电脑硬件配置有什么要求?
  7. python分片上传_分片上传_分片上传_上传文件_Python_SDK 示例_对象存储 OSS - 阿里云...
  8. AD学习之旅(13)— 常用参数和快捷键的设置
  9. 服务器电脑可以显示移动硬盘,笔记本电脑插移动硬盘为什么显示拒绝访问无法访问?
  10. 电信 联通双线ip接入服务配置
  11. 引子——漂在中关村 1
  12. SDOI2019R2翻车记
  13. kubectl 命令详解(三十五):rollout undo
  14. 运维派 » 你有自己的Web缓存知识体系吗?
  15. Python实现多层感知器MLP(基于双月数据集)
  16. linux组的管理:修改组名字,删除组,使用sudo权限
  17. ACM-ICPC 2018 南京赛区网络预赛 E.AC Challenge 状压dp
  18. python模拟键盘打字_python模拟鼠标点击和键盘输入的操作
  19. Reversing.kr Replace
  20. 安保人脸识别技术与视频监控系统的结合应用

热门文章

  1. 蓝牙安全管理(Security Manager,SM)之配对、鉴权和加密
  2. fiddler工作原理
  3. UnityShader Reversed-Z的理解
  4. z stat.php 源码,phpstat任意读取网站文件
  5. dom4j 解析xml 获取节点值和节点属性
  6. python coding style why_python coding style guide 的快速落地实践——业内python 编码风格就pep8和谷歌可以认作标准...
  7. 新闻稿发布内容搜索引擎没有收录,稿件内容优化很重要
  8. FHQ-Treap(非旋treap/平衡树)——从入门到入坟
  9. java毕业设计吾悦商城管理系统mybatis+源码+调试部署+系统+数据库+lw
  10. CSS三大布局之“定位”的使用场景 要懂得学以致用