目录
(一) 问题背景
(二) 搭建阿里云ARC镜像仓库站对接GitHub项目构建镜像
(1)添加项目分支
(2)创建阿里云ARC镜像仓库站
(3) 设置更改GitHub项目内容,触发阿里云镜像构建
①Brash触发构建
②Tag模式触发:
(三) 最后的最后
(一) 问题背景
今天我本来准备做kube-state-metrics的项目案列的时候,从GitHub下好关于KSM的yaml文件后,我以为直接apply这些yaml文件,就可以直接pod跑起来,结果我发现我的kube-state-metrics的pod一直报错,镜像一直拉不下来,我的k8s的版本是1.25版本用的containerd的CRI ,然后我使用ctr pull 命令 也拉不下来 。
而且我的k8s拉取我也配置了国内的阿里云的镜像加速地址,然后我准备去看看docker的镜像仓库站地址,有没有这个镜像,结果当我访问docker hub的网站链接时候发现进不去了,被拦截了,之前还是可以用的。
然后我把前面的地址镜像仓库的地址换成docker.io看看有没有这个ksm的镜像,发现也没有!拉不下来。
发现还不行后,我想办法,我科学上网以后我出去,我访问docker hub的网站看看有没有这个KSM的镜像,万一没有呢,然后结果我发现,确实有这个KSM镜像,但是他是bitnami的镜像仓库站,还是没有这个镜像拉不下来
最后我本来还想再去找几个国内的镜像站看看有没有,但是后面想干脆直接搞一个自己的镜像站,先把这些平时要使用的镜像先导入自己的镜像站,之前我隐约记得看过一个文章,说docker准备停止社区版镜像的提供,要收费,当时还不信,现在看来有这个可能了,国内已经不能访问进去了,这样做也能防止以后如果docker真的不提供了,那么我们自己的镜像站可以直接拉使用。
(二) 搭建阿里云ARC镜像仓库站对接GitHub项目构建镜像
kube-state-metres Github地址:kubernetes/kube-state-metrics: metrics. (github.com)
这里我们使用的案列就是把kube-state-metres镜像通过阿里云镜像仓库站构建到我们本地案例镜像仓库站
(1)添加项目分支
首先我们先进kube-state-metres的GitHub项目里,Fork到自己的GitHub分支里
然后就可以发现在我们GitHub账号里有这个克隆过来的分支
(2)创建阿里云ARC镜像仓库站
接下来就是创建阿里云的镜像仓库站实列
阿里云的ARC创建地址:容器镜像服务 (aliyun.com)
这里先创建一个命名空间,用来保存管理仓库,然后设置一个仓库名称,设置公开
然后绑定我们的GitHub账号,这里把海外构建勾上,因为我们很多镜像都国外的源
这里要选择我们的GitHub的kube-state-metres克隆的代码仓库名称
进入我们的镜像仓库站
这里下面给我们写出了我们怎么下载上传打标签我们的镜像仓库站的镜像
这里阿里云的镜像构建触发有两个模式,一个是Tag模式,一个是Brach模式
Tag: Tag模式就是当我们使用指定的格式打标签的格式给我们的Github的标签打标签后,他就会自动触发构建,务必遵守格式release-v$version
Brach: 就是当我们在我们克隆的GitHub的代码仓库里面修改了文件或者更改了某些参数代码,阿里云就会自动触发构建
然后接下来我们来增加Branch构建规则,这个原理很像我们的CICD管道,就是当我们在我们克隆的GitHub的代码仓库里面修改了文件或者更改了某些参数代码,阿里云就会自动触发构建,构建新镜像到我们的阿里云的代码仓库里面
这里的版本可以根据自己的实际定,我们这里的KSM的版本就是2.8.2
(3) 设置更改GitHub项目内容,触发阿里云镜像构建
添加完后,我们去GitHub上找到Dockerfile文件添加我们的类型
①Brash触发构建
添加ARG GOARCH=adm64 字样
这里有一个小问题就是原本这里构建的Dockerfile的FROM字段是
FROM golang:${GOVERSION} as builder ,拉取golong的1.20版本,但是在我测试的时候,发现阿里云触发构建的时候拉取不下来这个golong的初始镜像,原因是Docker公司对匿名或者免费的用户实施了速率和拉取请求次数的限制,所以这里我们只有先在我们本地linux把这个golong1.20镜像先拉取下,然后导入同步到我们的阿里云镜像仓库站,然后在Dockerfile里面本地引用我们的这个golong的初始镜像
这里再登陆我们的阿里云的镜像仓库的时候,要先配置我们的阿里云镜像加速器
阿里云镜像加速器配置地址:容器镜像服务 (aliyun.com)
这里不知道怎么打什么标签的,不知道怎么上传镜像的可以看我们的阿里云镜像仓库的首页,他给我们手把手的都打出来的教程。
docker pull docker.io/library/golang:1.20 ##然后这里登陆我们的阿里云镜像仓库站 docker login --username=dream5201314 registry.cn-qingdao.aliyuncs.com ##然后把我们的下载下来的golong的初始化镜像打个标签上传到我们的阿里云镜像仓库站 docker tag golang:1.20 registry.cn-qingdao.aliyuncs.com/dream-1/dream-ksm/:1.20 docker push registry.cn-qingdao.aliyuncs.com/dream-1/dream-ksm:1.20
上传成功后,我们可以在我们的镜像仓库站发现对应的版本的镜像,这里我为了方便把kube-state-metrics和golong的镜像都放在了dream-ksm这个镜像仓库空间里面,当然大家可以再外面再创建一个新的镜像仓库空间来保存我们golong的镜像,用来区分每个镜像空间放的什么镜像
上传好golong镜像好,这个时候我们就可以去Dockerfile文件里面把我们的镜像仓库的golong的地址引入进去,让他直接拉取我们本地的golong镜像,这样构建KSM的时候就不会报错说limit限制的问题
做好添加更改完这两个字段后别忘记保存!
这个时候我们其实就可以返回我们的镜像仓库站构建了,但是我们还要把Tag模式的触发构建方法也讲一遍。
②Tag模式触发:
点击Releases版本里面进行添加版本
这里的格式必须是release-v$version格式,输入格式要直接回车,直接回车就可以添加上了
这样添加后,阿里云镜像站就会自动触发构建了 ,因为我这里之前构建成功一次这个版本了,所以第二次构建触发就会失败
(三) 最后的最后
构建完成后,我们就可以在我们的docker里面拉取我们这个镜像了,加我们的镜像站名字就可以啦,这个GitHub的构建方法适合很多很多服务,有dockerfile的项目就行,都可以使用这种方法
有任何的疑问都可以在评论区我们一起讨论,都会一个一个回答,乾坤未定,你我皆黑马!