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 |
|
spec.createNamespace |
false |
Ziel-Namespace erstellen, falls nicht vorhanden |
|
spec.version |
Version des Helm-Charts (bei Installation aus dem Repository) |
|
|
spec.repo |
URL des Helm-Chart-Repositories |
|
|
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. |
|
|
spec.repoCAConfigMap |
Verweis auf eine ConfigMap, die CA-Zertifikate enthält, die von Helm vertraut werden sollen. Kann zusammen mit oder anstelle von |
|
|
spec.helmVersion |
v3 |
Zu verwendende Helm-Version ( |
|
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. |
|
|
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 ( |
|
spec.failurePolicy |
reinstall |
Setzen Sie auf |
|
spec.authSecret |
Verweis auf ein Secret vom Typ |
||
spec.authPassCredentials |
false |
Geben Sie grundlegende Authentifizierungsanmeldeinformationen an alle Domains weiter. |
|
spec.dockerRegistrySecret |
Verweis auf ein Secret vom Typ |
||
spec.valuesContent |
Überschreiben Sie komplexe Standard-Chart-Werte über den Inhalt der YAML-Datei |
|
|
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 |
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.