1. 程式人生 > 實用技巧 >在騰訊雲容器服務 TKE 中實踐 DevOps

在騰訊雲容器服務 TKE 中實踐 DevOps

概述

DevOps 理念被越來越多的企業採納,DevOps 是 Development 和 Operations 的組合詞,代表著重視「軟體開發人員(Dev)」和「IT 運維技術人員(Ops)」之間溝通合作的文化;旨在透過自動化「軟體交付」和「架構變更」的流程,使得構建、 測試、釋出軟體的過程能夠更加地快捷、頻繁和可靠。在雲原生時代,我們更需要 Devops 思維來實現敏捷開發, 本文將介紹和實踐專為雲原生打造的 TKE 容器 DevOps 服務,實現從程式碼提交時觸發映象的自動構建,再到映象構建成功時觸發自動部署流程將應用部署、更新到 TKE 叢集中的一整套無縫銜接的 Devops 流水線。

TKE 容器 DevOps 簡介

TKE 容器 DevOps 是 容器服務 TKE容器映象服務 TCRCODING DevOps 三個服務緊密結合,面向容器業務場景,具備自動化程式碼編譯、容器映象構建、映象推送及應用部署等功能,為客戶提供強大的一站式雲原生 DevOps 服務。容器 DevOps 快速入門請參考 TKE 和 Coding 協同業務實現快速迭代 最佳實踐文件。

TKE 容器 DevOps 業務流程

TKE 容器 DevOps 服務貫穿了整個應用開發和部署流程的全生命週期管理,實現了從更新程式碼到應用部署、更新的自動化,如下圖所示:

如何使用 TKE 容器 DevOps

操作場景

TKE 容器 Devops 功能提供了強大的雲原生 Devops服務,下面將按照上述 TKE 容器 Devops 業務流程圖來實現從原始碼更新到業務釋出的整套自動化流程。

前提條件

操作步驟

TKE 容器 Devops 訪問入口

在 TKE 控制檯左側功能選單欄點選【Devops】功能連結即可進入【容器 Devops】介紹介面,如下圖所示:

點選 【立即使用】即可跳轉到所屬團隊的 Coding 主頁面使用相關 DevOps 功能。

配置程式碼託管

在 Coding 團隊主頁面建立一個測試專案和測試程式碼倉庫,關於 Coding 程式碼託管介紹請參考 程式碼託管介紹 。建立步驟如下:

步驟 1:在 Coding 團隊主頁面【 專案】中建立測試專案,如下圖所示:

步驟 2:點選已建立的測試專案 “test-jokey” 進入專案主頁面,在【程式碼倉庫】選單中新建測試程式碼倉庫,如下圖所示:

建立構建計劃

在測試專案 “test-jokey” 主頁面左側選單【持續整合】的子選單 【構建計劃】中建立一個構建計劃,構建計劃是持續整合的基本單元,可以通過選擇構建計劃模版快速建立一個構建計劃,詳情請參考文件 快速開始持續整合

步驟 1:選擇 “構建映象並推送到 TCR 企業版” 模版快速建立一個構件計劃,建立示例如下:

步驟 2:根據構建計劃模版選擇要檢出的程式碼源和配置 TCR 訪問憑證相關環境變數, 右邊可以看到模版生成的 Jenkinsfile 預覽,如下圖:

提示:Coding devops 和 TCR 例項之間內網互通,映象 push 預設使用內網傳輸,無需另外配置。

使用構建模版生成的構建專案,也可以通過點選構建專案的【設定】選單再對構建詳情進行自定義配置,構建計劃配置頁面的功能說明如下:

【基礎資訊】: 基礎配置頁面可選擇程式碼源和節點池等基礎配置,節點池相關說明請參考文件 構建節點

【流程配置】:用來配置執行構建任務的環境,相關說明請參考 構建環境

【觸發規則】:用來配置構建計劃的觸發規則,可支援通過多種方式來觸發構建計劃,相關說明請參考 觸發規則

【變數與快取】:環境變數與快取配置,相關說明請參考 環境變數快取目錄

【通知提醒】:構建計劃完成時可向指定的 Coding 團隊成員傳送通知提醒。

另外還可以在【專案配置 -> 開發者選項 -> WebHook】 中新建 WebHook 的方式將事件通知推送到企業微信等即時通訊平臺,詳情請參考 WebHook繫結企業微信群機器人,配置示例如下圖:

想了解更多關於 Coding 持續整合的詳細介紹請參考 持續整合介紹

建立持續部署

在測試專案 “test-jokey” 主頁面左側選單 【持續整合】的子選單 【Kubernetes】中根據步驟引導建立持續部署流水線,如下圖所示:

配置雲賬號

請參考 雲賬號 文件,新增配置部署雲上資源的訪問雲賬號資訊,可以選擇【騰訊雲 TKE】或者【Kubernetes】 型別的雲賬號,輸入相關認證配置新增雲賬號,這裡選擇了【Kubernetes】方式繫結。

配置應用和流程

關於 Coding 應用與專案相關說明請參考文件 應用與專案流程配置 ,這裡僅簡單說明下在配置應用和流程過程中的關鍵配置項。

在建立應用時,需要勾選【 Kubernetes(TKE) 部署】方式:

在新建的應用中建立部署流程時,選擇【Kubernetes】流程模版,再根據實際需要選擇模版下的流程,這裡選擇了下圖中第二個流程,部署 Deployment 和 Service 到 Kubernets 叢集的流程:

在【部署流程】中配置部署流程時,【啟動所需製品】選項關聯之前的持續整合環節生成的 TCR 倉庫映象製品:

使用【自動觸發器】繫結 TCR 倉庫映象製品,這裡是重點,作用是當有新版本映象構建成功時,將自動觸發部署流程,配置方式如下:

接下來就是配置【部署 Deployment】和【部署 Service】部署階段,兩個階段的配置方式類似,選擇之前新增的有部署許可權的雲賬號和填寫自定義的 Manifest,即自定義部署 YAML 模版。

自定義 Deployment YAML 示例如下:

提示:關於持續部署更新策略

本示例僅使用了一個簡單的 Deployment YAML 部署到 Kubernetes 叢集,使用了預設的滾動部署(RollingUpdate)更新策略。實際上,可以藉助 Nginx-ingress / Istio 等工具配置更高階的更新策略,如藍綠髮布、金絲雀、A/B 測試等,具體使用方法請參閱 藍綠髮布Nginx-ingress 實現自動化灰度釋出持續部署 + TKE Mesh 灰度釋出實踐

apiVersion: apps/v1
kind: Deployment
metadata:
  name: devops-app
spec:
  replicas: 2
  selector:
    matchLabels:
      app: devops-app
  template:
    metadata:
      labels:
        app: devops-app
    spec:
      containers:
        - image: xxx-test.tencentcloudcr.com/xxx-test/jokey-test  # 示例映象地址
          name: devops-app
          ports:
            - containerPort: 5000
      imagePullSecrets:  # 私有倉庫訪問憑證配置 
        - name: tcr-secret # 訪問憑證 secret

其中, 對於 spec.template.spec.containers.*.image 的映象地址欄位 Coding 會有一個轉換匹配規則, 關於轉換匹配規則的說明請參考文件 在 manifest 中綁定製品

關於 TKE 拉取 TCR 私有倉庫映象有兩種方式:

注意:上面的 Deployment YAML 示例使用了 “手動配置 TKE 拉取 TCR 私有倉庫映象的訪問憑證” 的方式。

自定義的 Service Manifest YAML 示例:

apiVersion: v1
kind: Service
metadata:
  labels:
    app: devops-svc
  name: devops-svc
spec:
  ports:
    - port: 5000
      protocol: TCP
  selector:
    app: devops-app

另外可以為部署流程的每個階段配置自定義事件通知(可選),以便方便快捷的獲知部署流程執行情況,這裡配置了企業微信通知方式,獲取企業微信 Webook 機器人鏈接的方法可參考 建立企業微信群機器人

關聯專案和應用

關聯專案和應用配置請參考文件 專案和應用關聯

提單釋出

提單釋出使用和配置請參考文件 新建釋出單

想了解更多關於 Coding 持續部署的詳細介紹請參考 持續部署介紹

測試驗證

在專案程式碼檔案中修改新增如下所示的 v2 API 程式碼後提交 master 分支:

由於【持續整合】中的構建計劃使用了 “程式碼更新時自動執行” 的事件觸發配置, 瞭解相關觸發配置請參考 觸發規則。當提交修改的程式碼時,會自動觸發關聯的構建計劃執行:

如果為持續整合配置了企業微信 Webhook 通知,企業微信也會收到相應的即時通知訊息,如下圖所示:

當構建計劃生成 Docker 映象製品時,又會自動觸發關聯的【持續部署】流程,將新的映象應用更新到 TKE 叢集中:

如果部署流程有配置企業微信通知的話,當部署流程任務完成時,會收到對應的企業微信部署完成通知,如下圖所示:

此時,可以在 TKE 中看到已經成功更新了工作負載:

從測試驗證結果可以看出,我們在 TKE 中實現了從原始碼更新到業務釋出的整套 DevOps 流程。

【騰訊雲原生】雲說新品、雲研新術、雲遊新活、雲賞資訊,掃碼關注同名公眾號,及時獲取更多幹貨!!