美文网首页
当下最热门的 GitOps,你知道怎么与K8s和云原生应用程序一

当下最热门的 GitOps,你知道怎么与K8s和云原生应用程序一

作者: Lin_b0c9 | 来源:发表于2020-05-27 16:04 被阅读0次

    本文介绍了GitOps如何与Kubernetes和云原生应用程序一起使用,以及基本原理和Flux入门。

    云原生应用程序以其改进的性能和高效率在市场上占主导地位。尽管有更多资源来支持作为微服务运行的云原生应用程序,但是管理复杂的云架构仍然是一个挑战。您运行的微服务越多,您必须处理的任务越多,以保持云环境的健康和平稳运行。

    自动化成为解决该问题的明显方法。特别是Kubernetes现在受到新方法的支持,例如基础架构即代码和大量自动化工具。尽管如此,当今的CI / CD周期仍需要更强大且敏捷的体系结构。这是GitOps为Kubernetes就派上用场了。

    什么是GitOps?

    GitOps是一种持续部署的新方法,它利用Git作为声明性基础结构和应用程序的单一事实来源,同时提供修订和变更控制。使用GitOps,通过提交拉取请求(和后续合并)来运行系统,以实现Git存储库中表示的系统的所需状态。

    带有Kubernetes的GitOps通过声明性的持续交付系统提供了代码级基础架构和不变的基础架构。声明式配置和主动对帐模型的样式扩展了该平台在Kubernetes应用程序的部署,监视和生命周期管理方面的核心优势。

    该框架旨在与任何CI / CD管道很好地集成,即使您使用第三方工具来本机管理管道也是如此。

    实际上,GitOps比实际工具更多的是工作流程或方法。这种方法可以帮助您优化CI / CD周期,而无需更改将微服务开发和部署到云的方式。

    由于GitOps是作为持续交付云原生应用程序的框架而开发的,因此您可以依靠该框架来简化管道中的某些流程。它无缝集成了我们已经熟悉的Git工具和CD工具。

    本质上,GitOps将传统的CI / CD管道与Git工作流结合在一起,从而可以更好地进行Kubernetes的端到端管理和应用程序开发。两者被视为统一的过程,而不是分开的过程。

    GitOps的特点是:

    跨容器化集群和应用程序的部署,管理和监视的最佳实践

    以开发人员为中心的管理应用程序的经验,其中使用Git的全自动CI / CD管道/工作流用于开发和运营

    使用Git版本控制系统来跟踪和批准对应用程序的基础架构和运行时环境的更改

    GitOps的好处

    通过定义,很容易看出GitOps如何从改进的开发人员体验开始为表带来很多好处。开发人员不再需要担心将代码打包在容器中以及使用Kubernetes集群的问题。相反,他们可以专注于自己的代码,依靠熟悉的工具(如Git)来处理其他所有内容。

    这是对开发人员体验的绝对改善。即使在DevOps专家的协助下,在许多情况下,应用程序部署仍然是瓶颈,这仅仅是因为需要易于打包的包装良好的代码和微服务。GitOps以其非常规的方法解决了这一瓶颈。

    实施该方法后,还可以期望应用程序具有更好的稳定性。Git具有详细的日志记录系统,可轻松进行审核和跟踪,当您使用GitOps作为方法时,您将从同一日志记录工具中受益。对Kubernetes集群的更改被记录在日志中,从而使云审计变得更加容易管理。

    甚至错误和崩溃之类的细节也是可以追溯的。诸如谁提交更改以及这些更改的结果之类的详细信息会记录在每一步中。无论您是尝试遵循安全性最佳实践还是追求SOC 2合规性,Git日志的使用无疑会使维护稳定的系统变得更加容易。 

    大多数组织必须对其流程和系统进行大量投资才能合规和可审核。使用GitOps和Kubernetes,可以以最小的努力满足大多数合规性和可审核性要求。在此处阅读有关与我们达成SOC 2合规性的更多信息。

    还有一个事实,GitOps帮助开发团队提高了生产率。DevOps运动中出现的最突出的范例之一是声明性系统和配置的模型。简而言之,使用声明性模型描述了要实现的目标,而不是如何实现目标。 

    消除与基础架构相关的任务也是巨大的帮助。尽管使用传统的DevOps方法,但许多开发人员对将其云基础架构作为代码进行管理并不完全满意。该过程仍然涉及一定程度的复杂性。

    传统上,基础架构维护往往成为瓶颈,而不是支持功能。许多开发团队最终将管理基础架构的任务与主要的CI / CD管道分开,从而导致流程效率进一步降低。GitOps完全消除了瓶颈,而无需更改管道。

    GitOps还有助于改善云环境的安全性和标准化。将代码更改推送到Git,然后再进行进一步处理。可以采取其他安全措施,例如根据安全标准进行代码检查。将登台服务器集成到流程中也是一种惯例。

    在这种情况下,事实的唯一来源是Git接管的角色。每当安全问题影响系统时,您始终可以通过查看Git存储库找到根本原因。只要直接对Kubernetes集群进行更改,警报和日志就会自动发送到Git,这为该方法增加了一层安全性。

    另外,GitOps通过将其对环境的声明性规范存储在源代码控制中作为事实来源来帮助恢复基础结构环境。通过对环境应该是什么的完整定义(唯一的事实来源),它有助于在发生灾难时重新创建环境。

    最后,事实是GitOps使整个系统更加可靠。您可以通过控制Git存储库来分叉和还原更改。您用于管理代码和分支的相同Git命令可用于管理整个云环境。当出现问题时,回滚到某个快照很容易。

    GitOps还增加了复杂的自动化功能。您可以在Git中自动化的所有事情都可以在GitOps中实现。同时,该方法本身可以通过简单的命令自动管理Kubernetes集群。这是一种真正满足现代云原生应用程序需求的方法。

    GitOps的基本原理

    在介绍如何实现GitOps作为一种方法之前,还需要仔细研究这种方法的基本原理。 

    1.有关基础架构的所有内容均以声明方式描述。所有服务器配置都定义为事实,并已完全合并到Git存储库中,以实现最大的可靠性。声明式还意味着对应用程序声明进行彻底的版本控制。

    2.系统状态在Git中进行版本控制。这是从GitOps的错误中恢复非常容易的主要原因之一。您可以以一致的方式回滚到某个版本。无需花费数小时进行灾难恢复,您只需花费几分钟。

    3.需要批准更改,但是可以在系统中实施批准的更改。在实施之前,不需要单独的部署工作流或新代码的预打包。一切都会自动发生。

    4.正确性和安全性是流程的一部分。无需将单独的安全性和完整性工作流程并入CI / CD管道。基础架构即代码已提升到一个全新的水平。

    GitOps工作流程

    GitOps在处理更改方面非常简单。该过程从将新代码推送到Git进行进一步审查开始。一旦清除并批准了新代码,它们就会合并到Git中。这是触发部署新代码的动作的地方。

    Git将与您喜欢的CD流水线工具一起触发创建新映像。该过程是完全自动化的,因此您只需要定义一次参数。与AWS CodePipelineAWS CodeCommit之类的工具结合使用,可能性是无限的。不是AWS用户?整合谷歌云乙ü ILD的连续部署詹金斯的持续集成工具。或者,Cloud Build的CI也可以链接到Google的Spinnaker CD工具。

    常用的工具是Flux。Flux与Amazon EKS无缝协作 ,可提供真正可扩展的云环境。CodeBuild可用于将新代码推送到ECR,然后Flux将自动对EKS集群进行必要的更改。

    什么是助焊剂?

    Flux自动将容器部署到Kubernetes。它填补了构建和监视之间存在的自动化空白。

    Flux的主要功能是版本控制存储库和集群之间的自动同步。如果您对存储库进行任何更改,则这些更改将自动部署到集群中。

    另一个功能是容器的部署自动化。它将持续监视一系列的容器注册表,并在适用时部署新版本。

    这对于使存储库以及群集保持最新状态非常有用。由于Flux能够查看新映像并相应地更新集群,因此它还允许独立的团队拥有自己的部署管道。但是也可以禁用此功能,并且可以将图像锁定到特定版本。

    与其他DevOps工具的集成

    为了跨环境和群集自定义配置,Flux内置了对Kustomize和Helm的支持。

    助焊剂工作流程图

    Flux将监视您指定的所有容器映像存储库。它可以检测新映像,触发部署并自动更新Kubernetes集群的所需运行配置,并且可以在可配置部署策略的范围内进行。

    如何安装助焊剂

    如果您已经在使用Kubernetes和Helm,请按照Flux的深入教程进行操作。该教程是最新的Flux版本1.18.0。

    结论

    如您所见,设置Flux,部署应用,授予Flux访问权限以及完成修改所涉及的实际步骤非常简单。 

    许多开发人员已经在利用GitOps并实现收益。这种方法将进一步增强Kubernetes作为云平台的能力。期望将来会在更多开发项目中实施GitOps。

    更多文章详见:http://www.magedu.com/xwzx/linuxxx

    相关文章

      网友评论

          本文标题:当下最热门的 GitOps,你知道怎么与K8s和云原生应用程序一

          本文链接:https://www.haomeiwen.com/subject/tomwahtx.html