基于华为云的一个典型的持续部署方案
基于华为云的一个典型的持续部署方案:FunctionStage(Serverless)+(Monocular+)Helm Chart + CCE(Kubernetes+Docker)
摘要:华为云迄今为止已经有14大类超过100种服务了,可以做很多有用和好玩的方案。本文以一个实际的案例,讲述如何使用华为云上的相关服务(主要是FuctionStage和CCE)完成自动化持续部署(CD,Continuous Deployment);并且通过Monucular手动部署Helm Charts打包的Kubernetes应用。这充分说明了华为云云容器引擎CCE支持和兼容开源生态Kubernetes以及在DevOps的强大能力,以及华为云支持业界主流自动化部署工具的能力。
1. 关于持续集成(CI)和持续部署(CD)
在软件开发和运维领域,我们经常会听到很多概念,比如DevOps,持续集成(CI,Continuous Integration),持续交付(CD,Continuous Delivery),持续部署(CD,Continuous Deployment)等等。这些新的概念、方法论和工具的出现,主要是为了应对目前业务的挑战。主要是要求业务推出和运维即“快”又“稳”:
快:比竞争对手更快的创新、试验和部署业务的能力。快速推出业务、快速获取反馈、快速迭代、快速试错。
稳:快速、频繁地特性发布,同时保证业务和系统的稳定性、可用性和持久性。
下面我们稍微解释一下持续集成(CI,Continuous Integration),持续交付(CD,Continuous Delivery),持续部署(CD,Continuous Deployment)的概念,可以去参考:持续集成是什么?
持续集成(CI,Continuous Integration):持续集成指的是,频繁地(一天多次)将代码集成到主干。持续集成的目的,就是让产品可以快速迭代,同时还能保持高质量。
持续交付(CD,Continuous Delivery):持续交付指的是,频繁地将软件的新版本,交付给质量团队或者用户,以供评审。
持续部署(CD,Continuous Deployment):持续部署是持续交付的下一步,指的是代码通过评审以后,自动部署到生产环境。
在本文的场景中,主要讲述的是基于华为云的持续部署(CD,Continuous Deployment)。
2. 一个华为云上的持续部署方案
前期在支撑某客户在华为云上的概念验证(PoC,Proof of Concept)中,有一个很重要的测试场景:自动化CI/CD。具体场景是:客户在私有云中完成持续集成(CI),CI采用自建的工具链;生成结果自动在华为云上完成持续部署(CD),部署在Docker容器中。
客户采用Helm charts脚本部署容器应用,因此在客户的CCE(Cloud Container Engine)容器集群所在的VPC中,我们部署了一台服务器安装了Helm client,通过Helm client连接CCE集群的Kubernetes Master完成Docker容器应用部署。
客户部署的容器应用中,其中有一个很重要的容器应用是一个job类应用,它的主要工作是:使用一些自动化部署工具完成应用所需资源的创建,应用环境的初始化等等。完成之后即停止。
我们采用了:FunctionStage(Serverless)+(Monocular+)Helm Chart + CCE(Kubernetes+Docker)的方案完成持续部署。演示效果良好。具体如下图所示:
描述如下:
客户在私有云中完成持续集成(CI),CI采用自建的工具链。CI的结果是:
应用容器镜像上传到华为云容器镜像仓库(SWR, SoftWare Repository for Container)
应用部署脚本(例如Helm Chart.yaml, values.yaml)等以约定的打包方式,上传到华为云对象存储服务(OBS, Object Storage Service)的指定桶(Bucket)的相应目录下
因为华为云的FunctionStage(Serverless)和OBS有集成,事先在FunctionStage中配置触发器(Trigger),当指定桶(Bucket)的相应应用目录下有文件更新时(PUT/POST操作,即用户上传了应用部署脚本),自动触发一个Python程序的执行。
这个Python程序会ssh到Helm client,执行一个自动化部署的脚本。此自动化部署脚本会执行资源清理、helm install等动作完成容器应用的部署。
部署的容器应用中,其中有一个很重要的容器应用是一个job类应用,它的主要工作是:使用一些自动化部署工具完成应用所需资源的创建,应用环境的初始化等等。完成之后即停止。
最后的结果是:应用通过helm client部署在CCE容器集群中,该创建的资源(例如RDS-MySQL)成功创建并初始化,资源和应用运行正常。
当然,我们也安装了一个Monocular(Monocular is a web-based UI for managing Kubernetes applications packaged as Helm Charts),允许用户手动部署Helm Charts打包的Kubernetes应用。
3. 部署截图
一些部署的截图如下。请注意:这个截图是我手动部署的截图,跟自动化部署的截图是类似的,但更能说明部署过程。
通过Helm client部署容器应用到CCE集群
执行kubectl get pods可以看到应用pod(容器)处于Running状态。
部署过程中通过自动化部署工具创建和初始化的华为云RDS-MySQL资源
- 点赞
- 收藏
- 关注作者
评论(0)