在 TKE 中實踐 DevOps
概述
DevOps 理念被愈來愈多的企業採納,DevOps 是 Development 和 Operations 的組合詞,表明着重視「軟件開發人員(Dev)」和「IT 運維技術人員(Ops)」之間溝通合做的文化;旨在透過自動化「軟件交付」和「架構變動」的流程,使得構建、 測試、發佈軟件的過程可以更加地快捷、頻繁和可靠。在雲原生時代,咱們更須要 Devops 思惟來實現敏捷開發, 本文將介紹和實踐專爲雲原生打造的 TKE 容器 DevOps 服務,實現從代碼提交時觸發鏡像的自動構建,再到鏡像構建成功時觸發自動部署流程將應用部署、更新到 TKE 集羣中的一整套無縫銜接的 Devops 流水線。html
TKE 容器 DevOps 簡介
TKE 容器 DevOps 是 容器服務 TKE、容器鏡像服務 TCR 和 CODING DevOps 三個服務緊密結合,面向容器業務場景,具有自動化代碼編譯、容器鏡像構建、鏡像推送及應用部署等功能,爲客戶提供強大的一站式雲原生 DevOps 服務。容器 DevOps 快速入門請參考 TKE 和 Coding 協同業務實現快速迭代 最佳實踐文檔。node
TKE 容器 DevOps 業務流程
TKE 容器 DevOps 服務貫穿了整個應用開發和部署流程的全生命週期管理,實現了從更新代碼到應用部署、更新的自動化,以下圖所示:nginx
如何使用 TKE 容器 DevOps
操做場景
TKE 容器 Devops 功能提供了強大的雲原生 Devops服務,下面將按照上述 TKE 容器 Devops 業務流程圖來實現從源碼更新到業務發佈的整套自動化流程。web
前提條件
-
建立 TKE 測試集羣api
關於如何建立可參考文檔 部署容器服務TKE。緩存
-
開通 容器鏡像服務 TCR 服務微信
已建立可訪問的 TCR 測試實例和生成測試實例訪問憑證。 TCR 須要開通企業標準版或高級版支持雲原生交付工做流,詳情請參考 容器鏡像服務購買指南,目前 TCR 支持區域請參考 支持地域。架構
-
開通 CODING DevOps 服務app
已建立和完善了 Coding Devops 團隊。如使用子帳號進行操做,請使用主帳號在 CODING 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 私有倉庫鏡像有兩種方式:
- 在 TCR 支持區域內可配置 TKE 免密拉取 TCR 容器鏡像,關於 TCR 支持區域請參考 支持地域,關於如何配置可參考文檔 TKE 集羣使用 TCR 插件內網免密拉取容器鏡像。
- 手動配置 TKE 拉取 TCR 私有倉庫鏡像的訪問憑證,配置方式可參考 TKE 配置私有倉庫訪問示例 。
注意:上面的 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 流程。