【幹貨分享】時速雲基于Kubernetes的CI/CD實踐

2020-06-18 17:03:10 來源:IT168
        【每日科技網】

   1 面臨的DevOps需求

  随着客戶要求疊代速度的加快,公司的項目管理、交付管理面臨了來自公司内外部的巨大挑戰。

  公司目前需要管理很多客戶項目和自身疊代産品項目,産品使用Go、Java、NodeJS等多種技術棧的多個分支的代碼項目。而且每周需要交付多個測試版本進行持續驗證。同時,還要應對客戶現場的緊急版本修複、客戶定制版本交付等場景。

  解決上述問題的核心就是要提升效率,加快交付速度。

  2 CI/CD規劃概覽

    2.1 架構總覽

  結合 Kubernetes 的一些基礎理念和特性,綜合考慮容器 PaaS 平台、微服務治理平台在 DevOps 的需求,并融合企業内部已有的 CI/CD 等工具,自主實現了一套更适合于雲原生應用平台的 DevOps 服務體系。基本的技術架構及實現方式如下圖所示:

  上圖中,代碼倉庫中的代碼會被Job 創建在構建節點上的 Pod 的容器拉取,并執行編譯、單元測試、掃描、打包,制作鏡像、 Push 鏡像等操作後,這個Pod 就會被銷毀。容器日志會被節點的 Agent 發送到日志服務中心,可以提供容器被銷毀後的日志查詢。也可以使用 CronJob 執行定時任務。

  該方案具備以下優勢:

  不需要單獨部署複雜的高可用 CI/CD 服務,比如 Jenkins 集群等,簡化了部署管理的複雜度。

  構建任務均通過鏡像進行封裝,并在容器中進行,接口更加标準、透明。

  對構建任務的資源、限額、日志、監控、告警、計費等諸多能力可以直接利用 PaaS 平台,而無需重複開發,PaaS 未來的能力也可以直接為 DevOps 服務。

  可以通過容器 PaaS,讓構建任務具備更的調度能力。

  PaaS 層對底層資源的彈性伸縮也可以為 DevOps 服務,對構建資源進行伸縮策略的定義,實現構建資源的彈性。

  對 DevOps 平台的管理運維可以同容器 PaaS 一緻,沒有額外的學習成本。

  通過容器、鏡像等标準概念,對構建任務進行封裝,并快速實現 DevOps 的構建模版,使得 DevOps 平台通過自定義模版具備更好的擴展能力。

  2.2 關鍵技術

    2.2.1 技術要點

  這種架構模式下,可以把每一個構建任務通過Pod Spec來進行描述,相關的構建任務能力可以通過以下方式映射到Pod Spec中。

  同樣道理,結合上層的Job/CronJob,我們就可以控制構建的執行策略,比如構建任務期望的并⾏執⾏的最⼤ Pod 數量,期望的成功完成的 Pod 數量,從 Job 創建到活躍狀态的超時時間(默認 12 ⼩時),标記 Job 為失敗前的最⼤重試次數,默認 = 6;以及通過Cron 格式的任務計劃定義,Job 執⾏的并⾏策略,是否暫停後續執⾏,保留運⾏成功/失敗的曆史 Job 的數量。

    2.2.2 實踐舉例

  這裡舉兩個例子,來說明時速雲 DevOps 平台中每個構建任務的工作原理:

  構建Docker鏡像,也就是我們經常使用的從代碼生成鏡像的任務模版,其基本工作方式如下:

  每個構建任務都是一個Job,會按照用戶傳遞的信息組裝成Job的結構,并由K8s調度并執行,有DevOps Manager管理Job的運行情況。其中使用了InitContainer、Volume、Secret等多種K8s資源。

  服務持續部署,平台提供了鏡像部署、應用模版部署、Spinnaker、時速雲 DevOps 平台集成、應用包部署、服務狀态檢查等多種持續部署相關模版,通過靈活組合使用,可以滿足幾乎所有場景下的持續部署需求。如下圖所示的基本工作流程,我們會把不同部署方式封裝成對應的鏡像,并提供可視化配置界面供用戶使用。

  同樣,我們也提供了忽略某個構建任務的執行,某個構建任務失敗時速雲 DevOps 平台繼續執行,指定構建節點,自定義構建任務所需資源,當然也支持構建任務使用GPU資源,進行機器學習相關的時速雲 DevOps 平台處理能力。

  2.3 總結

  借助 Kubernetes 自動編排、自動回收資源的機制,減少了人工幹預。結合Kubernetes 提供的豐富的資源類型,CI/CD 解決方案也有了更多的選項和思路。仿佛 Kubernetes 是為 CI/CD 專門定做的。

  3 CI/CD工具及實踐

    3.1 工具及流程概覽

  我們的DevOps工具鍊有Jira, Gitlab, 時速雲 DevOps 平台,Sonarqube, TestLink, Harbor

  Jira: 項目管理;

  Gitlab: 代碼托管、在線Review;

  時速雲 DevOps 平台:基于 Kubernetes 的代碼拉取,編譯,代碼掃描,單元測試,打包,構建鏡像、持續部署,審批,郵件;

  Sonarqube:代碼靜态掃描;

  TestLink: 測試管理;

  Harbor: 鏡像托管,鏡像安全掃描;

  流程如下:

  3.2 實踐說明

    3.2.1 需求/缺陷管理

  需求和缺陷管理我們使用功能強大的Jira工具,以兩周一疊代方式進行敏捷式開發。

  3.2.2 代碼 Review/Merge

  聊天工具集成 gitlab,PR提交後Reviewer及時看到提交信息,進行Review和Merge。

  3.2.3 Gitlab觸發自動化構建

  時速雲 DevOps 平台自動生成Gitlab項目的webhook, 當gitlab有事件發生,把事件信息發送到時速雲 DevOps 平台,時速雲 DevOps 平台根據條件觸發自動執行構建。

  3.2.4 時速雲 DevOps 平台

    3.2.4.1 流程簡介

  時速雲 DevOps 平台基于Kubernetes和Docker運行具體任務,由 Kubernetes調度、執行完後銷毀。每一個任務模闆最終生成Kubernetes的Job,Job會生成Pod運行任務, 并管理生命周期。

  每個任務模闆鏡像都有為自身任務的最小化工具。比如maven任務鏡像隻有maven客戶端命令工具,容器被job生成時,會通過進入點運行maven命令,運行結束後将結束容器。代碼掃描任務會有sonar-scanner客戶端工具,Docker構建任務可以運行Docker build命令構建鏡像和Push鏡像到Harbor。

  鏡像推送到Harbor後會使用平台持續部署任務模闆更新服務。

  @

  持續部署成功後服務會被升級到版本。

  3.2.4.2 任務模闆

  時速雲 DevOps 平台的任務模闆是為執行任務的鏡像和數據集合。

  sonar掃描任務為例,sonar掃描任務執行就是容器化運行 sonar-scanner。

  下圖為sonar掃描任務的Dockerfile, 就是把代碼和sonar掃描配置文件拷貝到指定目錄,運行sonar-scanner命令。

  執行結果以Rest API方式發送到平台,平台記錄執行結果,并根據設置執行下一步任務或失敗退出。

  3.2.5 集成測試

  測試有測試用例,測試用例有測試結果,如果測試結果與期待結果不符,同步到 Jira, 再執行編碼的步驟,形成一個閉環。

  測試用例和測試版本的測試結果使用TestLink工具管理。

  集成測試是人工測試和基于Selenium的python腳本的自動化測試共同完成。

  3.2.6 Harbor 同步

  測試人員進行測試通過以後,使用Harbor鏡像同步功能,同步到運維環境Harbor。

   3.2.7 Harbor 鏡像更新後通過觸發設置觸發執行部署任務

  harbor的common/config/registry/config.yml設置notification屬性為時速雲 DevOps 平台 webhook地址和認證方式,時速雲 DevOps 平台可以根據 payload 信息觸發執行 CI/CD。

  3.2.8 部署運維服務

  時速雲 DevOps 平台被觸發執行後,與上面部署一樣會根據新的鏡像更新部署新的服務。

  3.2.9 自動标記 Jira

  集成測試結束以後,通過 Jira API , 把 gitlab 中的大括号裡相應的 Jira issue 為關閉狀态,添加部署版本說明

  3.2.10 保障代碼和最終交付産物的源頭一緻性

  如下圖,在代碼構建時把代碼的版本信息一同寫入鏡像可以做到最終交付産物和代碼源頭的一緻性比較。

  git rev-parse --short HEAD > .gitversion

  git log --pretty=oneline HEAD...$PREVIOUS_COMMIT_ID > .gitdiff

  4 CI/CD流程總結

  ⑴ Jira, Gitlab, TestLink, Harbor 等工具的集成、 Kubernetes 特性和各組件的靈活使用、自動化構建流程使得 CI/CD 流程縮短了交付時間。而且從代碼到最終交付産物的可驗證性,需求到代碼和Bug 到代碼的可追溯性,提高了效率。

  ⑵ 于公司服務器的計算資源也使得因 Kubernetes 的機制發揮到優先資源下靈活應用,讓各個團隊避免了因為計算資源不夠等待資源的情況。

  ⑶ Kubernetes 的良好機制,使得公司有限服務器資源下靈活應用,讓各個團隊避免了因為計算資源不夠等待資源的情況。

  ⑷ 時速雲 DevOps 平台任務模闆容易擴張、可以快速集成其他第三方工具,也為管理、測試、研發團隊快速提供需要的工具集成。

  ⑸ 時速雲 DevOps 平台任務模闆的最小化,節省了資源,節省了費用。

  ⑹ 對部分開源項目的修改和貢獻也提高了工作的效率。比如修改 Harbor 的用戶賬戶體系和驗證方式與平台一緻,減少了用戶在交付中鏡像賬号的額外管理。修改 TestLink 源碼,實現一鍵創建 Jira Bug ,自動使 Jira 項目管理與測試管理工具互相追蹤,方便查看與管理。

  當然我們的 CI/CD 流程還有很多不足,比如缺少 ChatOps 等更方便的功能、對已有流程複盤并優化、還需要集成更多 CI/CD工具等。

    5 未來規劃

  ⑴ 随着Kubernetes 的版本升級,提供了更多的功能,這些功能是否能讓我們的 CI/CD 更靈活。比如Node、Pod 的親和性設置,部署容器啟動先後順序設置等。

  ⑵ 提供ChatOps功能,通過集成提供 API 的聊天工具。

  ⑶ 與更多的 DevOps 工具集成,包括 GitInspector等。

  ⑷ 對開源工具的優化,以及對開源社區的貢獻。比如 TestLink 等還有很多缺陷,集成時會遇到需要解決的問題等。

  ⑸ 持續增強DevOps前期項目管理、産品管理的功能模塊,例如立項管理、路線圖、需求管理、版本管理、發布物、産品運營、裡程碑、疊代計劃、測試管理等功能方向,有助于奠定項目/産品的基石。

  ⑹ 持續增強DevOps後期度量與優化功能模塊,例如質量、效率、進度、APM、問題庫、自愈等功能方向,幫助項目/産品後期更好的運營。

免責聲明:本文僅代表作者個人觀點,與每日科技網無關。其原創性以及文中陳述文字和内容未經本站證實,對本文以及其中全部或者部分内容、文字的真實性、完整性、及時性本站不作任何保證或承諾,請讀者僅作參考,并請自行核實相關内容。
    本網站有部分内容均轉載自其它媒體,轉載目的在于傳遞更多信息,并不代表本網贊同其觀點和對其真實性負責,若因作品内容、知識産權、版權和其他問題,請及時提供相關證明等材料并與我們聯系,本網站将在規定時間内給予删除等相關處理.

猜你喜歡

千匠網絡實踐:如何讓大模型從“能用”走向“好用”

過去兩年,幾乎所有上規模的企業都接入了大模型。智能客服、知識問答、AI助手——這些應用已經算不上新鮮事。但在演示會議室與真實業務場景之間,一個顯著落差正在浮現:能聊天,但不理解企業業務語境;能生成内容

千匠網絡

1天前

海能達發布全新專業防爆PDT對講機CH690Ex

随着我國應急管理體系持續完善,消防救援任務正在從傳統火災處置,向化工園區事故、危險品洩漏、地下空間救援、大型綜合災害等多風險、多場景方向發展。在這些複雜環境中,救援現場往往面臨爆炸性氣體、可燃性粉塵、

2周前

海能達CCW 2026載譽收官:AI與融合通信引領專用通信新未來

6月16日至18日,2026年全球關鍵通信展(CCW2026)在英國倫敦舉行。展會期間,海能達集中展示了從終端到系統、從感知到決策的全鍊路創新版圖,AI與融合通信産品及解決方案貫穿三天展期,持續獲得高

1個月前

登陸歐洲 Intersolar!遠景AI電力系統支撐全球 AI 算力發展

慕尼黑,2026年6月23日——在IntersolarEurope2026上,遠景科技集團發布面向AI數據中心的下一代電力基礎設施——融合風光儲一體化方案、固态變壓器(SST)、800V直流供電、儲能

1個月前

海能達六度問鼎ICCAs,PDC650與西安機場方案摘得雙獎

6月17日,2026年國際關鍵通信獎(InternationalCriticalCommunicationsAwards,ICCAs)在英國倫敦舉行的全球關鍵通信展(CCW2026)期間正式揭曉。海能

1個月前

海能達即将亮相2026年CCW全球關鍵通信展: 攜AI與融合通信解決方案登陸倫敦

6月16日至18日,2026年CCW全球關鍵通信展将在英國倫敦啟幕。作為全球領先的專用通信解決方案提供商,海能達将以全場景關鍵通信産品矩陣亮相F25展位,集中展示面向公共安全、應急救援、城市治理等領域

1個月前