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 echo “install 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 -- 無服務器化容器解決方案