当前位置: 首页 > news >正文

Kubernetes 上的 GitLab + ArgoCD 实践(三):使用 ArgoCD 打通 CD 流程

文章目录

  • ArgoCD 安装
  • 登录ArgoCD控制台
  • CD过程
    • 方式一:透过web ui设置CD
    • 方法 二:使用清单文件设置CD
  • 同步与监控应用程序
    • GitHub 更新并触发自动同步(Automatic Sync)
    • 验证:
  • 总结

Kubernetes 上的 GitLab + ArgoCD 实践(一):实现基础 CI/CD 流程
Kubernetes 上的 GitLab + ArgoCD 实践(二):使用自建 GitLab Runner 完善 CI 流程
在上两篇文章:中,我们已经介绍了一个简单的CI过程,顾名思义,CI即Continious integration(持续集成),我们继承后的项目最终需要落地,部署到无论测试还是生产环境, 接下来,在本篇文章中,我们将落实最后的一公里,利用argoCD来实现CD(Continious delivery)的部分
在上一篇文章中,我们build了一个image,并定义了一个deployment.yaml放置于gitops-repo中,现在我们需要透过argocd部署到k8s环境中

ArgoCD 安装

我使用的是 Kubernetes 集群版本 v1.31.8,并且使用了 ingress-nginx,它的 ingress.class 名称是 “nginx”。

首先,先创建一个 argocd 命名空间。

kubectl create namespace argocd

编辑 argocd 清单,添加选项 — insecure

nano install.yaml
containers:- args:- /usr/local/bin/argocd-server- --insecure #这里增加--insecure

在编辑 ArgoCD deployment时使用的 --insecure 选项,表示连接到 ArgoCD 服务器时将不会检查其证书得真实性(不安全模式)。使用这个选项会在与 ArgoCD 服务器通信时禁用 SSL 证书的验证。
在修改完 manifest 之后,再部署该 manifest。

kubectl apply -n argocd -f install.yaml

当 Pod 正常运行且没有问题后,为 ArgoCD 的服务部署 Ingress。下面是 ArgoCD 的 Ingress manifest。

apiVersion: v1
items:
- apiVersion: networking.k8s.io/v1kind: Ingressmetadata:name: argocd-internalnamespace: argocdspec:ingressClassName: nginxrules:- http:paths:- backend:service:name: argocd-serverport:number: 80path: /pathType: Prefix ""
部署ingress清单
```bash
kubectl apply -f ingress.yaml

登录ArgoCD控制台

检查 ArgoCD 的控制台(dashboard),以确保 Ingress 正常运行并且没有问题。
在这里插入图片描述

确认能正常打开ArgoCD控制台,接下来获取密码,以便登录到 ArgoCD 的控制台(Dashboard)。

kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath="{.data.password}" | base64 -d;echo -e "\n"

用户名方面,ArgoCD 默认使用 admin 用户。
至此,我们已经顺利登入ArgoCD控制台
在这里插入图片描述

CD过程

CD(持续部署)的核心作用,是自动将代码仓库中已合并的稳定版本,同步部署到目标环境(如 Kubernetes 集群)。整个过程无需人工干预,既能减少手动操作的失误,也能确保应用从开发、测试到生产上线的流程高效且一致。
我们能透过如下两种方式配置CD:

方式一:透过web ui设置CD

设置 Argocd 仓库:进入 “设置”(Settings)→“仓库”(Repositories)→“连接仓库”(connect repo),然后根据仓库信息进行相应调整。

创建 Git 仓库:首先,需要创建一个包含你的 Kubernetes 清单文件(manifests)的 Git 仓库。该仓库将作为 ArgoCD 部署应用时的数据源。
我们将使用前面文章中使用的gitops-rep仓库

  1. 在 ArgoCD 控制台中,点击 “New App”,并填写以下信息:
  • Application Name: my-first-application
  • Project Name: default,
    注意这里的default它不是 Kubernetes 的 namespace也不是 GitLab 的 project,是 ArgoCD 自带的应用分组。新建的应用如果没特别要求权限或目标环境,放在 default 就能直接部署到任意允许的集群与命名空间。
  • Sync Policy: Manual或Automatic (根据你的需求)
    在这里插入图片描述
  • SYNC OPTIONS:这里仅勾选AUTO CREATE NAMESPACE
    其他,结合ArgoCD文档说明并根据需要选取
  • SOURCE:
    Repository URL:填入gitlab仓库的url,我这里填入先前章节介绍的gitops-repo的git url
    Path: 填入deployment.yaml所在的目录,在我的示例中,位于gitops-repo底下的myapp中,故填写myapp,如果直接位于gitops-repo下,填写"."即可
    在这里插入图片描述
  • DESTINATION:
    Cluster URL: 保留当前集群的默认值,https://kubernetes.defaults.svc
    namespace: 应用程序将被部署的目标命名空间,此示例中是my-first-application
    在这里插入图片描述
  • Directory: 有4个选项,helm、kustomize、directory、plugin,根据需要选择,此示例中选择directory
    DIRECTORY RECURSE(目录递归):如果 myapp 目录下还有子目录且需要扫描其中的配置文件,可勾选此选项;若只有 deployment.yaml 一个文件在 myapp 根目录,不勾选也可以。
    其他如 TOP-LEVEL ARGUMENTS、EXTERNAL VARIABLES、INCLUDE、EXCLUDE 等,在当前场景下若没有特殊参数或文件包含 / 排除需求,保持默认即可。
    在这里插入图片描述
    应用创建完成后,点击 “同步(Sync)” 即可将应用部署到你的 Kubernetes 集群。如果同步策略(Sync Policy)设置为 “自动(Automatic)”,应用将会自动部署到 Kubernetes 集群中。
    其中,“Sync” 是 ArgoCD 中触发部署动作的关键操作,“Sync Policy” 是控制部署触发方式的策略配置,“Automatic” 模式下 ArgoCD 会自动监控 Git 仓库的变更并同步到集群,这些术语在技术场景中保留英文以便准确理解功能。
    在这里插入图片描述sync后,点击查看同步状况
    在这里插入图片描述

使用 kubectl get applications -A应该能输出刚刚部署的application:

 kubectl get applications -A
NAMESPACE   NAME                   SYNC STATUS   HEALTH STATUS
argocd      my-first-application   Synced        Healthy```同时,也可以进入k8s集群查看部署状况
这里将看到部署了一个deployment(带一个pod)以及一个service
```bashkubectl get all -n my-first-application
NAME                                    READY   STATUS    RESTARTS   AGE
pod/nginx-deployment-6584b54554-nhd4q   1/1     Running   0          26sNAME            TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)   AGE
service/myapp   ClusterIP   10.97.31.129   <none>        80/TCP    31sNAME                               READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/nginx-deployment   1/1     1            1           27sNAME                                          DESIRED   CURRENT   READY   AGE
replicaset.apps/nginx-deployment-6584b54554   1         1         1       27s

方法 二:使用清单文件设置CD

你也可以通过在清单文件(manifest file)中定义 ArgoCD 应用,再使用 kubectl 应用该文件来创建 ArgoCD 应用。
在此示例中,我们将my-first-application的yaml文件稍加改造,用于示范使用manifest文件部署应用

  • 创建清单:最简单的方式,将上述步骤一中创建的my-first-application ,
kubectl get applications -n argocd -o yaml > my-second-application.yaml

改造清单:我们将对上面的输出内容进行改造,主要改造的地方如下:

  • 删除.status部分
  • 删除.metadata.creationTimestamp
  • 删除.metadata.generation
  • 删除.metadata.uid
  • 删除.metadata.resourceVersion
yq 'del(.status)' my-second-application.yaml -i -y
yq 'del(.metadata.creationTimestamp)' my-second-application.yaml -i -y
yq 'del(.metadata.generation)' my-second-application.yaml  -i -y
yq 'del(.metadata.uid)' my-second-application.yaml  -i -y
yq 'del(.metadata.resourceVersion)' my-second-application.yaml  -i -y
  • 修改.metadata.name的值为my-second-application
  • 修改.spec.destination.namespace的值为my-second-application
    改造后,最终输出如下:
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:finalizers:- resources-finalizer.argocd.argoproj.ioname: my-second-applicationnamespace: argocd
spec:destination:namespace: my-second-applicationserver: https://kubernetes.default.svcproject: defaultsource:path: myapprepoURL: https://gitlab.com/laker.whu-group/gitops-repo.gittargetRevision: HEADsyncPolicy:automated:enabled: trueselfHeal: truesyncOptions:- CreateNamespace=true

应用manifest文件

kubectl apply -f my-second-application.yaml

这条命令会在 argocd 命名空间中创建一个名为 my-second-application 的 ArgoCD 应用:

kubectl get application my-second-application -n argocd
NAME                    SYNC STATUS   HEALTH STATUS
my-second-application   Synced        Healthy

在这里插入图片描述
该应用将从指定的 Git 仓库同步你的 Kubernetes 清单文件。

kubectl get all -n my-second-application
NAME                                    READY   STATUS    RESTARTS   AGE
pod/nginx-deployment-6584b54554-b62bt   1/1     Running   0          22mNAME            TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)   AGE
service/myapp   ClusterIP   10.101.0.121   <none>        80/TCP    22mNAME                               READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/nginx-deployment   1/1     1            1           22mNAME                                          DESIRED   CURRENT   READY   AGE
replicaset.apps/nginx-deployment-6584b54554   1         1         1       22m

同步与监控应用程序

同步完成后,ArgoCD 会开始部署该应用程序。
你可以在仪表板(Dashboard)中监控部署进度。
如果出现任何问题,ArgoCD 会在界面上标示出来,你可以直接在 UI 中采取修正措施。

ArgoCD 还支持诸如 自动回滚、自我修复 等功能,
以确保你的 Kubernetes 集群始终与 Git 仓库中定义的目标状态保持一致。

GitHub 更新并触发自动同步(Automatic Sync)

ArgoCD 的一项强大功能是它能够 自动同步(Automatic Sync) 你的 Kubernetes 集群与 Git 仓库。
这意味着,只要你在 GitHub 中对 manifests 进行任何修改,这些变更都会 自动应用(apply) 到你的集群中。
接下来,我们通过一个示例来演示这个功能,这个示例仍然使用前面my-first-application与my-second-application所引用的gitops-repo中的deployment.yaml

  1. 首先,clone仓库
cd /root/demo-cicd-project
https://gitlab.com/laker.whu-group/gitops-repo.git
  1. 修改deployment.yaml
    修改gitops-repo/myapp/deployment,将.metadata.name的值从原来的nginx-deployment变更为nginx-deployment-2
  • 变更前:
apiVersion: apps/v1
kind: Deployment
metadata:name: nginx-deployment
spec:replicas: 1selector:matchLabels:app: nginxtemplate:metadata:labels:app: nginxspec:containers:- name: nginximage: registry.gitlab.com/laker.whu-group/app-repo:16a969d2ports:- containerPort: 80
  • 变更后:
apiVersion: apps/v1
kind: Deployment
metadata:name: nginx-deployment-2
spec:replicas: 1selector:matchLabels:app: nginxtemplate:metadata:labels:app: nginxspec:containers:- name: nginximage: registry.gitlab.com/laker.whu-group/app-repo:16a969d2ports:- containerPort: 80
  1. 增加自动prune功能
    由于之前在 ArgoCD 中创建的应用未启用 Prune 特性,导致旧资源在更新或删除时无法被自动清理。为了解决这个问题,可以执行以下命令,为应用开启自动清理(Prune)功能:
kubectl patch app my-second-application -n argocd -p '{"spec":{"syncPolicy":{"automated":{"prune":true}}}}' --type merge
  1. 推送更新至 Git 仓库
    执行以下命令提交代码并推送到远程仓库,推送完成后将触发 ArgoCD 的同步检测(若启用自动同步):
git add .
git commit -m "update deployment name"
git push origin main

验证:

启用 ArgoCD 的自动同步策略后,只要你将此变更推送到 GitHub 仓库,ArgoCD 就会检测到该更新,并自动将其应用到你的 Kubernetes 集群中。
随后会执行以下操作:

  • 删除 nginx-deploy 这个 Deployment(部署)资源
  • 创建 nginx-deploy-1 这个 Deployment(部署)资源
    下图输出能显示my-second-application这个应用已经成功同步
    在这里插入图片描述
    同时,我们能执行以下命令查看目标命名空间下的资源状态:
 kubectl get deployment -n my-second-application

输出如下,deployment的名字已经从原来的nginx-deployment变更为nginx-deployment-1

NAME                 READY   UP-TO-DATE   AVAILABLE   AGE
nginx-deployment-1   1/1     1            1           112m

总结

在本文中,我们详细介绍了如何在 Kubernetes 集群上安装 ArgoCD,以及如何使用 ArgoCD 部署你的应用。ArgoCD 是一款功能强大的工具,它通过 GitOps 实践简化了 Kubernetes 资源的管理流程。完成当前配置后,你可以进一步探索 ArgoCD 的更多高级功能,例如自动回滚(automated rollbacks)、应用健康监控(application health monitoring)和多集群管理(multi-cluster management)。

http://www.dtcms.com/a/556707.html

相关文章:

  • spark-SQL学习
  • SSM基于网络安全维护的机房设备管理19rya(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
  • ProcessLifecycleOwner 完全指南:优雅监听应用前后台状态
  • html css js网页制作成品——珠帘玉幕HTML+CSS网页设计(4页)附源码
  • 开启RN之旅——小试牛刀
  • Unity使用PP-MattingV2实现人像分割
  • 智能模型对齐(一致性)alignment
  • VSCode SSH远程连接失败 最速解决方案
  • 网站开发旅游前台模板临海建设规划局网站
  • 加载YOLO模型,处理mp4视频
  • 基于 GEE 利用 GHSL(100m)数据的区域建成区时空变化量化分析
  • day22_用户授权 头像上传
  • 网站识别爬虫(包括以浏览器插件形式运行的爬虫)主要通过分析请求特征、行为模式等差异来区分人类用户和自动化程序
  • 网站建设费用IPseo官网优化详细方法
  • 汽车OTA CDN HTTPS MQTT OCSP
  • python异步编程 -- 深入理解事件循环event-loop
  • 京津冀工业智能体赋能:重构产业链升级新篇章
  • AIGEO系统到底是什么?
  • 日志系统的介绍及前置技术
  • 安居客做网站广州建设网站公司哪家好
  • 【JUnit实战3_22】 第十三章:用 JUnit 5 做持续集成(下):Jenkins + JUnit 5 + Git 持续集成本地实战演练完整复盘
  • 【Linux】 CI/CD 管道优化:使用 GitHub Actions/GitLab CI 提速构建和部署
  • XML 与 XSLT:深入解析与实际应用
  • 关于maven中pom依赖冲突问题记录
  • 360提交网站入口怎么做能够让网站流量大
  • 三亚做网站哪家好做网站推广的难点、
  • 做一家购物网站要多少钱天津网站建设哪家好
  • ps制作网站效果图有没有做任务拿佣金的网站
  • 国内网站设计案例欣赏自己的网站怎么做商城
  • 建设好的网站怎么分享门户cms