」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > GitOps:軟體交付和基礎設施管理領域的遊戲規則改變者

GitOps:軟體交付和基礎設施管理領域的遊戲規則改變者

發佈於2024-08-15
瀏覽:622

您是否厌倦了使用多种工具和流程来管理软件部署?进入 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]刪除
最新教學 更多>
  • 如何使用Depimal.parse()中的指數表示法中的數字?
    如何使用Depimal.parse()中的指數表示法中的數字?
    在嘗試使用Decimal.parse(“ 1.2345e-02”中的指數符號表示法表示的字符串時,您可能會遇到錯誤。這是因為默認解析方法無法識別指數符號。 成功解析這樣的字符串,您需要明確指定它代表浮點數。您可以使用numbersTyles.Float樣式進行此操作,如下所示:[&& && && ...
    程式設計 發佈於2025-04-09
  • 為什麼PHP的DateTime :: Modify('+1個月')會產生意外的結果?
    為什麼PHP的DateTime :: Modify('+1個月')會產生意外的結果?
    使用php dateTime修改月份:發現預期的行為在使用PHP的DateTime類時,添加或減去幾個月可能並不總是會產生預期的結果。正如文檔所警告的那樣,“當心”這些操作的“不像看起來那樣直觀。 考慮文檔中給出的示例:這是內部發生的事情: 現在在3月3日添加另一個月,因為2月在2001年只有2...
    程式設計 發佈於2025-04-09
  • 如何使用Python理解有效地創建字典?
    如何使用Python理解有效地創建字典?
    在python中,詞典綜合提供了一種生成新詞典的簡潔方法。儘管它們與列表綜合相似,但存在一些顯著差異。 與問題所暗示的不同,您無法為鑰匙創建字典理解。您必須明確指定鍵和值。 For example:d = {n: n**2 for n in range(5)}This creates a dict...
    程式設計 發佈於2025-04-09
  • 為什麼使用Firefox後退按鈕時JavaScript執行停止?
    為什麼使用Firefox後退按鈕時JavaScript執行停止?
    導航歷史記錄問題:JavaScript使用Firefox Back Back 此行為是由瀏覽器緩存JavaScript資源引起的。要解決此問題並確保在後續頁面訪問中執行腳本,Firefox用戶應設置一個空功能。 警報'); }; alert('inline Alert')...
    程式設計 發佈於2025-04-09
  • 如何同步迭代並從PHP中的兩個等級陣列打印值?
    如何同步迭代並從PHP中的兩個等級陣列打印值?
    同步的迭代和打印值來自相同大小的兩個數組使用兩個數組相等大小的selectbox時,一個包含country代碼的數組,另一個包含鄉村代碼,另一個包含其相應名稱的數組,可能會因不當提供了exply for for for the uncore for the forsion for for ytry...
    程式設計 發佈於2025-04-09
  • 為什麼使用固定定位時,為什麼具有100%網格板柱的網格超越身體?
    為什麼使用固定定位時,為什麼具有100%網格板柱的網格超越身體?
    網格超過身體,用100%grid-template-columns 為什麼在grid-template-colms中具有100%的顯示器,當位置設置為設置的位置時,grid-template-colly修復了? 問題: 考慮以下CSS和html: class =“ snippet-code”> ...
    程式設計 發佈於2025-04-09
  • 為什麼PYTZ最初顯示出意外的時區偏移?
    為什麼PYTZ最初顯示出意外的時區偏移?
    與pytz 最初從pytz獲得特定的偏移。例如,亞洲/hong_kong最初顯示一個七個小時37分鐘的偏移: 差異源利用本地化將時區分配給日期,使用了適當的時區名稱和偏移量。但是,直接使用DateTime構造器分配時區不允許進行正確的調整。 example pytz.timezone(&#...
    程式設計 發佈於2025-04-09
  • Java是否允許多種返回類型:仔細研究通用方法?
    Java是否允許多種返回類型:仔細研究通用方法?
    在Java中的多個返回類型:一種誤解類型:在Java編程中揭示,在Java編程中,Peculiar方法簽名可能會出現,可能會出現,使開發人員陷入困境,使開發人員陷入困境。 getResult(string s); ,其中foo是自定義類。該方法聲明似乎擁有兩種返回類型:列表和E。但這確實是如此嗎...
    程式設計 發佈於2025-04-09
  • 在Ubuntu/linux上安裝mysql-python時,如何修復\“ mysql_config \”錯誤?
    在Ubuntu/linux上安裝mysql-python時,如何修復\“ mysql_config \”錯誤?
    mysql-python安裝錯誤:“ mysql_config找不到”“ 由於缺少MySQL開發庫而出現此錯誤。解決此問題,建議在Ubuntu上使用該分發的存儲庫。使用以下命令安裝Python-MysqldB: sudo apt-get安裝python-mysqldb sudo pip in...
    程式設計 發佈於2025-04-09
  • 如何從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-04-09
  • 如何在鼠標單擊時編程選擇DIV中的所有文本?
    如何在鼠標單擊時編程選擇DIV中的所有文本?
    在鼠標上選擇div文本單擊帶有文本內容,用戶如何使用單個鼠標單擊單擊div中的整個文本?這允許用戶輕鬆拖放所選的文本或直接複製它。 在單個鼠標上單擊上的div元素中的文本,您可以使用以下Javascript函數:實現以實現此函數: 在您的javascript代碼中添加了上述功能。參數。 使用...
    程式設計 發佈於2025-04-09
  • 為什麼Microsoft Visual C ++無法正確實現兩台模板的實例?
    為什麼Microsoft Visual C ++無法正確實現兩台模板的實例?
    在Microsoft Visual C 中,Microsoft consions用戶strate strate strate strate strate strate strate strate strate strate strate strate strate strate strate st...
    程式設計 發佈於2025-04-09
  • 如何配置Pytesseract以使用數字輸出的單位數字識別?
    如何配置Pytesseract以使用數字輸出的單位數字識別?
    Pytesseract OCR具有單位數字識別和僅數字約束 在pytesseract的上下文中,在配置tesseract以識別單位數字和限制單個數字和限制輸出對數字可能會提出質疑。 To address this issue, we delve into the specifics of Te...
    程式設計 發佈於2025-04-09
  • 如何使用PHP從XML文件中有效地檢索屬性值?
    如何使用PHP從XML文件中有效地檢索屬性值?
    從php PHP陷入困境。 使用simplexmlelement :: attributes()函數提供了簡單的解決方案。此函數可訪問對XML元素作為關聯數組的屬性: - > attributes()為$ attributeName => $ attributeValue){ echo...
    程式設計 發佈於2025-04-09
  • 如何在Java中執行命令提示命令,包括目錄更改,包括目錄更改?
    如何在Java中執行命令提示命令,包括目錄更改,包括目錄更改?
    在java 通過Java通過Java運行命令命令可能很具有挑戰性。儘管您可能會找到打開命令提示符的代碼段,但他們通常缺乏更改目錄並執行其他命令的能力。 solution:使用Java使用Java,使用processBuilder。這種方法允許您:啟動一個過程,然後將其標準錯誤重定向到其標準輸出...
    程式設計 發佈於2025-04-09

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3