Рубрики
Uncategorized

Используйте kustomize для пост-рендеринговых диаграмм Helm в Argocd

В идеальном мире вам не придется выполнять несколько шагов для рендеринга, но К сожалению, мы … с меткой Kubernetes, DevOps, Tutorial, ArgoCD.

В идеальном мире вам не придется выполнять несколько шагов для рендеринга, но, к сожалению, мы не живем в идеальном мире …

В настоящее время большинство приложений, которые предназначены для развертывания в Kubernetes, предоставляют диаграмму Helm для облегчения развертывания. К сожалению, иногда диаграмма рулевой группы недостаточно гибкая, чтобы делать то, что вы хотите сделать, поэтому вам нужно раскошелиться, внести свой вклад и надеяться, что ваш вклад быстро объединен вверх, чтобы вам не приходилось поддерживать свою вилку.

Вместо того, чтобы указывать на свою вилку, вы можете использовать Kustomize Чтобы применить некоторые пост-Ренденды к своему выпуску хлеба. Это возможно изначально, так как Helm 3.1 с использованием -POST-Process флаг .

В Camptocamp мы используем Argocd управлять развертыванием наших объектов в Kubernetes. Давайте посмотрим, как мы можем использовать Kustomize, чтобы сделать пост-серидинг Helm Hardts в ArgoCD:

Сначала объявьте новый плагин управления конфигурацией в свой argocd-cm configmap (Способ сделать это зависит от того, как вы развернули argocd):

apiVersion: v1
kind: ConfigMap
metadata:
  name: argocd-cm
  namespace: argocd
data:
  configManagementPlugins: |
    - name: kustomized-helm
      init:
        command: ["/bin/sh", "-c"]
        args: ["helm dependency build || true"]
      generate:
        command: ["/bin/sh", "-c"]
        args: ["helm template . --name-template $ARGOCD_APP_NAME --namespace $ARGOCD_APP_NAMESPACE --include-crds > all.yaml && kustomize build"]

Затем добавьте Kustomization.yaml Файл рядом с вашим приложением Chart.yaml файл:

apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization

resources:
  - all.yaml

patchesJson6902:
  - target:
      group: apps
      version: v1
      kind: Deployment
      name: myapplication
    patch: |-
      - op: remove
        path: /spec/template/spec/securityContext

Теперь настройте свой Приложения объект для использования этого плагина:

apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: myapplication
  namespace: argocd
spec:
  project: myproject
  source:
    path: myapplication
    repoURL: {{ .Values.spec.source.repoURL }}
    targetRevision: {{ .Values.spec.source.targetRevision }}
    plugin:
      name: kustomized-helm
  destination:
    namespace: myproject
    server: {{ .Values.spec.destination.server }}

И … вуаля!

Одна вещь, которую я часто делаю, это использовать Spec.Source.Helm в моем Приложение Объект для передачи некоторых значений, которые исходят из моего Приложение приложений Анкет Это невозможно использовать плагин конфигурации в качестве клавиш Хелм и плагин взаимоисключающие.

Обходной путь, который я обнаружил, — это использовать Envs. Вы должны изменить конфигурацию плагина управления конфигурацией на (обратите внимание на $ helm_args ):

apiVersion: v1
kind: ConfigMap
metadata:
  name: argocd-cm
  namespace: argocd
data:
  configManagementPlugins: |
    - name: kustomized-helm
      init:
        command: ["/bin/sh", "-c"]
        args: ["helm dependency build || true"]
      generate:
        command: ["/bin/sh", "-c"]
        args: ["echo \"$HELM_VALUES\" | helm template . --name-template $ARGOCD_APP_NAME --namespace $ARGOCD_APP_NAMESPACE $HELM_ARGS -f - --include-crds > all.yaml && kustomize build"]

Тогда вы сможете использовать это в своем Заявление :

apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: myapplication
  namespace: argocd
spec:
  project: myproject
  source:
    path: myapplication
    repoURL: {{ .Values.spec.source.repoURL }}
    targetRevision: {{ .Values.spec.source.targetRevision }}
    plugin:
      name: kustomized-helm
      env:
        - name: HELM_ARGS
          value: "--set targetRevision={{ .Values.spec.source.targetRevision }}"

  destination:
    namespace: myproject
    server: {{ .Values.spec.destination.server }}

Или же

apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: myapplication
  namespace: argocd
spec:
  project: myproject
  source:
    path: myapplication
    repoURL: {{ .Values.spec.source.repoURL }}
    targetRevision: {{ .Values.spec.source.targetRevision }}
    plugin:
      name: kustomized-helm
      env:
        - name: HELM_VALUES
          value: |
            targetRevision: {{ .Values.spec.source.targetRevision }}

  destination:
    namespace: myproject
    server: {{ .Values.spec.destination.server }}

Оригинал: «https://dev.to/camptocamp-ops/use-kustomize-to-post-render-helm-charts-in-argocd-2ml6»