AZURE ACI -- 无服务器化容器解决方案

Posted wekang

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了AZURE ACI -- 无服务器化容器解决方案相关的知识,希望对你有一定的参考价值。

        标题很对仗,目的很明确,蹭热度!!!前天看了 A 站的童鞋搞了一个,今儿我换个姿势用软 A 也搞一个。Azure Container Instance 服务是一种无服务器化的容器解决方案。ACI 服务是一个完全托管的容器服务,客户不需要搭建和维护容器计算集群(如用 VM 去搭建 Swarm 或者 Kubernetes ),客户管理视图和颗粒度在容器,可以直接进行容器消费,创建删除容器,并且按照容器分配的 CPU 和 内存资源的占用时间进行收费,并且容器生命周期跳转是非常快速的,可以快速的删除、创建容器。为了方便用户顺应客户的使用和操作习惯,ACI 服务可以与现有的 K8S 集成,注册为虚拟的 K8S compute agent node,是用户可以沿用现有的工具方法来调度使用云端的计算资源。容器正在变成对云应用程序执行打包、部署和管理操作的首选方式,今天我们就来一起了解一些如何通过 Virtual Studio Team Service + ACI 服务实现应用的CI/CD。

先来看一下整体的架构图:

 下面我们来分几个部分来介绍整个架构的实现:

  • 在 GitHub 上准备演示所需要的 Code Source Repo
  • 准备 Azure Container Registry
  • VSTS 中以 Github 为 Code Souce 创建 CI 任务,将 Build 打包发布到 Azure Container Registry
  • VSTS 中 创建 CD 任务,将 Build 的最新版本发布到 Azure Container Instance 服务中部署实施
  • 检查发布结果,模拟 Code Commit,查看 CI/CD 过程

开搞!

第一步:在 GitHub 中准备 Code Source Repo

       为了大家快速上手理解方便,本示例中 Code Source Repo 采用 Github,VSTS 服务内部也支持Git Repo,用户也可以选择讲 Code Control 这部分也托管给 VSTS 服务。所有 Code Source 大家可以到 https://github.com/nonokangwei/vstscicddemo 查阅。童鞋们自行准备自己的 Repo 这里不做赘述。

第二部:创建 Azure Container Registry

       登入 Azure Portal,选择 Azure Container Registry 服务,并创建

        输入 Registry 名称,输入资源组名称,开启 Admin User, 点击创建

 

第三步:VSTS 中以 Github 为 Code Souce 创建 CI 任务,将 Build 打包发布到 Azure Container Registry

        登入 VSTS,创建新项目

     选择 New Project

        进入创建的 Project,选择 Build and Release --> Builds

       选择 New Builds

      选择 GitHub 作为 Code Source,填入自己 Code Repo 的信息

选择 Empty Process 模板

选择 Agent queue 为 Hosted Linux,Agent 扮演 Worker 的角色来执行 Build 任务,VSTS 已经内置了托管的 Agent,本示例中以 Build Linux 环境的 Docker 为例,所以这里选择 Hosted Linux。

点击保存后,开始添加 Build Task

添加 Command Line Task,原生托管的 Linux Agent 内没有安装 Docker,所以我们需要借助 Command Task 来定制化托管 Agent 的 Runtime

1 echoinstall docker-ce”
2 curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
3 sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
4 echo “apt-get update”
5 apt-get update
6 sudo apt-get install -y docker-ce

添加 Dokcer Build Task

        选择 Container Registry Type 为 Azure Container Registry,选择第二步创建 ACR 所使用的订阅,选择前面创建的 ACR, Action 选择 Build an Image,指定 Github Repo 中的 Dockerfile,Image Name 输入 YourImageName:$(Build.BuildId),并勾选 Include Latest Tag。通过此步完成 CI 中 Build Docker Image 的工作。

        添加 Task,Dokcer Build Task

        选择 Container Registry Type 为 Azure Container Registry,选择第二步创建 ACR 所使用的订阅,选择前面创建的 ACR, Action 选择 Push an Image,指定 Github Repo 中的 Dockerfile,Image Name 输入 YourImageName:$(Build.BuildId),并勾选 Include Latest Tag。通过此步完成 CI 中 Push Docker Image 到 ACR 的工作。

        选择 Trigger,开启 Enable continuous integration

 

点击 Save & queue 保存

第四步:VSTS 中 创建 CD 任务,将 Build 的最新版本发布到 Azure Container Instance 服务中部署实施

        选择 Build and Release --> Releases

        创建 Release Defination,选择 Empty Process

        添加 Artifacts,选择 Source Type Build,选择前面创建的 VSTS Project,选择前面创建的 Build Defination。通过此步定义 CD Pipline,将 CD 与 CI Link 在一起。

        开启 Continuous deployment trigger

        添加 CD Task, 选择 Tasks,点击添加

        选择  Check out our Marketplace, 选择 Replace Tokens 插件并安装

        添加 Replace Token Task,指定 Root Directory 为 Github Source Repo 中的 armtemplate 目录, target files 设置为 **/*.json。CD 过程在部署中由于 VSTS 还没有原生的和 ACI 服务的集成,所以这里面选择 Azure Resource Template 部署方式,将 CD 部署通过 Azure Resource Template 来描述,Template 中需要从 CI 过程中抓取参数,此步是通过 Replace Token 插件在参数 json 文件中进行动态传参的效果。

        添加 Azure Deployment Task,选择目标 CD 要部署 ACI 所在的 Azure 订阅,选择 Action 为 Create or Update resource group,指定目标部署资源组,指定目标部署区域,Template 选择 Github Code Souce Repo 中 armtemplate 目录下的 azuredeploy.json,Template parameters  选择 Github Code Souce Repo 中 armtemplate 目录下的 azuredeploy.parameters.json

        选择 Variables,添加 Process variables,image 名称按照前面 CI Build 中的命名进行填写,imagePassword,imageRegistryLoginServer,imageUsername 从Azure Portal 中找到前面创建的 ACR 资源中获取。

        点击 Save 保存。

第五步:检查发布结果,模拟 Code Commit,查看 CI/CD 过程

        登入 Github,在 Code Source Repo 中模拟创建一个 Empty 文件并 Commit,在 VSTS 中查看 CICD Pipeline。 

        登入 Azure Portal,查看 Azure container Instance 服务中已经发布了容器服务,并浏览器模拟访问登陆。

 

        修改 Github Code Source Repo 中 webpage 目录下的 index.html,<title>Welcome to Azure Container Instances!</title> 替换为 <title>CICD with Azure Container Instances!</title> ,<h1>Welcome to Azure Container Instances!</h1> 替换为 <h1>CICD with Azure Container Instances!</h1> 并 Commit 提交。重新访问站点,查看页面更新。

        好啦,我们实现 VSTS 和 ACI 服务的整合来实现基于无服务器架构的容器应用 CI/CD。心动不如行动,赶紧动手吧。

以上是关于AZURE ACI -- 无服务器化容器解决方案的主要内容,如果未能解决你的问题,请参考以下文章

Azure容器实例未连接kafka集群

如何将 MarkLogic docker hub 映像部署到 Azure 容器实例 ACI

Azure Fileshare - 使用 Docker-Compose 将不同的子文件夹/文件挂载到 ACI 上的卷

是否可以将 Azure 文件共享中的单个文件/文件夹挂载到 Azure 容器实例

将 Microsoft 无状态服务绑定到 Azure 存储 Blob?

在从 blob 存储中获取文件并传递给模型进行预测时出现 azure aci webservice 的超时错误