Użyj funkcji rozmieszczania zasobów w usłudze Azure Kubernetes Fleet Manager do wdrażania zasobów na poziomie klastra w wielu klastrach

Dotyczy: ✔️ Fleet Manager z klastrem hubowym

Rozmieszczanie zasobów w usłudze Azure Kubernetes Fleet Manager umożliwia rozmieszczanie i synchronizowanie zasobów o zakresie klastra — w tym przestrzeni nazw i ich zasobów podrzędnych — w wielu klastrach floty. Ta funkcja upraszcza wdrożenia wieloklastrowe, zapewniając spójną konfigurację zasobów w całej infrastrukturze, zmniejszając ręczne obciążenie i umożliwiając zarządzanie złożonymi obciążeniami na dużą skalę przy użyciu jednego źródła prawdy. W tym artykule opisano, jak używać ClusterResourcePlacement do rozprowadzania przestrzeni nazw i jej obciążeń do klastrów członkowskich.

Aby dystrybuować poszczególne zasoby wewnątrz przestrzeni nazw, zapoznaj się z dokumentacją dotyczącą umieszczania zasobów w zakresie przestrzeni nazw.

Kroki opisane w tym artykule można wykonać przy użyciu portalu Azure lub Azure CLI.

Note

Możesz używać funkcji rozmieszczania zasobów w usłudze Fleet Manager z usługą AKS i klastrami Kubernetes z włączoną usługą Azure Arc.

Zanim rozpoczniesz

Dystrybuowanie przestrzeni nazw i jej zasobów do klastrów członkowskich

Skorzystaj z prostego scenariusza użycia Deployment i Service do wdrażania we wszystkich klastrach we flocie. Utwórz przestrzeń nazw w klastrze centralnym usługi Fleet Manager, dodaj do niej obciążenia, a następnie użyj obiektu ClusterResourcePlacement, aby rozprowadzić przestrzeń nazw i całą jej zawartość do wszystkich klastrów członkowskich za pomocą zasad rozmieszczania PickAll.

  1. Ustaw następujące zmienne środowiskowe dla ID subskrypcji, grupy zasobów oraz zasobu Kubernetes Fleet:

    export SUBSCRIPTION_ID=<subscription-id>
    export GROUP=<resource-group-name>
    export FLEET=<fleet-name>
    
  2. Ustaw domyślną subskrypcję Azure przy użyciu polecenia [az account set][az-account-set]:

    az account set \
        --subscription ${SUBSCRIPTION_ID}
    
  3. Pobierz plik kubeconfig klastra centralnego Kubernetes Fleet za pomocą polecenia [az fleet get-credentials][az-fleet-get-credentials]:

    az fleet get-credentials \
        --resource-group ${GROUP} \
        --name ${FLEET}
    

    Dane wyjściowe powinny wyglądać podobnie do poniższych.

    Merged "hub" as current context in /home/fleet/.kube/config
    

    Note

    Jeśli wystąpi błąd typu InvalidHubOperation z komunikatem wskazującym, że flota jest bez koncentratora, dodaj klaster koncentratora. Aby uzyskać więcej informacji, zobacz uaktualnienie typu klastra centralnego.

  4. Utwórz przestrzeń nazw w klastrze centralnym.

    kubectl create namespace test-app
    
  5. Zapisz następujący kod YAML jako test-workload.yaml.

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: nginx-deployment
      namespace: test-app
    spec:
      selector:
        matchLabels:
          app: nginx
      replicas: 2
      template:
        metadata:
          labels:
            app: nginx
        spec:
          containers:
          - name: nginx
            image: mcr.microsoft.com/azurelinux/base/nginx:1.28@sha256:3352a36cbcab4708883a3e77b64f64159e11e1aab358c010e1c4e465dbfb4f57
            ports:
            - containerPort: 80
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: nginx-service
      namespace: test-app
    spec:
      selector:
        app: nginx
      ports:
      - protocol: TCP
        port: 80
        targetPort: 80
      type: LoadBalancer
    
  6. Wdróż obciążenie testowe do klastra centralnego Fleet Manager przy użyciu kubectl.

    kubectl apply -f test-workload.yaml
    
  7. Zapisz następujący kod YAML jako crp-distribute-workload.yaml.

    apiVersion: placement.kubernetes-fleet.io/v1
    kind: ClusterResourcePlacement
    metadata:
      name: distribute-test-app
    spec:
      resourceSelectors:
        - group: ""
          kind: Namespace
          version: v1          
          name: test-app
      policy:
        placementType: PickAll
    
  8. Zastosuj manifest rozmieszczenia do klastra centralnego Fleet Manager.

    kubectl apply -f crp-distribute-workload.yaml
    

    Note

    Wdrożenie zasobu rozpoczyna się natychmiast po zastosowaniu manifestu. Jest używana niejawna RollingUpdate strategia. Aby dowiedzieć się, jak uzyskać dodatkową kontrolę nad wdrażaniem, zobacz temat definiowanie strategii wdrażania dotyczącej rozmieszczania zasobów.

  9. Sprawdź postęp umieszczania zasobów.

kubectl get clusterresourceplacement distribute-test-app

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

NAME                   GEN   SCHEDULED   SCHEDULEDGEN   APPLIED   APPLIEDGEN   AGE
distribute-test-app    2     True        2              True      2            10s
  1. Wyświetl szczegóły umiejscowienia.
kubectl describe clusterresourceplacement distribute-test-app

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

Name:         distribute-test-app
Namespace:    
Labels:       <none>
Annotations:  <none>
API Version:  placement.kubernetes-fleet.io/v1
Kind:         ClusterResourcePlacement
Metadata:
  Creation Timestamp:  2024-04-01T18:55:31Z
  Finalizers:
    kubernetes-fleet.io/crp-cleanup
    kubernetes-fleet.io/scheduler-cleanup
  Generation:        2
  Resource Version:  6949
  UID:               815b1d81-61ae-4fb1-a2b1-06794be3f986
Spec:
  Policy:
    Placement Type:  PickAll
  Resource Selectors:
    Group:                 
    Kind:                  Namespace
    Name:                  test-app
    Version:               v1
  Revision History Limit:  10
  Strategy:
    Type:  RollingUpdate
Status:
  Conditions:
    Last Transition Time:   2024-04-01T18:55:31Z
    Message:                found all the clusters needed as specified by the scheduling policy
    Observed Generation:    2
    Reason:                 SchedulingPolicyFulfilled
    Status:                 True
    Type:                   ClusterResourcePlacementScheduled
    Last Transition Time:   2024-04-01T18:55:36Z
    Message:                All 3 cluster(s) are synchronized to the latest resources on the hub cluster
    Observed Generation:    2
    Reason:                 SynchronizeSucceeded
    Status:                 True
    Type:                   ClusterResourcePlacementSynchronized
    Last Transition Time:   2024-04-01T18:55:36Z
    Message:                Successfully applied resources to 3 member clusters
    Observed Generation:    2
    Reason:                 ApplySucceeded
    Status:                 True
    Type:                   ClusterResourcePlacementApplied
  Observed Resource Index:  0
  Placement Statuses:
    Cluster Name:  membercluster1
    Conditions:
      Last Transition Time:  2024-04-01T18:55:31Z
      Message:               Successfully scheduled resources for placement in membercluster1 (affinity score: 0, topology spread score: 0): picked by scheduling policy
      Observed Generation:   2
      Reason:                ScheduleSucceeded
      Status:                True
      Type:                  ResourceScheduled
      Last Transition Time:  2024-04-01T18:55:36Z
      Message:               Successfully Synchronized work(s) for placement
      Observed Generation:   2
      Reason:                WorkSynchronizeSucceeded
      Status:                True
      Type:                  WorkSynchronized
      Last Transition Time:  2024-04-01T18:55:36Z
      Message:               Successfully applied resources
      Observed Generation:   2
      Reason:                ApplySucceeded
      Status:                True
      Type:                  ResourceApplied
    Cluster Name:            membercluster2
    Conditions:
      Last Transition Time:  2024-04-01T18:55:31Z
      Message:               Successfully scheduled resources for placement in membercluster2 (affinity score: 0, topology spread score: 0): picked by scheduling policy
      Observed Generation:   2
      Reason:                ScheduleSucceeded
      Status:                True
      Type:                  ResourceScheduled
      Last Transition Time:  2024-04-01T18:55:36Z
      Message:               Successfully Synchronized work(s) for placement
      Observed Generation:   2
      Reason:                WorkSynchronizeSucceeded
      Status:                True
      Type:                  WorkSynchronized
      Last Transition Time:  2024-04-01T18:55:36Z
      Message:               Successfully applied resources
      Observed Generation:   2
      Reason:                ApplySucceeded
      Status:                True
      Type:                  ResourceApplied
    Cluster Name:            membercluster3
    Conditions:
      Last Transition Time:  2024-04-01T18:55:31Z
      Message:               Successfully scheduled resources for placement in membercluster3 (affinity score: 0, topology spread score: 0): picked by scheduling policy
      Observed Generation:   2
      Reason:                ScheduleSucceeded
      Status:                True
      Type:                  ResourceScheduled
      Last Transition Time:  2024-04-01T18:55:36Z
      Message:               Successfully Synchronized work(s) for placement
      Observed Generation:   2
      Reason:                WorkSynchronizeSucceeded
      Status:                True
      Type:                  WorkSynchronized
      Last Transition Time:  2024-04-01T18:55:36Z
      Message:               Successfully applied resources
      Observed Generation:   2
      Reason:                ApplySucceeded
      Status:                True
      Type:                  ResourceApplied
  Selected Resources:
    Kind:     Namespace
    Name:     my-namespace
    Version:  v1
Events:
  Type    Reason                     Age   From                                   Message
  ----    ------                     ----  ----                                   -------
  Normal  PlacementScheduleSuccess   108s  cluster-resource-placement-controller  Successfully scheduled the placement
  Normal  PlacementSyncSuccess       103s  cluster-resource-placement-controller  Successfully synchronized the placement
  Normal  PlacementRolloutCompleted  103s  cluster-resource-placement-controller  Resources have been applied to the selected clusters
  1. W portalu Azure przejdź do usługi Fleet Manager.

  2. W menu usługi, w sekcji Zasoby floty, wybierz opcję Przestrzenie> nazw+ Utwórz.

    Note

    Jeśli nie widzisz Fleet Resources, Twój Fleet Manager nie jest skojarzony z klastrem huba. Aby uzyskać więcej informacji o tym, jak go dodać, zobacz Typ klastra centrum uaktualniania.

  3. W menu wybierz pozycję Przestrzeń nazw, wprowadź nazwę, a następnie wybierz pozycję Utwórz.

    Zrzut ekranu przedstawiający portal Azure, na którym pokazano tworzenie przestrzeni nazw o nazwie test-app w klastrze centralnym usługi Fleet Manager.

    Po kilku chwilach strona zostanie odświeżona, a przestrzeń nazw zostanie wyświetlona na liście przestrzeni nazw w klastrze centrum Fleet Manager. Teraz można hostować wszystkie zasoby, które mają być dystrybuowane między klastrami członkowskimi.

  4. W górnej części listy przestrzeni nazw wybierz pozycję + Utwórz>zastosuj kod YAML i użyj poniższych przykładów.

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: nginx-deployment
      namespace: test-app
    spec:
      selector:
        matchLabels:
          app: nginx
      replicas: 2
      template:
        metadata:
          labels:
            app: nginx
        spec:
          containers:
          - name: nginx
            image: mcr.microsoft.com/azurelinux/base/nginx:1.28@sha256:3352a36cbcab4708883a3e77b64f64159e11e1aab358c010e1c4e465dbfb4f57
            ports:
            - containerPort: 80
    
    apiVersion: v1
    kind: Service
    metadata:
      name: nginx-service
      namespace: test-app
    spec:
      selector:
        app: nginx
      ports:
      - protocol: TCP
        port: 80
        targetPort: 80
      type: LoadBalancer
    

    Skopiuj i wklej przykłady i zastosuj je pojedynczo, jak pokazano na poniższej ilustracji.

    Zrzut ekranu portalu Azure przedstawiający okno dialogowe Zastosuj przy użyciu YAML zawierające wdrożenie gotowe do wdrożenia w klastrze centralnym usługi Fleet Manager.

    Przestrzeń nazw i jej obciążenia są teraz gotowe do dystrybucji do klastrów członkowskich. Wdrożenie i usługa nie są zaplanowane w klastrze centrum Fleet Manager.

  5. W menu usługi w obszarze Zasoby floty wybierz pozycję Umieszczanie> zasobów+ Utwórz.

  6. Na karcie Podstawowe skonfiguruj następujące opcje:

    • W sekcji Szczegóły miejsca docelowego wprowadź nazwę miejsca docelowego.

    • W obszarze Szczegóły zasobu pozostaw pole Zakres jako zakres klastra i wprowadź typ wersji grupy (GVK) i nazwę zasobu do dystrybucji. W tym przykładzie użyj następujących wartości.

      group: ""
      kind: Namespace
      version: v1          
      name: test-app
      
    • W Wybór klastra członkowskiego w polu Typ rozmieszczenia wybierz Wszystkie klastry.

    • W polu Wdrożenie pozostaw wybraną strategię aktualizacji stopniowej .

    Zrzut ekranu portalu Azure przedstawiający ukończoną kartę Podstawy dotyczącą umieszczania zasobów w zakresie klastra dla przestrzeni nazw o nazwie test-app.

  7. Wybierz przycisk Dalej , aby przejrzeć wynikowy ClusterResourcePlacement manifest. Manifest można zmodyfikować w razie potrzeby, zweryfikować przy użyciu opcji Weryfikuj (przebieg próbny) lub wybrać pozycję Przejrzyj i utwórz , aby przejść do ostatecznego potwierdzenia.

    Zrzut ekranu portalu Azure przedstawiający kartę Przegląd YAML z zakończoną powodzeniem weryfikacją próbną (dry run) rozmieszczania zasobów na poziomie klastra dla przestrzeni nazw o nazwie test-app.

  8. Wybierz pozycję Utwórz , aby natychmiast rozpocząć dystrybucję przestrzeni nazw.

    Zrzut ekranu przedstawiający portal Azure przedstawiający kartę Przeglądanie i tworzenie dla umieszczania zasobów w zakresie klastra dla przestrzeni nazw o nazwie test-app.

    Note

    Wdrażanie zasobu rozpoczyna się natychmiast po zastosowaniu rozmieszczenia zasobu za pomocą wybranej strategii RollingUpdate. Aby dowiedzieć się, jak uzyskać dodatkową kontrolę nad wdrażaniem, zobacz definiowanie strategii wdrażania na potrzeby rozmieszczania zasobów.

  9. Strona zostanie odświeżona, a na liście Umieszczanie zasobów zostanie wyświetlona nowo utworzona lokalizacja. Przedstawia liczbę wybranych klastrów oraz informację, czy harmonogramator floty może spełnić politykę rozmieszczania.

    Zrzut ekranu przedstawiający portal Azure z listą rozmieszczeń zasobów z jednym rozmieszczeniem zasobów o nazwie distribute-test-app.

  10. Wyświetl stan wdrażania umiejscowienia, wybierając na liście nazwę umiejscowienia. Wybierz poszczególne klastry, aby wyświetlić wdrożenie zasobów w tym klastrze.

    Zrzut ekranu przedstawiający portal Azure przedstawiający szczegółowe informacje o wdrożeniu zasobu o nazwie distribute-test-app.

W wybranych klastrach Kubernetes znajduje się przestrzeń nazw, wdrożenie i usługa wdrożona i operacyjna.

Usuń umiejscowienie, aby usunąć zasoby

Usunięcie umieszczania zasobów w klastrze centrum Fleet Manager powoduje usunięcie rozproszonych zasobów z wybranych klastrów członkowskich.

kubectl delete clusterresourceplacement distribute-test-app
  1. W menu usługi w obszarze Zasoby floty wybierz pozycję Umieszczanie zasobów.

  2. Na liście rozmieszczeń zasobów wybierz rozmieszczenie, a następnie wybierz opcję Usuń.

  3. W obszarze Usuń sprawdź, czy wybrano prawidłowe rozmieszczenie. Gdy wszystko będzie gotowe, wybierz pozycję Potwierdź usunięcie>.

    Zrzut ekranu portalu Azure przedstawiający usuwanie rozmieszczenia zasobów o nazwie distribute-test-app.

  4. Strona odświeży się, a umiejscowienie nie będzie już widoczne na liście. Zasoby są usuwane z klastrów członkowskich.

Aby dowiedzieć się więcej na temat umieszczania zasobów, zobacz następujące zasoby: