Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Gäller för: ✔️ Fleet Manager med hubbkluster
Azure Kubernetes Fleet Manager intelligent resursplacering kan användas för att distribuera samma resurs till flera kluster i en flotta. Det finns ofta ett behov av att ändra resurskonfigurationen för att framtvinga regler kring beteende i olika miljöer (dev, test, prod). För det här ändamålet tillhandahåller Fleet Manager resursålsidosättningar, som ger en funktionalitet som konceptuellt liknar hur Helm-mallar och Kustomize-korrigeringar används.
Exempel på situationer där det är användbart att ändra en resurskonfiguration är:
- Jag vill använda ett
ClusterRolenamngivetsecret-readerpå alla kluster, men har en mindre uppsättning tillåtna åtgärder för rollen i mina produktionskluster. - Jag vill använda samma
Deploymentpå alla kluster, men använda en annan containerbild eller port i mina produktionskluster.
Den här artikeln visar hur du skapar åsidosättningar för resurser som distribueras av Fleet Manager-resursplacering.
Azure Kubernetes Fleet Manager stöder två nivåer för åsidosättningar.
-
Klusteromfattande: Använd
ClusterResourceOverridemedClusterResourcePlacementför flotthanteringsadministratörer som hanterar ändringar på infrastrukturnivå. -
Namnområdesspecifik: Använd
ResourceOverridemedResourcePlacementför programteam som hanterar distributioner inom sina specifika namnområden.
Du kan välja det omfång som är mest tillämpligt för dig från alternativen för omfångstyp överst i artikeln.
Åsidosättningar av klusterinriktade resurser
Ett ClusterResourceOverride har följande egenskaper:
-
clusterResourceSelectors: Anger den uppsättning klusterresurser som valts för åsidosättande. -
policy: Anger vilken uppsättning regler som ska tillämpas på de valda klusterresurserna.
Anmärkning
Policy definitioner är desamma för både kluster- och namnområdesomfångsresurser.
Nu ska vi använda följande exempel ClusterRole med namnet secret-reader för att visa hur ClusterResourceOverride fungerar.
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: secret-reader
rules:
- apiGroups: [""]
resources: ["secrets"]
verbs: ["get", "watch", "list"]
Välja klusterresurser
En ClusterResourceOverride kan innehålla en eller flera clusterResourceSelector för att välja vilka resurser som ska åsidosättas. Varje clusterResourceSelector stöder följande fält.
-
group: API-gruppen för resursen. -
version: API-versionen av resursen. -
kind: Resurstypen. -
name: Resursens namn.
Anmärkning
Om du väljer ett namnområde i ClusterResourceSelectorgäller åsidosättningen för alla resurser i namnområdet.
Med vårt exempel ClusterRoleska vi se hur vi väljer det i en 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
Åsidosättningar av namnområdesomfångsresurser (förhandsversion)
Ett ResourceOverride har följande egenskaper:
-
resourceSelectors: Anger den uppsättning resurser som valts för åsidosättande. -
policy: Anger den uppsättning regler som ska tillämpas på de valda resurserna.
Anmärkning
Policy definitioner är desamma för både kluster- och namnområdesomfångsresurser.
Nu ska vi använda följande exempel Deployment med namnet nginx-sample för att visa hur ResourceOverride fungerar.
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
Välja namnområdesresurser
En ResourceOverride kan innehålla en eller flera resourceSelector för att välja vilka resurser som ska åsidosättas. Varje resourceSelector stöder följande fält.
-
group: API-gruppen för resursen. -
version: API-versionen av resursen. -
kind: Resurstypen. -
name: Resursens namn.
Namnområdet för resursen som ska åsidosättas bestäms genom att ange namespace uppsättningen i metadata i ResourceOverride.
Med vårt exempel Deploymentska vi se hur vi väljer det i en 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
Viktigt!
- Om du väljer ett namnområde i
resourceSelector(kind: Namespace) gäller åsidosättningen för alla resurser i namnområdet. -
ResourceOverrideMåste finnas i samma namnområde som resursen som ska åsidosättas.
Nu har vi valt resursen. Nu ska vi titta på hur vi konfigurerar åsidosättningen med hjälp av en policy.
Policy
A policy består av en uppsättning overrideRules som anger vilka ändringar som ska tillämpas på de valda resurserna. Varje overrideRules stöder följande fält:
-
clusterSelector: Anger den uppsättning kluster som åsidosättningsregeln gäller för. -
jsonPatchOverrides: Anger de ändringar som ska tillämpas på de valda resurserna.
Klusterväljare
Du kan använda fältet clusterSelector i overrideRules för att ange de kluster som regeln gäller för. Stöder clusterSelector följande fält:
-
clusterSelectorTerms: En lista med termer som anger villkoren för att välja kluster. Varje term innehåller ettlabelSelectorfält som definierar en uppsättning etiketter som ska matchas.
Viktigt!
Endast labelSelector stöds i fältet clusterSelectorTerms .
Åsidosättningar av JSON-korrigering
Du kan använda jsonPatchOverrides i overrideRules för att ange vilka ändringar som ska tillämpas på de valda resurserna. Egenskapen JsonPatch stöder följande fält:
op: Den åtgärd som ska utföras. Bland de åtgärder som stöds finns:-
add: Lägger till ett nytt värde i den angivna sökvägen. -
remove: Tar bort värdet på den angivna sökvägen. -
replace: Ersätter värdet på den angivna stigen.
-
path: Sökvägen till fältet som ska ändras. Vägledning för att ange sökvägar omfattar:- Måste börja med snedstreckstecknet (
/). - Får inte vara tom eller innehålla en tom sträng.
- Det kan inte vara ett
TypeMetafält (/kindeller/apiVersion). - Det kan inte vara ett
Metadatafält (/metadata/nameeller/metadata/namespace), förutom fälten/metadata/labelsoch/metadata/annotations. - Det kan inte vara något fält i resursens status.
Exempel på giltiga sökvägar är:
/metadata/labels/new-label/metadata/annotations/new-annotation/spec/template/spec/containers/0/resources/limits/cpu/spec/template/spec/containers/0/resources/requests/memory
- Måste börja med snedstreckstecknet (
value: Värdet som ska läggas till, ta bort eller ersätta. Omopärremovekan du inte angevalue.
Fälten jsonPatchOverrides tillämpar en JSON-korrigering på de valda resurserna genom att följa RFC 6902.
När vi utökar vårt exempel konfigurerar vi en policy för att ta bort verbet list från det ClusterRole namngivna secret-reader på kluster som är märkta med env:prod.
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
För att utöka vårt exempel konfigurerar vi en policy för att ersätta containeravbildningen i Deployment med avbildningen nginx:1.30.0 för kluster med etiketten 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"
Definiera flera åsidosättningar
Du kan lägga till flera jsonPatchOverrides fält för overrideRules att tillämpa flera ändringar på valda klusterresurser. Här är ett exempel:
Det här exemplet tar bort verben "list" och "watch" i vårt exempel ClusterRole med namnet secret-reader på kluster med etiketten 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
Det här exemplet ersätter både containeravbildningen Deployment och porten i med 443 för kluster med env: prod etiketten .
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"
Reserverade variabler i JSON Patch-åsidosättningsvärde
Reserverade variabler ersätts vid placering av value i enlighet med åsidosättningsregeln för JSON-korrigering. Reserverade variabler som stöds för närvarande:
-
${MEMBER-CLUSTER-NAME}: ersätts med namnet påmemberCluster.
Om du till exempel vill skapa ett Azure DNS-värdnamn som innehåller namnet på klustret lägger exemplet ResourceOverride till ett värde fleet-clustername-eastus för på kluster i eastus Azure-regionen.
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"}
Flera åsidosättningsregler
Du kan lägga till flera overrideRules i ett policy fält för att tillämpa flera ändringar på de valda resurserna. Här är ett exempel på ResourceOverride.
Det här exemplet ersätter containeravbildningen i Deployment med:
- Bild
nginx:1.20.0för kluster med etikettenenv: prod. - Avbildningen
nginx:latestför kluster med etikettenv: test.
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"
Använd med klusterresursplacering
Skapa en
ClusterResourcePlacementför att ange placeringsregler för distribution av klusterresursens åsidosättningar i klusterinfrastrukturen. Följande kod är ett exempel. Se till att välja lämplig resurs.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: prodDet här exemplet distribuerar resurser över alla kluster som är märkta med
env: prod. När ändringarna implementeras tillämpas motsvarandeClusterResourceOverridekonfigurationer på de avsedda klustren. Valet av en matchande klusterrollresurssecret-readerutlöser tillämpningen av konfigurationerna till klustren.Använd
ClusterResourcePlacementmed kommandotkubectl apply.kubectl apply -f cluster-resource-placement.yamlKontrollera att
ClusterResourceOverridehar tillämpats på de valda resurserna genom att kontrollera resursensClusterResourcePlacementstatus viakubectl describekommandot :kubectl describe clusterresourceplacement crpDina utdata bör likna följande exempel:
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 ...Villkoret
ClusterResourcePlacementOverriddenanger om resursens åsidosättning har tillämpats på de valda resurserna i klustren. Varje kluster har en egenApplicable Cluster Resource Overrideslista. Den här listan innehåller ögonblicksbilden av åsidosättningen av klusterresursen, om det är relevant. Enskilda statusmeddelanden för varje kluster anger om åsidosättningsreglerna har tillämpats.
Använd med resursplacering
Skapa en
ClusterResourcePlacementresurs för att ange placeringsregler för distribution av resursens åsidosättningar i klusterinfrastrukturen. Följande kod är ett exempel. Se till att välja lämpliga namnområden.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: testDet här exemplet distribuerar resurser inom
test-namespacealla kluster som är märkta medenv:prodochenv:test. När ändringarna implementeras tillämpas motsvarandeResourceOverridekonfigurationer på de avsedda resurserna. Valet av en matchande distributionsresurs,my-deployment, utlöser tillämpningen av konfigurationerna på de avsedda resurserna.Använd
ClusterResourcePlacement-resursen genom kommandotkubectl apply.kubectl apply -f cluster-resource-placement.yamlKontrollera att
ResourceOverridehar tillämpats på de valda resurserna genom att kontrollera resursensClusterResourcePlacementstatus viakubectl describekommandot :kubectl describe clusterresourceplacement crp-exampleDina utdata bör likna följande exempel:
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 ...Villkoret
ClusterResourcePlacementOverriddenanger om resursens åsidosättning har tillämpats på de valda resurserna. Varje kluster har en egenApplicable Resource Overrideslista. Den här listan innehåller ögonblicksbilden av resursens åsidosättning, om det är relevant. Enskilda statusmeddelanden för varje kluster anger om åsidosättningsreglerna har tillämpats.