前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >ArgoCD GitOps 实践(三): Git 项目组织方法

ArgoCD GitOps 实践(三): Git 项目组织方法

原创
作者头像
imroc
发布2024-06-05 14:42:49
840
发布2024-06-05 14:42:49
举报

在根目录创建 ApplicationSet

在 Git 仓库根目录下创建 argo-apps.yaml 的文件,定义 ArgoCDApplicationSet:

代码语言:yaml
复制
apiVersion: argoproj.io/v1alpha1
kind: ApplicationSet
metadata:
  name: apps-mycluster # ApplicationSet 名称,建议带集群名称后缀
  namespace: argocd
spec:
  goTemplate: true
  goTemplateOptions: ["missingkey=error"]
  generators:
    - git: # 通过当前 Git 仓库的 apps 目录下的子目录自动生成 Application
        repoURL: git@yourgit.com:your-org/your-repo.git 
        revision: HEAD
        directories:
          - path: apps/*
  template:
    metadata:
      name: "{{.path.basename}}-mycluster" # 自动创建的 Application 的名称格式为: 目录名-集群名
      namespace: argocd
    spec:
      project: default
      source:
        repoURL: git@yourgit.com:your-org/your-repo.git
        targetRevision: HEAD
        path: "apps/{{.path.basename}}" # 自动生成的 Application 使用的 YAML 内容在对应子目录下
      destination:
        name: mycluster # Application 被部署的目的集群
      syncPolicy:
        automated:
          prune: true
          selfHeal: true

要点解析请看注释内容。

apps 子目录管理方法

apps 下面的每个子目录中的 YAML,都将作为一个 Application 所需的 K8S 资源,可以直接是 K8S YAML,也可以是 kustomize 格式的结构。

建议统一采用 kustomize 的格式来组织,示例:

代码语言:txt
复制
apps
├── jellyfin
│   ├── daemonset.yaml
│   └── kustomization.yaml
└── monitoring
    ├── kustomization.yaml
    ├── namespace.yaml
    ├── values.yaml
    └── vm-hostpath-pv.yaml

这样,如果你要添加新的应用,只需要在 apps 下直接新增一个目录就行,不需要再去定义 Application 了,会由 ApplicationSet 自动生成。

submodules 管理

多个集群可能会安装相同的应用,而我们采用一个集群的配置对应一个 Git 仓库的管理方法,相同的依赖应用可以提取到单独的 Git 仓库,通过 git 的 submodule 方式引用。

比如多个集群都会安装 EnvoyGateway,将 EnvoyGateway 用单独的 Git 仓库管理,文件结构如下:

代码语言:txt
复制
install
├── Makefile
├── install.yaml
└── kustomization.yaml

假设对于的 Git 仓库是 git@yourgit.com:your-org/envoygateway.git,现将其作为依赖引入到当前 Git 仓库,首先添加 git submodule:

代码语言:bash
复制
git submodule add --depth=1 git@yourgit.com:your-org/envoygateway.git submodules/envoygateway

然后在 apps 目录下创建 envoygateway 的目录,并创建 kustomization.yaml

代码语言:txt
复制
apps
└── envoygateway
    └── kustomization.yaml

kustomization.yaml 的内容如下:

代码语言:yaml
复制
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
  - ../../submodules/envoygateway/install

其它集群的 Git 仓库也一样的操作,这样就实现了多个集群共享同一个应用的 YAML,如果有细微自定义差别,可直接修改 kustomization.yaml 进行自定义。如果这个共同依赖的应用需要更新版本,就更新这个 submodules 对应的仓库,然后再更新集群对应仓库的 submodule:

代码语言:bash
复制
git submodule update --init --remote

每个集群对应仓库的 submodule 分开更新,可实现按集群灰度,避免更新出现问题一下子影响所有集群。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 在根目录创建 ApplicationSet
  • apps 子目录管理方法
  • submodules 管理
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档