An operating model for Kubernetes and other cloud native technologies, providing a set of best practices that unify deployment, management and monitoring for containerized clusters and applications.
A path towards a developer experience for managing applications; where end-to-end CICD pipelines and git workflows are applied to both operations, and development.
推模式和拉模式
本章将介绍交付流水线中的推模式和拉模式,并解释为何 GitOps 选用拉模式来构建流水线。
CI/CD 流水线
目前大多数 CI/CD 工具都基于推模式建交付流水线。代码被合并到主分支后会触发 CI 系统进行构建和一系列的测试,并将新生成的镜像推送至镜像仓库,最后再通过 kubectl set image、helm upgrade、ksonnet apply 等方式将新版本直接应用到系统,整个流程如下图所示。
虽然这样的方式自动化程度很高,但对它进行审视后会发现如下问题:
跨越安全边界共享秘钥 - 在推模式下,为了让 CI 系统能够自动地部署应用,需要将集群的访问秘钥共享给它。虽然可以通过一些措施进行防护,但毕竟还是将秘钥暴露在了可信度较低的安全上下文中。这种做法扩大了攻击面,会给系统带来潜在的安全风险。
回滚操作复杂 - 如果通过 CI 任务完成一次部署后,系统出现异常,你将如何知道应该回滚到哪一个版本?你可能需要仔细查看构建日志才能找到答案。
难以快速重建集群 - 在集群完全崩溃的情况下进行重建,如何确定需要部署的每个应用的版本?你可能需要重新跑一遍 CI 任务。
Flickr 的工程师 John Allspaw 和 Paul Hammond 在 Velocity Conf 2009 上发表的演讲 10+ Deploys Per Day: Dev and Ops Cooperation at Flickr 开启了 DevOps 时代的序幕。它是人们追求以更高的频率发布高质量的软件的必然产物。