通过 Argocd 将 Helm chart 部署到多个环境的声明式方法
Declarative approach to deploy Helm chart by Argocd to multiple environments
我正在使用带有 helm 图表的 Argocd。我有两个环境:uat, prod.
据我了解,helm 的正确方法是让基本文件夹包含 commons + 每个 env 文件夹。
所以我有一个包含 3 个文件夹的分支:
base # for commons: Chart.yaml, templates, etc.
uat # for uat values.yaml
prod # for prod values.yaml
在我的 helm 图表中,我有以下 Chart.yaml(存储在基本文件夹中):
apiVersion: v1
appVersion: 1.0.11
name: my-nice-app
version: 1.0.11
每次发布我都会增加appVersion和version(version用作图像标签图表中的版本)。
我使用声明式方法部署 helm chart(这是 uat 应用程序资源,类似用于 prod):
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: my-nice-app
namespace: argocd
spec:
project: default
source:
repoURL: some-url
targetRevision: HEAD
path: base
helm:
version: v3
valueFiles:
- uat/values.yaml
destination:
server: https://kubernetes.default.svc
namespace: uat
syncPolicy:
syncOptions:
- CreateNamespace=false
automated:
selfHeal: true
prune: true
问题:
我确实更新了 uat 值文件。
我用新版本更新 Chart.yaml。
我只想部署 uat(但是当我更新基础产品时也会触发)。
我应该在哪里或如何存储 Chart.yaml?我应该更改 Argocd 应用程序资源吗?或者唯一的选择是为每个环境复制图表?
我也不希望在 Argocd 应用程序资源中存储任何与版本相关的信息(因此不要每次都更改它)。
不申请就好了kustomized.io。
您应该将其分成 2 个图表(base chart
和 value chart
)
base chart
是价值图表的chart dependency
,这样如果你更新基本图表,如果你不更新图表依赖,value chart
不会受到影响。
value-chart
的文件 Chart.yaml
将如下所示。
apiVersion: v2
name: my-nice-app-prod
description: Chart for production
type: application
version: 0.0.1
appVersion: "1.0.0"
dependencies:
- name: my-nice-app-chart
version: 0.1.9
Link 参考文献:
https://helm.sh/docs/helm/helm_dependency/
我正在使用带有 helm 图表的 Argocd。我有两个环境:uat, prod.
据我了解,helm 的正确方法是让基本文件夹包含 commons + 每个 env 文件夹。
所以我有一个包含 3 个文件夹的分支:
base # for commons: Chart.yaml, templates, etc.
uat # for uat values.yaml
prod # for prod values.yaml
在我的 helm 图表中,我有以下 Chart.yaml(存储在基本文件夹中):
apiVersion: v1
appVersion: 1.0.11
name: my-nice-app
version: 1.0.11
每次发布我都会增加appVersion和version(version用作图像标签图表中的版本)。
我使用声明式方法部署 helm chart(这是 uat 应用程序资源,类似用于 prod):
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: my-nice-app
namespace: argocd
spec:
project: default
source:
repoURL: some-url
targetRevision: HEAD
path: base
helm:
version: v3
valueFiles:
- uat/values.yaml
destination:
server: https://kubernetes.default.svc
namespace: uat
syncPolicy:
syncOptions:
- CreateNamespace=false
automated:
selfHeal: true
prune: true
问题:
我确实更新了 uat 值文件。
我用新版本更新 Chart.yaml。
我只想部署 uat(但是当我更新基础产品时也会触发)。
我应该在哪里或如何存储 Chart.yaml?我应该更改 Argocd 应用程序资源吗?或者唯一的选择是为每个环境复制图表?
我也不希望在 Argocd 应用程序资源中存储任何与版本相关的信息(因此不要每次都更改它)。
不申请就好了kustomized.io。
您应该将其分成 2 个图表(base chart
和 value chart
)
base chart
是价值图表的chart dependency
,这样如果你更新基本图表,如果你不更新图表依赖,value chart
不会受到影响。
value-chart
的文件 Chart.yaml
将如下所示。
apiVersion: v2
name: my-nice-app-prod
description: Chart for production
type: application
version: 0.0.1
appVersion: "1.0.0"
dependencies:
- name: my-nice-app-chart
version: 0.1.9
Link 参考文献:
https://helm.sh/docs/helm/helm_dependency/