基于华为云的一个典型的持续部署方案

举报
乔雷哥哥 发表于 2018/05/03 10:38:40 2018/05/03
【摘要】 华为云迄今为止已经有14大类超过100种服务了,可以做很多有用和好玩的方案。

基于华为云的一个典型的持续部署方案: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)的方案完成持续部署。演示效果良好。具体如下图所示:

145007ov5ftfgxyrduqvkk.png

描述如下:

  • 客户在私有云中完成持续集成(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集群

092312of8vqw7ozuwt8jhf.png


执行kubectl get pods可以看到应用pod(容器)处于Running状态。

  • 部署过程中通过自动化部署工具创建和初始化的华为云RDS-MySQL资源

092324tg51bgcbej779zt8.png


【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。