Udostępnij za pomocą


Użyj ResourcePlacement w Azure Kubernetes Fleet Manager, aby wdrożyć zasoby ograniczone do przestrzeni nazw w wielu klastrach (wersja zapoznawcza)

W tym artykule opisano, jak używać usługi Azure Kubernetes Fleet Manager ResourcePlacement do wdrażania zasobów o zakresie przestrzeni nazw w klastrach w ramach floty.

Ważne

Funkcje usługi Azure Kubernetes Fleet Manager w wersji zapoznawczej są dostępne na zasadzie samoobsługi. Wersje zapoznawcze są udostępniane w wersji "as is" i "jako dostępne" i są wykluczone z umów dotyczących poziomu usług i ograniczonej gwarancji. Wersje zapoznawcze usługi Azure Kubernetes Fleet Manager są częściowo objęte pomocą techniczną świadczoną w miarę możliwości. W związku z tym te funkcje nie są przeznaczone do użytku produkcyjnego.

Wymagania wstępne

Ustal przestrzeń nazw w poprzek klastrów członkowskich

Aby móc za pomocą ResourcePlacement wdrożyć zasoby o zakresie przestrzeni nazw, docelowa przestrzeń nazw musi istnieć w klastrach członkowskich. W tym przykładzie pokazano, jak utworzyć przestrzeń nazw w klastrze centrum i propagować ją do klastrów członkowskich przy użyciu polecenia ClusterResourcePlacement.

Uwaga / Notatka

W poniższym przykładzie użyto wersji interfejsu placement.kubernetes-fleet.io/v1beta1 API. Pole selectionScope: NamespaceOnly to funkcja w wersji zapoznawczej dostępna w wersji 1beta1 i nie jest dostępna w stabilnym interfejsie API w wersji 1.

  1. Utwórz przestrzeń nazw w klastrze głównym.

    kubectl create namespace my-app
    
  2. ClusterResourcePlacement Utwórz obiekt, aby propagować przestrzeń nazw do wszystkich klastrów członkowskich. Zapisz następujący kod YAML w pliku o nazwie namespace-crp.yaml:

    apiVersion: placement.kubernetes-fleet.io/v1beta1
    kind: ClusterResourcePlacement
    metadata:
      name: my-app-namespace
    spec:
      resourceSelectors:
        - group: ""
          kind: Namespace
          name: my-app
          version: v1
          selectionScope: NamespaceOnly
      policy:
        placementType: PickAll
    
  3. Zastosuj ClusterResourcePlacement do klastera centrów:

    kubectl apply -f namespace-crp.yaml
    
  4. Sprawdź, czy przestrzeń nazw została pomyślnie rozpropagowana:

    kubectl get clusterresourceplacement my-app-namespace
    

    Dane wyjściowe powinny wyglądać mniej więcej tak jak w tym przykładzie:

    NAME                GEN   SCHEDULED   SCHEDULED-GEN   AVAILABLE   AVAILABLE-GEN   AGE
    my-app-namespace    1     True        1               True        1               15s
    

Użyj ResourcePlacement do umieszczania zasobów o zakresie przestrzeni nazw

Obiekt ResourcePlacement jest tworzony w przestrzeni nazw w klastrze centrum i służy do propagowania określonych zasobów o zakresie przestrzeni nazw do klastrów członkowskich. W tym przykładzie przedstawiono, jak propagować ConfigMaps do określonych klastrów członkowskich, używając obiektu ResourcePlacement z polityką rozmieszczania PickFixed.

Aby uzyskać więcej informacji, zobacz umieszczanie zasobów w obrębie przestrzeni nazw przy użyciu usługi Azure Kubernetes Fleet Manager ResourcePlacement.

  1. Utwórz ConfigMaps w przestrzeni nazw w centralnym klastrze. Te ConfigMaps będą propagowane do wybranych klastrów członkowskich:

    kubectl create configmap app-config \
      --from-literal=environment=production \
      --from-literal=log-level=info \
      -n my-app
    
    kubectl create configmap feature-flags \
      --from-literal=new-ui=enabled \
      --from-literal=api-v2=disabled \
      -n my-app
    
  2. Utwórz obiekt ResourcePlacement, aby propagować ConfigMaps. Zapisz następujący kod YAML w pliku o nazwie app-configs-rp.yaml:

    apiVersion: placement.kubernetes-fleet.io/v1beta1
    kind: ResourcePlacement
    metadata:
      name: app-configs
      namespace: my-app
    spec:
      resourceSelectors:
        - group: ""
          kind: ConfigMap
          version: v1
          name: app-config
        - group: ""
          kind: ConfigMap
          version: v1
          name: feature-flags
      policy:
        placementType: PickFixed
        clusterNames:
          - membercluster1
          - membercluster2
    

    Uwaga / Notatka

    Zastąp membercluster1 i membercluster2 rzeczywistymi nazwami klastrów członkowskich. Dostępne klastry członkowskie można wyświetlić przy użyciu polecenia kubectl get memberclusters.

  3. Zastosuj ResourcePlacement do klastra koncentracyjnego.

    kubectl apply -f app-configs-rp.yaml
    
  4. Sprawdź postęp propagacji zasobu:

    kubectl get resourceplacement app-configs -n my-app
    

    Dane wyjściowe powinny wyglądać mniej więcej tak jak w tym przykładzie:

    NAME          GEN   SCHEDULED   SCHEDULED-GEN   AVAILABLE   AVAILABLE-GEN   AGE
    app-configs   1     True        1               True        1               20s
    
  5. Wyświetl szczegóły obiektu umieszczania:

    kubectl describe resourceplacement app-configs -n my-app
    

    Dane wyjściowe powinny wyglądać mniej więcej tak jak w tym przykładzie:

    Name:         app-configs
    Namespace:    my-app
    Labels:       <none>
    Annotations:  <none>
    API Version:  placement.kubernetes-fleet.io/v1beta1
    Kind:         ResourcePlacement
    Metadata:
      Creation Timestamp:  2025-11-13T22:08:12Z
      Finalizers:
        kubernetes-fleet.io/crp-cleanup
        kubernetes-fleet.io/scheduler-cleanup
      Generation:        1
      Resource Version:  12345
      UID:               cec941f1-e48a-4045-b5dd-188bfc1a830f
    Spec:
      Policy:
        Cluster Names:
          membercluster1
          membercluster2
        Placement Type:  PickFixed
      Resource Selectors:
        Group:                 
        Kind:                  ConfigMap
        Name:                  app-config
        Version:               v1
        Group:                 
        Kind:                  ConfigMap
        Name:                  feature-flags
        Version:               v1
      Revision History Limit:  10
      Strategy:
        Type:  RollingUpdate
    Status:
      Conditions:
        Last Transition Time:   2025-11-13T22:08:12Z
        Message:                found all cluster needed as specified by the scheduling policy, found 2 cluster(s)
        Observed Generation:    1
        Reason:                 SchedulingPolicyFulfilled
        Status:                 True
        Type:                   ResourcePlacementScheduled
        Last Transition Time:   2025-11-13T22:08:12Z
        Message:                All 2 cluster(s) start rolling out the latest resource
        Observed Generation:    1
        Reason:                 RolloutStarted
        Status:                 True
        Type:                   ResourcePlacementRolloutStarted
        Last Transition Time:   2025-11-13T22:08:13Z
        Message:                No override rules are configured for the selected resources
        Observed Generation:    1
        Reason:                 NoOverrideSpecified
        Status:                 True
        Type:                   ResourcePlacementOverridden
        Last Transition Time:   2025-11-13T22:08:13Z
        Message:                Works(s) are succcesfully created or updated in 2 target cluster(s)' namespaces
        Observed Generation:    1
        Reason:                 WorkSynchronized
        Status:                 True
        Type:                   ResourcePlacementWorkSynchronized
        Last Transition Time:   2025-11-13T22:08:13Z
        Message:                The selected resources are successfully applied to 2 cluster(s)
        Observed Generation:    1
        Reason:                 ApplySucceeded
        Status:                 True
        Type:                   ResourcePlacementApplied
        Last Transition Time:   2025-11-13T22:08:13Z
        Message:                The selected resources in 2 cluster(s) are available now
        Observed Generation:    1
        Reason:                 ResourceAvailable
        Status:                 True
        Type:                   ResourcePlacementAvailable
      Observed Resource Index:  0
      Placement Statuses:
        Cluster Name:  membercluster1
        Conditions:
          Last Transition Time:   2025-11-13T22:08:12Z
          Message:                Successfully scheduled resources for placement in "membercluster1": picked by scheduling policy
          Observed Generation:    1
          Reason:                 Scheduled
          Status:                 True
          Type:                   Scheduled
          Last Transition Time:   2025-11-13T22:08:12Z
          Message:                Detected the new changes on the resources and started the rollout process
          Observed Generation:    1
          Reason:                 RolloutStarted
          Status:                 True
          Type:                   RolloutStarted
          Last Transition Time:   2025-11-13T22:08:13Z
          Message:                No override rules are configured for the selected resources
          Observed Generation:    1
          Reason:                 NoOverrideSpecified
          Status:                 True
          Type:                   Overridden
          Last Transition Time:   2025-11-13T22:08:13Z
          Message:                All of the works are synchronized to the latest
          Observed Generation:    1
          Reason:                 AllWorkSynced
          Status:                 True
          Type:                   WorkSynchronized
          Last Transition Time:   2025-11-13T22:08:13Z
          Message:                All corresponding work objects are applied
          Observed Generation:    1
          Reason:                 AllWorkHaveBeenApplied
          Status:                 True
          Type:                   Applied
          Last Transition Time:   2025-11-13T22:08:13Z
          Message:                All corresponding work objects are available
          Observed Generation:    1
          Reason:                 AllWorkAreAvailable
          Status:                 True
          Type:                   Available
        Observed Resource Index:  0
        Cluster Name:             membercluster2
        Conditions:
          Last Transition Time:   2025-11-13T22:08:12Z
          Message:                Successfully scheduled resources for placement in "membercluster2": picked by scheduling policy
          Observed Generation:    1
          Reason:                 Scheduled
          Status:                 True
          Type:                   Scheduled
          Last Transition Time:   2025-11-13T22:08:12Z
          Message:                Detected the new changes on the resources and started the rollout process
          Observed Generation:    1
          Reason:                 RolloutStarted
          Status:                 True
          Type:                   RolloutStarted
          Last Transition Time:   2025-11-13T22:08:13Z
          Message:                No override rules are configured for the selected resources
          Observed Generation:    1
          Reason:                 NoOverrideSpecified
          Status:                 True
          Type:                   Overridden
          Last Transition Time:   2025-11-13T22:08:13Z
          Message:                All of the works are synchronized to the latest
          Observed Generation:    1
          Reason:                 AllWorkSynced
          Status:                 True
          Type:                   WorkSynchronized
          Last Transition Time:   2025-11-13T22:08:13Z
          Message:                All corresponding work objects are applied
          Observed Generation:    1
          Reason:                 AllWorkHaveBeenApplied
          Status:                 True
          Type:                   Applied
          Last Transition Time:   2025-11-13T22:08:13Z
          Message:                All corresponding work objects are available
          Observed Generation:    1
          Reason:                 AllWorkAreAvailable
          Status:                 True
          Type:                   Available
        Observed Resource Index:  0
      Selected Resources:
        Kind:       ConfigMap
        Name:       app-config
        Namespace:  my-app
        Version:    v1
        Kind:       ConfigMap
        Name:       feature-flags
        Namespace:  my-app
        Version:    v1
    Events:
      Type    Reason                     Age   From                            Message
      ----    ------                     ----  ----                            -------
      Normal  PlacementRolloutStarted       37s   placement-controller  Started rolling out the latest resources
      Normal  PlacementOverriddenSucceeded  36s   placement-controller  Placement has been successfully overridden
      Normal  PlacementWorkSynchronized     36s   placement-controller  Work(s) have been created or updated successfully for the selected cluster(s)
      Normal  PlacementApplied              36s   placement-controller  Resources have been applied to the selected cluster(s)
      Normal  PlacementAvailable            36s   placement-controller  Resources are available on the selected cluster(s)
      Normal  PlacementRolloutCompleted     36s   placement-controller  Placement has finished the rollout process and reached the desired status
    

Weryfikowanie zasobów w klastrach członkowskich

Możesz sprawdzić, czy ConfigMapy zostały pomyślnie propagowane do klastrów członkowskich.

  1. Pobierz poświadczenia dla jednego z klastrów członkowskich:

    az aks get-credentials --resource-group <resource-group> --name membercluster1
    
  2. Sprawdź, czy przestrzeń nazw istnieje:

    kubectl get namespace my-app
    
  3. Sprawdź, czy ConfigMaps istnieją w przestrzeni nazw:

    kubectl get configmap -n my-app
    

    Dane wyjściowe powinny zawierać oba obiekty ConfigMap:

    NAME             DATA   AGE
    app-config       2      2m
    feature-flags    2      2m
    
  4. Wyświetl zawartość obiektu ConfigMap:

    kubectl describe configmap app-config -n my-app
    

Uprzątnij zasoby

Jeśli nie chcesz już używać ResourcePlacement obiektów, możesz je usunąć za pomocą kubectl delete polecenia :

kubectl delete resourceplacement app-configs -n my-app

Aby również usunąć przestrzeń nazw ClusterResourcePlacement:

kubectl delete clusterresourceplacement my-app-namespace

Aby usunąć przestrzeń nazw i wszystkie zasoby w niej z klastra centralnego:

kubectl delete namespace my-app

Aby dowiedzieć się więcej o umieszczaniu zasobów w przestrzeni nazw, zobacz poniższe zasoby: