极狐GitLab as Code,全面升级你的 GitOps 体验

news2024/10/6 18:31:57

💡 近日,由微软和英特尔联合发起的第二届开源云原生开发者日(Open Source Cloud Native Developer Day)上海站顺利落幕。极狐(GitLab) 资深云原生架构师郭旭东在会上进行了《深度探索 GitOps 平台的更多可能》主题演讲,与众多开发者共赴技术 “狂飙” 之旅。

以下内容整理自本次演讲。Enjoy~

什么是 GitOps ?


关于 GitOps 的定义,千人千面。我们这里将 GitOps 概括为一个公式:

  • XaC:Everything as Code,这是 GitOps 的重要特性之一:一切皆代码。例如 Infrastructure  as Code 基础设施即代码;

  • MR&PR:PullRequst & MergeRequest,合并请求;

  • CI + CD :Continuous Integration & Continuous Deployment/Delivery,持续集成与持续交付或部署。

GitOps 拥有四个关键原则:

  • 声明式描述:由于 Git 充当所有 DevOps 操作的单一事实来源,因此整个系统在 Git 中使用 .yaml 文件进行声明性描述。声明式描述目标的性质,让计算机明白目标和结果,而非流程。它不用告诉计算机问题领域,从而避免随之而来的副作用;

  • 版本控制:需要的系统状态在 Git 中进行版本管理,可以完全跟踪在任何给定时间点对系统状态所做的所有更改;

  • 自动化:可以在 Git 代码中声明系统所需的状态,然后自动化系统以将所有批准的更改应用到系统;

  • 保证:当所需状态与系统的实际状态不匹配时,软件代理会提醒配置更改,来确保差异的修正和告警。

同时,GitOps 也具有幂等性特性,即同一个操作,无论执行多少次,跟执行一次的效果一样。这是一个重要的特性,使得 GitOps 模型在各种异常情况下都能正确恢复。

因此,GitOps 在版本管理、分支策略、代码审查、历史记录、用户体验等方面天生具备优势。

如何构建高质量的 GitOps 平台?


GitOps 平台则是一种将 GitOps 工具与其他工具和服务集成在一起的平台,旨在提供更完整的 DevOps 自动化解决方案

GitOps 平台通常需要提供以下能力:

  • GitOps 工具管理:将不同的 GitOps工具集成在一起,可以自动管理应用程序的部署、配置和更新。

  • 自动化流水线:提供自动化管道,从代码提交到应用程序部署和监控全过程自动化。

  • 代码审查:由于每一次代码提交都可能直接影响到云等基础设置,因此每次修改都需要充分 Review。

  • 安全工具:提供安全性功能,如自动化漏洞扫描、访问控制和加密等。

2 种平台方案

搭建 GitOps 平台需要综合考虑成本 + 效率 + 体验,通常有两种方案:

1. DIY( Do It Yourself) 工具链

通过多个工具,自己组合形成一个 GitOps 平台。

这种方式有其弊端,例如:

  • 工具链比较脆弱,可能导致整个软件研发端到端过程的不稳定性;

  • 数据分散在各个系统中,通常需要保存多份,往往导致审计非常困难;

  • 众多工具链所带来的运维工作既有风险,成本也昂贵。

2. AIO( All In One)平台

DevOps 功能都集中在一个平台,工程师只需要在一个平台上完成整个软件开发生命周期。

这种方式的好处是:

  • 花更少的时间维护工具,投入更多的时间研发软件产品;

  • 通过单一的用户数据库和审核,保证工作的可跟踪性、可追溯性和可审核性;

  • 自动化重复的工作任务,提供更高的工作吞吐量和效率;

  • 确保整个软件的开发和运维过程是安全、一致且防篡改。

极狐GitLab 即是这样的一体化安全 DevOps 平台,并经过了数百万开发者的应用检验。

2 种仓库设计

「Multi-Repo」和「Mono-Repo」是两种代码仓库的管理风格:

  • Multi-Repo:多仓库,每个项目都用一个 Git 仓库托管。

  • Mono-Repo:单体仓库,统一用一个 Git 仓库管理所有的项目。

这两种模式,各有利弊,需要根据实际情况来选择:

Multi-Repo 模式把一个大问题分成几个小问题来解决,通过问题的细化,减少复杂度,从而让工作更加顺手,更加有保障;但其也有不可忽视的问题:为了保证一个功能的完整运行,即使再小的改动,也可能需要对所有的 Repo 进行更新,这是一个繁重的工作。

在 Mono-Repo 模式下,所有设计文档、源代码等都放在一个 Repo 里面,一次提交可以解决所有的问题;其最大的问题是随着程序规模不断增加,代码量、文档等随之增加,整个 Repo 会越来越大

分支策略

分支策略可以理解为当一个团队需要就同一个项目进行协同时,如何借助 Git 这样的代码管理工具或软件协同管理工具来实现协同效应的管理机制。

分支策略主要分为单分支策略多分支策略,二者的核心区别在于:

  • 单分支更多强调的是长期分支,存在于整个项目生命周期中。

  • 多分支更多强调的是短期分支,为临时目的而创建,一旦它们完成了职责并且代码被集成到主线(或另一个长期分支)中,就会被删除。

如果问 10 个不同团队是如何使用 Git 分支的,可能会得到 10 个不同答案。没有所谓的“最佳”分支策略,应该综合分析项目情况,找到最适合团队的策略。

GitOps 规模化

企业实现 GitOps 规模化,需要核心关注 4 个点:

➤ 实践复用

如果无法提高复用性,管理员需要投入大量时间精力在权限开通/关闭、加减成员等繁琐事务上,而高质量的复用能力,可以节约大量的人力和成本。

➤ 服务可用

无论 100、1000 还是 10000 用户规模,都需要确保服务可用。

➤ 集成拓展

需要确保能够随时拓展多种应用或产品集成。

➤ 变更审批

变更审批是必要的,尤其是在安全审批上,一点疏漏,可能造成全盘崩溃。

极狐GitLab GitOps 最佳实践


极狐GitLab GitOps 组件

极狐GitLab 推出极狐GitLab Kubernetes Agent Server(KAS),是用安全和云原生方式实现极狐GitLab 与 Kubernetes 集成的组件,实现以下功能:

  • GitOps Workflow :在项目仓库里编写任意 K8s 对象的描述文件 (.yaml 或者 .json 格式),都能实时部署到 K8s 集群中,无需执行 CI/CD;

  • CI/CD Workflow :执行 CI/CD Pipeline 时,容器内注入了 KubeConfig 等 K8s 集群连接信息;可以在容器内执行 KubeCtl 、 Helm 等命令连接 K8s集群再执行部署。

图:极狐GitLab GitOps 组件概览

极狐GitLab GitOps 工作流程

极狐GitLab GitOps Workflow 使用 Pull 模型:极狐GitLab 作为单一可信源,当可信源侧的文件清单发生变更时,集群侧能够及时捕捉到此变更,从而完成变更清单部署。

极狐GitLab Kubernetes Agent 由两部分组成:位于集群侧的极狐GitLab Kubernetes Agent(agentk)和位于极狐GitLab 侧的极狐GitLab Kubernetes Agent Server (GitLab KAS),能够很好的完成上述的GitOps Workflow。

图:极狐GitLab GitOps 工作流程

极狐GitLab GitOps 最大优势

极狐GitLab GitOps 配置简单,快速上手,仅需几行代码,即可获得开箱即用的 GitOps

➤ Step 1:配置

在指定目录下建立文件 .gitlab/agents/agent-name/config.yaml,指定项目ID、哪些文件需要同步,即可自动识别,并且无需安装任何组件,自动进行容器扫描。

➤ Step 2:连接集群

在极狐GitLab 中,点击连接 Kubernetes 集群,只需将打开页面的命令复制终端,通过 Helm 直接安装。

➤ Step 3:自动同步

安装后,指定目录文件即可自动同步到集群中,并启动容器安全扫描。

探索 GitOps 更多可能


极狐GitLab as Code

如果多个团队使用一个 Git 仓库作为所有基础设施和应用部署代码的单一事实来源时,这是一个良好的流程规范。

基础设施团队可以使用 Terraform 进行自动化协作,并将代码部署到多个云服务中,实现 Infrastructure  as Code。而极狐GitLab 对  Terraform 进行良好的集成,提供优质体验。

极狐GitLab 除了提供 KAS 功能,同样支持其他所有的 GitOps 工具,您可以选择任何您想使用的工具,进一步实现 Everything as Code,也可以说极狐GitLab as Code。

AI in GitOps

如今 AI 大行其道,AI in GitOps 中能够擦出什么火花呢?这里我们也做了一些畅想:

也许未来真的会出现电影《流浪地球》系列中的智能量子计算机 MOSS,能够实现自组织、自适应、自感知、自编程的产品,一切皆有可能!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/531626.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

关于wxapkg路径的一些问题

1 下载安装夜神模拟器。 官网地址:https://www.yeshen.com在模拟器中安装微信,可以下载apk后拖进去,也可在里面下载。不需要RE文件管理器,目前夜神自带Amaze文件管理器,一样的。路径地址为: /data/data/c…

Ubuntu16.04布置CenterFusion记录

安装细节 CenterFusion/src/tools/convert_nuScenes.py内容修改 如果你用的是nuscenes数据集中的Mini部分,那就把convert_nuScenes.py第27行内容中的其他部分注释掉 convert_nuScenes.py在56行处,将数量修改为3 nuscenes-devkit下载 将nuscenes-dev…

计算机网络实验(ensp)-实验1:初识eNSP仿真软件

目录 实验报告: 实验操作 1.建立网络拓扑图并开启设备 2.配置路由器 1.输入命名:sys 从用户视图切换到系统视图 2.输入命名:sysname 姓名 修改路由器名字 3.输入命名:interface g0/0/0 进入端口视图g0…

开源同城跑腿系统(PHP版)

同城跑腿系统的优点在于,它可以为用户提供方便快捷的服务,避免了用户自己跑腿的麻烦和时间成本,同时也为跑腿人员提供了一种灵活的兼职方式 此系统是一款基于likeadmin-php开发的跑腿小程序系统,提供全部前后台无加密源代码&…

知乎高赞回答|只需5分钟,一文教你理解结构化和非结构化数据!

什么是结构化数据? 结构化数据:指关系模型数据,即以关系数据库表形式管理的数据,结合到典型场景中更容易理解,比如企业ERP、OA、HR里的数据。 什么是非结构化数据? 非结构化数据:指数据结构不…

el-tree饿了么elementUI tree树结构插件设置全部展开折叠

效果如上图↑ // 折叠所有节点 foldAllNodes(type) {let treeNodes this.$refs[type _tree].store._getAllNodes()for (var i 0; i < treeNodes.length; i) {treeNodes[i].expanded false;} }, // 展开所有节点 expandAllNodes(type) {let treeNodes this.$refs[type …

Centos7使用for循环语句批量修改文件名

O、前言 虽然单个文件更名&#xff0c;我们可以使用mv命令进行更名。那几百个文件更改&#xff0c;这个工程量比较大&#xff0c;下面介绍一下如何使用for循环语句来批量修改文件名。 一、环境介绍 1.Centos版本:Centos7-X86_64-Eeverything2009 二、命令介绍 这里主要用到ba…

企业电子商务系统 b2b2c o2o 多商家入驻商城 直播带货商城 电子商务

一个好的SpringCloudSpringBoot b2b2c 电子商务平台涉及哪些技术、运营方案&#xff1f;以下是我结合公司的产品做的总结&#xff0c;希望可以帮助到大家&#xff01; 搜索体验小程序&#xff1a;海哇 1. 涉及平台 平台管理、商家端&#xff08;PC端、手机端&#xff09;、买家…

语音常识与基本概念

img { margin: auto; display: block } 数字信号 连续时间信号&#xff1a;在连续时间范围内定义的信号&#xff0c;信号的幅度可以是连续的(模拟信号)&#xff0c;也可以是离散的 离散时间信号&#xff1a;时间为离散变量的信号&#xff0c;即独立变量时间被量化了&#xff0c…

时钟同步-注意客户端和服务端都需要开启123端口 udp协议

确认时钟源 chronyc sources -v chronyc tracking Linux ❉ Chronyd时间同步服务器详解_wangjie722703的博客-CSDN博客 local stratum 10: 即使自己未能通过网络时间服务器同步到时间,也允许将本地时间作为标准时间授时给其它客户端 确认 端口是否打开 Nmap -sU -p 123 192…

创客匠人5月产品升级,功能更新(上)

创客匠人致力为老师们打造更好的知识付费平台&#xff0c;如今&#xff0c;又迎来一波超厉害产品功能升级&#xff0c;有没有你期待的功能上线呢&#xff1f;我们一起来看看吧&#xff01; 正式升级迭代时间&#xff1a;2023年5月18日 一、公众号店铺支持支付宝支付 微信公…

Redis的五大数据类型

一、String数据类型 概述&#xff1a;String是redis最基本的类型&#xff0c;最大能存储512MB的数据&#xff0c;String类型是二进制安全的&#xff0c;即可以存储任何数据、比如数字、图片、序列化对象等 1. SET/GET/APPEND/STRLEN: append命令&#xff1a;append key valu…

log4cplus: 一个好用的日志模块。编译以及使用

log4cplus 日志 介绍 log4cplus 是一个 C 版本的日志库&#xff0c;它是 Apache 组织的 log4j 日志库的一个开源实现。log4cplus 提供了一个灵活的、高性能的日志系统&#xff0c;支持多线程、本地化和分层结构。 log4cplus 的主要特点如下&#xff1a; 灵活性&#xff1a;…

jetson nx 用windows远程连接

VNC Viewer远程连接 一、jetson nx配置vnc 1、安装客户端 sudo apt-get install xrdp vnc4server xbase-clients2、进入nano/nx桌面&#xff0c;打开“Setting–>Desktop sharing”&#xff0c;没反应&#xff0c;据说是bug&#xff0c;我试过nano和nx都一样。首先输入下…

研发效能管理中的经典度量——DORA 指标

有一个组织&#xff0c;每年都会基于对相关从业者的调研和分析&#xff0c;发布一份《DevOps 行业状态报告》&#xff0c;揭秘研发团队的 DevOps 健康状况和平均效能水平&#xff0c;至今已持续了 9 年。目前&#xff0c;全球有超过三万名专业人士参与该调研&#xff0c;而它也…

前端路由+原生JS实现SPA

●前端路由 ●路由: 就是一一对应关系的集合 ●前端路由: 就是一个 url 地址, 对应哪个组件(页面) ●前端路由的本质 ○根据地址栏变化(不重新想服务器发送请求), 去局部更新不同的页面内容, 完成前端业务场景切换 ●前端路由的思路 ○URL 地址栏中的 Hash 值发生了变化 ○前端…

[JAVA] 图书管理系统

前言 1. 基本情况 2. 基本思路 3. 类的创建 Book包底下类有实现 &#xff08;1&#xff09;Book类 - 图书类 &#xff08;2&#xff09;BookList - 书架类 operation包底下类的实现(包含7个类,一个接口) &#xff08;1&#xff09;IOperation接口 - 功能接口 &…

蓝精灵协会每周社区会议|延长水晶铸造期限以及游戏重启计划

蓝精灵协会每周社区会议来啦&#xff01;我们已经把活动名称从「AMA」改为「市政会议厅」&#xff0c;因为该会议的目的是倾听社区反馈和进行讨论。当然&#xff0c;我们仍然非常欢迎你提出问题&#xff01; 本次市政会议厅涵盖四个主题&#xff1a; 延长水晶铸造时间的投票结果…

scrollIntoView的基本定义、以及Vue3、vue2中使用: 点击导航滚动到对应区域。

1. 基本定义 MDN 关于scorllIntoView的介绍 Element 接口的 scrollIntoView() 方法会滚动元素的父容器&#xff0c;使被调用 scrollIntoView() 的元素对用户可见。 scrollIntoView()scrollIntoView(alignToTop)scrollIntoView(scrollIntoViewOptions) 1. alignToTop 可选 alig…

aws Automation

In order to save money, CloudFormation terminates the resources from the template Systems Manager will handle on-premises and EC2 instance patches Caching Amazon CloudFront 是一种内容分发网络 (CDN) 服务&#xff0c;旨在获得优异性能、安全性和开发人员便利性…