Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
S’applique à : ✔️ Fleet Manager avec cluster hub
Le placement des ressources d’Azure Kubernetes Fleet Manager vous permet de distribuer et de synchroniser des ressources de portée cluster, y compris les espaces de noms et leurs ressources enfants, entre plusieurs clusters de votre flotte. Cette fonctionnalité simplifie les déploiements multicluster en garantissant une configuration cohérente des ressources dans votre infrastructure, en réduisant la surcharge manuelle et en vous permettant de gérer des charges de travail complexes à grande échelle avec une seule source de vérité. Cet article explique comment utiliser ClusterResourcePlacement pour distribuer un espace de noms et ses charges de travail aux clusters membres.
Pour distribuer des ressources individuelles à l’intérieur d’un espace de noms, consultez la documentation sur le placement des ressources délimitées à l’espace de noms.
Vous pouvez suivre les étapes décrites dans cet article à l’aide du portail Azure ou du Azure CLI.
Note
Vous pouvez utiliser l'emplacement des ressources de Fleet Manager avec AKS et les clusters Kubernetes compatibles avec Azure Arc.
Avant de commencer
- Si vous ne disposez pas d’un compte Azure, créez-en un gratuitement avant de commencer.
- Lisez la vue d’ensemble conceptuelle du placement des ressources pour comprendre les concepts et la terminologie utilisés dans cet article.
- Vous avez besoin d’un Gestionnaire de flotte avec un cluster principal et des clusters membres. Si vous n’en avez pas, consultez Créer une ressource Azure Kubernetes Fleet Manager et rejoindre des clusters membres à l’aide d’Azure CLI.
- Vous devez accéder à l'API Kubernetes du cluster hub. Si vous n’avez pas accès, consultez Accéder à l’API Kubernetes pour un cluster hub Azure Kubernetes Fleet Manager.
Distribuer un espace de noms et ses ressources sur des clusters membres
Utilisez le scénario simple consistant à avoir un Deployment et un Service pour déployer sur tous les clusters de la flotte. Créez un espace de noms sur votre cluster Hub Fleet Manager, ajoutez-y les charges de travail, puis utilisez un ClusterResourcePlacement pour distribuer l’espace de noms et tout son contenu à tous les clusters membres à l’aide de la PickAll stratégie de placement.
Définissez les variables d'environnement suivantes pour votre ID d'abonnement, votre groupe de ressources et votre ressource Kubernetes Fleet :
export SUBSCRIPTION_ID=<subscription-id> export GROUP=<resource-group-name> export FLEET=<fleet-name>Définissez l’abonnement par défaut Azure à l’aide de la commande [
az account set][az-account-set] :az account set \ --subscription ${SUBSCRIPTION_ID}Obtenez le fichier kubeconfig du cluster Kubernetes Fleet Hub à l’aide de la commande [
az fleet get-credentials][az-fleet-get-credentials] :az fleet get-credentials \ --resource-group ${GROUP} \ --name ${FLEET}Votre sortie doit ressembler à ce qui suit.
Merged "hub" as current context in /home/fleet/.kube/configNote
Si vous recevez une erreur de type
InvalidHubOperationavec le message indiquant que la flotte est sans hub, ajoutez un cluster hub. Pour plus d’informations, consultez mettre à niveau le type de cluster hub.Créez un espace de noms dans le cluster hub.
kubectl create namespace test-appEnregistrez le yaML suivant sous
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: LoadBalancerDéployez la charge de travail de test sur le cluster hub Fleet Manager en utilisant
kubectl.kubectl apply -f test-workload.yamlEnregistrez le yaML suivant sous
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: PickAllAppliquez le manifeste de placement au cluster Hub Fleet Manager.
kubectl apply -f crp-distribute-workload.yamlNote
Le déploiement de la ressource commence immédiatement que le manifeste est appliqué. Une stratégie implicite
RollingUpdateest utilisée. Pour savoir comment avoir un contrôle supplémentaire sur le déploiement, consultez la définition d’une stratégie de déploiement pour le placement des ressources.Vérifiez la progression de l’emplacement des ressources.
kubectl get clusterresourceplacement distribute-test-app
Vous devez obtenir un résultat semblable à l’exemple qui suit :
NAME GEN SCHEDULED SCHEDULEDGEN APPLIED APPLIEDGEN AGE
distribute-test-app 2 True 2 True 2 10s
- Voir les détails du placement.
kubectl describe clusterresourceplacement distribute-test-app
Vous devez obtenir un résultat semblable à l’exemple qui suit :
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
Dans le portail Azure, accédez à votre Fleet Manager.
Dans le menu du service, sous Ressources de flotte, sélectionnez Espaces de noms>+ Créer.
Note
Si vous ne voyez pas les ressources de flotte, votre Fleet Manager n’a pas de cluster hub. Pour plus d’informations sur la façon d’en ajouter un, consultez mettre à niveau le type de cluster hub.
Dans le menu, sélectionnez Espace de noms, entrez un nom, puis sélectionnez Créer.
Après quelques instants, la page s’actualise et l’espace de noms apparaît dans la liste des espaces de noms du cluster hub Fleet Manager. Il est maintenant prêt à héberger toutes les ressources que vous souhaitez distribuer entre les clusters membres.
En haut de la liste d’espaces de noms, sélectionnez + Créer>un YAML et utilisez les exemples suivants.
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: LoadBalancerCopiez et collez les exemples et appliquez-les un par un, comme illustré dans l’image suivante.
L’espace de noms et ses charges de travail sont désormais prêts à être distribués aux clusters membres. Le déploiement et le service ne sont pas planifiés sur le cluster Hub Fleet Manager.
Dans le menu de service, sous Ressources de flotte, sélectionnez Placements des ressources>+ Créer.
Sous l’onglet Informations de base, configurez les options suivantes :
Dans les détails de placement, entrez un nom pour le placement.
Sous Détails de la ressource, laissez Étendue sur Étendue du cluster et saisissez le Group Version Kind (GVK) ainsi que le nom de la ressource à distribuer. Dans cet exemple, utilisez les valeurs suivantes.
group: "" kind: Namespace version: v1 name: test-appDans la sélection du cluster membre, pour le type de placement , choisissez Tous les clusters.
Pour le déploiement, laissez la stratégie de mise à jour propagée sélectionnée.
Sélectionnez Suivant pour passer en revue le manifeste obtenu
ClusterResourcePlacement. Vous pouvez modifier le manifeste si nécessaire, valider à l’aide de l’option Valider (exécution sèche) ou sélectionner Vérifier + créer pour passer à la confirmation finale.Sélectionnez Créer pour démarrer la distribution de l’espace de noms immédiatement.
Note
Le déploiement de la ressource commence immédiatement lorsque vous appliquez le placement des ressources à l’aide de la stratégie sélectionnée
RollingUpdate. Pour savoir comment disposer de contrôles supplémentaires sur le déploiement, consultez la définition d’une stratégie de déploiement pour le placement des ressources.La page s’actualise et la liste Placements de ressources affiche le placement nouvellement créé. Il indique le nombre de clusters sélectionnés et indique si le planificateur de flotte peut respecter la stratégie de placement.
Affichez l’état de déploiement de l’emplacement en sélectionnant le nom de placement dans la liste. Sélectionnez des clusters individuels pour afficher le déploiement des ressources sur ce cluster.
Sur les clusters Kubernetes sélectionnés, le namespace, le Deployment et le Service sont déployés et opérationnels.
Supprimez le placement pour retirer les ressources
Lorsque vous supprimez le placement des ressources sur le cluster Hub Fleet Manager, vous supprimez les ressources distribuées des clusters membres sélectionnés.
kubectl delete clusterresourceplacement distribute-test-app
Dans le menu du service, sous Ressources Fleet, sélectionnez Placements de ressources.
Dans la liste des placements de ressources, sélectionnez l’emplacement, puis sélectionnez Supprimer.
Sur Supprimer, vérifiez que vous avez choisi l’emplacement approprié. Une fois que vous êtes prêt, sélectionnez Confirmer la suppression>Supprimer.
La page s’actualise et le placement n’apparaît plus dans la liste. Les ressources sont supprimées des clusters membres.
Contenu connexe
Pour en savoir plus sur le placement des ressources, consultez les ressources suivantes :
- Déployer des ressources délimitées à l’espace de noms sur plusieurs clusters
- Présentation de la sortie de l’état du placement des ressources.
- Placement intelligent des ressources Kubernetes entre clusters en fonction des propriétés des clusters membres.
- Contrôle de l’éviction et de l’interruption du placement des ressources de cluster.
- Définition d’une stratégie de déploiement pour un placement de ressources de cluster.
- Questions fréquentes (FAQ) sur le placement des ressources de cluster.
- Documentation KubeFleet ClusterResourcePlacement open source.