Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Van toepassing op: ✔️ Fleet Manager met hubcluster
De intelligente plaatsing van hulpbronnen in Azure Kubernetes Fleet Manager kan worden gebruikt om dezelfde hulpbron naar meerdere clusters binnen een vloot uit te rollen. Vaak is het nodig om de resourceconfiguratie te wijzigen om regels rond gedrag in verschillende omgevingen af te dwingen (dev, test, prod). Voor dit doel biedt Fleet Manager resourceoverschrijvingen, die een mogelijkheid bieden die conceptueel vergelijkbaar is met de manier waarop Helm-sjablonen en Kustomize-patches worden gebruikt.
Voorbeelden van situaties waarin het wijzigen van een resourceconfiguratie nuttig is, zijn onder andere:
- Ik wil een
ClusterRolegenaamdsecret-readergebruiken op alle clusters, maar wil een kleinere set toegestane acties voor de rol in mijn productieclusters. - Ik wil hetzelfde
Deploymentgebruiken op alle clusters, maar een andere containerimage of poort gebruiken op mijn productieclusters.
In dit artikel wordt uitgelegd hoe u overschrijvingen maakt voor resources die door Fleet Manager resource-placement zijn geïmplementeerd.
Azure Kubernetes Fleet Manager ondersteunt twee bereiken voor overschrijvingen:
-
Clusterbereik: gebruik
ClusterResourceOverridemetClusterResourcePlacementvoor beheerders van vloten die wijzigingen op infrastructuurniveau beheren. -
Specifieke naamruimte: gebruik
ResourceOverridemetResourcePlacementvoor applicatieteams die implementaties beheren binnen hun specifieke naamruimten.
U kunt het bereik selecteren dat het meest op u van toepassing is in de opties voor het bereiktype bovenaan het artikel.
Cluster-gebaseerde resource-overschrijvingen
A ClusterResourceOverride heeft de volgende eigenschappen:
-
clusterResourceSelectors: Hiermee geeft u de set clusterbronnen op die is geselecteerd voor het overschrijven. -
policy: Hiermee geeft u de set regels op die moeten worden toegepast op de geselecteerde clusterbronnen.
Opmerking
Policy definities zijn hetzelfde voor zowel cluster- als naamruimtebronnen.
Laten we het volgende voorbeeld ClusterRole met de naam secret-reader gebruiken om te laten zien hoe ClusterResourceOverride het werkt.
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: secret-reader
rules:
- apiGroups: [""]
resources: ["secrets"]
verbs: ["get", "watch", "list"]
Clusterbronnen selecteren
Een ClusterResourceOverride kan een of meer clusterResourceSelector bevatten om te kiezen welke resources u wilt overschrijven. Elk clusterResourceSelector ondersteunt de volgende velden.
-
group: De API-groep van de resource. -
version: de API-versie van de resource. -
kind: Het type bron. -
name: De naam van de resource.
Opmerking
Als u een naamruimte in ClusterResourceSelector selecteert, is de overschrijving van toepassing op alle resources in de naamruimte.
Laten we met behulp van ons voorbeeld ClusterRolezien hoe we deze selecteren in een ClusterResourceOverride.
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
Overschrijvingen van resourcebereik in naamruimte (preview)
A ResourceOverride heeft de volgende eigenschappen:
-
resourceSelectors: Hiermee geeft u de set resources op die zijn geselecteerd voor het overschrijven. -
policy: Hiermee geeft u de set regels op die moeten worden toegepast op de geselecteerde resources.
Opmerking
Policy definities zijn hetzelfde voor zowel cluster- als naamruimtebronnen.
Laten we het volgende voorbeeld Deployment met de naam nginx-sample gebruiken om te laten zien hoe ResourceOverride het werkt.
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
Naamruimtebronnen selecteren
Een ResourceOverride kan een of meer resourceSelector bevatten om te kiezen welke resources u wilt overschrijven. Elk resourceSelector ondersteunt de volgende velden.
-
group: De API-groep van de resource. -
version: de API-versie van de resource. -
kind: Het type bron. -
name: De naam van de resource.
De naamruimte van de te overschrijven resource wordt bepaald door de namespace set op te geven in de metadata van de ResourceOverride.
Laten we met behulp van ons voorbeeld Deploymentzien hoe we deze selecteren in een ResourceOverride.
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
Belangrijk
- Als u een naamruimte in
resourceSelector(kind: Namespace) selecteert, is de overschrijving van toepassing op alle resources in de naamruimte. - De
ResourceOverridemoet zich in dezelfde naamruimte bevinden als de resource die moet worden overschreven.
Nu hebben we de resource geselecteerd. Laten we kijken hoe we de override configureren met behulp van een policy.
Policy
Een policy bestaat uit een set overrideRules die de wijzigingen opgeeft die moeten worden toegepast op de geselecteerde resources. Elk overrideRules ondersteunt de volgende velden:
-
clusterSelector: Hiermee specificeert u de set clusters waarop de overschrijvingsregel van toepassing is. -
jsonPatchOverrides: Hiermee geeft u de wijzigingen op die moeten worden toegepast op de geselecteerde resources.
Clusterselector
U kunt het clusterSelector veld in het overrideRules veld gebruiken om de clusters op te geven waarop de regel van toepassing is. Het clusterSelector ondersteunt het volgende veld:
-
clusterSelectorTerms: Een lijst met termen die de criteria voor het selecteren van clusters opgeven. Elke term bevat eenlabelSelectorveld dat een set labels definieert die overeenkomen.
Belangrijk
Alleen labelSelector wordt ondersteund in het clusterSelectorTerms veld.
JSON-patchoverschrijvingen
U kunt jsonPatchOverrides in overrideRules gebruiken om de wijzigingen op te geven die moeten worden toegepast op de geselecteerde resources. De JsonPatch eigenschap ondersteunt de volgende velden:
op: De bewerking die moet worden uitgevoerd. Ondersteunde bewerkingen zijn onder andere:-
add: Voegt een nieuwe waarde toe aan het opgegeven pad. -
remove: Hiermee verwijdert u de waarde op het opgegeven pad. -
replace: vervangt de waarde op het opgegeven pad.
-
path: het pad naar het veld dat u wilt wijzigen. Richtlijnen voor het opgeven van paden zijn onder andere:- Moet beginnen met een slash (
/) teken. - Kan niet leeg zijn of een lege tekst bevatten.
- Kan geen
TypeMetaveld (/kindof/apiVersion) zijn. - Kan geen
Metadataveld (/metadata/nameof/metadata/namespace), behalve de velden/metadata/labelsen/metadata/annotations. - Er mag geen enkel veld in de status van de resource zijn.
Voorbeelden van geldige paden zijn:
/metadata/labels/new-label/metadata/annotations/new-annotation/spec/template/spec/containers/0/resources/limits/cpu/spec/template/spec/containers/0/resources/requests/memory
- Moet beginnen met een slash (
value: de waarde die moet worden toegevoegd, verwijderd of vervangen. Alsopremoveis, kunt uvalueniet specificeren.
De jsonPatchOverrides velden passen een JSON-patch toe op de geselecteerde resources door RFC 6902 te volgen.
Als we ons voorbeeld uitbouwen, configureren we een policy om het list werkwoord te verwijderen uit de ClusterRole genaamd binnen secret-reader clusters met het env:prod label.
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
Bij het uitbreiden van ons voorbeeld, configureren we een policy om de containerimage in de Deployment te vervangen door de nginx:1.30.0 image voor clusters met het env: prod label.
apiVersion: placement.kubernetes-fleet.io/v1
kind: ResourceOverride
metadata:
name: example-resource-override
namespace: test-namespace
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"
Meerdere overschrijvingen definiëren
U kunt meerdere jsonPatchOverrides velden toevoegen om meerdere wijzigingen toe te overrideRules passen op geselecteerde clusterbronnen. Hier is een voorbeeld:
In dit voorbeeld worden de werkwoorden 'list' en 'watch' verwijderd in ons voorbeeld ClusterRole met de naam secret-reader op clusters met het label env: prod.
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 dit voorbeeld worden zowel de containerimage als de poort in de Deployment vervangen door 443 voor clusters met het label env: prod.
apiVersion: placement.kubernetes-fleet.io/v1
kind: ResourceOverride
metadata:
name: example-resource-override
namespace: test-namespace
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"
Gereserveerde variabelen in de JSON Patch Overschrijfwaarde
Gereserveerde variabelen worden vervangen bij plaatsing door de value regel voor het overschrijven van de JSON-patch. Momenteel ondersteunde gereserveerde variabelen:
-
${MEMBER-CLUSTER-NAME}: vervangen door de naam van dememberCluster.
Als u bijvoorbeeld een Azure DNS-hostnaam wilt maken die de naam van het cluster bevat, voegt het voorbeeld ResourceOverride een waarde toe van fleet-clustername-eastus clusters in de eastus Azure-regio.
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"}
Meerdere onderdrukkingsregels
U kunt meerdere overrideRules aan een policy-veld toevoegen om meerdere wijzigingen toe te passen op de geselecteerde resources. Hier volgt een voorbeeld voor ResourceOverride.
In dit voorbeeld vervangt de containerafbeelding in de Deployment door:
- De
nginx:1.20.0afbeelding voor clusters met hetenv: prodlabel. - De
nginx:latestafbeelding voor clusters met hetenv: testlabel.
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"
Gebruik met resourceplaatsing in een cluster
Maak een
ClusterResourcePlacementom de plaatsingsregels op te geven voor het distribueren van de overschrijvingen van clusterresources over de clusterinfrastructuur. De volgende code is een voorbeeld. Zorg ervoor dat u de juiste resource selecteert.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 dit voorbeeld worden resources verdeeld over alle clusters die gelabeld zijn met
env: prod. Wanneer de wijzigingen worden geïmplementeerd, worden de bijbehorendeClusterResourceOverrideconfiguraties toegepast op de aangewezen clusters. De selectie van een overeenkomende clusterrolresource activeertsecret-readerde toepassing van de configuraties naar de clusters.Pas de
ClusterResourcePlacementopdracht toe met behulp van dekubectl applyopdracht:kubectl apply -f cluster-resource-placement.yamlControleer of de
ClusterResourceOverrideresource is toegepast op de geselecteerde resources door de status van deClusterResourcePlacementresource te controleren via dekubectl describeopdracht:kubectl describe clusterresourceplacement crpDe uitvoer moet er ongeveer uitzien als in het volgende voorbeeld:
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 ...De
ClusterResourcePlacementOverriddenconditie geeft aan of de resource-overschrijving succesvol is toegepast op de geselecteerde resources binnen de clusters. Elk cluster onderhoudt een eigenApplicable Cluster Resource Overrideslijst. Deze lijst bevat de momentopname van de overschrijding van de clusterbron, indien relevant. Afzonderlijke statusberichten voor elk cluster geven aan of de override-regels succesvol zijn toegepast.
Gebruik bij het plaatsen van middelen
Maak een
ClusterResourcePlacementresource om de plaatsingsregels op te geven voor de verdeling van de resource-overrides in de clusterinfrastructuur. De volgende code is een voorbeeld. Zorg ervoor dat u de juiste naamruimten selecteert.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 dit voorbeeld worden resources binnen
test-namespacegedistribueerd over alle clusters die zijn gelabeld metenv:prodenenv:test. Wanneer de wijzigingen worden geïmplementeerd, worden de bijbehorendeResourceOverrideconfiguraties toegepast op de aangewezen resources. De selectie van een overeenkomende implementatieresource activeertmy-deploymentde toepassing van de configuraties naar de aangewezen resources.Pas de
ClusterResourcePlacementresource toe met behulp van dekubectl applyopdracht:kubectl apply -f cluster-resource-placement.yamlControleer of de
ResourceOverrideresource is toegepast op de geselecteerde resources door de status van deClusterResourcePlacementresource te controleren via dekubectl describeopdracht:kubectl describe clusterresourceplacement crp-exampleDe uitvoer moet er ongeveer uitzien als het volgende voorbeeld:
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 ...De
ClusterResourcePlacementOverriddenconditie geeft aan of de resource-override succesvol is toegepast op de geselecteerde resources. Elk cluster onderhoudt een eigenApplicable Resource Overrideslijst. Deze lijst bevat de momentopname van het overschrijven van resources, indien relevant. Afzonderlijke statusberichten voor elk cluster geven aan of de override-regels succesvol zijn toegepast.