зависимости Helm с разными пространствами имен

Прямо сейчас мне нужно установить несколько Helm-диаграмм в разных пространствах имен, чтобы мой продукт работал. Я пытаюсь создать супер-диаграмму руля, в которую я планирую добавить диаграммы руля (моих инструментов, как упоминалось выше) и установить их одним выстрелом. Моя проблема в том, что, поскольку эти инструменты находятся в разных пространствах имен, я не уверен, где указать ключ пространства имен, в котором я хочу установить эту конкретную зависимость (диаграмму). Например, если ниже приведен Charts.yaml моей диаграммы супер-руля

      dependencies:
- name: first_chart
  version: 1.2.3
  repository: https://firstchart.repo
- name: second_chart
  version: 1.5.6
  repository: https://secondchart.repo

Я хочу, чтобы моя первая диаграмма была установлена ​​в пространстве имен foo, а вторая диаграмма была установлена ​​в панели пространства имен.

Я рассматривал использование условий, но я считаю, что условия будут принимать только логическое значение в качестве значения.

Я наткнулся на эту ссылку (https://github.com/helm/helm/issues/2060), в которой говорится, что мы можем сделать это в Helm 3, но в основном о том, как сохранять выпуски между разными пространствами имен. Это не отвечает конкретно на мой вопрос.

2 ответа

То, как я решил это для своих кластеров с моделью кластера ArgoCD App of Apps .Конечно, для этого требуется, чтобы ArgoCD установил кластер. Однако по многим причинам, не относящимся к этому ответу, я настоятельно рекомендую установить ArgoCD, несмотря на простоту загрузки.начальной загрузки

Предполагая, что ArgoCD установлен, структура представляет собой единую диаграмму Helm, содержащую шаблоны для каждой из дочерних диаграмм, которые она будет развертывать и управлять с помощью CRD приложений Argo . Вы заметите, что в CRD есть определение,spec.destination.namespace, который определяет, где будет развернута диаграмма.

Пример шаблона приложения, который управляет развертыванием моей диаграммы диспетчера сертификатов вcert-managerпространство имен выглядит так:

      {{- if .Values.certManager.enabled }}
# ref: https://argo-cd.readthedocs.io/en/stable/operator-manual/declarative-setup/#applications
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: cert-manager
  # You'll usually want to add your resources to the argocd namespace.
  namespace: argocd
  # Add a this finalizer ONLY if you want these to cascade delete.
  finalizers:
    - resources-finalizer.argocd.argoproj.io
spec:
  # The project the application belongs to.
  project: cluster-configs

  # Source of the application manifests
  source:
    repoURL: https://github.com/yourOrg/Helm
    targetRevision: {{ .Values.targetRevision }}
    path: charts/cert-manager-chart

    # helm specific config
    helm:
      # Helm values files for overriding values in the helm chart
      # The path is relative to the spec.source.path directory defined above
      valueFiles:
        {{- range .Values.certManager.valueFiles }}
        - {{ . }}
        {{- end }}

      # Optional Helm version to template with. If omitted it will fall back to look at the 'apiVersion' in Chart.yaml
      # and decide which Helm binary to use automatically. This field can be either 'v2' or 'v3'.
      version: v3

  # Destination cluster and namespace to deploy the application
  destination:
    server: https://kubernetes.default.svc
    namespace: cert-manager
{{- end }}

С соответствующимvalues.yamlфайл для этой родительской диаграммы, который может выглядеть примерно так, как показано ниже, с указанием пути к нужным файлам значений в каталоге этой дочерней диаграммы.

      targetRevision: v1.11.0

certManager:
  enabled: true
  valueFiles: 
    - "values.yaml"

clusterAutoScaler:
  valueFiles: 
    - "envs/dev-account/saas/values.yaml"

clusterResourceLimits:
  valueFiles: 
    - "values.yaml"

externalDns:
  valueFiles: 
    - "envs/dev-account/saas/values.yaml"

ingressNginx:
  enabled: true
  valueFiles: 
    - "values.yaml"

Ниже приведен скриншот одного из моих приложений из каталога приложений для завершения примера.

В чистом Helm нет встроенного способа сделать это, но есть helmfile.

Ваш пример какhelmfile.yaml:

      releases:
  - name: chart1 # name of the release (helm install <...> first_chart)
    chart: repo1/first_chart
    version: 1.2.3
    namespace: foo

  - name: chart2
    chart: repo2/second_chart
    version: 1.5.6
    namespace: bar

# in case you want helmfile to automatically update repos
repositories:
  - name: repo1
    url: https://firstchart.repo
  - name: repo2
    url: https://secondchart.repo

Затем запустите:

  • helmfile sync=> бежатьhelm install/upgradeво всех выпусках или
  • helmfile apply=> то же, что и синхронизация, но сначала выполните diff, чтобы обновить/установить только измененные выпуски

В helmfile есть еще много чего, но это суть.

PS: если вы боретесь со значениями или хотите иметь что-то похожее на то, как обрабатываются значения зонтичной диаграммы, взгляните на helmfile: простой трюк для интуитивной обработки значений.

Другие вопросы по тегам