Gitops-万字保姆级教程-小白也可以轻松学会! (Part 2)

news2024/11/25 1:08:53

系列文章目录

本文章分为2个部分:

        Part 1主要涉及Gitlab、Gitlab-Runner、Git-Ci、Sonar-qube-CI阶段

        Part 2主要涉及ArgoCD阶段

Gitops-万字保姆级教程-小白也可以轻松学会! (Part 1)-CSDN博客

Gitops-万字保姆级教程-小白也可以轻松学会! (Part 2)


文章目录

目录

一、Argo-CD是什么?

        1.1 Argo-CD官网

        1.2 一句话说明Argo-CD以及Argo-CD的软件架构

                1.2.1 Api Server

                1.2.2 Repository Server

        1.3 安装RKE2

        1.4 部署Argo-CD

                1.4.1 部署的Pod的用途解释

        1.5 Ingress方式访问Argo-CD

                1.5.1 ingress.yaml

                1.5.2 修改Configmap文件,添加insecure为true,我们证书在入口的控制器终结。

                1.5.3 修改你的本机host文件

                1.5.4 访问Argo-CD

                1.5.5 获取初始admin密码

                1.5.6 进入到Argo- CD UI

1.6 Helm方式部署示例应用以及测试ArgoCD

        1.6.1 创建New App

        1.6.2 ArgoCD 手动同步 

        1.6.3  ArgoCD 自动同步 

        1.6.4 模拟错误并回退

1.7 Kustom方式部署示例应用

        1.7.1 创建App

        1.7.2 配置如下

1.8 Helm与Kustom迭代应用

        1.8.1 修改Helmapp的values-dev.yaml配置文件

        1.8.2 修改Kustomzi的yaml配置文件

        1.8.3 推送到仓库、查看App现象

        1.8.4 Kustom-App现象 

1.8.5 Helm现象

​编辑 1.8.6 迭代总结

1.9 升级迭代最佳实践

2.0 总结​​​​​​​


前言

        在Part 1中我们安装了Gitlab、配置了Gitlab-Runner、并且测试了最基本的Ci流水线。

        接着结合Sonar_qube对代码进行静态扫描并集成在Gitlab_Ci中。

        我们初步的完成了Ci阶段。

        这篇Part 2 主要涉及到CD阶段,通过Argo结合Gitops部署到我们的环境中。

        在Part 1 篇中我们使用的Python代码只用于演示Ci阶段,本次演示代码使用DevOps Journey博主的Github开源仓库。

开源万岁!


一、Argo-CD是什么?

        1.1 Argo-CD官网

Home | Argo

        1.2 一句话说明Argo-CD以及Argo-CD的软件架构

        Argo CD是Kubernetes的声明式、GitOps持续交付工具。

        那么Argo CD的组件有哪些?干什么用?

                1.2.1 Api Server

        Argo_CD的Api Server 对外提供两种接口,一种是Grpc,一种是REST,其中Grpc用于Argo-CD的Cli工具交互,REST 而为UI服务。他的最重要作用:1、处理客户端(Ui/Cli)请求 2、处理自身以及第三方CI/CD工具集成请求。

                1.2.2 Repository Server

存储库服务器(Repository Server)的概念可以通过以下几个方面来理解:

  1. 内部服务:存储库服务器是一个在后台运行的服务,通常是云原生环境或持续集成/持续部署(CI/CD)流程中的一部分。它不直接面向最终用户,而是为其他服务或系统组件提供支持。

  2. 维护Git存储库的本地缓存:存储库服务器有一个重要的功能是维护Git存储库的本地缓存。这意味着它会将远程Git存储库的内容复制到本地系统中,以便快速访问和处理。这个本地缓存可以提高性能,减少对远程存储库的直接访问,从而提高效率和响应速度。

  3. 包含应用程序清单:存储库中包含的是应用程序清单,这些清单是描述应用程序部署和配置所需的文件。在Kubernetes环境中,这通常包括各种YAML文件,如部署、服务、配置映射等。

  4. 生成和返回Kubernetes清单:当存储库服务器接收到特定的输入(如存储库URL、修订(提交、标签、分支)、应用路径以及模板特定设置(参数,Helm values.yaml等))时,它会基于这些输入生成相应的Kubernetes清单。这些清单是根据存储库中的应用程序清单和提供的参数动态生成的,用于在Kubernetes集群中部署和管理应用程序。

  5. 输入参数的作用

    • 存储库URL:指定Git存储库的位置,存储库服务器将从此URL克隆或更新本地缓存。
    • 修订(提交、标签、分支):指定Git存储库中特定的修订版本,以便存储库服务器可以检出正确的代码或配置状态。
    • 应用路径:指定存储库中包含应用程序清单的路径,这有助于存储库服务器找到并处理正确的文件。
    • 模板特定设置:如参数和Helm的values.yaml文件,这些设置允许用户自定义生成的Kubernetes清单,以满足特定的部署需求或配置要求。

        1.3 安装RKE2

        请参考我的另一篇博客部署安装Rke2集群搭建一个kubernetes集群,如果一台主机则即当server节点也当worker、etcd节点、部署安装3分钟不到。

Rancher-RKE2-安装流程_rke2 安装-CSDN博客

        1.4 部署Argo-CD

kubectl create namespace argocd
kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml

验证:有一些状态问题是我集群的问题,可以不管哈。

                1.4.1 部署的Pod的用途解释

  1. argocd-application-controller-0: 这是Argo CD的应用程序控制器Pod,状态为Running,表示它正在正常运行。它没有重启过,运行时间为4天11小时。应用程序控制器负责监控和维护Argo CD管理的应用程序状态。

  2. argocd-applicationset-controller-65bb5ff89-wszqs: 这是Argo CD ApplicationSet控制器的Pod,也处于Running状态,表示正常运行。ApplicationSet控制器用于管理ApplicationSet资源,这是一种可以同时管理多个Argo CD应用程序的资源。

  3. argocd-dex-server-6f898cbd9-zz4dg: 这是另一个Argo CD的Dex服务器Pod,状态为Running,表示正常运行。Dex是一个身份服务,用于提供OAuth2和OpenID Connect(OIDC)功能。

  4. argocd-notifications-controller-64bc7c9f7-mml5d: 这是Argo CD通知控制器的Pod,状态为Running。Argo CD通知控制器用于发送通知(如Slack、Email等)。

  5. argocd-redis-5df55f45b7-ggrsn: 这是Argo CD使用的Redis服务器Pod,状态为Running。Redis用于缓存和其他数据存储需求。

  6. argocd-repo-server-74d5f58dc5-gz8zz 是Argo CD的仓库服务器Pod。仓库服务器负责与版本控制系统(如Git)交云,获取应用程序配置。

  7. argocd-server-5b86767ddb-n5qqj: 这是Argo CD的主服务器Pod,状态为Running。Argo CD服务器提供API服务和用户界面。

        1.5 Ingress方式访问Argo-CD

                1.5.1 ingress.yaml

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: argocd-server-http-ingress
  namespace: argocd
  annotations:
    nginx.ingress.kubernetes.io/force-ssl-redirect: "true"
    nginx.ingress.kubernetes.io/backend-protocol: "HTTP"
spec:
  ingressClassName: nginx
  rules:
  - http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: argocd-server
            port:
              name: http
    host: argocd.example.com
  tls:
  - hosts:
    - argocd.example.com
    secretName: argocd-secret
kubectl apply -f ingress.yaml 

                1.5.2 修改Configmap文件,添加insecure为true,我们证书在入口的控制器终结。

kubectl edit cm/argocd-cmd-params-cm -n argued
apiVersion: v1
kind: ConfigMap
metadata:
  annotations:
    kubectl.kubernetes.io/last-applied-configuration: |
      {"apiVersion":"v1","kind":"ConfigMap","metadata":{"annotations":{},"labels":{"app.kubernetes.io/name":"argocd-cmd-params-cm","app.kubernetes.io/part-of":"argocd"},"name":"argocd-cmd-params-cm","namespace":"argocd"}}
  creationTimestamp: "2024-07-11T03:13:33Z"
  labels:
    app.kubernetes.io/name: argocd-cmd-params-cm
    app.kubernetes.io/part-of: argocd
  name: argocd-cmd-params-cm
  namespace: argocd
  resourceVersion: "205867846"
  uid: dac39b0f-a273-4cf6-bf31-6d7e3fad096b
data:
  server.insecure: "true"

                1.5.3 修改你的本机host文件

echo "xxxxx  argocd.example.com" >> /etc/hosts

                1.5.4 访问Argo-CD

  

                1.5.5 获取初始admin密码

kubectl get secret argocd-initial-admin-secret -n argocd -o jsonpath='{.data.password}' | base64 --decode; echo

                1.5.6 进入到Argo- CD UI

1.6 Helm方式部署示例应用以及测试ArgoCD

        1.6.1 创建New App

        *Application name 为你应用的名称

        *Preject name 为你项目的名称-选择default

        *SYNC Policy 同步规则:手动和自动

                手动:即Argocd检测到你Gitrepo仓库存在更改需要你手动在ArgoCD中进行同步才会部署到你的Kubernetes集群中。

                自动:即ArgoCD探测到Gitrepo代码变化则自动部署到Kubernetes集群中。

        下面这些选项,后面实际用到的时候再做解释。

        目前先选择一个自动创建NameSpace.即如果你的App的部署文件中有不存在的NameSpace则会自动创建。

        下面配置Repo源,下面的源为Youtu博主DevOps Journey提供示例:

        *提供了两种不同方式的部署:helm以及kustom。 

        *这个项目会部署1个deployment,1个Configmap,1个NodePort类型的service

                复制下面项目的URL即可。

GitHub - devopsjourney1/argo-examples

        

HEAD:在 Git 中,HEAD 是一个引用,指向当前分支的最新提交。因此,当 Argo CD 的 TARGET REVISION 设置为 HEAD,它会持续追踪并同步 Git 仓库中相应分支的最新更改 。

        配置目的部署到目的Kubernetes:

        最下面的Helm-参数配置文件选择:

        valus-dev.yaml.

        点击左上角的Create-创建。

        **你可以看到应用程序已经部署,但状态为OutOfSync,没有进行同步,因为我们选择了手动同步。

        1.6.2 ArgoCD 手动同步 

        *点击SYNC

        *点击同步后效果         

        *进入到我们的RKE2集群进行验证。

kubectl get po -n dev

        *进行访问测试验证 

kubectl get svc -n dev

        1.6.3  ArgoCD 自动同步 

        *修改指定helm文件values-dev.yaml中的replicas来测试自动同步。       

        ***在Github中你需要导入博主的Github-repo就可以自己提交修改。

*在Argo-CD中刷新App的状态

        *可以看到副本变为2个,我们进入本地集群查看

kubectl get po -n dev

        1.6.4 模拟错误并回退

        上面我们演示了从初始化的5个Pods到我们修改副本数为2个,那么这次假设我们做了一次App的Update,并且我们这次Update有问题,需要进行回退到之前的5个Pods.

        *你当然可以直接在Github上进行修改为5个,ArgoCD依然会自动同步,但前提是你需要知道你到底修改了什么内容。这是一个手工且不能验证的操作,存在风险。

        *ArgoCD则提供了一种自动化的方式来解决回退问题。

        点击History and rollback,

        *你可以看到我们对目标App的修订历史版本号。

        *App页面上是我们的当前修订版本号。 

        *找到我们上次操作的修订版本号,右边的按钮,点击Rollback.

        *他会提示你需要关闭自动同步来进行这次操作,这个很好理解,因为如果存在自动同步则ArgoCD又会同步到最新的版本

        *在App页面你可以看到回退到了我们第一个历史修订版本号。

        *并且App的Repset为5个Pods. 

        **那么修订的版本号是怎么来的呢?

我们点击修订的版本号

 

他会跳转Github的网站,那么可以看到ArgoCD的历史修订版本号其实就是Github上的历史修订版本号。

 

1.7 Kustom方式部署示例应用

        部分同学可能没使用过Kustom,可以看一下我另外一篇博客~

5分钟了解,kustom是什么工具?-CSDN博客

        1.7.1 创建App

        1.7.2 配置如下

 

        **这里选择的是自动同步Git-repo

 

        **还是之前的Git-repo,这里截图是我Import的项目地址。你需要替换为你的import的Github项目地址。 

 

        **部署的Kubernetes集群还是本地,Namespace是dev.

        **可以看到下面匹配的就是Kustomize.

        **这里需要注意,因为Kustomize的语法更新了,在/dev/kustomization.yaml需要修改patches的语法。

bases:
- ../../base

patches:
- path: replicas.yaml

configMapGenerator:
- name: mykustom-map
  env: config.properties

        **我们点击Create。查看App部署情况。

        **可以看到部署成功了,并且应用的是我们dev环境下的Patch配置环境来部署的App. 

        **同时查看部署的资源,Deploy以及Pod的名称。就可以理解上面没有讲到的

namePrefix:
  kustom-

nameSuffix:
  -v1

        **其实就是在基础模版Deployment的name字段的值的基础上加前缀和后缀。

        **基础模版中定义的App的Deployment资源的名称为mywebapp. 

1.8 Helm与Kustom迭代应用

        **通过Github的edit也同样可以完成。

        1.8.1 修改Helmapp的values-dev.yaml配置文件

        1.8.2 修改Kustomzi的yaml配置文件

        1.8.3 推送到仓库、查看App现象

        1.8.4 Kustom-App现象 

        **可以看到Kustom-App的状态为进程中,因为他在重启Pod.

        **可以看到上面为新的Pod存活时间为2分,下面为38分之前老的Pod.

        **并且可以看到Configmap有两份配置文件。但其实在我们Github-repo中只有一份配置文件,也是导致我们无法同步的原因。

        **进行修建操作。 

 

        **只有一份则正常。

1.8.5 Helm现象

        **Helm则是同步了,只有一份ConfigMap.

但他的Pod并没有应用这个Configmap.

 

        **我们对Deploy执行restart即可。

 1.8.6 迭代总结

        总结,这种行为差异主要是由于 Kustomize 和 Helm 更新配置资源时的机制不同。Kustomize 通过改变资源名称来强制更新,自然触发了 Pod 的重启。而 Helm 则依赖于模板和值的变化,不一定会改变资源的名称,因此不会自动触发 Pod 重启,除非采取了额外的措施。

1.9 升级迭代最佳实践

正确的迭代更新应用程序,无论是使用 Kustomize、Helm 还是其他工具,在 Kubernetes 环境中的最佳实践通常包括以下几个方面:

1. **版本控制**:
   - 将所有配置文件和模板存储在版本控制系统中,如 Git。这样可以追踪每次更改的历史,方便回滚和审计。

2. **持续集成/持续部署 (CI/CD)**:
   - 使用 CI/CD 管道自动化部署过程。当代码或配置更改被推送到版本控制系统时,自动触发部署流程。ArgoCD 是 Kubernetes 环境中的一个流行选择,它可以监控 Git 仓库并自动同步更改。

3. **环境隔离**:
   - 为开发、测试和生产等不同环境使用不同的命名空间或集群。通过 Kustomize 或 Helm 的值文件来管理每个环境的特定配置。

4. **配置管理**:
   - 使用 ConfigMap 和 Secrets 管理应用配置和敏感信息。确保敏感信息(如密码和密钥)不被直接存储在配置文件中,而是使用 Kubernetes Secrets。

5. **资源更新策略**:
   - 明确定义如何处理资源更新,特别是对于需要重启的资源(如 Deployment)。对于 Helm,考虑使用如 `helm upgrade --recreate-pods` 的命令或在 ConfigMap 和 Secrets 名称中包含内容哈希来触发重启。
   - 对于 Kustomize,利用其生成资源名称后缀的能力(如哈希值)来自动触发依赖资源的更新。

6. **监控和日志**:
   - 配置适当的监控和日志收集工具,以便于实时监控应用状态和性能,以及快速定位问题。

7. **灰度发布和回滚策略**:
   - 实施灰度发布(如使用 Kubernetes 的 Deployment 策略)和自动回滚机制,以减少新版本可能引入的风险。

8. **文档和培训**:
   - 维护详细的文档,记录部署流程、配置指南和故障排除步骤。确保团队成员了解操作流程和最佳实践。

通过遵循这些最佳实践,团队可以确保应用的迭代更新过程既高效又可靠,同时最大限度地减少出错的可能性。

-----------------------------------------------------------------------------------------------

2.0 总结

        本篇文章重点讲述了如何安装、使用Argocd,以及如何升级、迭代应用,并且阐述了Helm、Kustomize迭代应用的区别。最后也分享了最佳迭代应用的实践步骤。

        下一篇紧跟最佳实践:Gitops-万字保姆级教程-小白也可以轻松学会! Part3, 将重点关注监控、日志。

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

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

相关文章

【测试能力提升----fastapi框架项目】需求分析

1. FastAPI框架架构 2. 场景分析 2.1 系统分类 单一用户权限系统(实用于CMS模型)多用户多权限系统(实用于多租商户类型) 2.2 功能模块 用户登录模块用户管理模块角色权限管理模块基本设置模块日志模块 2.3 需求分析 用户登录…

[米联客-安路飞龙DR1-FPSOC] FPGA基础篇连载-25 ADC模块FEP-DAQ9248采集显示波形方案

软件版本:Anlogic -TD5.9.1-DR1_ES1.1 操作系统:WIN10 64bit 硬件平台:适用安路(Anlogic)FPGA 实验平台:米联客-MLK-L1-CZ06-DR1M90G开发板 板卡获取平台:https://milianke.tmall.com/ 登录“米联客”FPGA社区 ht…

24年广东“双百社工”招聘报名流程详细步骤

还在蹲公告的宝子们注意啦!🔥24年广东双百社工公告陆续出啦!⚠️中山双百社工招聘57人,佛山双百社工招聘135人,其他地区也快了!⏰留给我们备考的时间只有一个月左右,想一次上岸的宝子抓紧备考&a…

《专题》numpy科学计算基础库——精细化讲解 <1>

一、什么是numpy库 Numpy(Numerical Python) 是科学计算基础库,提供大量科学计算 相关功能,比如数据统计,随机数生成等。其提供最核心类型为多维数组类型(ndarray),支持大量的维度数组与矩阵运算&#xff0…

Java面试题(每日更新)

每日五道!学会就去面试! 本文的宗旨是为读者朋友们整理一份详实而又权威的面试清单,下面一起进入主题吧。 目录 1.概述 2.Java 基础 2.1 JDK 和 JRE 有什么区别? 2.2 和 equals 的区别是什么? 2.3 两个对象的…

Linux ls命令详解

学习 Linux ,本质上是学习在命令行下熟悉使用 Linux 的各类命令; 1. Linux 命令通用格式 命令格式:命令 【-选项】【参数】(个别命令不遵循该格式) 短线(-)是区分选项和参数的标志,选项用来调整命令的功能…

redis的学习(一):下载安装启动连接

简介 redis的下载,安装,启动,连接使用 nosql nosql,即非关系型数据库,和传统的关系型数据库的对比: sqlnosql数据结构结构化非结构化数据关联关联的非关联的查询方式sql查询非sql查询事务特性acidbase存…

前端系列-6 使用Vue3搭建前端工程与setup语法糖介绍

背景 本文介绍如何使用vue3脚手快速搭建一个前端项目,并对生成的项目结构进行简单介绍,然后介绍setup语法糖。前端入门的同学可基于本文内容快速搭建属于自己的项目。 vue官网资料显示, vue3开发的项目相对vue2, 具有打包后体积变小,极速启动…

【网络】socket和udp协议

socket 一、六个背景知识1、Q1:在进行网络通信时,是不是两台机器在进行通信?2、端口号3、端口号vs进程PID4、目的端口怎么跟客户端绑定的呢?也就是怎么通过目的端口去找到对应的进程的呢?5、我们的客户端,怎…

textblob文本处理、词性分析与情感分析

1 前言 textBlob 是一個简单易用的 NLP库,基于 NLTK 和 pattern库, 提供了文本处理和情感分析等功能。 安装 textblob0.18.0 nltk3.8.1测试环境:Python3.10.9 使用前,先运行下面代码先下载些文件 import nltk nltk.download…

机器学习 | 阿里云安全恶意程序检测

目录 一、数据探索1.1 数据说明1.2 训练集数据探索1.2.1 数据特征类型1.2.2 数据分布1.2.3 缺失值1.2.4 异常值1.2.5 标签分布探索 1.3 测试集探索1.3.1 数据信息1.3.2 缺失值1.3.3 数据分布1.3.4 异常值 1.4 数据集联合分析1.4.1 file_id 分析1.4.2 API 分析 二、特征工程与基…

「YD-221WA无线多合一变送器」让高效监测触手可及!

前言 近年来,伴随着“中国制造2025”、“互联网”在我国的全面推进,智能无线仪表设备在工业控制领域大规模应用。“设备上云”成为众多企业实现数字化转型升级的重要策略,为提升仪表设备管理软件的网络化、智能化、易维护性等方面提供了强有…

问题记录-SpringBoot 2.7.2 整合 Swagger 报错

详细报错如下 报错背景,我将springboot从2.3.3升级到了2.7.2,报了下面的错误: org.springframework.context.ApplicationContextException: Failed to start bean documentationPluginsBootstrapper; nested exception is java.lang.NullPo…

1.3、校验码

校验码 简介奇偶校验编码方法分类注意练习题 CRC循环冗余校验模2除法异或运算模2除法计算过程 循环冗余校验CRC过程练习题选择题 海明校验步骤练习题 简介 计算机在接收相应信息的时候,能够识别的都是一些电信号或者转化后的0 1二进制。那包括我们在网络上传递信息…

昇思25天学习打卡营第16天|LLM-MindNLP ChatGLM-6B StreamChat

打卡 目录 打卡 任务说明 环境配置 部署方式 ChatGLM-6B 体验截图示例 ChatGLM-6B 模型结构解析如下 ChatGLM2-6B 模型结构解析如下 任务说明 加载智谱清言的chatglm模型权重文件(目前有4个版本),本次主要尝试了chatglm-6b。 chatgl…

人工智能(AI)在办公场所的广泛应用

人工智能(AI)在办公场所的广泛应用正逐步改变着我们的工作方式和效率。随着技术的进步,越来越多的公司和组织开始采用各种AI技术来优化工作流程、提升生产力,并提供更好的用户体验。以下是人工智能在办公方面的一些主要作用和影响…

C++中,虚函数的作用详解

我个人认为虚函数的作用有两个: 增加安全性;提醒子类去做该做的事情。 提高效率;不是指程序执行效率,而是编码效率。 首先我这里要纠正一下: 一个函数被定义为虚函数,不代表这个函数未被实现&#xff1…

leetcode.nvim使用cookie无法登陆问题

错误描述: 使用力扣 (LeetCode) 全球极客挚爱的技术成长平台 的cookie在neovim上使用leetcode.nvim进行登录会出现curl xxx -D xxxx的报错。 解决方法: 使用LeetCode - The Worlds Leading Online Programming Learning Platform这个网站的cookie进行登…

这7款高效爬虫工具软件,非常实用!

在当今数据驱动的时代,自动化爬虫工具和软件成为了许多企业和个人获取数据的重要手段。这里会介绍6款功能强大、操作简便的自动化爬虫工具,用好了可以更高效地进行数据采集。 1. 八爪鱼采集器 八爪鱼是一款功能强大的桌面端爬虫软件,主打可…

轮船控制系统nmea2000电缆组件 7/8 T型连接器

NMEA 2000 7/8 T型连接器概述 NMEA 2000 7/8 T型连接器是专为船舶控制系统设计的电缆组件,主要用于连接船上的各种电子设备和系统,如GPS接收器、自动驾驶仪、风速和风向传感器、深度声纳等。这些设备通过NMEA 2000总线共享数据,包括导航信息…