荔枝app下载免费版

如何优雅的行使 GitOps 实现运维自动化
发布日期:2021-11-29 12:50    点击次数:157

什么是 GitOps 呢?  GitOps 是一套行使 Git 来管理基础架议和行使配置的实践,而 Git 指的是一个开源版控制编制。GitOps 在运走过程中以 Git 为声明性基础架议和行使的单一原形来源。  GitOps 行使 Git 拉取乞求来自动管理基础架构的配置和安放。Git 存储库包含编制的通盘状态,因此编制状态的修改痕迹既可查望也可审计。  GitOps 围绕开发者经验而构建,可协助团队行使与柔件开发相通的工具和流程来管理基础架构。除了 Git 以外,GitOps 还声援您遵命本身的需求选择工具。 1. GitOps 到底是个什么呢

GitOps = 基础设施即代码(IaC) + 相符并乞求(MR) + 赓续集成/赓续交付(CI/CD)

GitOps 是一栽运维框架,它采用了 DevOps 在行使程序开发阶段的最佳实践(例如版本控制、配相符、相符规性和CI/CD工具),并将其行使于基础设施自动化。

与 GitOps 相比,传统的 DevOps 尽管在柔件开发生命周期已实现自动化,但基础架构大体上照样是一个必要专科团队进走手动操作的过程。随着对基础架构需求的赓续添长,实现基础设施自动化变得越来越主要。当代化的基础设施必要弹性机制(速度和周围),以便能有效地管理赓续安放所需的云资源。

GitOps体系学习和理解

GitOps 用于对基础设施置备的过程进走自动化,采用以 配置文件 存储为代码(基础设施即代码),配置文件在每次安放时都会生成相通的基础设施环境,来保证环境的相反性,完善整个运维流程的自动化。

 三叉戟 - 基础设施即代码(IaC) - Terraform  GitOps 行使 Git 仓库行为基础设施定义的单一可信来源,将所有基础设施以配置文件的手段存储首来,达到配置和管理行使服务的题目。  三叉戟 - 相符并乞求(MR)  GitOps 行使相符并乞求行为所有基础设施更新的变更机制,相符并乞求是团队经由过程评审和评论进走配相符的地方,相符并会被挑交到您的骨干分支并可行为审计日志。  三叉戟 - 赓续集成/赓续交付(CI/CD)   GitOps 行使具有赓续集成和赓续交付的 Git 做事流来自动化实走基础架构的更新,在新代码相符并后,CI/CD 流水线将实走环境中的更改,从而避免手动配置的舛讹等题目。

对于任何必要配相符的做事,转折都是很棘手的,GitOps 也不破例。GitOps 必要所有参与者遵安分律,它是一栽采用崭新的手段来做事的准许。对于团队来说,把所有的事情都记录下来至关主要。

2. GitOps 的中央在于配相符

能够遮盖行使程序从构思到代码再到安放全流程的配相符

从中央上来说,GitOps 指的是将 Git 存储库行为构建基础设施和安放行使程序所有代码的唯一可信数据源,然后将代码自动化安放到迥异的云环境上面(能够借助Terraform完善资源编排)。

每幼我都能够在联相符个编制中做事,并晓畅事情的挺进情况。不论你是在基础架构中照样在行使程序开发中,所有的更改都遵命同样的流程,即定义做事主体,将其分配给幼我,团队配相符,然后安放这些代码,并将 Git 存储库行为唯一可信数据源行使。

 GitOps 与代码和配相符都有周详有关  行使版本控制编制能够确保全部都被记录且可见,审计跟踪使团队保持相符规性。  针对于迥异的项现在和团队,新建 issue 来描述增补的现在的和义务(众云平台)。  在 issue 中,记录列出的义务列外的实走水祥和挺进(经由过程ME相符并乞求)。

GitOps体系学习和理解

3. GitOps 的行使特出实践

良益的运维体系拥有一个无缝链接且完善的体验,能够添进基础设施、运营和开发团队之间的配相符,在挑高柔件环境的安详性、郑重性和坦然性的同时,实现更迅速安放,这能够添强团队的信念。比如:

GitOps体系学习和理解

 [1] 版本控制  中央 - 配置文件 - 声明式编制  Git 仓库行为所有基础设施和行使安放代码的单一原形来源  经由过程受珍惜分支的稀奇权限,限定能够安放到生产的用户和团队  [2] 代码审阅  团队 - 方便后续追溯题目因为  挑高代码质量,传播最佳实践,防止题目的展现  [3] 赓续集成/赓续交付  安放 - 无缝体验 - 与 Terraform 紧浓密成  将其与迅速管理和源代码管理竖立在联相符个行使程序中  声援从物理机、虚拟机、容器到云原生平台的众栽基础环境的安放 4. GitOps 的大致运走流程  

陪同着 DevOps 在近些年的火爆,围绕 xOps 产生了许众概念,诸如 DevSecOps,AIOps,MLOps,ChatOps 等等,自然还有的主角 GitOps。而GitOps 这个词展现于 2017 年,是由 Weaveworks 公司根据众年云计算基础设施和行使程序管理经验而挑出的一个概念。

GitOps体系学习和理解 - 杂乱无章的xOps造词行动

清淡情况下,能够行使下面的赓续交付编制(暗示图),来完善云原生行使程序的安放与交付。这栽 从左到右走到底 的 Push 模式,固然很容易实现一键式安放,但也存在一些题目。

GitOps体系学习和理解 - 完善云原生行使程序的安放与交付

简而言之,就是异国手段保证两侧的服务是相反的,这能够会导致 配置漂移 的发生和坦然相符规题目的展现,而行使声明式是解决这个题目的关键点。

 [1] 很难保证   仓库里清单文件的内容是否和 k8s 集群的实际情况是否相反  [2] 不足变通   镜像有更新时不能够自动同步至集群,除非每次从头到尾走一遍安放流程  [3] 坦然相符规   有能够必要操作人员经由过程 kubectl 命令做一些集群操作

声明式编制有个特点,其能够帮吾们自动完善行使程序或基础设施编制的描述状态和实际状态的自动同步,保证两者能保持相反。比如,行使安放清单内里行使程序是一个副本(replicas=1),那么集群侧行使程序就会是一个 pod。

GitOps体系学习和理解 - 关于声明式的理解以及解题思路

而 GitOps 以声明式编制为基座,以 Git 为单一可信源,即全部皆代码,从而吾们能够将上述构建流程改为下面如许的 pull 模式。pull 模式的关键就是,单一可信源与 k8s 集群的集成,当可信源侧的文件清单发生变更的时候,集群侧能够及时捕捉到此变更,从而完善变更清单的安放。

 这就必要行使的 Git 工具声援与 k8s 打交道的能力。  能够将 Git 工具与 Terraform 集成,来完善云基础设施的自动化管理。

GitOps体系学习和理解 - 关于声明式的理解以及解题思路。

GitOps体系学习和理解 - 关于声明式的理解以及解题思路

# ------- 0.0 -------  # GitOps的仓库代码组织  # -------------------  # 众云环境  ➜ tree -a GitOps  GitOps  └── gitops      ├── .gitlab-ci.yaml             # CI/CD      └── environments          ├── aliyun          │   ├── kubeconfig.yaml     # k8s集群配置          │   ├── main.tf             # 基础竖立配置          │   └── yaml          │       └── app.yaml        # 集群服务配置          └── k3s              └── yaml                  ├── app.yaml        # 集群服务配置                  └── kubeconfig.yaml # k8s集群配置 

以 Git 为单一可信源,所有与柔件开发有关流程中的代码(包括基础设施代码、行使程序源码、配置等)都会存储在 Git 仓库中。所有管理过程都是经由过程相符并乞求(MR)来完善的,当必要对基础设施作某些变更时,只必要修改代码,并挑交 MR,在所有的修改都被审阅和照准后,代码能够被相符并到主分支上。一旦代码转折被相符并,所有的转折将被安放到生产中。

 GitOps 的益处  迅速进走变更 - 更新和回滚  人员做事体验的升迁 - 安放流程完善  坦然性挑高 - 仓库进走权限分配  相符规审计容易做 - 所见即所得  GitOps 的弱点  配相符文化的竖立 - 逐渐教育   Git Workflow的竖立 - 同化云保证服务可用   敏感新闻的处理 - 敏感新闻(与Vault结相符解决) - GitSecOps 5. GitOps 集成 ArgoCD 实践

ArgoCD 只是一个赓续交付工具,但其实中央功能点!

ArgoCD 是一款开源且主要针对 Kubernetes 来做 GitOps 的赓续交付工具。现在是 CNCF 的孵化项现在。其团体架构图如下:

GitOps体系学习和理解 - 集成ArgoCD实践

ArgoCD 是以 Kubernetes Controller 的样式来实现的,它会对运走在 Kubernetes 集群上的行使程序进走监听,并将实际运走状态和憧憬状态(在安放清单文件中指定,且存储在版本控制编制中)进走对比,当两者状态纷歧致的时候,则挑示 OutOfSync,此时能够经由过程自动或者手动的手段来完善同步操作,以让两者状态再次保持相反。存储在 Git 仓库中的任何变更都会被自动同步至集群侧。

这其实就是实现 GitOps 的中央原理。所有对于行使程序或者基础设施的变更仅仅需对 Git 仓库做一些 MR 或者 Push 操作即可实现,变更会自动安放。于是,固然 GitOps 的中央不是 Git,但是却与 Git 息戚与共。

Git 将行为存储安放清单文件的版本控制编制,与 ArgoCD 做集成,实现 GitOps workflow。团体暗示图如下所示:

 一个 Git 实例  一个 ArgoCD 运走实例

GitOps体系学习和理解 - 集成ArgoCD实践

 [1] 装配和启动 ArgoCD 服务 
# 装配ArgoCD服务(官方)  # 行使Kustomize来完善对安放清单文件的编排  # 同时用sops来处理敏感新闻在Git上的存储题目  $ kubectl create namespace argocd  $ kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml  # 袒露argocd的服务端口  $ kubectl -n argocd port-forward pods/argocd-server-6db46c865b-qqnbl 8080:8080  # 获取登陆暗号  $ kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath="{.data.password}" | base64 -d  RDMpJRKRfsmkcgbP  # 访问ArgoCD服务  http://localhost:8080  admin/RDMpJRKRfsmkcgbP 
 [2] 介绍 sops 的行使 
# 这sops是一款开源的添密文件的编辑器(以GPG为例演示)  # 声援YAML、JSON、ENV、INI和BINARY格式,且声援众栽添密手段  # 装配  $ brew install gnupg  $ brew install sops  # 生成一对key  $ gpg --full-generate-key  # sops和gpg的结相符 - 创建sops配置文件  # encrypted_regex: 添密规则;规定必要对哪些字段的值进走添密  # gpg: 添密所必要的fingerprint值  $ cat >> .sops.yaml << EOF  creation_rules:    - encrypted_regex: '^(username|title|)$'      pgp: 'ED2A6947C44F9228B39E65B705A11CD02E66FF4B'  EOF  # sops和gpg的结相符 - 创建敏感新闻的文件  $ cat >> secret.yaml << EOF  apiVersion: v1  data:      username: eGlhb21hZ2UK=      company: SmlIdShHaXRMYWIp=  kind: Secret  metadata:      labels:          app: demo      name: sops-demo      namespace: jihu-gitlab  type: Opaque  EOF  # sops和gpg的结相符 - 敏感新闻的文件添密  $ sops -e secret.yaml 
 [3] 配置 ArgoCD 的服务

GitOps体系学习和理解 - 配置ArgoCD的服务

 [4] 行使 ArgoCD 的服务 
# 在ArgoCD的Project下面增补application来让GitOps飞首来  # 至此ArgoCD配置完善,且此ArgoCD实例已经在监听配置的Git的仓库  # 倘若该仓库的配置文件发生了转折,则转折会被自动同步至Kubernetes集群侧  # 查望运走的行使程序  $ kubectl -n gitops-argocd get pods  NAME                      READY   STATUS    RESTARTS   AGE  deploy-766c4cbbfc-m8dz6   1/1     Running   0          53m  # 查望此行使程序的输出 - 映射端口出来  $ kubectl -n gitops-argocd port-forward pods/deploy-766c4cbbfc-m8dz6 9999:9999  $ curl localhost:9999/jihu  Hello JiHu GitLab,this is xiaomage,version is v6.1.0  

【编辑选举】

鸿蒙官方战略配相符共建——HarmonyOS技术社区 Java互联网架构师-Spring框架中央技术 2022年的十大机器人流程自动化趋势展望 2021高级网络工程师系列5之自动化运维之开源网络监控柔件-Cacti【网络工程师】 别名运维幼哥对运维规则的十个总结,珍藏首来 云上MySQL的这八个要点,运维要晓畅一下