”工欲善其事,必先利其器。“—孔子《论语.录灵公》
首页 > 编程 > GitOps:软件交付和基础设施管理领域的游戏规则改变者

GitOps:软件交付和基础设施管理领域的游戏规则改变者

发布于2024-08-15
浏览:248

您是否厌倦了使用多种工具和流程来管理软件部署?进入 GitOps——这种改变游戏规则的方法正在席卷 DevOps 世界。让我们深入了解 GitOps 的全部内容,为什么它可能是您一直在寻找的解决方案,以及真正的公司如何使用它来转变其运营。

GitOps 有哪些热门话题?

想象一个世界,您的整个系统(从代码到基础设施)都整齐地打包在 Git 存储库中。听起来很不错,对吧?简而言之,这就是 GitOps。 Weaveworks 的这个创意诞生于 2017 年,正在重新定义组织管理和交付软件的方式。

GitOps: The Game-Changer in Software Delivery and Infrastructure Management

GitOps 101:基础知识

那么,GitOps 是如何工作的?让我们来分解一下:

  1. 代码和配置就绪:一切都从您的代码和配置文件开始。这些就像整个系统的蓝图。
  2. Git Push: 变化?只需将它们推送到 Git 即可。这是您一切所需的一站式商店。
  3. 持续集成魔法:一旦您提交更改,GitHub Actions 等 CI 工具就会启动。他们构建您的应用程序、运行测试,甚至扫描安全问题。
  4. 容器镜像: 通过所有检查吗?伟大的!您的代码被打包到整洁的容器图像中。
  5. 图像注册表:这些图像在中央注册表中找到一个家,准备采取行动。
  6. 持续部署: ArgoCD 或 Flux 等工具密切关注您的 Git 存储库,确保您的系统始终与 Git 中的内容匹配。

为什么你会喜欢 GitOps

  1. 提高生产力:更少的体力工作意味着更多的时间来处理很酷的事情。
  2. 坚如磐石的稳定性:哎呀时刻?不用担心。回滚是轻而易举的事。
  3. 诺克斯堡安全: 安全检查直接融入流程中。
  4. 清晰的审计追踪: 谁在何时做了什么?一切都在 Git 中。
  5. 快速恢复:灾难来袭?反弹速度比以往任何时候都快。

现实世界中的 GitOps

无论您处于开发、测试还是生产阶段,GitOps 都会为您提供支持。它确保您的环境完美和谐,尽早发现问题。但不要只相信我们的话——让我们看看一些现实世界的成功案例:

  1. Weaveworks:GitOps 先驱

谁比创造这个术语的公司更好? Weaveworks 使用 GitOps 来管理自己的基础设施:

  • 他们使用开源 GitOps 工具 Flux 来管理跨不同云提供商的数十个集群。
  • 他们的整个平台,包括微服务和数据库,都是在 Git 存储库中定义的。
  • 结果: 将部署时间从几小时缩短到几分钟,并提高了系统可靠性。

例子:

   # Sample Flux HelmRelease for a microservice
   apiVersion: helm.fluxcd.io/v1
   kind: HelmRelease
   metadata:
     name: my-app
     namespace: default
   spec:
     releaseName: my-app
     chart:
       repository: https://charts.mycompany.com
       name: my-app
       version: 1.2.3
     values:
       replicaCount: 3
       image:
         repository: myregistry.azurecr.io/my-app
         tag: v1.0.0

Git 中的此 YAML 文件会使用 Helm 自动部署和更新“my-app”应用程序。

  1. Ticketmaster:使用 GitOps 进行扩展

Ticketmaster 处理全球数百万张活动门票,采用 GitOps 来管理其大规模 Kubernetes 基础设施:

  • 他们使用 ArgoCD 来管理超过 200 个 Kubernetes 集群。
  • 所有应用程序配置和基础设施定义都存储在 Git 中。
  • 优点:提高部署一致性并减少从事件中恢复的时间。

ArgoCD 应用程序清单示例:

   apiVersion: argoproj.io/v1alpha1
   kind: Application
   metadata:
     name: ticketing-service
     namespace: argocd
   spec:
     project: default
     source:
       repoURL: https://github.com/ticketmaster/ticketing-service.git
       targetRevision: HEAD
       path: k8s
     destination:
       server: https://kubernetes.default.svc
       namespace: production
     syncPolicy:
       automated:
         prune: true
         selfHeal: true
  1. 金融时报:面向多云的 GitOps

《金融时报》使用 GitOps 跨多个云提供商管理其基础设施:

  • 他们使用 Flux 来管理 AWS、Google Cloud 和本地的集群。
  • 所有基础设施变更都通过 Git Pull 请求,确保正确的审查和审计跟踪。
  • 结果: 部署更快、更可靠,多云管理更轻松。

高级 GitOps:满足好奇心

当您熟悉 GitOps 后,您可能想要探索:

  • 拉式模型与推式模型:根据您的需求选择您的口味。
  • 漂移检测:始终检查您的系统。
  • 多集群管理:像专业人士一样处理多个 Kubernetes 集群。
  • 秘密管理: 保密这些 API 密钥和凭据。

道路不太平坦

说实话,GitOps 并不都是阳光和彩虹。您可能会面临:

  • 文化阻力:改变可能是艰难的,特别是对于“我们一直这样做”的人群来说。
  • 集成头痛: 将 GitOps 与您现有的设置合并?准备好迎接一些最初的痛苦。
  • 扩展挑战:随着您的成长,保持一切同步可能会变得棘手。
  • 安全担忧: 将所有内容存储在 Git 中?确保它是诺克斯堡级别的安全。

实际示例:为 Web 应用程序实施 GitOps

准备好尝试 GitOps 了吗?以下是如何在 Web 应用程序中实现它的简单示例:

  1. 将您的应用程序代码存储在 Git 存储库(例如 GitHub)中。
  2. 为您的 Kubernetes 清单创建一个单独的存储库:
   k8s-manifests/
   ├── deployment.yaml
   ├── service.yaml
   └── ingress.yaml
  1. 设置 CI 管道(例如 GitHub Actions)来构建应用程序、运行测试并将 Docker 映像推送到注册表。
  2. 在 Kubernetes 集群中安装 Flux 或 ArgoCD 等 GitOps 工具。
  3. 配置您的 GitOps 工具来监视您的 k8s-manifests 存储库。
  4. 当您想要更新您的应用程序时:
    • 更改您的应用程序代码。
    • 更新deployment.yaml中的镜像标签。
    • 提交更改并将更改推送到两个存储库。
  5. 您的 GitOps 工具将自动检测更改并更新您的集群。

此工作流程可确保您的 Git 存储库始终反映系统所需的状态,并且您的实际基础架构保持同步。

总结一下

GitOps 不仅仅是另一个技术流行语——它是一个游戏规则的改变者。通过让 Git 成为您的唯一事实来源,您就可以开启更顺畅、更高效的 DevOps 之旅。无论您是管理少量服务还是数百个集群,GitOps 都可以帮助您简化运营并提高可靠性。

轮到你了!

您是否已涉足 GitOps 领域?你遇到了什么障碍?你是如何克服它们的?在评论中分享您的 GitOps 战争故事 - 让我们互相学习,让我们的 DevOps 生活更轻松!

版本声明 本文转载于:https://dev.to/vyan/gitops-the-game-changer-in-software-delivery-and-infrastructure-management-3ibd?1如有侵犯,请联系[email protected]删除
最新教程 更多>
  • 如何限制动态大小的父元素中元素的滚动范围?
    如何限制动态大小的父元素中元素的滚动范围?
    在交互式接口中实现垂直滚动元素的CSS高度限制问题:考虑一个布局,其中我们具有与用户垂直滚动一起移动的可滚动地图div,同时与固定的固定sidebar保持一致。但是,地图的滚动无限期扩展,超过了视口的高度,阻止用户访问页面页脚。$("#map").css({ marginT...
    编程 发布于2025-05-26
  • 如何使用组在MySQL中旋转数据?
    如何使用组在MySQL中旋转数据?
    在关系数据库中使用mySQL组使用mySQL组进行查询结果,在关系数据库中使用MySQL组,转移数据的数据是指重新排列的行和列的重排以增强数据可视化。在这里,我们面对一个共同的挑战:使用组的组将数据从基于行的基于列的转换为基于列。 Let's consider the following ...
    编程 发布于2025-05-26
  • 如何使用node-mysql在单个查询中执行多个SQL语句?
    如何使用node-mysql在单个查询中执行多个SQL语句?
    Multi-Statement Query Support in Node-MySQLIn Node.js, the question arises when executing multiple SQL statements in a single query using the node-mys...
    编程 发布于2025-05-26
  • 如何使用Regex在PHP中有效地提取括号内的文本
    如何使用Regex在PHP中有效地提取括号内的文本
    php:在括号内提取文本在处理括号内的文本时,找到最有效的解决方案是必不可少的。一种方法是利用PHP的字符串操作函数,如下所示: 作为替代 $ text ='忽略除此之外的一切(text)'; preg_match('#((。 &&& [Regex使用模式来搜索特...
    编程 发布于2025-05-26
  • 如何使用不同数量列的联合数据库表?
    如何使用不同数量列的联合数据库表?
    合并列数不同的表 当尝试合并列数不同的数据库表时,可能会遇到挑战。一种直接的方法是在列数较少的表中,为缺失的列追加空值。 例如,考虑两个表,表 A 和表 B,其中表 A 的列数多于表 B。为了合并这些表,同时处理表 B 中缺失的列,请按照以下步骤操作: 确定表 B 中缺失的列,并将它们添加到表的末...
    编程 发布于2025-05-26
  • 如何使用PHP从XML文件中有效地检索属性值?
    如何使用PHP从XML文件中有效地检索属性值?
    从php $xml = simplexml_load_file($file); foreach ($xml->Var[0]->attributes() as $attributeName => $attributeValue) { echo $attributeName,...
    编程 发布于2025-05-26
  • PHP阵列键值异常:了解07和08的好奇情况
    PHP阵列键值异常:了解07和08的好奇情况
    PHP数组键值问题,使用07&08 在给定数月的数组中,键值07和08呈现令人困惑的行为时,就会出现一个不寻常的问题。运行print_r($月份)返回意外结果:键“ 07”丢失,而键“ 08”分配给了9月的值。此问题源于PHP对领先零的解释。当一个数字带有0(例如07或08)的前缀时,PHP将...
    编程 发布于2025-05-26
  • 版本5.6.5之前,使用current_timestamp与时间戳列的current_timestamp与时间戳列有什么限制?
    版本5.6.5之前,使用current_timestamp与时间戳列的current_timestamp与时间戳列有什么限制?
    在时间戳列上使用current_timestamp或MySQL版本中的current_timestamp或在5.6.5 此限制源于遗留实现的关注,这些限制需要对当前的_timestamp功能进行特定的实现。 创建表`foo`( `Productid` int(10)unsigned not n...
    编程 发布于2025-05-26
  • 如何使用Python理解有效地创建字典?
    如何使用Python理解有效地创建字典?
    在python中,词典综合提供了一种生成新词典的简洁方法。尽管它们与列表综合相似,但存在一些显着差异。与问题所暗示的不同,您无法为钥匙创建字典理解。您必须明确指定键和值。 For example:d = {n: n**2 for n in range(5)}This creates a dicti...
    编程 发布于2025-05-26
  • 切换到MySQLi后CodeIgniter连接MySQL数据库失败原因
    切换到MySQLi后CodeIgniter连接MySQL数据库失败原因
    Unable to Connect to MySQL Database: Troubleshooting Error MessageWhen attempting to switch from the MySQL driver to the MySQLi driver in CodeIgniter,...
    编程 发布于2025-05-26
  • 为什么使用Firefox后退按钮时JavaScript执行停止?
    为什么使用Firefox后退按钮时JavaScript执行停止?
    导航历史记录问题:JavaScript使用Firefox Back Back 此行为是由浏览器缓存JavaScript资源引起的。要解决此问题并确保在后续页面访问中执行脚本,Firefox用户应设置一个空功能。 警报'); }; alert('inline Alert')...
    编程 发布于2025-05-26
  • Java的Map.Entry和SimpleEntry如何简化键值对管理?
    Java的Map.Entry和SimpleEntry如何简化键值对管理?
    A Comprehensive Collection for Value Pairs: Introducing Java's Map.Entry and SimpleEntryIn Java, when defining a collection where each element com...
    编程 发布于2025-05-26
  • 如何从Google API中检索最新的jQuery库?
    如何从Google API中检索最新的jQuery库?
    从Google APIS 问题中提供的jQuery URL是版本1.2.6。对于检索最新版本,以前有一种使用特定版本编号的替代方法,它是使用以下语法:获取最新版本:未压缩)While these legacy URLs still remain in use, it is recommended ...
    编程 发布于2025-05-26
  • 如何在JavaScript对象中动态设置键?
    如何在JavaScript对象中动态设置键?
    在尝试为JavaScript对象创建动态键时,如何使用此Syntax jsObj['key' i] = 'example' 1;不工作。正确的方法采用方括号: jsobj ['key''i] ='example'1; 在JavaScript中,数组是一...
    编程 发布于2025-05-26
  • 如何在Java中正确显示“ DD/MM/YYYY HH:MM:SS.SS”格式的当前日期和时间?
    如何在Java中正确显示“ DD/MM/YYYY HH:MM:SS.SS”格式的当前日期和时间?
    如何在“ dd/mm/yyyy hh:mm:mm:ss.ss”格式“ gormat 解决方案:的,请访问量很大,并应为procectiquiestate的,并在整个代码上正确格式不多: java.text.simpledateformat; 导入java.util.calendar; 导入java...
    编程 发布于2025-05-26

免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。

Copyright© 2022 湘ICP备2022001581号-3