Helm

Helm ist das bevorzugte Paketverwaltungstool für Kubernetes. Helm-Charts bieten eine Vorlagensyntax für Kubernetes-YAML-Manifestdokumente. Mit Helm können wir konfigurierbare Implementierungen erstellen, anstatt nur statische Dateien zu verwenden. Für weitere Informationen zur Erstellung Ihres eigenen Katalogs von Implementierungen, schauen Sie sich die Dokumentation unter https://helm.sh/docs/intro/quickstart/. an.

RKE2 erfordert keine spezielle Konfiguration zur Verwendung mit Helm-Kommandozeilenwerkzeugen. Stellen Sie nur sicher, dass Sie Ihre kubeconfig gemäß dem Abschnitt über Clusterzugriff richtig eingerichtet haben. RKE2 bietet einige zusätzliche Funktionen, um die Implementierung sowohl traditioneller Kubernetes-Ressourcenmanifeste als auch Helm-Charts mit dem rancher/helm-release CRD noch einfacher zu gestalten.

Automatische Implementierung von Manifesten und Helm-Charts

Alle Kubernetes-Manifeste, die in /var/lib/rancher/rke2/server/manifests gefunden werden, werden automatisch ähnlich wie kubectl apply in RKE2 bereitgestellt, sowohl beim Start als auch wenn die Datei auf der Festplatte geändert wird. Das Löschen von Dateien aus diesem Verzeichnis entfernt nicht die entsprechenden Ressourcen aus dem Cluster.

Auf diese Weise bereitgestellte Manifeste werden als benutzerdefinierte AddOn-Ressourcen verwaltet und können durch Ausführen von kubectl get addon -A angezeigt werden. Standardmäßig finden Sie AddOns für paketierte Komponenten wie CoreDNS, Nginx-Ingress und Metrics Server. AddOns werden automatisch vom Implementierungscontroller erstellt und basieren auf ihrem Dateiname im Verzeichnis der Manifeste.

Es ist auch möglich, Helm-Charts als AddOns bereitzustellen. RKE2 enthält einen Helm-Controller, der Helm-Charts mithilfe einer HelmChart Custom Resource Definition (CRD) verwaltet.

Dateibenennungsanforderungen

Der AddOn Name für jede Datei im Manifestverzeichnis leitet sich vom Basisnamen der Datei ab. Stellen Sie sicher, dass alle Dateien im Manifests-Verzeichnis (oder in Unterverzeichnissen) Namen haben, die eindeutig sind und den Kubernetes Objektnamensbeschränkungen entsprechen. Es sollte auch darauf geachtet werden, keine Konflikte mit Namen zu verursachen, die von den standardmäßigen RKE2 paketierten Komponenten verwendet werden, selbst wenn diese Komponenten deaktiviert sind.

Hier ist ein Beispiel für einen Fehler, der gemeldet wird, wenn der Dateiname Unterstriche enthält:

`Failed to process config: failed to process /var/lib/rancher/rke2/server/manifests/example_manifest.yaml:
   Addon.k3s.cattle.io "example_manifest" is invalid: metadata.name: Invalid value: "example_manifest":
   a lowercase RFC 1123 subdomain must consist of lower case alphanumeric characters, '-' or '.', and must start and end with an alphanumeric character (e.g. 'example.com', regex used for validation is '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*')`

Deaktivierung von AddOns

Die oben aufgeführten AddOns für paketierte Komponenten sowie AddOns für zusätzliche Manifeste, die im Verzeichnis der Manifeste platziert sind, können mit dem --Deaktivierungs-Flag deaktiviert werden. Deaktivierte AddOns werden aktiv aus dem Cluster deinstalliert, und die Quelldateien werden aus dem Verzeichnis der Manifeste gelöscht.

Um beispielsweise zu verhindern, dass CoreDNS in einem neuen Cluster installiert wird, oder um es zu deinstallieren und das Manifest aus einem bestehenden Cluster zu entfernen, können Sie RKE2 mit disable: rke2-coredns in der Konfigurationsdatei starten. Mehrere Elemente können in einer verschachtelten Liste deaktiviert werden.

# /etc/rancher/rke2/config.yaml
disable:
  - rke2-coredns
  - rke2-metrics-server

Verwendung des Helm CRD

Die HelmChart-Ressourcendefinition erfasst die meisten Optionen, die Sie normalerweise an das helm Kommandozeilenwerkzeug übergeben würden. Hier ist ein Beispiel, wie Sie Grafana aus dem Standard-Chart-Repository bereitstellen können, wobei einige der Standard-Chart-Werte überschrieben werden. Beachten Sie, dass die HelmChart-Ressource selbst im kube-system Namespace ist, die Ressourcen des Charts jedoch im monitoring Namespace bereitgestellt werden.

apiVersion: helm.cattle.io/v1
kind: HelmChart
metadata:
  name: grafana
  namespace: kube-system
spec:
  chart: stable/grafana
  targetNamespace: monitoring
  set:
    adminPassword: "NotVerySafePassword"
  valuesContent: |-
    image:
      tag: master
    env:
      GF_EXPLORE_ENABLED: true
    adminUser: admin
    sidecar:
      datasources:
        enabled: true

Ein Beispiel für die Bereitstellung eines Helm-Charts aus einem privaten Repository mit Authentifizierung:

apiVersion: helm.cattle.io/v1
kind: HelmChart
metadata:
  namespace: kube-system
  name: example-app
spec:
  targetNamespace: example-space
  createNamespace: true
  version: v1.2.3
  chart: example-app
  repo: https://secure-repo.example.com
  authSecret:
    name: example-repo-auth
  repoCAConfigMap:
    name: example-repo-ca
  valuesContent: |-
    image:
      tag: v1.2.2
---
apiVersion: v1
kind: Secret
metadata:
  namespace: kube-system
  name: example-repo-auth
type: kubernetes.io/basic-auth
stringData:
  username: user
  password: pass
---
apiVersion: v1
kind: ConfigMap
metadata:
  namespace: kube-system
  name: example-repo-ca
data:
  ca.crt: |-
    -----BEGIN CERTIFICATE-----
    <YOUR CERTIFICATE>
    -----END CERTIFICATE-----

HelmChart-Felddefinitionen

Feld Standard Beschreibung Helm-Argument / Flag-Äquivalent

metadata.name

Helm-Chartname

NAME

spec.chart

Helm-Chartname im Repository oder vollständige HTTPS-URL zum Chart-Archiv (.tgz)

CHART

spec.targetNamespace

default

Ziel-Namespace für das Helm-Chart

--namespace

spec.createNamespace

false

Ziel-Namespace erstellen, falls nicht vorhanden

--create-namespace

spec.version

Version des Helm-Charts (bei Installation aus dem Repository)

--version

spec.repo

URL des Helm-Chart-Repositories

--repo

spec.repoCA

Zertifikate von HTTPS-fähigen Servern mit diesem CA-Bundle überprüfen. Sollte eine Zeichenkette sein, die ein oder mehrere PEM-kodierte CA-Zertifikate enthält.

--ca-file

spec.repoCAConfigMap

Verweis auf eine ConfigMap, die CA-Zertifikate enthält, die von Helm vertraut werden sollen. Kann zusammen mit oder anstelle von repoCA verwendet werden

--ca-file

spec.helmVersion

v3

Zu verwendende Helm-Version (v2 oder v3)

spec.bootstrap

Falsch

Auf Wahr setzen, wenn dieses Chart benötigt wird, um den Cluster zu initialisieren (z. B. für den Cloud Controller Manager usw.).

spec.set

Überschreiben Sie einfache Standard-Chart-Werte. Diese haben Vorrang vor Optionen, die über valuesContent festgelegt wurden.

--set / --set-string

spec.jobImage

Geben Sie das Bild an, das bei der Installation des Helm-Charts verwendet werden soll. Z. B. rancher/klipper-helm:v0.3.0 .

spec.backOffLimit

1000

Geben Sie die Anzahl der Versuche an, bevor ein Job als fehlgeschlagen betrachtet wird.

spec.timeout

300s

Zeitüberschreitung für Helm-Operationen, als duration string (300s, 10m, 1h usw.)

--timeout

spec.failurePolicy

reinstall

Setzen Sie auf abort, in diesem Fall wird die Helm-Operation abgebrochen, bis der Betreiber manuell eingreift.

spec.authSecret

Verweis auf ein Secret vom Typ kubernetes.io/basic-auth, das die grundlegenden Authentifizierungsanmeldeinformationen für das Chart-Repository enthält.

spec.authPassCredentials

false

Geben Sie grundlegende Authentifizierungsanmeldeinformationen an alle Domains weiter.

--pass-credentials

spec.dockerRegistrySecret

Verweis auf ein Secret vom Typ kubernetes.io/dockerconfigjson, das die Docker-Authentifizierungsanmeldeinformationen für das OCI-basierte Repository enthält, das als Chart-Repository fungiert.

spec.valuesContent

Überschreiben Sie komplexe Standard-Chart-Werte über den Inhalt der YAML-Datei

--values

spec.chartContent

Base64-kodiertes Chart-Archiv .tgz - überschreibt spec.chart

CHART

Anpassen von Paket-Komponenten mit HelmChartConfig

Um das Überschreiben von Werten für paketierte Komponenten, die als HelmCharts bereitgestellt werden (wie Canal, CoreDNS, Nginx-Ingress usw.), zu ermöglichen, unterstützt RKE2 die Anpassung von Implementierungen über Ressourcen vom Typ HelmChartConfig. Die HelmChartConfig Ressource muss mit dem Namen und dem Namespace des entsprechenden HelmCharts übereinstimmen und unterstützt die Bereitstellung von zusätzlichen valuesContent, die als zusätzliche Wertedatei an den helm-Befehl übergeben werden.

HelmChart spec.set Werte überschreiben HelmChart- und HelmChartConfig spec.valuesContent Einstellungen.

Um beispielsweise die paketierten CoreDNS-Konfiguration anzupassen, können Sie eine Datei mit dem Namen /var/lib/rancher/rke2/server/manifests/rke2-coredns-config.yaml erstellen und sie mit folgendem Inhalt füllen:

apiVersion: helm.cattle.io/v1
kind: HelmChartConfig
metadata:
  name: rke2-coredns
  namespace: kube-system
spec:
  valuesContent: |-
    image: coredns/coredns
    imageTag: v1.7.1

Sie finden alle paketierten Helm-Charts einschließlich ihrer Dokumentation und Standardwerte im RKE2-Repository.