Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Gilt für: ✔️ Flottenmanager mit Hubcluster
Azure Kubernetes Fleet Manager intelligente Ressourcenplatzierung kann dieselbe Ressource für mehrere Cluster in einer Flotte bereitstellen. Häufig müssen Sie die Ressourcenkonfiguration ändern, um Regeln für das Verhalten in verschiedenen Umgebungen (Dev, Test, Prod) zu erzwingen. Zu diesem Zweck bietet Fleet Manager Ressourcenüberschreibungen, die eine Funktion bieten, die konzeptuell ähnlich ist, wie Helm-Vorlagen und Kustomize-Patches verwendet werden.
Das Ändern einer Ressourcenkonfiguration ist in Situationen hilfreich, z. B.:
- Sie möchten eine
ClusterRolemit dem Namensecret-readerfür alle Cluster verwenden, aber für die Rolle in Ihren Produktionsclustern nur eine kleinere Auswahl zulässiger Aktionen haben. - Sie möchten dasselbe
Deploymentfür alle Cluster verwenden, aber ein anderes Containerimage oder einen anderen Port in Ihren Produktionsclustern verwenden.
In diesem Artikel wird erläutert, wie Sie Außerkraftsetzungen für Ressourcen erstellen, die durch die Ressourcenplatzierung von Fleet Manager bereitgestellt werden.
Azure Kubernetes Fleet Manager unterstützt zwei Bereiche für Außerkraftsetzungen:
-
Clusterbereich: Verwenden Sie
ClusterResourceOverridemitClusterResourcePlacementfür Flotten-Administratoren, die Änderungen auf Infrastrukturebene verwalten. -
Namespace-Bereich: Verwenden Sie
ResourceOverridemitResourcePlacementfür Anwendungsteams, die Rollouts innerhalb ihrer spezifischen Namespaces verwalten.
Wählen Sie oben im Artikel unter den Optionen für den Geltungsbereichstyp den für Sie am ehesten zutreffenden Geltungsbereich aus.
Außerkraftsetzungen von Ressourcen im Cluster-Bereich
Ein ClusterResourceOverride hat folgende Eigenschaften:
-
clusterResourceSelectors: Gibt den Satz von Clusterressourcen an, die zum Überschreiben ausgewählt sind. -
policy: Gibt den Satz von Regeln an, die auf die ausgewählten Clusterressourcen angewendet werden sollen.
Hinweis
Policy Definitionen sind sowohl für Cluster- als auch für Namespace-gebundene Ressourcen identisch.
Das folgende Beispiel ClusterRole namens secret-reader zeigt, wie ClusterResourceOverride funktioniert.
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: secret-reader
rules:
- apiGroups: [""]
resources: ["secrets"]
verbs: ["get", "watch", "list"]
Auswählen von Clusterressourcen
Eine ClusterResourceOverride kann einen oder mehrere clusterResourceSelector enthalten, um auszuwählen, welche Ressourcen außer Kraft gesetzt werden sollen. Jede clusterResourceSelector unterstützt die folgenden Felder.
-
group: Die API-Gruppe der Ressource. -
version: Die API-Version der Ressource. -
kind: Die Art der Ressource. -
name: Der Name der Ressource.
Hinweis
Wenn Sie einen Namespace in ClusterResourceSelector auswählen, gilt die Überschreibung für alle Ressourcen im Namespace.
Lassen Sie uns mit unserem Beispiel ClusterRole sehen, wie wir es in einem ClusterResourceOverride auswählen.
apiVersion: placement.kubernetes-fleet.io/v1
kind: ClusterResourceOverride
metadata:
name: example-cro
spec:
clusterResourceSelectors:
- group: rbac.authorization.k8s.io
kind: ClusterRole
version: v1
name: secret-reader
Überschreibungen von Ressourcen auf Namespaceebene
Ein ResourceOverride hat folgende Eigenschaften:
-
resourceSelectors: Gibt die Menge der Ressourcen an, die zum Überschreiben ausgewählt wurden. -
policy: Gibt den Satz von Regeln an, die auf die ausgewählten Ressourcen angewendet werden sollen.
Hinweis
Policy Definitionen sind sowohl für Cluster- als auch für Namespace-gebundene Ressourcen identisch.
Um zu demonstrieren, wie ResourceOverride funktioniert, verwenden Sie das folgende Beispiel Deployment namens nginx-sample.
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-sample
namespace: nginx-demo
spec:
replicas: 2
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.25
ports:
- containerPort: 80
Auswählen von Namespaceressourcen
Eine ResourceOverride kann einen oder mehrere resourceSelector enthalten, um auszuwählen, welche Ressourcen außer Kraft gesetzt werden sollen. Jede resourceSelector unterstützt die folgenden Felder:
-
group: Die API-Gruppe der Ressource. -
version: Die API-Version der Ressource. -
kind: Die Art der Ressource. -
name: Der Name der Ressource.
Sie legen den Namespace der zu überschreibenden Ressource fest, indem Sie den namespace-Satz im metadata des ResourceOverride angeben.
Anhand des Beispiels Deployment sehen Sie, wie Sie es in ResourceOverride auswählen.
apiVersion: placement.kubernetes-fleet.io/v1
kind: ResourceOverride
metadata:
name: example-resource-override
namespace: nginx-demo
spec:
resourceSelectors:
- group: apps
kind: Deployment
version: v1
name: nginx-sample
Von Bedeutung
- Wenn Sie einen Namespace in
resourceSelector(kind: Namespace) auswählen, gilt die Überschreibung für alle Ressourcen im Namespace. - Dies
ResourceOverridemuss sich im selben Namespace wie die Ressource befinden, die außer Kraft gesetzt werden soll.
Nachdem Sie die Ressource ausgewählt haben, sehen Sie sich an, wie Sie die Überschreibung mithilfe einer policy konfigurieren.
Policy
A policy besteht aus einem Satz von overrideRules, der die Änderungen spezifiziert, die auf die ausgewählten Ressourcen angewendet werden sollen. Jede overrideRules unterstützt die folgenden Felder:
-
clusterSelector: Gibt den Satz von Clustern an, auf den die Außerkraftsetzungsregel angewendet wird. -
jsonPatchOverrides: Gibt die Änderungen an, die auf die ausgewählten Ressourcen angewendet werden sollen.
Clusterauswahl
Verwenden Sie das clusterSelector Feld, overrideRules um die Cluster anzugeben, für die die Regel gilt.
clusterSelector unterstützt das folgende Feld:
-
clusterSelectorTerms: Eine Liste mit Begriffen, die die Kriterien für die Auswahl von Clustern angeben. Jeder Ausdruck enthält einlabelSelectorFeld, das eine Reihe von Beschriftungen definiert, die übereinstimmen sollen.
Von Bedeutung
Nur labelSelector wird im clusterSelectorTerms Feld unterstützt.
JSON-Patchaußerkraftsetzungen
Verwenden Sie jsonPatchOverrides in overrideRules, um die Änderungen anzugeben, die auf die ausgewählten Ressourcen angewendet werden sollen. Die JsonPatch Eigenschaft unterstützt die folgenden Felder:
op: Der auszuführende Vorgang. Zu den unterstützten Vorgängen gehören:-
add: Fügt dem angegebenen Pfad einen neuen Wert hinzu. -
remove: Entfernt den Wert am angegebenen Pfad. -
replace: Ersetzt den Wert im angegebenen Pfad.
-
path: Der Pfad zum zu ändernden Feld. Anleitungen zum Angeben von Pfaden umfassen:- Muss mit einem Schrägstrich (
/) beginnen. - Darf nicht leer sein oder eine leere Zeichenfolge enthalten.
- Es kann sich nicht um ein
TypeMetaFeld (/kindoder/apiVersion) handeln. - Es kann kein
Metadata-Feld (/metadata/nameoder/metadata/namespace) sein, außer den Feldern/metadata/labelsund/metadata/annotations. - Kein Feld darf im Status der Ressource vorhanden sein.
Beispiele für gültige Pfade sind:
/metadata/labels/new-label/metadata/annotations/new-annotation/spec/template/spec/containers/0/resources/limits/cpu/spec/template/spec/containers/0/resources/requests/memory
- Muss mit einem Schrägstrich (
value: Der Wert, der hinzugefügt, entfernt oder ersetzt werden soll. Wennopistremove, können Sievaluenicht angeben.
Die jsonPatchOverrides Felder wenden einen JSON-Patch auf die ausgewählten Ressourcen an, indem sie RFC 6902 folgen.
Um unser Beispiel zu erweitern, konfigurieren Sie ein policy, um das Verb list aus dem ClusterRole namens secret-reader auf Clustern mit der Bezeichnung env:prod zu entfernen.
apiVersion: placement.kubernetes-fleet.io/v1
kind: ClusterResourceOverride
metadata:
name: example-cro
spec:
clusterResourceSelectors:
- group: rbac.authorization.k8s.io
kind: ClusterRole
version: v1
name: secret-reader
policy:
overrideRules:
- clusterSelector:
clusterSelectorTerms:
- labelSelector:
matchLabels:
env: prod
jsonPatchOverrides:
- op: remove
path: /rules/0/verbs/2
Zur Erweiterung unseres Beispiels konfigurieren Sie ein policy, um das Container-Image im Deployment für Cluster mit dem Label nginx:1.30.0 durch das Image env: prod zu ersetzen.
apiVersion: placement.kubernetes-fleet.io/v1
kind: ResourceOverride
metadata:
name: example-resource-override
namespace: nginx-demo
spec:
resourceSelectors:
- group: apps
kind: Deployment
version: v1
name: test-nginx
policy:
overrideRules:
- clusterSelector:
clusterSelectorTerms:
- labelSelector:
matchLabels:
env: prod
jsonPatchOverrides:
- op: replace
path: /spec/template/spec/containers/0/image
value: "nginx:1.30.0"
Definieren mehrerer Außerkraftsetzungen
Fügen Sie mehrere jsonPatchOverrides-Felder zu overrideRules hinzu, um mehrere Änderungen an ausgewählten Cluster-Ressourcen vorzunehmen. Ein Beispiel:
In diesem Beispiel werden die Verben list und watch im Sample ClusterRole namens secret-reader auf Clustern mit der Bezeichnung env: prod entfernt.
apiVersion: placement.kubernetes-fleet.io/v1
kind: ClusterResourceOverride
metadata:
name: cro-1
spec:
clusterResourceSelectors:
- group: rbac.authorization.k8s.io
kind: ClusterRole
version: v1
name: secret-reader
policy:
overrideRules:
- clusterSelector:
clusterSelectorTerms:
- labelSelector:
matchLabels:
env: prod
jsonPatchOverrides:
- op: remove
path: /rules/0/verbs/2
- op: remove
path: /rules/0/verbs/1
In diesem Beispiel werden sowohl das Container-Image als auch der Port in Deployment durch 443 für Cluster mit der env: prod-Kennzeichnung ersetzt.
apiVersion: placement.kubernetes-fleet.io/v1
kind: ResourceOverride
metadata:
name: example-resource-override
namespace: nginx-demo
spec:
resourceSelectors:
- group: apps
kind: Deployment
version: v1
name: test-nginx
policy:
overrideRules:
- clusterSelector:
clusterSelectorTerms:
- labelSelector:
matchLabels:
env: prod
jsonPatchOverrides:
- op: replace
path: /spec/template/spec/containers/0/image
value: "nginx:1.30.0"
- op: replace
path: /spec/template/spec/containers/0/ports/0/containerPort
value: "443"
Reservierte Variablen im JSON-Patch-Überschreibungswert
Die value Regel zum Außerkraftsetzen des JSON-Patches ersetzt reservierte Variablen bei der Platzierung. Derzeit unterstützte reservierte Variablen:
-
${MEMBER-CLUSTER-NAME}: ersetzt durch den Namen dermemberCluster.
Wenn Sie beispielsweise einen Azure DNS-Hostnamen erstellen möchten, der den Namen des Clusters enthält, fügt das Beispiel ResourceOverride auf Clustern in der Azure-Region fleet-clustername-eastus den Wert eastus hinzu.
apiVersion: placement.kubernetes-fleet.io/v1
kind: ResourceOverride
metadata:
name: ro-kuard-demo-eastus
namespace: kuard-demo
spec:
placement:
name: crp-kuard-demo
resourceSelectors:
- group: ""
kind: Service
version: v1
name: kuard-svc
policy:
overrideRules:
- clusterSelector:
clusterSelectorTerms:
- labelSelector:
matchLabels:
fleet.azure.com/location: eastus
jsonPatchOverrides:
- op: add
path: /metadata/annotations
value:
{"service.beta.kubernetes.io/azure-dns-label-name":"fleet-${MEMBER-CLUSTER-NAME}-eastus"}
Mehrere Außerkraftsetzungsregeln
Fügen Sie ein Vielfaches overrideRules zu einem policy Feld hinzu, um mehrere Änderungen auf die ausgewählten Ressourcen anzuwenden. Hier ist ein Beispiel für ResourceOverride.
In diesem Beispiel wird das Container-Image in der Deployment durch folgendes ersetzt:
- Das
nginx:1.20.0Bild für Cluster mit derenv: prodBeschriftung. - Das
nginx:latestBild für Cluster mit derenv: testBeschriftung.
apiVersion: placement.kubernetes-fleet.io/v1
kind: ResourceOverride
metadata:
name: ro-1
namespace: test
spec:
resourceSelectors:
- group: apps
kind: Deployment
version: v1
name: test-nginx
policy:
overrideRules:
- clusterSelector:
clusterSelectorTerms:
- labelSelector:
matchLabels:
env: prod
jsonPatchOverrides:
- op: replace
path: /spec/template/spec/containers/0/image
value: "nginx:1.20.0"
- clusterSelector:
clusterSelectorTerms:
- labelSelector:
matchLabels:
env: test
jsonPatchOverrides:
- op: replace
path: /spec/template/spec/containers/0/image
value: "nginx:latest"
Verwendung mit Platzierung von Cluster-Ressourcen
Erstellen Sie eine
ClusterResourcePlacement, um die Platzierungsregeln für die Verteilung der Cluster-Ressourcenaußerkraftsetzungen über die Clusterinfrastruktur hinweg anzugeben. Hier ein Beispielcode: Achten Sie darauf, die entsprechende Ressource auszuwählen.apiVersion: placement.kubernetes-fleet.io/v1 kind: ClusterResourcePlacement metadata: name: crp spec: resourceSelectors: - group: rbac.authorization.k8s.io kind: ClusterRole version: v1 name: secret-reader policy: placementType: PickAll affinity: clusterAffinity: requiredDuringSchedulingIgnoredDuringExecution: clusterSelectorTerms: - labelSelector: matchLabels: env: prodIn diesem Beispiel werden Ressourcen auf alle Cluster verteilt, die mit
env: prodeiner Bezeichnung versehen sind. Wenn die Änderungen implementiert werden, werden die entsprechendenClusterResourceOverrideKonfigurationen auf die angegebenen Cluster angewendet. Die Auswahl einer übereinstimmenden Cluster-Rolle-Ressourcesecret-readerlöst die Anwendung der Konfigurationen auf die Cluster aus.Wenden Sie
ClusterResourcePlacementmithilfe des Befehlskubectl applyan.kubectl apply -f cluster-resource-placement.yamlStellen Sie sicher, dass die
ClusterResourceOverrideAuf die ausgewählten Ressourcen angewendet wurde, indem Sie den Status derClusterResourcePlacementRessource über denkubectl describeBefehl überprüfen:kubectl describe clusterresourceplacement crpIhre Ausgabe sollte dem folgenden Beispiel ähneln:
Status: Conditions: ... Last Transition Time: 2024-04-27T04:18:00Z Message: The selected resources are successfully overridden in the 10 clusters Observed Generation: 1 Reason: OverriddenSucceeded Status: True Type: ClusterResourcePlacementOverridden ... Observed Resource Index: 0 Placement Statuses: Applicable Cluster Resource Overrides: example-cro-0 Cluster Name: member-50 Conditions: ... Message: Successfully applied the override rules on the resources Observed Generation: 1 Reason: OverriddenSucceeded Status: True Type: Overridden ...Die
ClusterResourcePlacementOverriddenBedingung gibt an, ob die Außerkraftsetzung der Ressource erfolgreich auf die ausgewählten Ressourcen in den Clustern angewendet wurde. Jeder Cluster verwaltet eine eigeneApplicable Cluster Resource OverridesListe. Diese Liste enthält die Momentaufnahme der Außerkraftsetzung von Clusterressourcen, sofern relevant. Einzelne Statusmeldungen für jeden Cluster geben an, ob die Außerkraftsetzungsregeln erfolgreich angewendet wurden.
Verwendung mit Platzierung von Ressourcen
Erstellen Sie eine
ClusterResourcePlacementRessource, um die Platzierungsregeln für die Verteilung der Ressourcenüberschreibungen über die Clusterinfrastruktur anzugeben. Hier ein Beispielcode: Achten Sie darauf, die entsprechenden Namespaces auszuwählen.apiVersion: placement.kubernetes-fleet.io/v1 kind: ClusterResourcePlacement metadata: name: crp-example spec: resourceSelectors: - group: "" kind: Namespace name: test-namespace version: v1 policy: placementType: PickAll affinity: clusterAffinity: requiredDuringSchedulingIgnoredDuringExecution: clusterSelectorTerms: - labelSelector: matchLabels: env: prod - labelSelector: matchLabels: env: testIn diesem Beispiel werden Ressourcen innerhalb von
test-namespaceauf alle Cluster verteilt, die mitenv:produndenv:testgekennzeichnet sind. Wenn die Änderungen implementiert werden, werden die entsprechendenResourceOverrideKonfigurationen auf die festgelegten Ressourcen angewendet. Die Auswahl einer übereinstimmenden Bereitstellungsressourcemy-deploymentlöst die Anwendung der Konfigurationen auf die vorgesehenen Ressourcen aus.Wenden Sie die
ClusterResourcePlacementRessource mithilfe des Befehls ankubectl apply:kubectl apply -f cluster-resource-placement.yamlStellen Sie sicher, dass die
ResourceOverrideAuf die ausgewählten Ressourcen angewendet wurde, indem Sie den Status derClusterResourcePlacementRessource über denkubectl describeBefehl überprüfen:kubectl describe clusterresourceplacement crp-exampleIhre Ausgabe sollte dem folgenden Beispiel ähneln:
Status: Conditions: ... Message: The selected resources are successfully overridden in the 10 clusters Observed Generation: 1 Reason: OverriddenSucceeded Status: True Type: ClusterResourcePlacementOverridden ... Observed Resource Index: 0 Placement Statuses: Applicable Resource Overrides: Name: ro-1-0 Namespace: test-namespace Cluster Name: member-50 Conditions: ... Last Transition Time: 2024-04-26T22:57:14Z Message: Successfully applied the override rules on the resources Observed Generation: 1 Reason: OverriddenSucceeded Status: True Type: Overridden ...Die
ClusterResourcePlacementOverriddenBedingung gibt an, ob die Außerkraftsetzung der Ressource erfolgreich auf die ausgewählten Ressourcen angewendet wurde. Jeder Cluster verwaltet eine eigeneApplicable Resource OverridesListe. Diese Liste enthält den Ressourcenüberschreibungs-Snapshot, falls relevant. Einzelne Statusmeldungen für jeden Cluster geben an, ob die Außerkraftsetzungsregeln erfolgreich angewendet wurden.