标签: argocd

ArgoCD 应用程序之间的同步波

我们有一个 ArgoCD 项目。在这个项目中,我们有多个应用程序(我们称它们为 A、B 和 C),它们通过 Kafka 集群相互传递消息。为此,需要创建主题。

应用程序 A 负责管理 Kafka 集群(除其他外)。我们在应用程序 A 中有一个 PreSync 挂钩,用于在更新应用程序 B 和 C 所依赖的其他资源之前创建和配置主题的作业。

这意味着我们需要应用程序 A 在其他应用程序之前同步,以确保顺利推出。为了尝试管理这个问题,我们将应用程序 A 添加到 SyncWave -1,其他应用程序处于默认状态0

kind: Application
metadata:
  name: "A"
  annotations:
    argocd.argoproj.io/sync-wave: "-1"
Run Code Online (Sandbox Code Playgroud)

我们最初的假设(也许是愚蠢的)是同步协调应用于项目内,但是,它似乎仅应用于应用程序内

因此,应用程序 A 中的资源会等待 PreSync 挂钩按预期配置主题,但应用程序 B 和 C 不会等待应用程序 A 同步。

有没有办法控制项目内应用程序之间同步的顺序/依赖关系?

我见过提到“应用程序的应用程序”模式,其中您有一个应用程序部署所有其他应用程序。这样做是否允许我们利用 SyncWave 确保应用程序 A 在尝试同步应用程序 B 和 C 之前完全解析?如果没有,还有其他办法吗?

kubernetes microservices gitops argocd

8
推荐指数
1
解决办法
5668
查看次数

自定义环境变量-argocd

有构建环境变量(https://argoproj.github.io/argo-cd/user-guide/build-environment/),因此可以在 application/helm yaml 文件中注入类似的内容$ARGOCD_APP_NAME,并将其解析为实际值。

有没有一种方法可以设置自定义环境变量,以便可以在 argocd 应用程序 yaml 文件上解析它?

例如,在下面的 argocd 应用程序 yaml 中,需要设置 ENV 值,以便 helm 可以知道要使用哪些values.yaml。

apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
    ...
spec:
    ...
    source:
       ...
        helm:
            valueFiles:
                - values_${ENV}.yaml
Run Code Online (Sandbox Code Playgroud)

kubernetes kubernetes-helm argoproj argocd

8
推荐指数
1
解决办法
1万
查看次数

使用 ECS 部署 GitOps?

我正在寻找 ArgoCD for Kubernetes 以 GitOps 方式部署应用程序。

只是想知道是否有适用于 AWS ECS 和 Hashicorp Nomad 的类似产品。

我知道AWS Proton,它不像ArgoCD那么简单。对于AWS ECS,我只是在寻找一些可以读取ECS任务定义和服务定义并将其与AWS ECS同步的工具。

amazon-web-services amazon-ecs gitops argocd

8
推荐指数
1
解决办法
3667
查看次数

GitOps 中单独存储库中的应用程序和环境配置 - 如何处理配置更改?

我已经开始使用 k8s 和 argoCD 进行 GitOps 之旅,使用应用程序源和部署文件(清单、环境配置等)的单独存储库,并且我试图弄清楚,如果应用程序源代码更改还需要更改环境配置。

示例:应用程序已部署并在测试/QA 环境中运行,我想推送代码更改,这需要新的“DB_ConnectionString”环境变量。由于此环境变量是新的,因此它不存在于我的部署/gitops 存储库的配置文件中(假设它是 Helm value-QA.yml)。

如果我推送这个新的代码更改,CI 将构建应用程序并更新容器,这会提示 argoCD 部署新的容器版本 - 但因为我还没有更新 GitOps 存储库,所以它缺少这个新变量,并且部署将失败。

我想我很难理解,如果在这些情况下,我被迫始终确保我的 GitOps 存储库在我的应用程序存储库之前更新,以及是否有最佳实践来处理此流程?

continuous-deployment gitops argocd

8
推荐指数
1
解决办法
789
查看次数

如何在 ArgoCD 应用程序规范中设置 helm 值(而不是文件)

我查看了所有 ArgoCD文档,但不知何故我似乎找不到答案。我有一个像这样的应用程序规范:

apiVersion: argoproj.io/v1alpha1                                                                                                                                                                                                                                                          
kind: Application                                                                                                                                                                                                                                                                         
metadata:                                                                                                                                                                                                                                                                                 
  name: myapp                                                                                                                                                                                                                                                                            
  namespace: argocd                                                                                                                                                                                                                                                                       
spec:                                                                                                                                                                                                                                                                                     
  destination:                                                                                                                                                                                                                                                                            
    namespace: default                                                                                                                                                                                                                                                                    
    server: https://kubernetes.default.svc                                                                                                                                                                                                                                                
  project: default                                                                                                                                                                                                                                                                        
  source:                                                                                                                                                                                                                                                                                 
    helm:                                                                                                                                                                                                                                                                                 
      valueFiles:                                                                                                                                                                                                                                                                         
      - my-values.yaml                                                                                                                                                                                                                                                     
    path: .                                                                                                                                                                                                                                        
    repoURL: ssh://git@blah.git                                                                                                                                                                                                                        
    targetRevision: HEAD
Run Code Online (Sandbox Code Playgroud)

但是,我还需要指定一个特定的 helm 值(就像您在 helm 命令中所做的那样)--set。我在 ArgoCD Web UI 中看到它有一个Values位置,但我已经尝试了我能想到的所有条目组合(somekey=somevalue, somekey:somevalue, somekey,somevalue)。我也尝试直接编辑清单,但尝试这样做时仍然遇到类似的错误。 ArgoCD 网页用户界面 该错误是一长串废话,结尾为error unmarshaling JSON: while decoding JSON: json: cannot unmarshal string into Go value of type map[string]interface {}

通过 Web UI 或清单文件设置单个值的正确语法是什么?

kubernetes-helm argocd

8
推荐指数
2
解决办法
3万
查看次数

GitOps 和数据库迁移

我正在尝试在我们公司引入 GitOps。大多数情况下,我们都有用 Django 编写的微服务(但是,它也可以是任何其他 Web 框架)。我对数据库迁移有一个概念性问题。向前迁移很简单:您可以将它们作为作业或 init 容器或 helm 中的钩子来运行。但是向后迁移呢?假设我想从 v1.1 回滚到 v1.0,并且我有一些迁移需要取消应用。现在怎么办?我想使用 argo cd 或 Flux。

有一篇非常好的文章:https://www.weave.works/blog/how-to- Correctly-handle-db-schemas-during-kubernetes-rollouts 。然而,它需要一些 Django 中没有的纪律

fluxcd gitops argocd

7
推荐指数
1
解决办法
3127
查看次数

在 ArgoCD 中启动/停止应用程序

如何停止/启动ArgoCD中部署的应用程序?

我只看到删除同步或部署/重新部署选项。我正在运行服务器应用程序,并且我想暂时停止(关闭)它们在集群中的功能。或者我在这个概念中遗漏了一些东西?

我是否需要为我的服务器应用程序实现某种自定义接口,以使启动/停止功能成为可能并直接与我的应用程序通信?(所以它不属于ArgoCD的责任 - 即它不像Linux服务管理系统 - 我需要自己在应用程序级别实现它)

continuous-integration continuous-deployment continuous-delivery kubernetes argocd

7
推荐指数
1
解决办法
1万
查看次数

在 kustomize 清单中创建变量

我有一个我认为常见的用例,但我真的很难找到解决方案:

我想Kustomize在我们的部署中重用补丁中的变量。具体来说,我们使用提交 ID 来引用图像标签(用例 A)和与部署相关的 k8s 作业(用例 B)。

我们使用的设置中,对于每个 ArgoCD 应用程序,我们都有一个/base/文件夹/overlays/[environment-name],并且该基础用kustomization.yaml.

用例A:

一个非常简单的用法 -/overlays/[environment-name]我们有一个kustomization.yaml使用:

images:
- name: our-aws-repo-url
  newName: our-aws-repo-url
  newTag: commit-id
Run Code Online (Sandbox Code Playgroud)

工作起来就像一个魅力,因为我们可以将其重新用于部署本身及其相关作业,所有这些都只需一个提交引用。

用例 B:

问题:

我们使用 N 个作业来进行 0 停机部署的迁移,其中我们运行运行迁移的 alembic 容器,并且我们有一个waitforit initContainer监听作业完成的容器,即当迁移成功时才能进行部署。

现在的问题是,我需要触摸一个服务覆盖层中的 4 个文件来修补各处的 id(我们用它来识别作业):

  • 部署.yaml 像这样:
- image: groundnuty/k8s-wait-for:v1.4
  imagePullPolicy: IfNotPresent
  args: 
   - "job"
   - "job-commit-id"
Run Code Online (Sandbox Code Playgroud)
  • job.yaml 本身更改作业的重新触发以进行新的部署/潜在的迁移:
apiVersion: batch/v1
kind: Job
metadata:
  name: job-commit-id

Run Code Online (Sandbox Code Playgroud)
  • kustomization.yaml,如用例 A 中所述。

我认为应该可行的是:

  1. 在 kustomization.yaml 中以某种方式定义变量 …

kubernetes kustomize gitops argocd

7
推荐指数
1
解决办法
1万
查看次数

ArgoCD 挂钩 - 仅在发生更改时运行 PreSync 挂钩

我们有时希望在部署新版本应用程序之前运行一些数据库迁移作业。ArgoCD 中的常见方法似乎是使用 PreSync 挂钩,我已经测试过它并且似乎有效,但我发现它在功能方面有点有限,并且不确定我是否遗漏了某些内容或如果事情就是这样的话。

我希望它的工作方式是在数据库迁移作业以某种方式发生更改(很可能是新映像)时才运行,但是预同步作业的设计方式(并且可以理解)是始终运行每次同步时指定作业。从功能上来说,这很好,迁移作业将需要约 20 秒的时间来启动和完成,最终什么也不做,但是对于每个不相关的更改都发生这种情况显然并不理想。

我希望有某种方法可以实现我所缺少的“ArgoCD 本机”。

我当前使用的作业模板(并且运行每次同步)是这样的:

{{- define "project.migration_job" -}}
{{- $appsettings := (get .Values.global.apps .name) }}
---
apiVersion: batch/v1
kind: Job
metadata:
  generateName: {{ .name }}-
  annotations:
    argocd.argoproj.io/hook: PreSync
spec:
  template:
    spec:
      automountServiceAccountToken: false
      containers:
        - name: {{ .name }}
          image: "{{ .Values.global.repo }}/{{ .name }}:{{ $appsettings.image }}"
          resources:
            requests:
              memory: {{ $appsettings.memory | default "256Mi" | quote }}
              cpu: {{ $appsettings.cpu | default "75m" | quote }}
            limits:
              memory: {{ $appsettings.memory | …
Run Code Online (Sandbox Code Playgroud)

kubernetes argocd

7
推荐指数
1
解决办法
4587
查看次数

如何在 git 存储库中将 argocd 路径设置为分支而不是 main

我有以下内容:

apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: crm
  namespace: default
spec:
  project: default
  source:
    repoURL: <my url
    targetRevision: argocd
    path: argocd/

  destination:
    server: https://kubernetes.default.svc
    namespace: default

  syncPolicy:
    syncOptions:
    - CreateNamespace=true

    automated: 
      selfHeal: true
      prune:  true

Run Code Online (Sandbox Code Playgroud)

这正在将 argocd 与主分支连接起来,但是如果我希望它遵循不同的分支怎么办?

谢谢。

yaml github argocd

7
推荐指数
1
解决办法
1万
查看次数