Condividi tramite


Personalizzare le risorse con ambito cluster in Azure Kubernetes Fleet Manager con override delle risorse del cluster

Questo articolo offre una panoramica di come usare l'API ClusterResourceOverride per personalizzare le risorse con ambito cluster in Azure Kubernetes Fleet Manager.

È possibile modificare o eseguire l'override di attributi specifici tra le risorse del cluster. Con ClusterResourceOverrideè possibile definire regole basate sulle etichette del cluster e specificare le modifiche da applicare a varie risorse a livello di cluster. Queste risorse includono spazi dei nomi, ruoli del cluster, associazioni di ruoli del cluster o definizioni di risorse personalizzate.

Queste modifiche possono includere aggiornamenti a autorizzazioni, configurazioni o altri parametri. Tali aggiornamenti consentono di garantire una gestione coerente e l'applicazione delle configurazioni nei cluster gestiti tramite Fleet Manager.

Componenti dell'API

L'API ClusterResourceOverride è costituita dai componenti seguenti:

  • clusterResourceSelectors: specifica il set di risorse cluster selezionate per l'override.
  • policy: specifica il set di regole da applicare alle risorse cluster selezionate.

Selettori di risorse cluster

Un oggetto ClusterResourceOverride può includere uno o più selettori di risorse cluster per specificare di quali risorse eseguire l'override. L'oggetto ClusterResourceSelector supporta i campi seguenti.

Nota

Se si seleziona uno spazio dei nomi in ClusterResourceSelector, l'override verrà applicato a tutte le risorse nello spazio dei nomi .

  • group: gruppo API della risorsa.
  • version: versione API della risorsa.
  • kind: Tipo di risorsa.
  • name: nome della risorsa.

Per aggiungere un selettore di risorse cluster a un oggetto ClusterResourceOverride, usare il campo clusterResourceSelectors con il formato YAML seguente:

apiVersion: placement.kubernetes-fleet.io/v1alpha1
kind: ClusterResourceOverride
metadata:
  name: example-cro
spec:
  clusterResourceSelectors:
    - group: rbac.authorization.k8s.io
      kind: ClusterRole
      version: v1
      name: secret-reader

In questo esempio viene selezionato un ClusterRole oggetto denominato secret-reader dal gruppo di API per l'override rbac.authorization.k8s.io/v1 :

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: secret-reader
rules:
- apiGroups: [""]
  resources: ["secrets"]
  verbs: ["get", "watch", "list"]

Criteri

Un oggetto Policy è costituito da un set di regole, overrideRules, che specificano le modifiche da applicare al cluster risorse selezionato. Ogni oggetto overrideRules supporta i campi seguenti:

  • clusterSelector: specifica il set di cluster a cui si applica la regola di override.
  • jsonPatchOverrides: specifica le modifiche da applicare alle risorse selezionate.

Per aggiungere una regola di override a un oggetto ClusterResourceOverride, usare il campo policy con il formato YAML seguente:

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

In questo esempio viene rimosso il verbo "list" nell'oggetto ClusterRole denominato secret-reader nei cluster con l'etichetta env: prod.

Selettore cluster

È possibile utilizzare il campo clusterSelector nell'oggetto overrideRules per specificare i cluster a cui si applica la regola di override. L'oggetto ClusterSelector supporta il campo seguente:

  • clusterSelectorTerms: elenco di termini che specificano i criteri per la selezione dei cluster. Ogni termine include un campo labelSelector che definisce un set di etichette da trovare.

Importante

Solo labelSelector è supportato nel campo clusterSelectorTerms.

Override delle patch JSON

È possibile usare jsonPatchOverrides nell'oggetto overrideRules per specificare le modifiche da applicare alle risorse selezionate. L'oggetto JsonPatch supporta i campi seguenti:

  • op: operazione da eseguire. Le operazioni supportate includono:

    • add: aggiunge un nuovo valore al percorso specificato.
    • remove: rimuove il valore nel percorso specificato.
    • replace: sostituisce il valore in corrispondenza del percorso specificato.
  • path: percorso del campo da modificare. Le linee guida per specificare i percorsi includono:

    • Deve iniziare con un carattere barra (/).
    • Non può essere vuoto o contenere una stringa vuota.
    • Non può essere un TypeMeta campo (/kind o /apiVersion).
    • Non può essere un Metadata campo (/metadata/name o /metadata/namespace), ad eccezione dei campi /metadata/labels e /metadata/annotations.
    • Non può essere alcun campo nello stato della risorsa.

    Esempi di percorsi validi includono:

    • /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: valore da aggiungere, rimuovere o sostituire. Se op è remove, non è possibile specificare value.

I jsonPatchOverrides campi applicano una patch JSON alle risorse selezionate seguendo RFC 6902.

Più patch di override

È possibile aggiungere più jsonPatchOverrides campi a un overrideRules oggetto per applicare più modifiche alle risorse cluster selezionate. Ecco un esempio:

apiVersion: placement.kubernetes-fleet.io/v1alpha1
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 questo esempio vengono rimossi i verbi "list" e "watch" nell'oggetto ClusterRole denominato secret-reader nei cluster con l'etichetta env: prod:

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: secret-reader
rules:
- apiGroups: [""]
  resources: ["secrets"]
  verbs: ["get", "watch", "list"]

Applicare il posizionamento delle risorse cluster

  1. Creare una ClusterResourcePlacement risorsa per specificare le regole di posizionamento per la distribuzione delle sostituzioni delle risorse cluster nell'infrastruttura del cluster. Il codice seguente è un esempio. Assicurarsi di selezionare la risorsa appropriata.

    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: prod
    

    Questo esempio distribuisce le risorse in tutti i cluster etichettati con env: prod. Man mano che vengono implementate le modifiche, le configurazioni corrispondenti ClusterResourceOverride vengono applicate ai cluster designati. La selezione di una risorsa del ruolo del cluster corrispondente, secret-reader, attiva l'applicazione delle configurazioni nei cluster.

  2. Applicare la ClusterResourcePlacement risorsa usando il kubectl apply comando :

    kubectl apply -f cluster-resource-placement.yaml
    
  3. Verificare che l'oggetto ClusterResourceOverride sia stato applicato alle risorse selezionate controllando lo stato della ClusterResourcePlacement risorsa tramite il kubectl describe comando :

    kubectl describe clusterresourceplacement crp
    

    L'output dovrebbe essere simile all'esempio seguente:

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

    La condizione ClusterResourcePlacementOverridden indica se l'override della risorsa è stato applicato correttamente alle risorse selezionate nei cluster. Ogni cluster mantiene un proprio Applicable Cluster Resource Overrides elenco. Questo elenco contiene lo snapshot dell'override della risorsa cluster, se pertinente. I singoli messaggi di stato per ogni cluster indicano se le regole di override sono state applicate correttamente.