当前位置: 代码网 > 服务器>服务器>微服务 > 基于Jenkins + Argo 实现多集群的持续交付

基于Jenkins + Argo 实现多集群的持续交付

2024年07月28日 微服务 我要评论
前面我们已经掌握了如何通过 Jenkins + Argo CD 的方式实现单集群的持续交付,明白了整个 CI/CD 过程中不同工具在流水线中的关系。所以接下来我们将更深入的了解 Argo CD 的特性。KubeSphere DevOps 基于 Jenkins + Argo 实现单集群的持续交付实践。通过上述 List generator 的定义参数,对应好模版,这种类型都属于 Key/Values 类型。source:最后运行流水行以后,等待流水线执行完毕。

前文概述

前面我们已经掌握了如何通过 jenkins + argo cd 的方式实现单集群的持续交付,明白了整个 ci/cd 过程中不同工具在流水线中的关系。所以接下来我们将更深入的了解 argo cd 的特性。

前文链接:kubesphere devops 基于 jenkins + argo 实现单集群的持续交付实践

kubesphere 配置

集群配置

这里我们需要准备至少 2 个集群,并且需要开启多集群组件、devops 组件。

因为 kubesphere 已经内置了 argo,所以只要被 kubesphere 所管理的集群会自动注册上 argo。

devops 配置

这里我们依旧要准备一个 git 仓库, 这里仍然是使用我们之前的仓库例子。

https://github.com/feeeenng/devops-maven-sample.git

不过需要注意,这次我们需要选择 multi-cluster 分支。

argo cd 部分

applicationset

这里主要介绍 argocd 的一个控制器 applicationset controller

此控制器追加了对跨多集群以及 monorepos 的支持。该项目以前是一个独立项目,后在 argo cd v2.3 版本中合入主分支。

applicationset 控制器主要应用场景:

  • 通过 argo cd 单一 kubernetes 资源管理应用发布多集群;
  • 单一 kubernetes 资源发布一个 git 或者多个 git 仓库来部署多个应用;
  • 增加了 monorepos 的支持;
  • 多租户集群模式下,提高了单个集群租户使用 argo cd 部署能力。

generators

applicationset 主要通过 generators 来实现对资源的定义, 通过 template 来实现参数值的替换。目前主要支持以下几种:

  • list generator:基于集群名/url 值的固定列;
  • cluster generator:基于 argo cd 自定义方式;
  • git generator:基于 git 存储中包含的文件或文件夹;
  • matrix generator:基于上述两种生成器的组合方式。

更多的方式参考地址: https://argo-cd.readthedocs.io/en/stable/operator-manual/applicationset/generators/

实践操作

这次我们使用 list generator 的方式生成配置模版。

代码目录 deploy 下包含一个文件 applicationset.yaml

# 采用 list generator 方式进行生成
# 集群信息都注入在配置里面
apiversion: argoproj.io/v1alpha1
kind: applicationset
metadata:
  name: devops-maven-sample
spec:
generators:
  - list:
      elements:
      - cluster: dev
        url: https://kubernetes.default.svc
      - cluster: test
        url: https://172.31.73.92:6443

开启 ondeletion 配置

preserveresourcesondeletion 参数表示删除 applicationset 资源以后,通过模版自动生成出来的 application 一并删除。

  syncpolicy:
    preserveresourcesondeletion: true

更多模版配置参考: https://argo-cd.readthedocs.io/en/stable/user-guide/application-specification/

配置同步策略

配置 application crd 同步策略。

createnamespace 自动创建 namespace。

prunepropagationpolicy 删除采用友好删除方式策略。

prune 默认情况下,argo cd 考虑安全机制不会自动同步 git 资源变更操作,这里手动开启。确保当我们 git 进行变更以后,argo 会自动进行 git 修改部署资源。

      syncpolicy:
        syncoptions:
        - createnamespace=true
        - prunepropagationpolicy=foreground
        automated:
          prune: true

更多描述查看地址: https://argo-cd.readthedocs.io/en/stable/user-guide/auto_sync/

模版定义

通过上述 list generator 的定义参数,对应好模版,这种类型都属于 key/values 类型。

      source:
        repourl: https://github.com/feeeenng/devops-maven-sample.git
        targetrevision: multi-cluster
        path: deploy/{{cluster}}
      destination:
        server: '{{url}}'
        namespace: multi-demo

最后运行流水行以后,等待流水线执行完毕。argo 自动进行 gitops 触发管理同步。

然后进入 kubesphere 界面,配置 argo 设置为 nodeport 类型 观察 web 界面。

打开 argo cd ui 界面,这里我配置了 argo cd 对接 kubesphere 的 ldap。

所以可以通过 kubesphere 的账号密码进行登录。如果没有配置的话,默认密码需要执行下面命令进行查看。

kubectl get secret -n argocd argocd-initial-admin-secret

这个时候我们能够看到,我们刚才通过 jenkins pipeline 运行的流水线已经成功。并且 argo cd 也已经自动同步发布应用。

回到 kubesphere 界面上观察应用部署情况能够看到,我们所发布的 2 个集群也已经正常部署完成。

dev 集群:

test 集群:

至此,我们使用 jenkins 完成了通过 argo cd 来部署多集群的应用发布。

后续

当前例子使用的是简单的列表生成器的方式,但 applicationset 的控制器其实也支持更多复杂的场景。比如通过 git generator 的方式只定义一个配置参数,满足多个应用的发布支持。这样也能够把应用代码跟配置代码进行分离。从而开发跟运维互不影响。

参考文档:

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com