Kubernetes中的CI/CD——TheNewStack的報告解讀
來自專欄 Cloud Native
眾所周知Kubernetes並不提供代碼構建、發布和部署,所有的這些工作都是由CI/CD工作流完成的,最近TheNewStack又出了本小冊子(117頁)介紹了Kubernetes中CI/CD的現狀。下載本書的PDF請訪問:https://thenewstack.io/ebooks/kubernetes/ci-cd-with-kubernetes/
本書的作者有:
- 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條關鍵屬性。
- 使用輕量級的容器打包
- 使用最合適的語言和框架開發
- 以松耦合的微服務方式設計
- 以API為中心的交互和協作
- 無狀態和有狀態服務在架構上界限清晰
- 不依賴於底層操作系統和伺服器
- 部署在自服務、彈性的雲基礎設施上
- 通過敏捷的DevOps流程管理
- 自動化能力
- 通過定義和策略驅動的資源分配
作者然後將應用程序架構中的不同組件映射到雲原生的工作負載中,如下圖所示:
這也是DevOps需要關注的部分,如何將雲原生的組件映射為Kubernetes的原語(即Kubernetes里的各種資源對象和概念組合)呢?如下圖所示。
總結概括為以下10條:
- 不要直接部署裸的Pod。
- 為工作負載選擇合適的Controller。
- 使用Init容器確保應用程序被正確的初始化。
- 在應用程序工作負載啟動之前先啟動service。
- 使用Deployment history來回滾到歷史版本。
- 使用ConfigMap和Secret來存儲配置。
- 在Pod里增加Readiness和Liveness探針。
- 給Pod這隻CPU和內存資源限額。
- 定義多個namespace來限制默認service範圍的可視性。
- 配置HPA來動態擴展無狀態工作負載。
使用Spinnaker進行持續交付
作者首先講到了Spinnaker的各種特性,比如面向微服務啦,雲原生的交付工具啦,可視化的交付和基礎設施啦,支持多個region,支持容器和Kubernetes等等,不一而足,感興趣大家可以自己看下報告或者登陸Spinnaker官網https://www.spinnaker.io查看。
下圖是Spinnaker中的組件和角色的交互關係。
下圖是Spinnaker的幾種不同環境的流水線。
總之作者就是想說Spinnaker很好很強大啦,足以滿足您對雲原生應用CI/CD的需求。
雲原生時代的監控
監控是為了實現系統的可觀察性,不要以為監控就是簡單的出個監控頁面,監控其實包括以下部分:
- 日誌收集
- 監控和指標度量
- 追蹤
- 告警和可視化
要把其中任何一個方面做好都不容易。
作者主要講述的Prometheus和Grafana的開源監控方案。
這一章我不詳述,感興趣大家可以查看報告原文。
原文地址:Kubernetes中的CI/CD
推薦閱讀:
TAG:Kubernetes | DevOps | cloudnative |