千家信息网

如何进行GitOps的原理分析

发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,这篇文章将为大家详细讲解有关如何进行GitOps的原理分析,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。也许你之前听说过GitOps,但是对其并不了解
千家信息网最后更新 2026年11月02日如何进行GitOps的原理分析

这篇文章将为大家详细讲解有关如何进行GitOps的原理分析,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。

也许你之前听说过GitOps,但是对其并不了解。在本文中,我将对其进行简单介绍,它其实是一个应用程序开发和管理中的一个术语,其核心思想是将应用系统的声明性基础架构和应用程序存放在Git的版本控制库中。我们将介绍GitOps是什么,它将如何影响组织以及如何与Kubernetes保持同步。

什么是GitOps

GitOps是一种实现持续交付的模型,利用Git开发工具对云原生应用程序进行操作和管理。当将应用程序部署到Kubernetes时,Git应该是唯一的事实来源。当开发人员更改应用程序时,Git将自动把它们push到Kubernetes进行部署。而且,如果Kubernetes内的运行状态发生变化但与Git内的状态不一致,则它们会从Git内恢复到已知状态。

GitOps与CI/CD:它们之间有什么联系?

GitOps和CI/CD是十分重要的工作伙伴。CI/CD可以让开发人员持续迭代、开发和部署应用程序。而迭代通常通过一个Git配置仓库进行(尽管也会有其他配置仓库)。在部署/交付阶段,构建的基于容器的应用程序被"push"到Kubernetes进行部署。GitOps会通过Kubernetes使用"pull"的方法来增强CI/CD模型,从而将运维层面带入部署/交付中。

但是,如果有人更改了Kubernetes集群中运行的某些内容,会发生什么?我们将使用Git作为声明性部署工具的主要事实来源,并利用其他工具在出现差异时向我们发出警报。此外,通过利用可以识别运行状态和声明状态之间差异的工具,Kubernetes可以修复为已知/声明的运行状态。

注意:持续集成和持续开发是互补但独立的过程。在理想状态下,GitOps会将批处理规模拆分为单件流程,每次只处理一个单元。但是,由于CI和CD流程发生在不同的组中,因此组织之间的流程可能会有所不同。

GitOps和应用程序生命周期

让我们从应用程序生命周期的视角来看一下GitOps的作用。在典型的生命周期中,应用程序会经历多个状态,包括:

  • 代码

  • 构建

  • 创建镜像

  • 测试

  • 发布

而使用GitOps,这些状态将会扩展为:

  • 部署

  • 在Git仓库中监控更改

  • 日志更改和事件

  • 发生更改时发出警报,并于现有的监控/告警系统集成

  • 更新

在GitOps操作模型下,当应用程序发布时,Kubernetes需要确保其按预期运行。同时,Kubernetes通过确保其稳定性和可用性来管理应用程序的运维工作。如果一个开发人员通过Git更改了该应用程序,Kubernetes将会接受声明并根据需要应用它。

GitOps带来了什么?

  • GitOps为应用程序提供一个操作模型,它可以确保Git提供一个框架来统一应用程序的运行、操作和持续开发。

  • 作为CI/CD流水线的一部分,GitOps为应用程序构建/交付与运行它的位置之间提供了粘合剂。

  • 在Kubernetes平台中,Git为应用程序的开发和运维提供了唯一的事实来源。

  • 应用程序交付和平台管理都是声明式的,同时还能通过Git进行版本控制

  • Git可以控制回滚、升级以及更改

  • 开发人员不需要知道如何操作运维平台(如Kubernetes),无需了解复杂的部署交付流程,仅需使用熟悉的工具发布新功能即可。极大提升开发者体验。

  • Git控制并修证差异或"漂移"

  • GitOps利用审核、监控以及回滚功能来增加应用程序发布的可靠性和稳定性

最后,尽管在GitOps模式下还有很多工作要做,但是GitOps、DevOps以及现有CI/CD模式之间存在十分明显的协同作用。GitOps提供了一种用于将应用程序交付到Kubernetes平台的模型,该模型确保了Git是唯一的事实来源并且充分利用Kubernetes平台上的功能。但值得注意的是,GitOps不能替代工具。恰恰相反,GitOps通过声明性的流程和工具来强化流程、提高其成熟度并帮助团队交付应用程序。

GitOps实践:FluxCD Demo

FluxCD(或Flux)是一个很棒的工具,它可以将Git和Kubernetes集成起来。Flux本质上是一个Kubernetes Operator,这意味着,你作为一个管理员可以将其安装到Kubernetes 以管理Git和原生Kubernetes之间的集成。

在Kubernetes中,Operator是Kubernetes原生平台的扩展,是一种自定义资源的模式,该自定义资源主要用于管理应用程序及其组件。这意味着,在Kubernetes内部Operator的帮助下,所需状态(如运行状态)将不断检查和调整以符合Git仓库声明的内容。Flux可以集成到你现有的CI/CD工具集中,以进行其他工作流程、权限批准和审核。在Kubernetes中,Flux会监控你通过配置声明的Git仓库是否发生更改,并且如果 Kubernetes Pod上在本地发生了不应发生的更改,Flux将会把Kubernetes更新到所需的运行状态。请记住,Git是事实来源。Flux Operator会检测到这一点,并将正在运行的配置更改回声明的状态。

以下demo,我将会展示如何安装和实现Flux。

前期准备

你将需要:

  • 一个Docker Hub镜像仓库,你可以将Flaskapp docker镜像上传到此处

  • 一个Git Repo并连接它,然后你可以在整个演示过程中根据需要用你的设置替换"< >"中的任何内容

具体步骤

  • 安装Kubernetes

  • 安装并配置fluxctl,Flux部署的原生安装程序

  • 配置Flux以连接到Git Repo

  • 在Git Repo中升级deployment manifest

  • 升级容器镜像并同步

  • 配置漂移(drift)并同步

你可以使用以下配置进行测试或演示。它包括Flask应用程序的Docker file以及Kubernetes deployment/配置文件。在演示中,你会需要它们,此外你还可以将它们上传到你指定的Git仓库中。

Docker File

FROM python:3        RUN pip install flask        RUN mkdir -p /corp/app    WORKDIR /corp/app    COPY main.py .    ENV FLASK_APP=/corp/app/main.py        ENV APP_NAME=MyApp.DevOps    ENV APP_VERSION=v1.0.0        CMD ["flask", "run", "--host=127.0.0.1"]

main.py Python 脚本文件

import osfrom flask import Flaskapp = Flask(__name__)@app.route('/')def index():    appname = os.environ['APP_NAME']    appversion = os.environ['APP_VERSION']    response = "%s - %s.%s\n" %('Hello World', appname, appversion)    return response

Kubernetes Deployment文件

apiVersion: v1 kind: Namespace metadata:   name: my-demo --- apiVersion: apps/v1 kind: Deployment metadata:   name: fluxdemo   namespace: my-demo   annotations:     flux.weave.works/tag.flask: glob:develop-v*     flux.weave.works/automated: 'true'   labels:     role: fluxdemo     env: demo     app: flux spec:   replicas: 1   selector:     matchLabels:       role: fluxdemo   template:     metadata:       labels:         role: fluxdemo     spec:       containers:       - name: nginx         image: nginx:1.16-perl         imagePullPolicy: IfNotPresent         ports:         - name: http           containerPort: 80         volumeMounts:         - name: nginx-proxy-config           mountPath: /etc/nginx/conf.d/default.conf           subPath: nginx.conf       - name: flask         image: docker.io//flaskapp:develop-v1.8.0         imagePullPolicy: IfNotPresent         ports:         - name: http           containerPort: 5000         env:         - name: APP_NAME           value: myfluxdemo.K8s.GitOps         - name: APP_VERSION           value: v1.0.5       volumes:       - name: nginx-proxy-config         configMap:           name: nginx-conf ---apiVersion: v1kind: ConfigMap metadata:   name: nginx-conf  namespace: my-demodata:  nginx.conf: |-    #CODE1.0:    #add the nginx.conf configuration - this will be referenced within the deployment.yaml    server {        listen 80;        server_name localhost;        location / {            proxy_pass http://localhost:5000/;            proxy_set_header Host "localhost";        }    }

安装Flux

  • 安装Fluxctl

https://docs.fluxcd.io/en/1.18.0/references/fluxctl.html

  • 安装Fluxcd

https://docs.fluxcd.io/en/1.18.0/tutorials/get-started.html

为Repo配置Flux

创建一个命名空间

kubectl create ns export FLUX_FORWARD_NAMESPACE= fluxctl list-workloads

安装Fluxcd以建立与你的Git Repo的连接

export GHUSER=""export REPO="gitops-demo"export NS="flux"fluxctl install \--git-user=${GHUSER} \--git-email=${GHUSER}@users.noreply.github.com \--git-url=git@github.com:Image download failed.{REPO} \--namespace=${NS} | kubectl apply -f -

创建SSH密钥以添加到Github仓库

在你的terminal中输入以下命令,以获取下一步所需的密钥:

fluxctl identity

打开Github,导航到安装Fluxcd时添加的仓库,转到设置-部署密钥,单击【添加部署密钥】,为其指定title,选中【允许write access】,粘贴公共密钥,然后单击【添加密钥】。

在Git Repo中升级Deployment Manifest

打开你的Git Repo,里面应该有deployment.yaml文件,向下滑动直到如下所示部分,然后更改APP_VERSION号码

 env:    - name: APP_NAME      value: myfluxdemo.K8s.GitOps    - name: APP_VERSION      value: v1.0.5

保存并Commit更改到你的Repo。

Flux将在5分钟之内升级你的deployment

要从localhost进行测试,请在Kubernetes中使用"Port-forward"命令:

kubectl get pods -n  copy the pod name kubectl port-forward  8080:80 -n

打开其他terminal:

curl -s -i http://localhost:8080

升级容器镜像并同步

现在让我们对Docker镜像进行修改并将其上传到我们的Docker Hub镜像仓库中。为此,我们将修改flaskapp目录中的main.py文件。

升级main.py文件。将Hello World更改为其他内容

response = "%s - %s.%s\n" %('Flux World', appname, appversion)

创建一个新的Docker文件并上传到Docker(以及另一个增量版本号)。

等待5分钟,Flux将会自动部署新镜像

配置漂移并同步

现在,我们来测试一下手动更改正在运行的配置会发生什么。

kubectl scale deployment/fluxdemo --replicas=4 -n

现在,我们花几分钟来看看pod并观察发生了什么。我们将会在短时间内(5分钟以内)看到其他的pod,此外我们还将看到许多pod终止。因此,Flux已使配置恢复到当前在Git中保留的已声明的部署状态。

kubectl get po -n  --watch

重新运行相同的命令,并且你会看到目前仅有一个正在运行的pod。

别忘了清理和移除deployment和Git连接(如果你想移除它)。否则,你需要开始添加更多的仓库并继续进行构建。

关于如何进行GitOps的原理分析就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

应用 程序 应用程序 状态 运行 配置 仓库 开发 工具 镜像 文件 流程 升级 管理 之间 内容 密钥 模型 事实 平台 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 盈实互联网科技 朗新科技与工业互联网 中资互联网科技 互联网金融 科技创新 撒么互联网科技公司 互联网养老 桔豆科技 互联网科技生活的内容 上海电发互联网科技有限公司 栖莱科技互联网股份有限公司 苏州铭阳互联网科技有限公司 互联网科技大奖都有哪些公司 伊宁互联网科技做什么的 众安科技工业互联网合作 黑科技 体验场景 互联网大会 普陀区互联网教育科技管理办法 美国五大互联网科技公司市值多少 众联互联网络科技 数字互联网科技有限公司 深圳互联网科技园地址 高科技和互联网的现代国家 百单网互联网科技有限公司 深圳九邦互联网科技有限公司 百单互联网科技有限公司 互联网科技类展会 佩信高科技互联网 青海省互联网新科技 互联网新科技动漫ppt素材 华中科技大学互联网的牛人 互联网相关科技技术 互联网科技大会大佬
0