Kubernetes mit Kustomize konfigurieren

Kustomize ist ein Kubernetes-Konfigurationstransformationstool, mit dem Sie nicht vorlagenbasierte YAML-Dateien anpassen und die ursprünglichen Dateien unverändert lassen können. Kustomize kann auch Ressourcen wie ConfigMaps und Secrets aus anderen Darstellungen generieren. Kustomize wurde für die Kubernetes API entwickelt, sodass es Kubernetes-ähnliche Objekte verstehen und ändern kann.

Wenn Sie Helm-Diagramme mit Config Sync verwenden möchten, gibt es zwei unterstützte Methoden: Rendering von Helm über Kustomize oder die Verwendung der Helm API. Auf dieser Seite werden die Anforderungen für das Rendern von Helm-Diagrammen über Kustomize beschrieben. Weitere Informationen zur Verwendung der Helm API finden Sie unter Helm-Diagramme aus Artifact Registry synchronisieren.

Die folgenden Unterschiede gelten, wenn Helm-Diagramme mit Kustomize gerendert werden:

  • Private und OCI-basierte Helm-Registries werden nicht unterstützt. Mit der Helm API werden sowohl private als auch OCI-basierte Registrys unterstützt.
  • Helm-Werte können in der „Source of Truth“ verwaltet werden. Mit der Helm API werden Werte im Rahmen der RootSync oder RepoSync API verwaltet.
  • Das Rendern mehrerer Helm-Diagramme in einem RootSync- oder RepoSync-Objekt wird unterstützt. Mit der Helm API können Sie nur ein Helm-Diagramm in einem RootSync- oder RepoSync-Objekt rendern.

Config Sync-Anforderungen für Kustomize

Damit Kustomize-Konfigurationen und Helm-Diagramme automatisch gerendert werden, muss Ihre Config Sync-Umgebung die folgenden Anforderungen erfüllen:

  • Verwendet eine unstrukturierte „Source of Truth“. Das automatische Rendering wird für hierarchische Quellen nicht unterstützt.
  • Zum Auslösen des Renderingprozesses muss Ihre Source of Truth eine Kustomisierungs-Konfigurationsdatei (kustomization.yaml, kustomization.yml oder Kustomization) im Stammverzeichnis Ihres Verzeichnisses haben. Wenn das Stammverzeichnis keine Kustomization-Konfigurationsdatei hat, synchronisiert Config Sync die Konfigurationen unverändert, ohne dass ein Rendering erfolgt.
  • Fügen Sie Ihre Konfigurationen in die Datei kustomization.yaml ein. Wenn Sie diese Konfigurationsdateien nicht angeben, werden die Konfigurationen nicht mit dem Cluster synchronisiert.

Helm-Diagramme über Kustomize rendern

In diesem Abschnitt wird erläutert, wie Helm-Diagramme über Kustomize gerendert werden. Unter Gebündelte Helm- und Kustomize-Versionen werden die Kustomize- und Helm-Versionen aufgelistet, die mit der entsprechenden Version von Config Sync gebündelt sind.

Helm-Diagrammfelder

Sie können den kustomization.yaml-Dateien die folgenden Helm-Diagrammfelder hinzufügen, um das Rendern von Helm-Diagrammen über Kustomize zu unterstützen:

Feld Beschreibung
helmGlobals Parameter, die auf alle Helm-Diagramme angewendet werden
helmGlobals.chartHome Akzeptiert einen String. Ein Pfad relativ zum Kustomization-Stammverzeichnis zu einem Verzeichnis, das ein Unterverzeichnis für jedes in Kustomization aufzunehmende Diagramm enthält. Der Standardwert dieses Felds ist charts.
helmGlobals.configHome Akzeptiert einen String. Definiert einen Wert, den Kustomize mit der Umgebungsvariable HELM_CONFIG_HOME an Helm übergibt. Kustomize versucht nicht, dieses Verzeichnis zu lesen oder darin zu schreiben. Wenn keine Angabe gemacht wird, wird TMP_DIR/helm verwendet, wobei TMP_DIR ein temporäres Verzeichnis ist, das von Kustomize für Helm erstellt wurde.
helmCharts Ein Array mit Helm-Diagrammparametern
helmCharts.name Akzeptiert einen String. Der Name des Diagramms. Dies ist ein Pflichtfeld.
helmCharts.version Akzeptiert einen String. Die Version des Diagramms
helmCharts.repo Akzeptiert einen String. URL, die zum Suchen des Diagramms verwendet wird
helmCharts.releaseName Akzeptiert einen String. Ersetzt RELEASE_NAME in der Ausgabe der Diagrammvorlage
helmCharts.namespace Akzeptiert einen String. Legt den Ziel-Namespace für einen Release fest (Release.Namespace in der Vorlage)
helmCharts.valuesInline Anstelle der Standardwerte des Diagramms zu verwendende Werte
helmCharts.valuesFile Akzeptiert einen String. ValuesFile ist ein lokaler Pfad oder eine Remote-URL zu einer Wertedatei, die anstelle der Standardwerte im Diagramm verwendet werden soll. Die Standardwerte befinden sich in CHART_HOME/NAME/values.yaml.
helmCharts.valuesMerge Akzeptiert merge, override, (default) oder replace. „ValueMerge“ gibt an, wie „ValuesInline“ in Bezug auf Werte behandelt wird.
helmCharts.includeCRDs Akzeptiert true oder false. Gibt an, ob Helm auch CustomResourceDefinitions generieren soll. Der Standardwert ist false.

Beispielarchitektur für Kustomize-Konfigurationen

Das folgende Beispiel zeigt, wie Sie Ihre „Source of Truth“ so einrichten können, dass Kustomize-Konfigurationen mit automatischem Rendering verwendet werden. Dieses Verzeichnis enthält drei Overlays (team-a, team-b und team-c), die auf dieselbe Basis verweisen.

Das folgende Diagramm zeigt die Verzeichnisstruktur:

├── base
│   ├── kustomization.yaml
│   ├── namespace.yaml
│   ├── networkpolicy.yaml
│   ├── rolebinding.yaml
│   └── role.yaml
├── kustomization.yaml
├── README.md
├── team-a
│   └── kustomization.yaml
├── team-b
│   └── kustomization.yaml
└── team-c
    └── kustomization.yaml

Die folgende Datei kustomization.yaml befindet sich im Stammverzeichnis der „Source of Truth“ und enthält Verweise auf die drei Overlays:

# ./kustomization.yaml
resources:
- team-a
- team-b
- team-c

Der folgende kustomize.yaml-Datei befindet sich im Verzeichnis team-a und ist das Overlay für team-a:

# ./team-a/kustomization.yaml
namespace: team-a

resources:
- ../base

patches:
- target:
   kind: RoleBinding
   name: team-admin-rolebinding
 patch: |-
   - op: replace
     path: /subjects/0/name
     value: team-a-admin@mydomain.com
- target:
   kind: Namespace
   name: default
 patch: |-
   - op: replace
     path: /metadata/name
     value: team-a

Die folgende kustomization.yaml-Datei befindet sich im Verzeichnis base und ist die Kustomize-Basis:

# ./base/kustomization.yaml
resources:
- namespace.yaml
- rolebinding.yaml
- role.yaml
- networkpolicy.yaml

Ein Beispiel-Repository finden Sie im Verzeichnis Namespace-spezifische Richtlinien konfigurieren in GitHub.

Remote-Helm-Diagramm rendern

Config Sync unterstützt das Rendering von Remote-Helm-Diagrammen in Clustern mit öffentlichem Internetzugriff.

Mit der folgenden kustomization.yaml-Datei wird ein Remote-cert-manager durch Festlegen der folgenden helmCharts-Felder gerendert:

# ./kustomization.yaml
...
helmCharts:
- name: cert-manager
  repo: https://charts.jetstack.io
  version: v1.5.3
  releaseName: my-cert-manager
  namespace: cert-manager
...

Lokales Helm-Diagramm rendern

Config Sync unterstützt das Rendering lokaler Helm-Diagramme. Wenn Sie eine benutzerdefinierte Version eines Helm-Diagramms verwenden möchten, können Sie die veröffentlichte Version aus dem Helm-Diagramm (z. B. ArtifactHub) abrufen, Änderungen lokal vornehmen und diese dann an die zentrale Informationsquelle übertragen.

Mit der folgenden kustomization.yaml-Datei wird ein lokales cert-manager-Diagramm gerendert. Das Standardverzeichnis für Helm-Diagramme ist charts. Da dieses Diagramm in das Verzeichnis charts eingecheckt wird, müssen Sie nicht .helmCharts.repo oder .helmCharts.version angeben.

# ./kustomization.yaml
...
helmCharts:
- name: cert-manager
  releaseName: my-cert-manager
  namespace: cert-manager
...

Mehrere Helm-Diagramme rendern

Config Sync unterstützt das Rendering mehrerer Helm-Diagramme in einer kustomization.yaml-Datei, unabhängig davon, ob es sich um ein Remote- oder lokales Diagramm handelt.

Mit der folgenden kustomization.yaml-Datei wird ein lokales Helm-Diagramm (cert-manager) gerendert:

# ./kustomization.yaml
...
helmCharts:
- name: cert-manager
  releaseName: my-cert-manager
  namespace: cert-manager
- name: prometheus
  repo: https://prometheus-community.github.io/helm-charts
  version: 14.3.0
  releaseName: my-prometheus
  namespace: monitoring
...

Nächste Schritte