Sdílet prostřednictvím


Přizpůsobení prostředků s oborem názvů v Azure Kubernetes Fleet Manageru pomocí přepsání prostředků

Tento článek poskytuje přehled o tom, jak používat ResourceOverride API k přepracování prostředků s oborovou platností v Azure Kubernetes Fleet Manageru.

Můžete upravit nebo přepsat konkrétní atributy existujících prostředků v rámci oboru názvů. Pomocí ResourceOverridemožnosti můžete definovat pravidla na základě popisků clusteru a zadat změny, které se mají použít u prostředků, jako jsou nasazení, stavové sady, objekty ConfigMap nebo tajné kódy.

Tyto změny můžou zahrnovat aktualizace imagí kontejnerů, proměnných prostředí, limitů prostředků nebo jakýchkoli jiných konfigurovatelných parametrů. Tyto aktualizace pomáhají zajistit konzistentní správu a vynucování konfigurací napříč clustery Kubernetes spravovanými prostřednictvím Správce flotily.

Rozhraní ResourceOverride API se skládá z následujících komponent:

  • resourceSelectors: Určuje sadu prostředků vybraných pro přepsání.
  • policy: Určuje sadu pravidel, která se mají použít pro vybrané prostředky.

Selektory prostředků

Objekt ResourceOverride může obsahovat jeden nebo více selektorů prostředků k určení prostředků, které se mají přepsat. Objekt ResourceSelector obsahuje následující pole.

  • group: Skupina rozhraní API prostředku.
  • version: Verze rozhraní API prostředku.
  • kind: Druh prostředku.
  • namespace: Obor názvů prostředku.

Chcete-li přidat selektor prostředků do objektu ResourceOverride , použijte resourceSelectors pole s následujícím formátem YAML.

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

Důležité

  • Pokud vyberete obor názvů v ResourceSelector, přepsání se použije na všechny zdroje v daném oboru názvů.
  • Objekt ResourceOverride musí být ve stejném oboru názvů jako prostředek, který chcete přepsat.

Tento příklad vybere objekt pojmenovaný Deploymenttest-nginx z test-namespace oboru názvů pro přepsání.

Zásady

Objekt Policy se skládá ze sady overrideRules , která určuje změny, které se mají použít u vybraných prostředků. Každý overrideRules objekt podporuje následující pole:

  • clusterSelector: Určuje sadu clusterů, na které se vztahuje pravidlo přepsání.
  • jsonPatchOverrides: Určuje změny, které se mají použít u vybraných prostředků.

Chcete-li přidat pravidlo přepsání do objektu ResourceOverride , použijte policy pole s následujícím formátem YAML:

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"

Tento příklad nahradí image kontejneru v objektu Deploymentnginx:1.20.0 image pro clustery popiskem env: prod .

Selektor clusteru

Pole v objektu clusterSelector můžete použít overrideRules k určení prostředků, na které se pravidlo přepsání vztahuje. Objekt ClusterSelector podporuje následující pole:

  • clusterSelectorTerms: Seznam termínů, které určují kritéria pro výběr clusterů. Každý termín obsahuje labelSelector pole, které definuje sadu popisků, které se mají shodovat.

Přepsání oprav JSON

V objektu jsonPatchOverrides můžete overrideRules určit změny, které se mají použít u vybraných prostředků. Objekt JsonPatch podporuje následující pole:

  • op: Operace, která se má provést. Mezi podporované operace patří:

    • add: Přidá novou hodnotu do zadané cesty.
    • remove: Odebere hodnotu v zadané cestě.
    • replace: Nahradí hodnotu v zadané cestě.
  • path: Cesta k poli, které chcete upravit. Pokyny k určení cest zahrnují:

    • Musí začínat znakem lomítka (/).
    • Nemůže být prázdný nebo obsahovat prázdný řetězec.
    • Nemůže to být TypeMeta pole (/kind nebo /apiVersion).
    • Nemůže to být Metadata pole (/metadata/name nebo /metadata/namespace), kromě polí /metadata/labels a /metadata/annotations.
    • Ve stavu zdroje nemůže být žádné pole.

    Mezi platné cesty patří:

    • /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: Hodnota, kterou chcete přidat, odebrat nebo nahradit. Pokud op je remove, nemůžete zadat value.

Pole jsonPatchOverrides použijí opravu JSON u vybraných prostředků podle dokumentu RFC 6902.

Rezervované proměnné v hodnotě přepsání oprav JSON

Rezervované proměnné se nahradí hodnotou použitou v rámci pravidla opravy JSON. Aktuálně podporované rezervované proměnné:

  • ${MEMBER-CLUSTER-NAME}: nahrazeno názvem memberCluster.

Pokud například chcete vytvořit název hostitele Azure DNS, který obsahuje název clusteru, můžete použít konfiguraci podobnou této:

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"}

Ukázkový ResourceOverride objekt přidá hodnotu fleet-clustername-eastus do zadané cesty JSON v clusterech v eastus oblasti Azure.

Více pravidel přepsání

Do pole můžete přidat více overrideRules objektů policy , aby se u vybraných prostředků použilo více změn. Tady je příklad:

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"

Tento příklad nahradí image kontejneru v objektu Deployment takto:

  • Image nginx:1.20.0 pro clustery s popiskem env: prod
  • Image nginx:latest pro clustery s popiskem env: test

Použití umístění prostředků clusteru

  1. Vytvořte ClusterResourcePlacement prostředek, který určí pravidla umístění pro distribuci přepsání prostředků napříč infrastrukturou clusteru. Následující kód je příkladem. Nezapomeňte vybrat odpovídající obory názvů.

    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
    

    Tento příklad distribuuje prostředky ve test-namespace všech clusterech označených env:prod jako a env:test. Při implementaci změn se odpovídající ResourceOverride konfigurace použijí na určené prostředky. Výběr odpovídajícího prostředku my-deploymentnasazení aktivuje aplikaci konfigurací určeným prostředkům.

  2. ClusterResourcePlacement Použijte prostředek pomocí kubectl apply příkazu:

    kubectl apply -f cluster-resource-placement.yaml
    
  3. Pomocí příkazu ověřte, že se ResourceOverride objekt použil na vybrané prostředky. Zkontrolujte stav ClusterResourcePlacement prostředku:kubectl describe

    kubectl describe clusterresourceplacement crp-example
    

    Výstup by měl vypadat podobně jako v následujícím příkladu:

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

    Podmínka ClusterResourcePlacementOverridden označuje, jestli se u vybraných prostředků úspěšně použilo přepsání prostředku. Každý cluster udržuje svůj vlastní Applicable Resource Overrides seznam. Tento seznam obsahuje snímek přepsání prostředků, pokud je to relevantní. Jednotlivé stavové zprávy pro každý cluster označují, jestli se pravidla přepsání úspěšně použila.