Anpassa namnområdesomfångsresurser i Azure Kubernetes Fleet Manager med resurs åsidosättningar

Den här artikeln innehåller en översikt över hur du använder API:et ResourceOverride för att åsidosätta namnområdesomfångsresurser i Azure Kubernetes Fleet Manager.

Du kan ändra eller åsidosätta specifika attribut för befintliga resurser i ett namnområde. Med ResourceOverridekan du definiera regler baserat på klusteretiketter och ange ändringar som ska tillämpas på resurser som Distributioner, StatefulSets, ConfigMaps eller Hemligheter.

Dessa ändringar kan omfatta uppdateringar av containeravbildningar, miljövariabler, resursgränser eller andra konfigurerbara parametrar. Sådana uppdateringar hjälper till att säkerställa konsekvent hantering och tillämpning av konfigurationer i dina Kubernetes-kluster som hanteras via Fleet Manager.

ResourceOverride API:et består av följande komponenter:

  • 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.

Resursväljare

Ett ResourceOverride objekt kan innehålla en eller flera resursväljare för att ange vilka resurser som ska åsidosättas. Objektet ResourceSelector innehåller följande fält.

  • group: API-gruppen för resursen.
  • version: API-versionen av resursen.
  • kind: Resurstypen.
  • namespace: Resursens namnområde.

Om du vill lägga till en resursväljare i ett ResourceOverride objekt använder du fältet resourceSelectors med följande YAML-format.

apiVersion: placement.kubernetes-fleet.io/v1alpha1
kind: ResourceOverride
metadata:
  name: example-resource-override
  namespace: test-namespace
spec:
  resourceSelectors:
    -  group: apps
       kind: Deployment
       version: v1
       name: test-nginx

Viktigt!

  • Om du väljer ett namnområde i ResourceSelectorgäller åsidosättningen för alla resurser i namnområdet.
  • Objektet ResourceOverride måste finnas i samma namnområde som resursen som ska åsidosättas.

I det här exemplet väljs ett Deployment objekt med namnet test-nginx från test-namespace namnområdet för åsidosättande.

Riktlinje

Ett Policy objekt består av en uppsättning som overrideRules anger vilka ändringar som ska tillämpas på de valda resurserna. Varje overrideRules objekt 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.

Om du vill lägga till en åsidosättningsregel i ett ResourceOverride objekt använder du fältet policy med följande YAML-format:

apiVersion: placement.kubernetes-fleet.io/v1alpha1
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.20.0"

Det här exemplet ersätter containeravbildningen Deployment i objektet med avbildningen nginx:1.20.0 för kluster med env: prod etiketten .

Klusterväljare

Du kan använda fältet clusterSelector i overrideRules objektet för att ange de resurser som åsidosättningsregeln gäller för. Objektet ClusterSelector stöder följande fält:

  • clusterSelectorTerms: En lista med termer som anger villkoren för att välja kluster. Varje term innehåller ett labelSelector fält som definierar en uppsättning etiketter som ska matchas.

Åsidosättningar av JSON-korrigering

Du kan använda jsonPatchOverrides i overrideRules -objektet för att ange de ändringar som ska tillämpas på de valda resurserna. Objektet 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 sökvägen.
  • 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 ett snedstreck (/) tecken.
    • Får inte vara tom eller innehålla en tom sträng.
    • Det kan inte vara ett TypeMeta fält (/kind eller /apiVersion).
    • Det kan inte vara ett Metadata fält (/metadata/name eller /metadata/namespace), förutom fälten /metadata/labels och /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
  • value: Värdet som ska läggas till, ta bort eller ersätta. Om op är removekan du inte ange value.

Fälten jsonPatchOverrides tillämpar en JSON-korrigering på de valda resurserna genom att följa RFC 6902.

Reserverade variabler i JSON-korrigeringens åsidosättningsvärde

Reserverade variabler ersätts med ett värde som används i åsidosättningsregeln för JSON-patch. 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 kan du använda en konfiguration som liknar:

apiVersion: placement.kubernetes-fleet.io/v1alpha1
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"}

ResourceOverride Exempelobjektet lägger till ett värde till fleet-clustername-eastus den angivna JSON-sökvägen i kluster i eastus Azure-regionen.

Flera åsidosättningsregler

Du kan lägga till flera overrideRules objekt i ett policy fält för att tillämpa flera ändringar på de valda resurserna. Här är ett exempel:

apiVersion: placement.kubernetes-fleet.io/v1alpha1
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"

Det här exemplet ersätter containeravbildningen Deployment i objektet med:

  • Avbildningen nginx:1.20.0 för kluster med env: prod etiketten .
  • Avbildningen nginx:latest för kluster med env: test etiketten .

Tillämpa klustrets resursplacering

  1. Skapa en ClusterResourcePlacement resurs 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: test
    

    Det här exemplet distribuerar resurser inom test-namespace alla kluster som är märkta med env:prod och env:test. När ändringarna implementeras tillämpas motsvarande ResourceOverride konfigurationer på de avsedda resurserna. Valet av en matchande distributionsresurs, my-deployment, utlöser programmet för konfigurationerna till de avsedda resurserna.

  2. Använd resursen ClusterResourcePlacement med hjälp kubectl apply av kommandot :

    kubectl apply -f cluster-resource-placement.yaml
    
  3. Kontrollera att ResourceOverride objektet har tillämpats på de valda resurserna genom att kontrollera resursens ClusterResourcePlacement status via kubectl describe kommandot :

    kubectl describe clusterresourceplacement crp-example
    

    Dina 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 ClusterResourcePlacementOverridden anger om resursens åsidosättning har tillämpats på de valda resurserna. Varje kluster har en egen Applicable Resource Overrides lista. 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.