- 使用GitOps實現Kubernetes的持續部署:模式、流程及工具
- (美)比利·袁等
- 2330字
- 2023-05-06 18:20:52
前言
隨著Intuit踏上從私有化部署到云原生的旅程,我們重塑構建和部署流程又有了新的機會。與許多大型企業類似,舊的部署流程以數據中心為中心,擁有獨立的QA、Ops和基礎設施團隊。部署代碼可能需要數周時間,而且當出現生產問題時,開發人員無法訪問基礎設施。基礎設施問題可能需要很長時間才能解決,并且需要許多團隊的合作。
由于Marianna Tessel(Intuit首席技術官)和Jeff Brewer(Intuit SBSEG首席架構師)決定在Kubernetes和Docker上豪賭,我們有幸成為第一個通過Kubernetes和Docker完全遷移生產應用程序的團隊。在此過程中,我們必須徹底改造CI/CD流水線并采用GitOps流程。Jesse和Alexander創建了Argo CD(CNCF孵化器項目)來滿足企業對GitOps的需求。Todd和他的團隊創建了世界一流的集群管理工具,因此我們可以輕松地擴展到數百個集群。
有了像Kubernetes和Docker這樣的標準,所有工程師就可以在基礎設施和部署方面使用一種通用語言。他們可以輕松地為多個其他項目做出貢獻,并在開發過程完成后進行部署。GitOps還使我們能夠準確了解環境中發生了哪些變化,這在你需要遵守合規性要求時尤其重要。我們無法想象回到以前的部署方式,希望本書可以幫助你快速上手GitOps!
目標讀者
本書適合希望使用GitOps過程,通過聲明式模型在Kubernetes上部署應用程序的Kubernetes基礎設施和運維工程師以及軟件開發人員閱讀。任何希望提高Kubernetes集群的穩定性、可靠性、安全性和可審計性,并通過自動化持續軟件部署來降低運營成本的人,都將從本書中獲益。
本書讀者應具備Kubernetes(例如Deployment、Pod、Service和Ingress資源)的應用知識,并且了解現代軟件開發實踐,包括持續集成/持續部署(CI/CD)、版本控制系統(例如Git)以及部署/基礎設施自動化。
非目標讀者
對于那些已經成功實施成熟的GitOps系統的高級用戶,建議閱讀與已選工具相關的書籍。
本書并不打算深入探討Kubernetes的所有方面。雖然本書涵蓋了許多與GitOps相關的Kubernetes概念,但對于尋求Kubernetes綜合性指南的讀者,建議查閱有關該主題的其他優秀書籍和在線資源。
內容組織
本書描述了GitOps在Kubernetes上的優勢,包括靈活的配置管理、監控、健壯性、多環境支持和安全性。
你將學習有關最佳實踐、技術和工具,讓企業能夠使用Kubernetes加速應用程序開發,同時不會影響穩定性、可靠性和安全性。你還將深入了解以下主題:
□有關分支、命名空間和配置的多環境管理。
□使用Git、Kubernetes和流水線進行訪問控制。
□與流水線中CI/CD、環境晉級、代碼推送/拉取和發布/回滾相關的注意事項。
□可觀測性和漂移探測。
□機密管理。
□滾動更新、藍綠、金絲雀、漸進式交付等部署策略之間的選擇。
本書通過教程和練習來培養你使用Kubernetes部署GitOps所需的技能。閱讀本書后,你將了解如何為Kubernetes上運行的應用程序實現聲明式的持續交付系統。相關的教程有:
□管理Kubernetes應用程序部署。
□使用Kustomize進行配置和環境管理。
□編寫基礎的Kubernetes持續交付Operator。
□使用Argo CD[1]、Jenkins X[2]和Flux[3]實現CI/CD。
命令式和聲明式 Kubernetes上的部署有兩種基本方法:命令式使用許多kubectl命令行;聲明式編寫清單并使用kubectl apply。前者對學習和交互式試驗很有用,后者適合可重用的部署和更改的跟蹤。
本書旨在讓你能夠跟著學,并使用自己的Kubernetes測試集群完成教程的實操部分。附錄A描述了用于創建測試集群的幾個選項。
書中包含了許多代碼清單。所有的代碼清單和其他支持材料都可以在能公開訪問的GitHub代碼倉庫(https://github.com/gitopsbook/resources)中找到。
我們鼓勵你克隆或復刻這個代碼倉庫,并在你完成本書中的教程和練習時使用它。
你的工作站上應安裝以下工具和實用程序:
□kubectl(v1.16或更新)。
□minikube(v1.4或更新)。
□bash或Windows Subsystem for Linux(WSL)。
大多數教程和練習都可以使用你工作站上運行的minikube完成。如果不行,我們會提示“是否需要云提供商上運行的集群”,你可以參考附錄A了解創建集群的詳細信息。
注 在云提供商上運行Kubernetes測試集群可能會產生額外費用。雖然我們已嘗試盡可能降低所推薦的測試配置的成本,但請記住你需要承擔這些成本。我們建議在完成每個教程或練習后刪除你的測試集群。
本書分為3部分,共11章。
第一部分涵蓋背景以及GitOps和Kubernetes的介紹:
□第1章帶你了解軟件部署的演進旅程以及GitOps如何成為最新實踐。該章還涵蓋了GitOps的許多關鍵概念和優勢。
□第2章給出了Kubernetes的關鍵概念以及為什么它原生的“聲明式”風格非常適合GitOps。該章還涵蓋了核心的Operator概念以及如何實現一個簡單的GitOps Operator。
第二部分介紹采納GitOps過程的模式和流程:
□第3章討論了環境的定義以及如何很好地將Kubernetes命名空間映射為環境。該章還涵蓋了環境實施的分支策略和配置管理。
□第4章深入介紹了GitOps CI/CD流水線,全面描述了完整流水線所需的所有階段。該章還包括代碼、鏡像和環境晉級以及回滾機制。
□第5章介紹了各種部署策略,包括滾動更新、藍綠部署、金絲雀部署和漸進式交付。該章還涵蓋了如何使用原生Kubernetes資源和其他開源工具來實現各個策略。
□第6章討論了GitOps驅動部署的攻擊面以及如何緩解各個領域的攻擊。該章還回顧了Jsonnet、Kustomize和Helm,以及如何根據使用場景選擇正確的配置管理模式。
□第7章討論了管理GitOps Secret的各種策略。該章還涵蓋了幾個Secret管理工具以及Kubernetes原生的Secret。
□第8章解釋了可觀測性的核心概念以及為什么它對GitOps很重要。該章還描述了使用GitOps和Kubernetes實現可觀測性的各種方法。
第三部分介紹幾個企業級的GitOps工具:
□第9章討論了Argo CD的目的和架構。該章還包括如何使用Argo CD配置應用程序部署,以及如何在生產中安全加固Argo CD。
□第10章討論了Jenkins X的目的和架構。該章還涵蓋了如何配置應用程序部署和晉級到各種環境。
□第11章討論了Flux的目的和動機。該章還包括如何使用Flux配置應用程序部署和多租戶。
可以按順序閱讀本書所有章節。但是如果你想跳轉到某個感興趣的特定領域,我們仍建議你先按順序閱讀基礎章節。例如,如果你想立即開始學習使用Argo CD,我們建議你在閱讀第9章之前先閱讀第1、2、3和5章,如圖0.1所示。

圖0.1 本書結構及閱讀順序
關于本書代碼
本書包含許多源代碼示例,有時會以粗體突出顯示與前面的步驟不同的代碼,例如當有新功能添加到現有代碼行時。
書中示例的源代碼可從https://github.com/gitopsbook/resources下載。
[1]https://argoproj.github.io/argo-cd
[2]https://jenkins-x.io
[3]https://github.com/fluxcd/flux
- 復雜性思考:復雜性科學和計算模型(原書第2版)
- SQL Server 2012數據庫技術與應用(微課版)
- App+軟件+游戲+網站界面設計教程
- 跟老男孩學Linux運維:MySQL入門與提高實踐
- AI時代的數據價值創造:從數據底座到大模型應用落地
- Apache Kylin權威指南
- HikariCP連接池實戰
- SQL Server 2012實施與管理實戰指南
- 大數據技術原理與應用:概念、存儲、處理、分析與應用
- 計算機視覺
- 大數據與機器學習:實踐方法與行業案例
- 商業智能工具應用與數據可視化
- Unity for Architectural Visualization
- Managing Software Requirements the Agile Way
- 數字孿生