应用中心最佳实践之 -- Git数据源发布实战
适用场景
- 希望使用应用中心
- 有自己git仓库(包括github,bitbucket,自己搭建的gitlab)
- 部署模板托管在git
前置资源准备
- 部署模板托管在公网可以访问仓库中,比如 https://github.com/xianlubird/argocd-example-apps
应用中心手动部署托管在Git上的Kubernetes 模板
这里我们使用此模板作为样例,本模板包含一个Ingress+Service+Deployment,对外通过Ingress提供服务。部署模板的全量链接在此https://github.com/xianlubird/argocd-example-apps/blob/master/ingress-demo/deploy.yaml。
创建应用
创建应用的所有参数如下所示,这里的部署策略选择手动。
Git仓库地址需要输入https或者git协议的地址,结尾需要以.git结尾,与git clone 命令需要的地址相同。这里的Git版本就是指branch或者tag,路径指的是存放部署模板的文件夹名称,这里要求部署模板必须存放在文件夹内。
目标集群默认的In-Cluster 指的就是部署应用中心控制器的本集群,指的为本集群的ApiServer 地址,因为是本集群内部连接,所以使用的是内部Service 名称。命名空间就是希望这个应用安装到哪个命名空间,这里要求必须指定一个存在的命名空间内。
部署应用
创建应用完毕后,我们就可以看到应用的全量拓扑结构,如下图所示:
这里的黄色的小标识OutOfSync代表的意思是,当前模板描述的资源和Kubernetes集群内的实际情况不一致,也就是说,目前的应用模板并没有部署到集群中,下面我们点击右上角的部署按钮,将应用部署到集群中。
稍等片刻应用就会部署完毕,整个部署过程会实时的展现在用户面前,最终的部署样式如图所示。这里最下方的状态显示为Healthy 和Synced,表示当前模板已经部署到Kubernetes 集群中,且已经符合部署模板的期望状态。
除了查看整个应用的部署拓扑外,我们还可以查看应用的流量结构,点击右上角的图标就可以观察这个应用的流量拓扑情况。
更新应用
下面我们来演示一下如何更新应用,首先我们在github上更新一下应用模板,将镜像的tag由blue改为green,如这个commit 为例 https://github.com/xianlubird/argocd-example-apps/commit/dbc1296d20b2a92f0fc4826af2448b452d4a40ca。更新完毕后,我们回到应用中心页面,点击刷新按钮,可以看到如下的图片:
这里的OutOfSync就是表明,部署模板已经发生了变化,但是Kubernetes集群内的资源和git上托管的模板不一致,如果想查看具体的版本差异,可以点击版本差异按钮,查看具体的不同点。
这里就有详细的对比,展示当前git上的变更与Kubernetes集群内实际应用资源之间的关系。下面我们就可以部署这个更新。
可以看到部署模板里面,应用中心识别了只有Deployment 发生了变化,我们点击部署就可以完成应用的更新。更新完毕后,可以看到镜像已经变成了我们指定的green
回滚应用
首先我们查看一下当前发布版本的历史记录,通过点击历史版本就可以看到。
这里会根据git commit和git 提交信息来描述每个版本的具体情况,我们可以选取任何一个版本进行回滚,比如这里我们选取第一个版本进行回滚。
回滚过程中,可以刷新查看具体的情况,回滚完毕后,可以看到镜像已经回到了blue,但是整个应用的状态是OutOfSync,这个是因为和git里面存放的部署模板不一致导致的。
应用中心自动部署托管在Git上的Kubernetes模板
前面我们介绍了手动的部署应用,每次更新完毕git后,手动的触发应用的更新。下面我们来介绍另一种方式,可以自动化的更新应用。
创建自动更新的应用
创建应用与前面的手动更新的应用区别不大,主要就是更新方式的选择,只需要部署策略选择为自动就可以了,其他参数和前面的手动更新应用是一致的。
这里的修整资源和自我修复我们可以不选择,具体的介绍如下。
创建完毕和上面的应用是相同的,下面我们来看一下更新的操作。
自动更新应用
首先我们还是需要去git上更新一下应用,这里我们将green更新为blue,如这个commit 一致 https://github.com/xianlubird/argocd-example-apps/commit/bfaa85784835281e7e30e4d0e88ab7cd9ff5c4b2。更新完毕后,稍等一会,大约1min,刷新一下应用就会发现,应用已经被自动更新,新的镜像为blue,同时发布记录也已经生成,一切都是自动的,不需要用户手动介入任何事情,只要把模板提交上去,就可以完成自动化的发布,同时发布记录也会记录在册。