前言
随着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