Mapping zu Downstream-Clustern
|
Nur für Multi-Cluster: Dieser Ansatz gilt nur, wenn Sie SUSE® Rancher Prime Continuous Delivery im Multi-Cluster-Stil ausführen. Wenn keine Ziele angegeben sind, d.h. bei Verwendung eines Einzelclusters, zielen die Bundles auf die Standard-Clustergruppe ab. |
Beim Bereitstellen von GitRepos an Downstream-Clustern müssen die Cluster einem Ziel zugeordnet werden.
Ziele definieren
Die Bereitstellungsziele von GitRepo werden mit dem spec.targets-Feld festgelegt, um Cluster oder Clustergruppen abzugleichen. Die YAML-Spezifikation ist wie folgt.
kind: GitRepo
apiVersion: fleet.cattle.io/v1alpha1
metadata:
name: myrepo
namespace: clusters
spec:
repo: https://github.com/rancher/fleet-examples
paths:
- simple
# Targets are evaluated in order and the first one to match is used. If
# no targets match then the evaluated cluster will not be deployed to.
targets:
# The name of target. This value is largely for display and logging.
# If not specified a default name of the format "target000" will be used
- name: prod
# A selector used to match clusters. The structure is the standard
# metav1.LabelSelector format. If clusterGroupSelector or clusterGroup is specified,
# clusterSelector will be used only to further refine the selection after
# clusterGroupSelector and clusterGroup is evaluated.
clusterSelector:
matchLabels:
env: prod
# A selector used to match cluster groups.
clusterGroupSelector:
matchLabels:
region: us-east
# A specific clusterGroup by name that will be selected
clusterGroup: group1
# A specific cluster by name that will be selected
clusterName: cluster1
Zielabgleich
Alle Cluster und Clustergruppen im selben Namespace wie das GitRepo werden gegen alle Ziele bewertet.
Wenn eines der Ziele mit dem Cluster übereinstimmt, wird das GitRepo im Downstream-Cluster bereitgestellt. Wenn keine Übereinstimmung erfolgt, wird das GitRepo nicht in diesem Cluster bereitgestellt.
Es gibt drei Ansätze zum Abgleichen von Clustern.
Man kann Cluster-Selektoren, Clustergruppen-Selektoren oder einen expliziten Namen der Clustergruppe verwenden. Alle Kriterien sind additiv, sodass die endgültige Übereinstimmung als "clusterSelector && clusterGroupSelector && clusterGroup" bewertet wird. Wenn einer der drei den Standardwert hat, wird er aus den Kriterien entfernt. Der Standardwert ist entweder null oder "". Es ist wichtig zu erkennen, dass der Wert {} für einen Selektor "alles abgleichen" bedeutet.
targets:
# Match everything
- clusterSelector: {}
# Selector ignored
- clusterSelector: null
Sie können Cluster auch nach Namen abgleichen:
targets:
- clusterName: fleetname
Wenn Sie SUSE® Rancher Prime Continuous Delivery in Rancher verwenden, stellen Sie sicher, dass Sie den Namen der clusters.fleet.cattle.io Ressource angeben.
Standardziel
Wenn kein Ziel für das GitRepo festgelegt ist, wird der Standardwert für Ziele angewendet. Der Standardwert für Ziele ist wie folgt.
targets:
- name: default
clusterGroup: default
Das bedeutet, wenn Sie einen Standardstandort einrichten möchten, zu dem nicht konfigurierte GitRepos gehen, erstellen Sie einfach eine Clustergruppe namens default und fügen Sie Cluster hinzu.
Anpassung pro Cluster
|
Das |
Um zu demonstrieren, wie man Kubernetes-Manifeste über verschiedene Cluster mit Anpassungen unter Verwendung von SUSE® Rancher Prime Continuous Delivery bereitstellt, verwenden wir multi-cluster/helm/fleet.yaml.
Situation: Der Benutzer hat drei Cluster mit drei verschiedenen Labels: env=dev, env=test und env=prod. Der Benutzer möchte eine Frontend-Anwendung mit einer Backend-Datenbank über diese Cluster bereitstellen.
Erwartetes Verhalten:
-
Nach der Bereitstellung im
devCluster ist die Datenbankreplikation nicht aktiviert. -
Nach der Bereitstellung im
testCluster ist die Datenbankreplikation aktiviert. -
Nach der Bereitstellung im
prodCluster ist die Datenbankreplikation aktiviert und Load-Balancer-Services sind verfügbar.
Vorteil von SUSE® Rancher Prime Continuous Delivery:
Anstatt die App in jedem Cluster bereitzustellen, ermöglicht SUSE® Rancher Prime Continuous Delivery das Bereitstellen über alle Cluster, indem Sie diese Schritte befolgen:
-
Stellen Sie gitRepo
https://github.com/rancher/fleet-examples.gitbereit und geben Sie den Pfadmulti-cluster/helman. -
Unter
multi-cluster/helmwird ein Helm-Chart den Frontend-App-Service und den Backend-Datenbankdienst bereitstellen. -
Die folgende Regel wird in
fleet.yamldefiniert:
targetCustomizations:
- name: dev
helm:
values:
replication: false
clusterSelector:
matchLabels:
env: dev
- name: test
helm:
values:
replicas: 3
clusterSelector:
matchLabels:
env: test
- name: prod
helm:
values:
serviceType: LoadBalancer
replicas: 3
clusterSelector:
matchLabels:
env: prod
Ergebnis:
SUSE® Rancher Prime Continuous Delivery wird das Helm-Chart mit Ihrem angepassten values.yaml in die verschiedenen Cluster bereitstellen.
|
Das Konfigurationsmanagement beschränkt sich nicht nur auf Implementierungen, sondern kann auf das allgemeine Konfigurationsmanagement ausgeweitet werden. SUSE® Rancher Prime Continuous Delivery ist in der Lage, das Konfigurationsmanagement durch Anpassung automatisch auf beliebige Cluster anzuwenden. |
Einschränkungen beim Überschreiben von Helm-Chart-Einstellungen mit targetCustomizations
Obwohl helm.chart, helm.repo und helm.version in targetCustomizations angegeben werden können, gibt es wichtige Einschränkungen beim Überschreiben dieser Felder.
SUSE® Rancher Prime Continuous Delivery ruft das Helm-Chart während der initialen Bundle-Erstellungsphase unter Verwendung der obersten helm-Konfiguration ab. Dieser Abruf wird von der Fleet-Toolchain (GitJob) durchgeführt, bevor targetCustomizations verarbeitet werden.
Da das Chart in dieser Phase heruntergeladen wird, kann targetCustomizations nicht verwendet werden, um dynamisch ein anderes Chart abzurufen:
-
einem lokalen Verzeichnis
-
einem anderen Helm-Repository
-
einer separaten OCI-Registry (zum Beispiel einem hinter einer Firewall)
Wenn Sie versuchen, diese Felder zu überschreiben, kann die Überschreibung während des Chart-Abrufs ignoriert werden. In einigen Fällen kann Fleet versuchen, mehrere Chart-Versionen im selben Bundle einzuschließen, was die Bundle-Größe erheblich erhöhen und die etcd-Größenlimits überschreiten kann.
Wenn verschiedene Umgebungen unterschiedliche Charts oder Registries benötigen, verwenden Sie einen der folgenden Ansätze:
-
Definieren Sie separate
fleet.yamlDateien für jede Chart-Konfiguration. -
Erstellen Sie separate
GitRepoRessourcen für jede Umgebung.
Zusätzliche Beispiele
Beispiele mit rohem Kubernetes YAML, Helm-Charts, Kustomize und Kombinationen der drei befinden sich im SUSE® Rancher Prime Continuous Delivery Examples-Repository.