Kubernetes中的CI/CD——TheNewStack的報告解讀

Kubernetes中的CI/CD——TheNewStack的報告解讀

來自專欄 Cloud Native

眾所周知Kubernetes並不提供代碼構建、發布和部署,所有的這些工作都是由CI/CD工作流完成的,最近TheNewStack又出了本小冊子(117頁)介紹了Kubernetes中CI/CD的現狀。下載本書的PDF請訪問:thenewstack.io/ebooks/k

本書的作者有:

  • Rob Scott:ReactiveOps公司的SRE
  • Janakiram MSV:Janakiram & Associates 的首席分析師
  • Craig Martin:Kenzan的高級副總裁
  • Container Solutions

這本小冊子里主要主要介紹了以下幾點:

  • DevOps模式
  • 雲原生應用模式
  • 使用Spinnaker做持續交付
  • 雲原生時代的監控

DevOps模式

這一章從一些流行的自動化運維工具講起,比如Chef、Puppet等,引申出CI/CD流水線,進而引出Docker和DevOps,將容器如何解除開發和運維之間的隔閡,但同時也帶來了一些挑戰,比如頻繁的發布變更如何控制,如何控制容器集群的行為,如何拆分應用到容器之中等。這是一個專門用於容器編排調度的工具呼之欲出,Kubernetes的出現徹底改變了局面,可以說它直接改變了應用的基礎架構。

Kubernetes細化的應用程序的分解粒度,同時將服務發現、配置管理、負載均衡和健康檢查等作為基礎設施的功能,簡化了應用程序的開發。

而Kubernetes這種聲明式配置尤其適合CI/CD流程,況且現在還有如Helm、Draft、Spinnaker、Skaffold等開源工具可以幫助我們發布Kuberentes應用。

有了基於Kubernetes的CI/CD流程後,又誕生了GitOps(http://weave.works的博客中有很多相關文章)和SecOps(Security Operation)。

雲原生應用模式

雲原生是通過構建團隊、文化和技術,利用自動化和架構來管理系統的複雜性和解放生產力。——Joe Beda,Heotio CTO,聯合創始人

這一章的重點是給出了雲原生應用的10條關鍵屬性。

  1. 使用輕量級的容器打包
  2. 使用最合適的語言和框架開發
  3. 以松耦合的微服務方式設計
  4. 以API為中心的交互和協作
  5. 無狀態和有狀態服務在架構上界限清晰
  6. 不依賴於底層操作系統和伺服器
  7. 部署在自服務、彈性的雲基礎設施上
  8. 通過敏捷的DevOps流程管理
  9. 自動化能力
  10. 通過定義和策略驅動的資源分配

作者然後將應用程序架構中的不同組件映射到雲原生的工作負載中,如下圖所示:

這也是DevOps需要關注的部分,如何將雲原生的組件映射為Kubernetes的原語(即Kubernetes里的各種資源對象和概念組合)呢?如下圖所示。

總結概括為以下10條:

  1. 不要直接部署裸的Pod。
  2. 為工作負載選擇合適的Controller。
  3. 使用Init容器確保應用程序被正確的初始化。
  4. 在應用程序工作負載啟動之前先啟動service。
  5. 使用Deployment history來回滾到歷史版本。
  6. 使用ConfigMap和Secret來存儲配置。
  7. 在Pod里增加Readiness和Liveness探針。
  8. 給Pod這隻CPU和內存資源限額。
  9. 定義多個namespace來限制默認service範圍的可視性。
  10. 配置HPA來動態擴展無狀態工作負載。

使用Spinnaker進行持續交付

作者首先講到了Spinnaker的各種特性,比如面向微服務啦,雲原生的交付工具啦,可視化的交付和基礎設施啦,支持多個region,支持容器和Kubernetes等等,不一而足,感興趣大家可以自己看下報告或者登陸Spinnaker官網https://www.spinnaker.io查看。

下圖是Spinnaker中的組件和角色的交互關係。

下圖是Spinnaker的幾種不同環境的流水線。

總之作者就是想說Spinnaker很好很強大啦,足以滿足您對雲原生應用CI/CD的需求。

雲原生時代的監控

監控是為了實現系統的可觀察性,不要以為監控就是簡單的出個監控頁面,監控其實包括以下部分:

  • 日誌收集
  • 監控和指標度量
  • 追蹤
  • 告警和可視化

要把其中任何一個方面做好都不容易。

作者主要講述的Prometheus和Grafana的開源監控方案。

這一章我不詳述,感興趣大家可以查看報告原文。

原文地址:Kubernetes中的CI/CD


推薦閱讀:

TAG:Kubernetes | DevOps | cloudnative |