Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Si applica a: ✔️ Fleet Manager con cluster di hub
Il posizionamento delle risorse di Azure Kubernetes Fleet Manager consente di distribuire e sincronizzare le risorse con ambito di cluster, inclusi i namespace e le relative risorse figlie, in più cluster della flotta. Questa funzionalità semplifica le distribuzioni multicluster garantendo una configurazione coerente delle risorse nell'infrastruttura, riducendo il sovraccarico manuale e consentendo di gestire carichi di lavoro complessi su larga scala con una singola fonte di verità. Questo articolo illustra come usare ClusterResourcePlacement per distribuire uno spazio dei nomi e i relativi carichi di lavoro ai cluster membri.
Per distribuire singole risorse all'interno di un namespace, consulta la documentazione sul posizionamento delle risorse con ambito namespace.
È possibile completare i passaggi descritti in questo articolo usando il portale di Azure o il interfaccia della riga di comando di Azure.
Note
È possibile usare la funzionalità di posizionamento delle risorse di Fleet Manager con AKS e i cluster Kubernetes abilitati per Azure Arc.
Prima di iniziare
- Se non si ha un account Azure, creare un account gratuito prima di iniziare.
- Leggere la panoramica concettuale del posizionamento delle risorse per comprendere i concetti e la terminologia usati in questo articolo.
- È necessario Gestione flotta con un cluster hub e cluster membri. Se non è disponibile, vedere Creare una risorsa di Gestione flotta Kubernetes di Azure e aggiungere cluster membri usando l'interfaccia della riga di comando di Azure.
- È necessario accedere all'API Kubernetes del cluster hub. Se non si ha accesso, vedere Accedere all'API Kubernetes per un cluster hub di Gestione flotta Kubernetes.
Distribuire uno spazio dei nomi e le relative risorse nei cluster membri
Utilizzare il semplice scenario di avere un Deployment e un Service da distribuire in tutti i cluster della flotta. Crea uno spazio dei nomi nel cluster hub di Fleet Manager, aggiungivi i carichi di lavoro e quindi usa un ClusterResourcePlacement per distribuire lo spazio dei nomi e tutto il suo contenuto su tutti i cluster membri utilizzando i criteri di posizionamento PickAll.
Impostare le variabili di ambiente seguenti per l'ID sottoscrizione, il gruppo di risorse e la risorsa Flotta Kubernetes:
export SUBSCRIPTION_ID=<subscription-id> export GROUP=<resource-group-name> export FLEET=<fleet-name>Impostare la sottoscrizione di Azure predefinita usando il comando [
az account set][az-account-set]:az account set \ --subscription ${SUBSCRIPTION_ID}Ottenere il file kubeconfig del cluster hub Kubernetes Fleet usando il comando [
az fleet get-credentials][az-fleet-get-credentials]:az fleet get-credentials \ --resource-group ${GROUP} \ --name ${FLEET}Il risultato dovrebbe essere simile al seguente esempio.
Merged "hub" as current context in /home/fleet/.kube/configNote
Se si riceve un errore di tipo
InvalidHubOperationcon un messaggio che indica che la flotta è priva di hub, aggiungi un cluster di hub. Per altre informazioni, vedere Aggiornare il tipo di cluster hub.Creare uno spazio dei nomi nel cluster hub.
kubectl create namespace test-appSalvare il codice YAML seguente come
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: LoadBalancerDistribuire il carico di lavoro di test sul cluster hub di Fleet Manager usando
kubectl.kubectl apply -f test-workload.yamlSalvare il codice YAML seguente come
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: PickAllApplica il manifest di posizionamento al cluster hub di Fleet Manager.
kubectl apply -f crp-distribute-workload.yamlNote
La distribuzione della risorsa inizia immediatamente dopo l'applicazione del manifest. Viene usata una strategia implicita
RollingUpdate. Per informazioni su come avere un maggiore controllo sull'implementazione, vedere Definizione di una strategia di implementazione per il posizionamento delle risorse.Controllare lo stato di avanzamento del posizionamento delle risorse.
kubectl get clusterresourceplacement distribute-test-app
L'output dovrebbe essere simile all'esempio seguente:
NAME GEN SCHEDULED SCHEDULEDGEN APPLIED APPLIEDGEN AGE
distribute-test-app 2 True 2 True 2 10s
- Visualizzare i dettagli del posizionamento.
kubectl describe clusterresourceplacement distribute-test-app
L'output dovrebbe essere simile all'esempio seguente:
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
Nel portale di Azure passare a Fleet Manager.
Nel menu del servizio, in Risorse della flotta, selezionare Namespace>+ Crea.
Note
Se le risorse della flotta non sono visualizzate, Fleet Manager non ha un cluster hub. Per altre informazioni su come aggiungerne una, vedere Aggiornare il tipo di cluster hub.
Nel menu selezionare Spazio dei nomi, immettere un nome e quindi selezionare Crea.
Dopo alcuni istanti, la pagina viene aggiornata e lo spazio dei nomi viene visualizzato nell'elenco degli spazi dei nomi nel cluster hub di Fleet Manager. È ora pronto per ospitare tutte le risorse da distribuire tra cluster membri.
Nella parte superiore dell'elenco degli spazi dei nomi selezionare + Crea>applica un YAML e usare gli esempi seguenti.
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: 80apiVersion: v1 kind: Service metadata: name: nginx-service namespace: test-app spec: selector: app: nginx ports: - protocol: TCP port: 80 targetPort: 80 type: LoadBalancerCopiare e incollare gli esempi e applicarli uno alla volta, come illustrato nell'immagine seguente.
Lo spazio dei nomi e i relativi carichi di lavoro sono ora pronti per essere distribuiti ai cluster membri. La distribuzione e il servizio non sono pianificati nel cluster hub di Fleet Manager.
Nel menu Servizio, in Risorse flotta, selezionare Posizionamenti risorse>+ Crea.
Nella scheda Informazioni di base configurare le opzioni seguenti:
In Dettagli del posizionamento, immettere un nome per il posizionamento.
In Dettagli risorsa, lascia Ambito come Con ambito cluster e immetti il Group Version Kind (GVK) e il nome della risorsa da distribuire. In questo esempio usare i valori seguenti.
group: "" kind: Namespace version: v1 name: test-appIn Selezione del cluster membro, per Tipo di posizionamento scegliere Tutti i cluster.
Per Rollout, lascia selezionata la strategia Aggiornamento progressivo.
Selezionare Avanti per esaminare il manifesto risultante
ClusterResourcePlacement. È possibile modificare il manifesto, se necessario, convalidarlo usando l'opzione Convalida (esecuzione secca) oppure selezionare Rivedi e crea per procedere alla conferma finale.Selezionare Crea per avviare immediatamente la distribuzione dello spazio dei nomi.
Note
La distribuzione della risorsa inizia immediatamente non appena si applica il posizionamento della risorsa tramite la strategia selezionata
RollingUpdate. Per informazioni su come avere controlli aggiuntivi sull'implementazione, vedere Definizione di una strategia di implementazione per il posizionamento delle risorse.La pagina viene aggiornata e l'elenco Posizionamento risorse visualizza il posizionamento appena creato. Mostra il numero di cluster selezionati e se lo scheduler della flotta può soddisfare i criteri di posizionamento.
Visualizzare lo stato di implementazione del posizionamento selezionando il nome del posizionamento nell'elenco. Selezionare singoli cluster per visualizzare l'implementazione della risorsa in tale cluster.
Nei cluster Kubernetes selezionati sono presenti il namespace, il Deployment e il Service, distribuiti e operativi.
Eliminare il posizionamento per rimuovere le risorse
Quando si elimina il posizionamento delle risorse sul cluster hub di Fleet Manager, si rimuovono le risorse distribuite dai cluster membri selezionati.
kubectl delete clusterresourceplacement distribute-test-app
Nel menu del servizio, in Risorse flotta, selezionare Posizionamento risorse.
Nell'elenco di posizionamento delle risorse selezionare il posizionamento e selezionare Elimina.
In Elimina verificare di aver scelto il posizionamento corretto. Quando si è pronti, selezionare Conferma eliminazione>Elimina.
La pagina viene aggiornata e il posizionamento non viene più visualizzato nell'elenco. Le risorse vengono rimosse dai cluster membri.
Contenuti correlati
Per altre informazioni sul posizionamento delle risorse, vedere le risorse seguenti:
- Distribuire risorse con ambito namespace su più cluster
- Informazioni sull'output dello stato di posizionamento delle risorse.
- Posizionamento intelligente delle risorse Kubernetes tra cluster in base alle proprietà dei cluster membri.
- Controllo della rimozione e delle interruzioni per il posizionamento delle risorse del cluster.
- Definizione di una strategia di implementazione per un posizionamento delle risorse cluster.
- Domande frequenti sul posizionamento delle risorse del cluster.
- Documentazione di KubeFleet ClusterResourcePlacement open source.