在 argocd 中的不同部署中使用相同的规范
Using same spec across different deployment in argocd
我目前正在使用 Kustomize。我们有多个部署和服务。它们具有相同的 spec
但名称不同。是否可以将 spec
存储在单独的文件中并在所有部署文件中引用它们?
使用 Helm,在 ArgoCD 中创建一个带有 helm:3 容器的管道,并创建一个 helm-chart 目录或存储库。拉取图表存储库,使用 helm 进行部署。使用 values.yaml 作为您要使用的动态值。此外,您需要将 kubeconfig 文件添加到您的管道,但这是另一个问题。
这是我能给的最好的报价。有关更多信息,我需要检查 ArgoCD。
我遇到了这个问题,我使用 Helm3 图表解决了它:
- 我有一张图表。 Yaml 文件,我在其中指明了我的发布名称和版本
- 值。 Yam,我在其中定义了用于特定环境的所有变量。
- 价值观测试。 Yaml 文件,例如,在测试环境中使用的文件,您应该只放置必须从一个环境更改为另一个环境的变量。
希望可以帮助您解决问题。
Helm 非常适合该解决方案。
但是,由于我们已经在使用 Kustomize 并且迁移到 Helm 需要时间,因此我们在 Kustomize 中使用 namePrefix 和标签修饰符解决了这个问题。
我还建议使用 Helm。然而,Helm 的一个限制是您不能创建动态 values.yaml
文件 (https://github.com/helm/helm/issues/6699) - 这可能非常烦人,尤其是对于 multi-environment 设置。然而,ArgoCD 提供了一种非常好的方法来使用它的 Application
类型来做到这一点。
解决方案是创建一个自定义 Helm chart 来生成您的 ArgoCD 应用程序(可以为每个环境使用不同的配置调用)。此 helm chart 中的模板将生成 ArgoCD Application
类型。此类型支持 source.helm.values
字段,您可以在其中动态设置 values.yaml
.
例如,HashiCorp Vault 的 values.yaml
可能非常复杂,在这种情况下,每个环境都非常需要动态 values.yaml
(因为这可以防止多个 values.yaml
每个环境的文件很大但非常相似)。
如果您的自定义 ArgoCD helm chart 是 my-argocd-application-helm
,则以下是示例 values.yaml
以及生成您的 Vault 应用程序的模板,即
values.yaml
server: 1.2.3.4 # Target kubernetes server for all applications
vault:
name: vault-dev
repoURL: https://git.acme.com/myapp/vault-helm.git
targetRevision: master
path: helm/vault-chart
namespace: vault
hostname: 5.6.7.8 # target server for Vault
...
templates/vault-application.yaml
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: {{ .Values.vault.name }}
namespace: argocd
finalizers:
- resources-finalizer.argocd.argoproj.io
spec:
destination:
namespace: 'vault'
server: {{ .Values.server }}
project: 'default'
source:
path: '{{ .Values.vault.path }}'
repoURL: {{ .Values.vault.repoURL }}
targetRevision: {{ .Values.vault.targetRevision }}
helm:
# Dynamically generate `values.yaml`
values: |
vault:
server:
ingress:
activeService: true
hosts:
- host: {{ required "Please set 'vault.hostname'" .Values.vault.hostname | quote }}
paths:
- /
ha:
enabled: true
config: |
ui = true
...
然后这些值将覆盖驻留在 {{ .Values.vault.repoURL }}
指定的 values.yaml
中的任何基本配置,其中可以包含不会因每个环境而改变的配置。
我目前正在使用 Kustomize。我们有多个部署和服务。它们具有相同的 spec
但名称不同。是否可以将 spec
存储在单独的文件中并在所有部署文件中引用它们?
使用 Helm,在 ArgoCD 中创建一个带有 helm:3 容器的管道,并创建一个 helm-chart 目录或存储库。拉取图表存储库,使用 helm 进行部署。使用 values.yaml 作为您要使用的动态值。此外,您需要将 kubeconfig 文件添加到您的管道,但这是另一个问题。
这是我能给的最好的报价。有关更多信息,我需要检查 ArgoCD。
我遇到了这个问题,我使用 Helm3 图表解决了它:
- 我有一张图表。 Yaml 文件,我在其中指明了我的发布名称和版本
- 值。 Yam,我在其中定义了用于特定环境的所有变量。
- 价值观测试。 Yaml 文件,例如,在测试环境中使用的文件,您应该只放置必须从一个环境更改为另一个环境的变量。
希望可以帮助您解决问题。
Helm 非常适合该解决方案。 但是,由于我们已经在使用 Kustomize 并且迁移到 Helm 需要时间,因此我们在 Kustomize 中使用 namePrefix 和标签修饰符解决了这个问题。
我还建议使用 Helm。然而,Helm 的一个限制是您不能创建动态 values.yaml
文件 (https://github.com/helm/helm/issues/6699) - 这可能非常烦人,尤其是对于 multi-environment 设置。然而,ArgoCD 提供了一种非常好的方法来使用它的 Application
类型来做到这一点。
解决方案是创建一个自定义 Helm chart 来生成您的 ArgoCD 应用程序(可以为每个环境使用不同的配置调用)。此 helm chart 中的模板将生成 ArgoCD Application
类型。此类型支持 source.helm.values
字段,您可以在其中动态设置 values.yaml
.
例如,HashiCorp Vault 的 values.yaml
可能非常复杂,在这种情况下,每个环境都非常需要动态 values.yaml
(因为这可以防止多个 values.yaml
每个环境的文件很大但非常相似)。
如果您的自定义 ArgoCD helm chart 是 my-argocd-application-helm
,则以下是示例 values.yaml
以及生成您的 Vault 应用程序的模板,即
values.yaml
server: 1.2.3.4 # Target kubernetes server for all applications
vault:
name: vault-dev
repoURL: https://git.acme.com/myapp/vault-helm.git
targetRevision: master
path: helm/vault-chart
namespace: vault
hostname: 5.6.7.8 # target server for Vault
...
templates/vault-application.yaml
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: {{ .Values.vault.name }}
namespace: argocd
finalizers:
- resources-finalizer.argocd.argoproj.io
spec:
destination:
namespace: 'vault'
server: {{ .Values.server }}
project: 'default'
source:
path: '{{ .Values.vault.path }}'
repoURL: {{ .Values.vault.repoURL }}
targetRevision: {{ .Values.vault.targetRevision }}
helm:
# Dynamically generate `values.yaml`
values: |
vault:
server:
ingress:
activeService: true
hosts:
- host: {{ required "Please set 'vault.hostname'" .Values.vault.hostname | quote }}
paths:
- /
ha:
enabled: true
config: |
ui = true
...
然后这些值将覆盖驻留在 {{ .Values.vault.repoURL }}
指定的 values.yaml
中的任何基本配置,其中可以包含不会因每个环境而改变的配置。