CI/CD ArgoCD -如何使用ArgoCD安排夜间构建?因此,部署一组临时Kubernetes资源

50pmv0ei  于 12个月前  发布在  Kubernetes
关注(0)|答案(2)|浏览(153)

每天晚上我们都会运行一个夜间构建。部署一个“docker-compose”堆栈,一个测试docker容器运行测试。工作正常。
我们开始使用ArgoCD迁移到Kubernetes。
我们如何使用ArgoCD部署一组临时Kubernetes资源?因此,在Git配置文件中进行任何更改时,ArgoCD将在运行环境中更新一系列(例如20个)Kubernetes资源。
部署的临时性很重要,因为它降低了云环境中的资源成本(按使用付费)。
尝试1:在this Stackoverflow post中,建议将可部署资源的示例数设置为0。好的,这适用于有限的资源集。使用Helm图表可能会有所帮助。
尝试2:我们可以动态创建一个ArgoCD应用程序,这样它就会立即开始在运行时环境中创建Kubernetes资源集。一段时间后,这个ArgoCD应用程序应该被删除。可能,但这是一个好的方法吗?这是公司运行夜间构建的方式吗?应该有更好的方法。
尝试3:我们可以使用pull requests吗?可以使用tagging items吗?
我希望你能提出一个更好的解决方案!许多公司都会面临同样的挑战。

n3schb8v

n3schb8v1#

为了扩展Gaël J的评论,在ArgoCD中使用ApplicationSet controller和PR (Pull Request) generator是管理夜间构建的临时Kubernetes资源的实用方法。

  • 作为ArgoCD的扩展,ApplicationSet允许您通过模板化定义一组应用程序。这允许基于模板创建多个应用程序。
  • ApplicationSet的PR生成器功能可以为Git仓库中的每个打开的pull请求自动创建一个ArgoCD Application。这对于在隔离环境中测试PR中的更改特别有用。

这意味着:

  • 开发人员在Git存储库中创建一个pull request,其中包含夜间构建的更改。
  • ApplicationSet控制器检测到新的PR并使用PR生成器在ArgoCD中创建一个新的应用程序,表示夜间构建所需的临时资源。
  • ArgoCD部署PR中定义的资源,CI/CD管道在这些部署的资源上执行测试。
  • 在后期测试中,可以通过以下方式删除临时资源:
  • 合并或关闭PR,触发ApplicationSet删除ArgoCD中对应的Application。
  • 或者经由CI/CD流水线步骤显式地删除应用。
+------------------+    +--------------------+    +-----------------------+
| Developer creates|    | ApplicationSet     |    | ArgoCD Syncs and      |
| Pull Request in  |    | detects PR and     |    | deploys Kubernetes    |
| Git Repository   | -> | generates          | -> | resources based on PR |
| with changes     |    | ArgoCD Application |    |                       |
+------------------+    +--------------------+    +-----------------------+
                               ^                              |
                               |                              |
                               |                              v
               +---------------+----------------+    +-----------------------+
               | PR merged/closed, triggers     |    | Resources are cleaned |
               | ApplicationSet to delete       |    | up by ArgoCD after PR |
               | corresponding Application      |    | is merged/closed      |
               +-------------------------------+    +-----------------------+

字符串
这样,每个PR都可以获得自己的一组资源,确保测试隔离。创建和删除临时资源的过程是基于PR操作自动化的。该方法可以很好地扩展多个PR和夜间构建。
但是.你需要确保你的Kubernetes集群有能力处理由PR创建的多个临时环境。你需要配置资源限制以防止过度消耗资源,以及监控应用程序的生命周期以确保及时完成清理。
例如,你可以在你的项目Git仓库中添加:

your-repo/
│
├── argo-cd/
│   ├── applicationset-nightly-builds.yaml    # ApplicationSet configuration
│   └── other-argo-configs.yaml
│
├── kubernetes/
│   ├── deployment.yaml
│   ├── service.yaml
│   └── ...
│
└── ...


applicationset-nightly-builds.yaml

apiVersion: argoproj.io/v1alpha1
kind: ApplicationSet
metadata:
  name: nightly-builds
  namespace: argocd
spec:
  generators:
    - pullRequest:
        github:
          owner: "<github-owner>"
          repository: "<github-repo>"
          api: "https://api.github.com/"
          tokenRef:
            secretRef: github-token
            key: token
        labels:
          - "nightly-build"
  template:
    metadata:
      name: '{{repo}}-pr-{{number}}'
    spec:
      project: default
      source:
        repoURL: 'https://github.com/<github-owner>/<github-repo>.git'
        targetRevision: '{{head.sha}}'
        path: 'kubernetes/nightly'
      destination:
        server: 'https://kubernetes.default.svc'
        namespace: 'nightly-builds-pr-{{number}}'
      syncPolicy:
        automated: {}

jhkqcmku

jhkqcmku2#

建议使用sync window。由阻止或允许同步的时间段表示。它由类型(可以允许或拒绝)、cron格式的计划和持续时间以及一个或多个应用程序、命名空间和集群沿着定义。

  • 当前窗口可以通过命令argocd app get APP检查。例如:


的数据

  • 可以使用CLI创建Windows:
argocd proj windows add PROJECT \
    --kind allow \
    --schedule "0 22 * * *" \
    --duration 1h \
    --applications "*"

字符串

相关问题