iT邦幫忙

2022 iThome 鐵人賽

DAY 28
0
DevOps

學會 Kubernetes 然後呢?由 Istio 進入 DevOps 偉大航路系列 第 28

Day28 - 使用 Argo Rollouts 結合 GitOps 與部署策略

  • 分享至 

  • xImage
  •  

Argo Rollouts 介紹

Argo RolloutsKubernetes Controller 以及一組 CRDs 所組成,能幫助我們自動化實現部署策略如 Blue/Green Deployment、canary,當更新應用程式出現異常時,也能協助自動 Rollbacks,降低系統的停機風險。

可以把 Argo Rollouts 想成 Argo CD 的擴充套件,原生 Argo CD 只能使用 Kubernetes 的 Rolling Update 功能更新應用程式,安裝 Argo Rollouts 後即可使用進階部署策略並結合 GitOps Workflow。使用者只需在 Git 上 Commit 並 Push 到 Repo,Argo CD 就能使用 Blue/Green Deployment、canary 等方式自動化完成部署任務。

Argo Rollouts 架構介紹

Argo Rollouts 由下列元件所組成

Rollout Controller

負責追蹤是否有新的部署任務需要執行,檢查 Rollout 元件的變動,並將修改的部分建立部署策略將更新部署到 Kubernetes。

Rollout 可以想像成能設定進階部署策略的 Deployment 元件

Analysis Template

會連接至 Metrices Provider 分析部署資料,並設定特定 thresholds(閥值),若在應用程式更新時超過閥值設定就會終止本次更新,並做 Rollbacks 保障系統安全。

例如可以設置 Error Rate 要小於 5%,若超過即中止本次更新,將應用程式 Rollbacks 到前一個版本。

Traffic Management Tools

協作做流量分配的工具,如 Nginx Ingress ControllerIstioTraefik 等等。

https://ithelp.ithome.com.tw/upload/images/20221007/20139235lLArk1Unzx.png

Argo Rollouts 架構圖,圖片取至 Argo Rollouts- Architecture

Argo Rollouts 搭配 Istio 實現 Canary Deployment

Day12 - Canary 有使用 Istio 的 virtualService 元件,逐步修改流量比例將 v1 版本流量轉移至 v2 版本實現 Canary Deployment,而 Argo Rollouts 其實就是把手動修改流量比例的過程自動化,降低手動部署時可能造成的風險。

藉由自動化方式,不僅能降低手動部署的風險,也能加速部署時間。

https://ithelp.ithome.com.tw/upload/images/20221007/20139235AIpQuw5wVi.png

Canary 示意圖,圖片取至 Arogo Rollouts - Concepts

安裝 Argo Rollouts 到 Kubernetes

本篇參考 Argo Rollouts Installation,需要將 Argo Rollouts Controller 安裝到 Kubernetes ,並在客戶端安裝 Kubectl Plugin,

  1. 建立 argo-rollouts Namespace 並安裝 Argo Rollouts Controller
kubectl create namespace argo-rollouts
kubectl apply -n argo-rollouts -f https://github.com/argoproj/argo-rollouts/releases/latest/download/install.yaml
  1. 查看 Argo Rollouts Controller 運行狀態
kubectl get pods -n argo-rollouts

(輸出結果)

NAME                             READY   STATUS    RESTARTS   AGE
argo-rollouts-76fcfc8d7f-xghlm   1/1     Running   0          121m

Status 為 Running 即安裝成功

接著安裝 Kubectl Argo Rollouts 插件,安裝檔案在 argo-rollouts/releases

  1. 使用 curl 下載安裝檔案
curl -LO https://github.com/argoproj/argo-rollouts/releases/latest/download/kubectl-argo-rollouts-darwin-amd64

筆者使用的是 MacOS 版本,若是 Linux 使用者請將 darwin 修改成 linux,若是 windows 用戶請到 Argo Rollouts Kubectl plugin下載 Binary 檔案,並設定好環境變數。

  1. 將下載下來的檔案設為可執行
chmod +x ./kubectl-argo-rollouts-darwin-amd64
  1. 將 Binary 檔案移動至 PATH
sudo mv ./kubectl-argo-rollouts-darwin-amd64 /usr/local/bin/kubectl-argo-rollouts
  1. 查看 Kubectl Argo Rollouts 插件是否安裝成功
kubectl argo rollouts version

(輸出結果)

kubectl-argo-rollouts: v1.3.1+b0b95ca
  BuildDate: 2022-09-29T15:21:35Z
  GitCommit: b0b95cade830d8a70624fcaaf8e92e1fe2ecd355
  GitTreeState: clean
  GoVersion: go1.18.6
  Compiler: gc
  Platform: darwin/amd64

使用 ArgoCD 將應用程式安裝到 Kubernetes

再來就可以安裝應用程式到 Kubernetes ,實際體驗 ArgoCD 如何與 Istio 結合。本篇使用 ArgoCD 官方提供的 rollouts-demo,筆者已經將部署元件整理到 個人 Github,可以直接 Fork 一份來實作,在 Repo 裡面有以下資料。

├── analysis.yaml
├── destinationrule.yaml
├── gateway.yaml
├── kustomization.yaml
├── namespace.yaml
├── rollout.yaml
├── services.yaml
└── virtualservice.yaml

準備好 Github Repo 之後,就可以使用 ArgoCD 利用 GitOps 的方式部署應用程式,請先依照前一章提供的教學進入到 ArgoCD UI 頁面。

  1. 輸入以下資訊,完成後點擊 Create 建立 Argo Project
  • Application Name
    • argo-rollouts-demo
  • Project Name
    • defaukt
  • SYNC POLICY
    • 選擇 Automatic
    • PRUNE RESOURCES 打勾
    • SELF HEAL 打勾

https://ithelp.ithome.com.tw/upload/images/20221007/201392352gq3XPzf02.png

  • Repository URL
    • Github Repository URL
  • Revision
    • HEAD
  • Path
    • .
  • Cluster URL
    • 選擇 kubernetes.default.svc

https://ithelp.ithome.com.tw/upload/images/20221007/20139235cA7wFpLP87.png

  1. 點擊建立好的 Project ,等到 Sync 完成。

https://ithelp.ithome.com.tw/upload/images/20221007/201392356QEgLf51eu.png

雖然使用 Istio、Argo Rollouts 等技術會有更多 Yaml 檔案需要部署,但透過 GitOps 的方式即使再多的部署檔案都能交由 Git 輕鬆管理,透過 CD 工具就能達到一鍵部署。

  1. 在 Terminal 檢查是否部署成功
kubectl get pods -n rollouts-demo-istio

(輸出結果)

NAME                             READY   STATUS    RESTARTS   AGE
istio-rollout-7f96d86486-qjln5   2/2     Running   0          6m53s

Status 為 Running 即部署成功

再來要如何 Access 到應用程式,請參考 Day16 - Gateway 教學,使用 Minikube Tunnelistio-ingressgateway 取得 EXTERNAL-IP,並設定好 Static Domain Name,即可透過 Domain Name 連接服務。

  1. 設定 Static Domain Name
sudo vi /etc/hosts

(要修改的內容)

127.0.0.1 localhost
127.0.1.1 myserver
# 在這底下新增 <ingressgateway-ip> istio-rollout.local
  1. 在瀏覽器輸入網址連接至服務
http://istio-rollout.local

在瀏覽器即可看到 Argo Rolloouts Demo 應用程式。

https://ithelp.ithome.com.tw/upload/images/20221008/20139235S6JTcWpga8.png

總結

本篇介紹 Argo Rollouts 的概念及安裝方式,並用 ArgoCD 透過 GitOps 方式部署應用程式,下一篇會實際使用 Argo Rollouts 完成 Canary 部署。


上一篇
Day27 - Istio 如何融入 DevOps 流水線
下一篇
Day29 - Argo Rollouts 實現自動化 Canary Deployment
系列文
學會 Kubernetes 然後呢?由 Istio 進入 DevOps 偉大航路30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言