亚马逊AWS官方博客
结合 AWS 服务与 Kubernetes 的持续集成
用户可以结合 AWS 和 Kubernetes 去创建一个完全托管,可持续部署的容器应用。这种结合充分利用开源 Kubernetes 平台的容器编排能力以及 AWS 开发者工具的代码管理,编译打包和持续集成的能力
本篇文章描述了如何去创建一个可持续部署容器应用。其使用 AWS CodeCommit , AWS CodePipeline , AWS CodeBuild , 和 AWS Lambda 将容器应用部署到 Kubernetes 集群中去。在这个环境中,开发者可以专注于代码开发而无需考虑如何部署,同时这种方式总是可以保障最新的代码被部署到环境中去
什么是持续部署?
有许多的文章和会议已经发表过持续部署的实践案例, 而本文将持续部署归纳为以下几点:
- 代码可以频繁地被部署到生产环境
- 任何代码修改将触发低风险发布。同时也可以轻松回滚
- 全自动化部署,仅需少量人工操作
如何使用 AWS 和 Kubernetes去实现持续部署?
你可以以最小的人工操作为代价,用 AWS 服务自动将代码从代码仓库取出然后部署到 Kubernetes 生产集群。为了达成这个目的,你可以创建一个pipeline,在条件满足时该pipeline将自动构建并且部署已提交的代码。
你可以使用下面这些服务,去创建一个pipeline
- AWS CodePipeline . AWS CodePipeline 是一个自动化交付服务,它模块化,可视化,自动化了软件的部署流程。在pipeline中可以定义若干步骤,例如从代码管理仓库中拉取代码,将代码构建成为可发布包,测试发布包,将其部署到生产环节。只有成功通过上述步骤的代码才会予以部署。同时,你可以针对pipeline增添一些额外的流程,例如人工批准:只有被批准的修改才会被部署到生产环节。
- AWS CodeCommit . AWS CodeCommit 是一个安全,可扩展,托管的私有Git代码仓库服务。你可以将私有代码或其他文件存储在云上,同时配置pipeline自动获取仓库中的改动。
- AWS CodeBuild . AWS CodeBuild是一个aws上的构建服务,用来编译代码,运行单元测试和生成部署包. 同时你可以在部署之前使用 AWS CodeBuild 来构建和测试部署包。
- AWS Lambda. AWS Lambda 是一种计算服务,该服务可以让你运行代码的同时而无需部署或者管理服务器。你可以在pipeline中触发 Lambda 函数来准备构建和为 Kubernetes 测试部署包。
- Kubernetes . Kubernetes 是一个开源的自动化部署,扩容和管理容器应用的框架。 它为运行,部署和管理可扩展的容器提供了便利的平台。
持续部署到 Kubernetes的举例:
下面这个例子,说明了如何使用 AWS 开发者工具持续将应用部署到 Kubernetes 集群
- 开发者将代码提交到 AWS CodeCommit 同时创建一个 pull request 来审核针对生产环境代码的修改。 当 pull request 合并到 master 分支后,AWS CodePipeline 会自动检测到代码分支上的修改,并通过pipeline启动针对代码修改的处理。
- AWS CodeBuild 将代码修改以及相关依赖包构建成为 Docker 镜像。 同时你也可以配置pipeline的其他步骤来测试代码或生成包。
- 在构建及测试步骤完成之后,Docker 镜像将被推送到 Amazon ECR
- AWS CodePipeline 触发 AWS Lambda 函数,该函数使用到 Kubernetes Python客户端来对Kubernetes进行操作。 Lambda 函数将 Kubernetes deployment 配置文件中Docker Image tag替换为刚被推送到ECR中的镜像
- 在Kubernetes deployment 的参数修改完之后,AWS Lambda 将调用 Kubernetes API 去重新部署 Kubernetes deployment 以完成deployment中docker镜像的更新
- Kubernetes将使用会滚动升级 pods中的应用,使得所有pod 都使用ECR中的相应docker镜像。至此为止,Pipeline 成功响应了CodeCommit上 master 代码分支的修改。同时该 pipeline 很容易扩展,你可以在代码被部署到生产环节之前,增加测试环节或者增加部署到预生产环境的环节
下面展示了一个支持该流程的AWS CodePipeline的例子:
结论:
我们非常高兴你能使用这些pipeline更为轻松的在 Kuberntes 上开发和部署容器应用。你可以在 CodeSuite – Continuous Deployment Reference Architecture for Kubernetes上找到更多相关的 AWS CloudFormation 模版。该仓库详细的描述了如何创建 pipeline 并使用它去部署应用。 如果有更多的问题,意见,反馈,请及时让我们知道。