目录
前言
本文针对私有化场景和本地化的持续交付流程,如果需要做持续集成,需要通过gitlab ci或者jenkins等平台工具将git——harbor/acr/...打通,构建完整的pipeline。
前提条件
开始本教程前,你需要:
1.私有的镜像仓库
参考我的另一篇文章的第一部分——安装harbor私有仓库
2.控制平面的k8s集群
参考我的另一篇文章
3.kubevela core和velaux
参考kubevela官方提供的quick start docs
第一部分——本地配置镜像仓库的访问
解决docker push报错
这里将sea.hub:81作为harbor地址,使用默认的library项目。
首先需要配置/etc/docker/daemon.json中的insecure-registries参数,这里贴出我的配置文件
这一步是因为我的harbor仓库的url是http,但是docker push默认走的是https访问,否则会报错:server gave HTTP response to HTTPS client
{
"registry-mirrors": [
"https://bxsfpjcb.mirror.aliyuncs.com"
],
"max-concurrent-downloads": 10,
"log-driver": "json-file",
"log-level": "warn",
"log-opts": {
"max-size": "10m",
"max-file": "3"
},
"insecure-registries":
["sea.hub:81"],
"data-root":"/var/lib/docker"
}
然后重启docker
systemctl daemon-reload;systemctl restart docker
因为是内网环境,所以需要修改本地hosts文件配置域名解析
配置镜像仓库访问
登陆到registry,harbor默认的账户名是admin,密码是Harbor12345
docker login -u admin -p Harbor12345 sea.hub:81
会生成一个auth文件/root/.docker/config.json,进行docker push的时候会检查这个文件,如果需要换主机,可以把这个文件拷贝到相同路径下,也可以重新login自动生成
{
"auths": {
"sea.hub:81": {
"auth": "YWRtaW46SGFyYm9yMTIzNDU="
}
},
"HttpHeaders": {
"User-Agent": "Docker-Client/19.03.0 (linux)"
}
}
第二部分——构建&推送镜像
我们使用官方提供的demo去构建镜像,clone下来,并build镜像
docker build -t sea.hub:81/library/vela-demo:0.0.1 .
然后推送到harbor
docker push sea.hub:81/library/vela-demo:0.0.1
第三部分——创建应用&触发器
创建应用#
要使用触发器,首先我们需要在 VelaUX 上新建一个应用。在这里,我们可以新建一个 WebService 类型的应用,并使用 LoadBalancer 为其暴露 80 端口以便访问。
记得指定image为刚才的镜像仓库
新建应用之后即可访问查看
可以看到,当前的 Demo 应用显示版本为 v2.0.0
。
为应用新建触发器#
在新建完应用后,使用 New Trigger
来创建新的触发器,这里我们选择 Harbor
格式的触发器,使该触发器支持来自 Harbor
镜像仓库的请求。
查看这个触发器的详细信息,可以看到具体的 Webhook URL 以及手动触发的命令。
配置 Harbor 触发器#
Harbor 格式触发器需要配合 Harbor 镜像仓库使用。当创建完 Harbor 类型的触发器后,我们可以复制该触发器的 Webhook URL,并在 Harbor 镜像仓库中进行配置。
第四部分——更新代码&镜像
更新代码
我们将代码的版本修改为3.0.0
cd KubeVela-GitOps-Demo-Code-master/src && vi App.vue
export default {
name: 'App',
components: {
HelloWorld
},
data(){
return {
v: 'v3.0.0',
}
},
}
更新镜像
重新build镜像,这次设置tag为0.0.2
docker build -t sea.hub:81/library/vela-demo:0.0.2
同样push到harbor
docker push sea.hub:81/library/vela-demo:0.0.2
检查持续交付流程
登陆到harbor web,可以查看到相同的镜像仓库有两个artifacts
在 Harbor 触发器的访问记录中,我们可以看到,当镜像仓库中有了最新镜像时,Harbor 会往我们配置的 Webhook URL 中发送一个请求。
查看 VelaUX 的应用部署版本列表,可以看到,最近一次部署是来自 webhook
的部署。
重新查看应用页面,可以看到,应用的版本已经变更成了 v2.0.0
,同时页面的背景也随版本发生了变化。
总结#
KubeVela 触发器与制品仓库的对接是十分顺滑且无缝的,除了 Harbor 之外,KubeVela 还支持 ACR 镜像仓库以及自定义触发的格式。
通过使用 KubeVela 触发器,我们可以轻松地根据镜像版本实现自动部署,从而完成应用版本的迭代。
有任何的问题,都欢迎私信我或者在评论下方留言!