27|开发互不干扰,如何实现自动多环境管理?
- 深入了解
- 翻译
- 解释
- 总结
本文介绍了如何使用 GitOps 的多环境管理和安全方面的内容。通过 ArgoCD ApplicationSet 实现自动多环境管理,并通过 ArgoCD Generator 实现“代码即环境”的效果。文章详细介绍了自动多环境管理的概述和实战操作,包括创建 ApplicationSet 对象、部署 ApplicationSet 对象以及访问多个隔离环境。通过配置不同的 values.yaml 文件,可以触发 ArgoCD 自动同步不同环境的更新,实现了环境之间的互不干扰。同时,当需要创建新的环境时,只需在 env 目录下增加一个目录和 values.yaml 文件即可,ArgoCD 会根据配置自动创建新的环境。这种自动化的多环境管理方式极大地简化了环境的维护和管理工作,提高了开发效率。 通过本文的学习,读者可以了解如何通过 ApplicationSet 来创建和管理多环境。相比传统的方式,使用 ApplicationSet 大大简化了拉起一个新环境的过程。同时,文章还提到了采用多分支来管理 GitOps 中的多环境并不能够很好地同时解决可维护性和唯一可信源的问题。因此,推荐按照文章介绍的目录的方式来管理不同的环境。多环境管理不仅可以用来区分开发环境、测试环境和生产环境,还可以为每一位开发者提供独立的开发环境。最后,读者还可以尝试修改 ApplicationSet,让每个环境在不同的集群中运行,从而加深对 GitOps 多环境管理的理解。 总的来说,本文内容详实,操作性强,对于需要了解 GitOps 多环境管理的读者来说是一篇很有价值的文章。
《云原生架构与 GitOps 实战》,新⼈⾸单¥59
全部留言(7)
- 最新
- 精选
- 邵涵思考题,将一套应用定义部署在多个集群中,ApplicationSet定义示例 apiVersion: argoproj.io/v1alpha1 kind: ApplicationSet metadata: name: echo-server spec: generators: - list: elements: - cluster: production url: https://47.91.XX.XX:6443 - cluster: staging url: https://47.111.XX.XX:6443 template: metadata: name: '{{cluster}}-echo-server' spec: project: default source: repoURL: https://code.aliyun.com/shuwei.hsw/echo-server.git targetRevision: main path: manifests/directory/{{cluster}} destination: server: '{{url}}' namespace: multi-echo-server
作者回复: 👍🏻正确,看来已经掌握了 list gennerators 类型了,赞!
2023-03-28归属地:北京2 - 邵涵几个问题: 1. applicationset.yaml 中可以使用 values.yaml 中定义的变量吗? 2. applicationset.yaml 中定义的 application 模板,是否可以像23讲介绍的那样使用 ArgoCD Image Updater?换句话说,能在发现符合allow-tags过滤条件的新版本的镜像之后,更新工作负载并回写各个环境的values.yaml吗? 3. 如果上边两个问题都是“可以”的话,个人认为应该是可以实现“dev、test、prod环境分别使用从不同的源码分支构建的镜像”这种需求的,但如果上边两个问题是“不可以”的话,要如何实现这个需求呢?为每个环境创建独立的git仓库保存该环境对应的应用定义,进而为每个环境单独创建Application对象,而不使用ApplicationSet?
作者回复: 非常好的问题。 两个问题都能实现,applicationset 可以为 Deployment 工作负载定义 Annotations 字段,你只需要把 Image updater 相关的字段定义好就能满足。
2023-03-27归属地:北京1 - 这种方式感觉比较适合独立开发测试的服务,如果有比较多关联的上下游服务的话,感觉就会直接拉起一套很庞大的环境,这种情况是不是就不适合这么搞了。
作者回复: 几十个微服务其实也还好,结合合理的 resource request 和 limit 可以实现资源超卖。不过对于大型的服务来说,共用一套基础服务的方式也是一个不错的方案。
2023-03-20归属地:北京 - po首先,「不用分支」会使我们面临差异和合并的问题,这对长期维护来说成本较高,并且在更新环境时,需要切换到不同的分支去操作,这更容易导致人为的错误。其次,分支的管理方式没有目录管理方式来得直观。 ============================== 看上下文内容,这里应该是 不用分支 --> 用分支?
作者回复: 是的,感谢指正。
2023-02-26归属地:上海 - 橙汁有种实际场景借助applicationset在不同集群中创建了各自的环境,接下来想进行镜像更新想到两种实现方案。 1. 借助images updater插件,根据23章内容来看是修改application资源,当前application是自动创建不确定修改后是否会有问题。 2. 将打包成功后镜像的tag更新到helm仓库中,也就是value.yaml文件。假设代码和部署是两个仓库,就需要在ci最后阶段更新helm仓库的value.yaml。 希望老师能指正下思路是否正确。
作者回复: 第二种方案是可行的。 第一种方案值得实践一下。
2023-02-19归属地:北京2 - ghostwritten总结: Git & k8s & argocd & ApplationSet 1.安装 kind 2. 安装argo 3. 安装 ingress 4. 下载 kubernetes-example 5. 明确helm-env名录 6. 定义 template 的ingress.yaml、fronted.yaml变量,例如:命名空间、镜像名称版本 7. 重点理解applationset.yaml的参数定义 扩展:https://argo-cd.readthedocs.io/en/stable/ Argocd ApplationSet有以下Generator: - List Generator (实现多集群) - Cluster Generator - Git Generator - Matrix generator 玩法多多 问题: ArgoCD + ApplationSet VS ArgoCD +kustomize 多环境(多集群多空间)谁更出色?2023-03-06归属地:北京1
- bingo老师您好,请问如何在gitops流程中引入制品晋级的机制,比如不同环境的发布需要先在开发环境验证过再发测试,测试验证过再发生产环境?2023-11-09归属地:吉林