文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

如何优雅的使用 GitOps 实现运维自动化

2024-12-02 16:23

关注

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

与 GitOps 相比,传统的 DevOps 尽管在软件开发生命周期已实现自动化,但基础架构大体上仍然是一个需要专业团队进行手动操作的过程。随着对基础架构需求的不断增长,实现基础设施自动化变得越来越重要。现代化的基础设施需要弹性机制(速度和规模),以便能有效地管理持续部署所需的云资源。

GitOps体系学习和理解

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

对于任何需要协作的工作,改变都是很棘手的,GitOps 也不例外。GitOps 需要所有参与者遵守纪律,它是一种采用全新的方式来工作的承诺。对于团队来说,把所有的事情都记录下来至关重要。

2. GitOps 的核心在于协助

可以覆盖应用程序从构思到代码再到部署全流程的协作

从核心上来说,GitOps 指的是将 Git 存储库作为构建基础设施和部署应用程序所有代码的唯一可信数据源,然后将代码自动化部署到不同的云环境上面(可以借助Terraform完成资源编排)。

每个人都能够在同一个系统中工作,并了解事情的进展情况。无论你是在基础架构中还是在应用程序开发中,所有的更改都遵循同样的流程,即定义工作主体,将其分配给个人,团队协作,然后部署这些代码,并将 Git 存储库作为唯一可信数据源使用。

  1.  使用版本控制系统可以确保一切都被记录且可见,审计跟踪使团队保持合规性。
  2.  针对于不同的项目和团队,新建 issue 来描述添加的目标和任务(多云平台)。
  3.  在 issue 中,记录列出的任务列表的执行程度和进展(通过ME合并请求)。

GitOps体系学习和理解

3. GitOps 的使用优秀实践

良好的运维体系拥有一个无缝链接且完美的体验,能够增进基础设施、运营和开发团队之间的协作,在提高软件环境的稳定性、可靠性和安全性的同时,实现更快速部署,这能够增强团队的信心。比如:

GitOps体系学习和理解

4. GitOps 的大致运行流程  

伴随着 DevOps 在近些年的火爆,围绕 xOps 产生了很多概念,诸如 DevSecOps,AIOps,MLOps,ChatOps 等等,当然还有的主角 GitOps。而GitOps 这个词出现于 2017 年,是由 Weaveworks 公司根据多年云计算基础设施和应用程序管理经验而提出的一个概念。

GitOps体系学习和理解 - 乱七八糟的xOps造词运动

一般情况下,可以使用下面的持续交付系统(示意图),来完成云原生应用程序的部署与交付。这种 从左到右走到底 的 Push 模式,虽然很容易实现一键式部署,但也存在一些问题。

GitOps体系学习和理解 - 完成云原生应用程序的部署与交付

简而言之,就是没有办法保证两侧的服务是一致的,这可能会导致 配置漂移 的发生和安全合规问题的出现,而使用声明式是解决这个问题的关键点。

声明式系统有个特点,其能够帮我们自动完成应用程序或基础设施系统的描述状态和实际状态的自动同步,保证两者能保持一致。比如,应用部署清单里面应用程序是一个副本(replicas=1),那么集群侧应用程序就会是一个 pod。

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

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

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

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

  1. # ------- 0.0 -------  
  2. # GitOps的仓库代码结构  
  3. # -------------------  
  4. # 多云环境  
  5. ➜ tree -a GitOps  
  6. GitOps  
  7. └── gitops  
  8.     ├── .gitlab-ci.yaml             # CI/CD  
  9.     └── environments  
  10.         ├── aliyun  
  11.         │   ├── kubeconfig.yaml     # k8s集群配置  
  12.         │   ├── main.tf             # 基础设置配置  
  13.         │   └── yaml  
  14.         │       └── app.yaml        # 集群服务配置  
  15.         └── k3s  
  16.             └── yaml  
  17.                 ├── app.yaml        # 集群服务配置  
  18.                 └── kubeconfig.yaml # k8s集群配置 

以 Git 为单一可信源,所有与软件开发相关流程中的代码(包括基础设施代码、应用程序源码、配置等)都会存储在 Git 仓库中。所有管理过程都是通过合并请求(MR)来完成的,当需要对基础设施作某些变更时,只需要修改代码,并提交 MR,在所有的修改都被审查和批准后,代码可以被合并到主分支上。一旦代码变化被合并,所有的变化将被部署到生产中。

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。整体示意图如下所示:

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

  1. # 安装ArgoCD服务(官方)  
  2. # 使用Kustomize来完成对部署清单文件的编排  
  3. # 同时用sops来处理敏感信息在Git上的存储问题  
  4. $ kubectl create namespace argocd  
  5. $ kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml  
  6. # 暴露argocd的服务端口  
  7. $ kubectl -n argocd port-forward pods/argocd-server-6db46c865b-qqnbl 8080:8080  
  8. # 获取登陆密码  
  9. $ kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath="{.data.password}" | base64 -d  
  10. RDMpJRKRfsmkcgbP  
  11. # 访问ArgoCD服务  
  12. http://localhost:8080  
  13. admin/RDMpJRKRfsmkcgbP 
  1. # 这sops是一款开源的加密文件的编辑器(以GPG为例演示)  
  2. # 支持YAML、JSON、ENV、INI和BINARY格式,且支持多种加密方式  
  3. # 安装  
  4. $ brew install gnupg  
  5. $ brew install sops  
  6. # 生成一对key  
  7. $ gpg --full-generate-key  
  8. # sops和gpg的结合 - 创建sops配置文件  
  9. # encrypted_regex: 加密规则;规定需要对哪些字段的值进行加密  
  10. # gpg: 加密所需要的fingerprint值  
  11. $ cat >> .sops.yaml << EOF  
  12. creation_rules:  
  13.   - encrypted_regex: '^(username|title|)$'  
  14.     pgp: 'ED2A6947C44F9228B39E65B705A11CD02E66FF4B'  
  15. EOF  
  16. # sops和gpg的结合 - 创建敏感信息的文件  
  17. $ cat >> secret.yaml << EOF  
  18. apiVersion: v1  
  19. data:  
  20.     username: eGlhb21hZ2UK 
  21.     companySmlIdShHaXRMYWIp 
  22. kind: Secret  
  23. metadata:  
  24.     labels:  
  25.         app: demo  
  26.     name: sops-demo  
  27.     namespace: jihu-gitlab  
  28. type: Opaque  
  29. EOF  
  30. # sops和gpg的结合 - 敏感信息的文件加密  
  31. $ sops -e secret.yaml 

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

  1. # 在ArgoCD的Project下面添加application来让GitOps飞起来  
  2. # 至此ArgoCD配置完成,且此ArgoCD实例已经在监听配置的Git的仓库  
  3. # 如果该仓库的配置文件发生了变化,则变化会被自动同步至Kubernetes集群侧  
  4. # 查看运行的应用程序  
  5. $ kubectl -n gitops-argocd get pods  
  6. NAME                      READY   STATUS    RESTARTS   AGE  
  7. deploy-766c4cbbfc-m8dz6   1/1     Running   0          53m  
  8. # 查看此应用程序的输出 - 映射端口出来  
  9. $ kubectl -n gitops-argocd port-forward pods/deploy-766c4cbbfc-m8dz6 9999:9999  
  10. $ curl localhost:9999/jihu  
  11. Hello JiHu GitLab,this is xiaomage,version is v6.1.0  

 

来源:奇妙的Linux世界内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯