Créer et configurer des espaces de noms de flotte managée

S’applique à : ✔️ Fleet Manager avec cluster hub

Cet article vous montre comment utiliser Fleet Manager pour créer et configurer un espace de noms de flotte managé qui définit des quotas de ressources, des stratégies réseau et un accès utilisateur délégué pour les espaces de noms sur plusieurs clusters.

Si vous souhaitez afficher ou accéder à des espaces de noms de flotte gérée existants auxquels vous avez accès, consultez l'affichage et l'accès aux espaces de noms de flotte gérée.

Limitations connues

  • Quand un espace de noms Managed Fleet adopte un Espace de noms Kubernetes managés de cluster unique ou inversement, cela peut entraîner un conflit de propriété. Pour éviter cela, utilisez une stratégie de suppression de keep pour les espaces de noms Managed Fleet et Kubernetes.
  • Les clusters doivent être membres gérés par Fleet Manager hébergeant l’espace de noms Managed Fleet.
  • Les clusters doivent avoir une version Kubernetes d’au moins 1.30.0. Les clusters sous cette version ne empêchent pas les utilisateurs sur le cluster de modifier les ressources Kubernetes placées.
  • Les rôles RBAC affectés à une étendue d’espace de noms Managed Fleet accordent un accès équivalent à tous les espaces de noms Kubernetes non managés portant le même nom sur les clusters membres.

Avant de commencer

  • Installez et configurez Terraform.

  • Vous avez besoin de la Azure CLI installée pour vérifier l’espace de noms Managed Fleet créé par Terraform. Pour installer ou mettre à niveau Azure CLI, consultez Installer Azure CLI.

  • Vous avez besoin de l’extension fleet Azure CLI version 1.8.0 ou ultérieure pour vérifier l’espace de noms Managed Fleet. Vous pouvez l’installer et le mettre à jour vers la dernière version à l’aide des commandes az extension update et az extension add.

    az extension add --name fleet
    az extension update --name fleet
    
  • Si vous n’avez pas encore de Fleet Manager avec un cluster hub, la première partie de cet article en crée un pour vous à l’aide d’un exemple Terraform distinct et d’un fichier d’état distinct de l’exemple Managed Fleet Namespace. Si vous en avez déjà un, notez son groupe de ressources et le nom du Fleet Manager, puis passez à Créer l’espace de noms de flotte gérée avec Terraform.

  • L’exemple Terraform requis crée uniquement un cluster Fleet Manager et hub ; il ne crée ni ne joint aucun cluster membre. Vous pouvez créer un espace de noms de flotte gérée et consulter sa configuration sans qu’aucun cluster membre y soit rattaché, mais pour vérifier que l’espace de noms est effectivement déployé (propagé) vers un cluster membre, au moins un cluster AKS doit être rattaché à la flotte. Si vous n’en avez pas, consultez créer et rattacher au moins un cluster Azure Kubernetes Service (AKS) à la flotte en suivant les instructions existantes prises en charge.

  • Vous avez besoin d’Azure CLI version 2.78.0 ou ultérieure installée pour terminer cet article. Pour installer ou mettre à niveau Azure CLI, consultez Installer Azure CLI.

  • Vous avez besoin de l’extension fleet Azure CLI version 1.8.0 ou ultérieure. Vous pouvez l’installer et le mettre à jour vers la dernière version à l’aide des commandes az extension add et az extension update.

    # Install the extension
    az extension add --name fleet
    
    # Update the extension
    az extension update --name fleet
    
  • Vérifiez que la version de l’extension de flotte est au moins 1.8.0 à l’aide de la az extension show commande.

    az extension show --name fleet
    
  • Définissez les variables d’environnement suivantes pour votre ID d’abonnement, votre groupe de ressources, votre flotte et votre membre de flotte :

    export SUBSCRIPTION_ID=<subscription-id>
    export GROUP=<resource-group-name>
    export FLEET=<fleet-name>
    export FLEET_ID=<fleet-id>
    
  • Définissez l’abonnement Azure par défaut à l’aide de la az account set commande.

    az account set --subscription ${SUBSCRIPTION_ID}
    

Créer un espace de noms Managed Fleet

Créez un espace de noms de flotte gérée à l’aide de la commande az fleet namespace create.

    az fleet namespace create \
        --resource-group $GROUP \
        --fleet-name $FLEET \
        --name my-managed-namespace \ 
        --annotations annotation1=value1 annotation2=value2 \
        --labels team=myTeam label2=value2 \
        --cpu-requests 1m \
        --cpu-limits 4m \
        --memory-requests 1Mi \
        --memory-limits 4Mi \
        --ingress-policy allowAll \
        --egress-policy allowAll \
        --delete-policy keep \
        --adoption-policy never

Note

Ces paramètres sont facultatifs : stratégies réseau, quota de calcul, suppression et stratégie d’adoption, étiquettes et annotations.

Lorsque vous utilisez des stratégies de mise en réseau, les utilisateurs ayant une Microsoft.ContainerService/managedClusters/networking.k8s.io/networkpolicies/write action, par exemple Azure Kubernetes Service RBAC Writer, sur le rôle Microsoft Entra ID auquel ils sont assignés peuvent ajouter d'autres stratégies réseau via l’API Kubernetes.

Par exemple, si un administrateur applique une Deny All stratégie pour l’entrée/sortie, et qu’un utilisateur applique une Allow stratégie pour un espace de noms via l’API Kubernetes, la stratégie prend la priorité sur la Allow stratégie et le Deny All trafic est autorisé à circuler pour l’espace de noms. Ce comportement additif est standard pour les stratégies de mise en réseau.

Attribuer un accès utilisateur ou groupe

Vous pouvez désormais accorder l’accès à un utilisateur pour l’espace de noms Managed Fleet dans l'ensemble des clusters membres à l’aide de l’un des rôles RBAC Azure intégrés.

Créez une attribution de rôle à l’aide de la az role assignment create commande.

L’exemple suivant assigne à un utilisateur le rôle Enregistreur RBAC Azure Kubernetes Fleet Manager pour clusters membres à tous les clusters qui reçoivent l’espace de noms Managed Fleet my-managed-namespace :

az role assignment create \
    --role "Azure Kubernetes Fleet Manager RBAC Writer for Member Clusters" \
    --assignee <USER-ENTRA-ID> \
    --scope "$FLEET_ID/managedNamespaces/my-managed-namespace"

Ajouter des clusters membres

Vous pouvez contrôler les clusters membres dans lesquels déployer l’espace de noms managé en spécifiant la liste souhaitée des noms de cluster membres.

Spécifiez la liste complète des clusters membres auxquels vous souhaitez déployer l'espace de noms géré à l'aide de la commande az fleet namespace create avec le paramètre --member-cluster-names. L’espace de noms managé est propagé à tous les clusters de la liste.

Dans cet exemple, l’espace de noms managé est déployé sur contoso-prd-01-fm et contoso-prd-02-fm.

az fleet namespace create \
    --resource-group $GROUP \
    --fleet-name $FLEET \
    --name my-managed-namespace \
    --member-cluster-names contoso-prd-01-fm contoso-prd-02-fm

Supprimer les clusters membres

Vous pouvez supprimer des clusters membres d’un espace de noms Managed Fleet en les excluant de la liste des clusters membres que vous souhaitez avoir sur l’espace de noms.

Spécifiez la liste des clusters membres sur lesquels vous souhaitez que l'espace de noms managé reste en utilisant la commande az fleet namespace create avec le paramètre --member-cluster-names. L’espace de noms managé est supprimé de tous les clusters exclus de la liste.

Dans cet exemple, l’espace de noms managé est supprimé de contoso-prd-02-fm.

az fleet namespace create \
    --resource-group $GROUP \
    --fleet-name $FLEET \
    --name my-managed-namespace \
    --member-cluster-names contoso-prd-01-fm

Configurer un espace de noms Managed Fleet existant

Vous pouvez modifier des stratégies de mise en réseau, des quotas de ressources, des étiquettes et des annotations sur un espace de noms Managed Fleet existant à l’aide de la az fleet namespace create commande avec des valeurs de paramètre mises à jour. La commande effectue une opération upsert, mettant à jour l’espace de noms s’il existe déjà.

Important

Lors de la mise à jour d’un espace de noms managé existant, vous devez spécifier tous les paramètres que vous souhaitez conserver, même si vous ne les modifiez pas. Tous les paramètres que vous omettez sont réinitialisés à leurs valeurs par défaut. Cela inclut les stratégies réseau, les quotas de ressources, les étiquettes, les annotations, la stratégie de suppression, la stratégie d’adoption et les noms de cluster membres.

L’exemple suivant met à jour les stratégies réseau, les quotas de ressources, les étiquettes et les annotations pour un espace de noms managé existant :

az fleet namespace create \
    --resource-group $GROUP \
    --fleet-name $FLEET \
    --name my-managed-namespace \
    --annotations "updated-annotation=new-value" \
    --labels "team=updatedTeam environment=production" \
    --cpu-requests 1000m \
    --cpu-limits 2000m \
    --memory-requests 1000Mi \
    --memory-limits 1000Mi \
    --ingress-policy allowAll \
    --egress-policy allowAll \
    --delete-policy keep \
    --adoption-policy never \
    --member-cluster-names contoso-prd-01-fm contoso-prd-02-fm

Afficher la configuration d’un espace de noms de flotte managée

Affichez les détails d’un espace de noms Managed Fleet spécifique à l’aide de la az fleet namespace show commande.

az fleet namespace show \ 
    --resource-group $GROUP \ 
    --fleet-name $FLEET \ 
    --name my-managed-namespace \ 
    -o table 

Votre sortie doit ressembler à l’exemple suivant :

AdoptionPolicy  DeletePolicy   ETag                                    Location   Name                  ProvisioningState   ResourceGroup
--------------  ------------   -------------------------------------   --------   --------------------  -----------------   -------------
Always          Delete         "aaaaaaaa-0b0b-1c1c-2d2d-333333333333   westus2    my-managed-namespace  Succeeded           test-rg

Supprimer un espace de noms Managed Fleet

Supprimez un espace de noms de flotte managé à l’aide de la az fleet namespace delete commande.

az fleet namespace delete \
    --resource-group $GROUP \
    --fleet-name $FLEET \
    --name my-managed-namespace 

Avertissement

La suppression d’un espace de noms géré par flotte avec une DeletePolicy définie sur delete est une action permanente. Si vous n'êtes pas sûr, vous devriez mettre à jour la politique vers keep afin de conserver l'espace de noms.

Les attributions Azure RBAC sont toujours supprimées afin d’éviter des autorisations orphelines.

Créer un espace de noms Managed Fleet

Vous pouvez créer un espace de noms de flotte géré à partir de Fleet Manager ou via Kubernetes Centre.

À partir du gestionnaire de flotte :

  • Dans le portail Azure, accédez à votre ressource Azure Kubernetes Fleet Manager.
  • Dans le menu de gauche, sous Ressources de flotte, sélectionnez Espaces de noms.
  • Dans le menu, sélectionnez + Créer, puis espace de noms de flotte gérée.

Capture d’écran du menu du portail Azure pour la création d’un espace de noms Managed Fleet dans Azure Kubernetes Fleet Manager.

À partir de Kubernetes Center :

Capture d’écran du menu Kubernetes Center du portail Azure pour la création d’un espace de noms de flotte managée.

  • Sélectionnez l’une des options suivantes pour l’étendue :
    • Nouveau : créez un espace de noms Kubernetes qui n’existe pas sur le cluster Hub Fleet Manager. Entrez un nom pour le nouvel espace de noms.
    • Convertissez en Managed - utilisez un espace de noms Kubernetes existant sur le cluster Hub Fleet Manager. Sélectionnez l’espace de noms dans la liste des espaces de noms sur le cluster du hub Gestionnaire de flotte.

Capture d’écran du portail Azure montrant l’onglet Informations de base avec les détails du projet terminés pour un nouvel espace de noms Managed Fleet.

Attribuer un accès utilisateur ou groupe

Sélectionnez les utilisateurs et groupes Microsoft Entra qui accèdent à l’espace de noms Managed Fleet sur les clusters auxquels il est distribué.

Capture d’écran du portail Azure montrant les détails d’accès terminés pour un nouvel espace de noms Managed Fleet.

Note

Cette étape est facultative. Vous pouvez créer et distribuer un espace de noms Managed Fleet sans affecter d’utilisateurs ou de groupes. Cela vous permet de distribuer l’espace de noms sans accorder immédiatement l’accès.

Ajouter des stratégies réseau et un quota de calcul

Contrôlez le flux du trafic réseau vers et hors de l’espace de noms sur chaque cluster auquel il est distribué, ainsi que la définition des quotas de ressources processeur et mémoire de l’espace de noms.

Capture d’écran du portail Azure montrant les stratégies de réseau et le quota de calcul pour un nouvel espace de noms de flotte gérée.

Note

Ces paramètres sont facultatifs. Vous pouvez créer et distribuer un espace de noms Managed Fleet sans stratégies de mise en réseau ni contrôles de quota appliqués.

Les utilisateurs disposant d'une action Microsoft.ContainerService/managedClusters/networking.k8s.io/networkpolicies/write, telle que Azure Kubernetes Service RBAC Writer, sur le rôle Microsoft Entra ID qui leur est attribué peuvent ajouter davantage de stratégies réseau via l'API Kubernetes.

Par exemple, si un administrateur applique une Deny All stratégie pour l’entrée/sortie, et qu’un utilisateur applique une Allow stratégie pour un espace de noms via l’API Kubernetes, la stratégie prend la priorité sur la Allow stratégie et le Deny All trafic est autorisé à circuler pour l’espace de noms. Ce comportement additif est standard pour les stratégies de mise en réseau.

Sélectionner des clusters membres

Définissez les clusters membres auxquels distribuer l’espace de noms managé en les ajoutant comme suit.

  • Dans le menu, sélectionnez + Ajouter.
  • Dans la boîte de dialogue Sélectionner des clusters membres , recherchez les clusters membres et sélectionnez-les en cochant la case.
  • Enfin, choisissez Sélectionner pour ajouter les clusters membres.

Capture d’écran du portail Azure montrant deux clusters membres sélectionnés pour héberger un nouvel espace de noms Managed Fleet.

Note

Cette étape est facultative. Si vous ne fournissez aucun cluster membre, l’espace de noms Managed Fleet est déployé uniquement sur le cluster Hub Fleet Manager. Vous pouvez ajouter des clusters de membres ultérieurement.

Définir des étiquettes, des annotations et des balises

Définissez des étiquettes et des annotations Kubernetes facultatives et des balises Azure Resource Manager (ARM) qui fournissent des métadonnées qui peuvent être utilisées pour l’automatisation et la gestion des ressources.

Capture d’écran du portail Azure montrant les paramètres des étiquettes et des annotations pour un nouvel espace de noms Managed Fleet.

Note

Cette étape est facultative. Vous pouvez gérer les étiquettes, les annotations et les étiquettes ultérieurement.

Créer le namespace Flotte Gérée

Une fois que vous avez configuré toutes les propriétés pour le nouvel espace de noms Managed Fleet, vous pouvez confirmer les détails avant de créer l’espace de noms en sélectionnant Créer.

Un déploiement Azure Resource Manager est immédiatement démarré, ce qui déclenche une mise en place de charge de travail Fleet Manager pour distribuer le namespace aux clusters sélectionnés.

Une fois le déploiement terminé, vous pouvez trouver l’espace de noms Managed Fleet dans la liste des espaces de noms pour Fleet Manager.

Capture d’écran du portail Azure avec le nouvel espace de noms Managed Fleet listé avec d’autres espaces de noms sur le cluster hub.

Pour examiner le déploiement de l’espace de noms Kubernetes sur l’ensemble des clusters, utilisez Emplacements de ressources et recherchez l’emplacement de ressource portant le même nom que le Managed Fleet Namespace.

Capture d’écran du portail Azure montrant l’état de placement des ressources du nouvel espace de noms Managed Fleet.

Configurer un espace de noms Managed Fleet existant

Vous pouvez localiser un espace de noms de flotte managé à partir de Fleet Manager ou via kubernetes Center.

À partir du gestionnaire de flotte :

  • Dans le portail Azure, accédez à votre ressource Azure Kubernetes Fleet Manager.
  • Dans le menu de gauche, sous Ressources de flotte, sélectionnez Espaces de noms.

À partir de Kubernetes Center :

Modifier la configuration

Modifiez les stratégies de mise en réseau, les quotas de ressources, les étiquettes, les annotations et les balises en sélectionnant modifier en regard de l’élément approprié dans l’écran vue d’ensemble de l’espace de noms Managed Fleet.

La sélection de la modification en regard d’étiquettes, d’annotations ou de balises ouvre une boîte de dialogue dans laquelle vous pouvez modifier l’un de ces trois éléments.

La sélection de la modification en regard de l’une des options de quota de ressources ou de stratégie réseau ouvre une boîte de dialogue dans laquelle vous pouvez modifier l’un de ces éléments.

Capture d’écran du portail Azure montrant l’écran vue d’ensemble d’un espace de noms Managed Fleet avec les options de modification mises en surbrillance dans les zones rouges.

Modifier l’accès utilisateur ou de groupe

Un espace de noms Managed Fleet est une ressource Azure Resource Manager (ARM), ce qui permet de gérer l’accès des utilisateurs et des groupes en sélectionnant Contrôle d’accès (IAM) dans la navigation à gauche de l’écran d’aperçu de l’espace de noms Managed Fleet.

Modifier des clusters membres

Dans la vue d’ensemble de l’espace de noms Managed Fleet, sélectionnez Clusters membres dans le volet de navigation gauche.

Pour supprimer des clusters membres :

  • Sélectionnez les clusters à supprimer en cochant la case à gauche de la ligne.
  • Dans le volet de navigation supérieur, sélectionnez Supprimer.
  • Confirmez l’action et sélectionnez Supprimer.

Pour ajouter des clusters membres :

  • Dans le menu, sélectionnez + Ajouter.
  • Dans la boîte de dialogue Ajouter des clusters membres , recherchez les clusters membres et sélectionnez-les en cochant la case.
  • Enfin, choisissez Ajouter pour ajouter les clusters membres.

Capture d’écran du portail Azure montrant un seul cluster membre sélectionné prêt à être supprimé de l’espace de noms Managed Fleet.

Une fois que les clusters hébergeant l’espace de noms Managed Fleet sont modifiés, la vue d’ensemble est mise à jour pour afficher les clusters qui hébergent activement l’espace de noms.

Supprimer un espace de noms Managed Fleet

Dans la vue d’ensemble de l’espace de noms Managed Fleet, sélectionnez Supprimer dans le volet de navigation supérieur.

Dans la confirmation Suppression de l’espace de noms du gestionnaire de flotte, sélectionnez l’option souhaitée :

  • Conservez l’espace de noms, supprimez les fonctionnalités de gestion : l’espace de noms Managed Fleet est converti en espace de noms Kubernetes standard, restant sur le cluster Hub Fleet Manager et les clusters membres, mais n’est plus géré par Azure Resource Manager (ARM).
  • Supprimez l’espace de noms et toutes les ressources associées : la ressource ARM de l’espace de noms de flotte gérée est supprimée, ainsi que l’espace de noms Kubernetes sur le cluster central du Fleet Manager et les clusters membres.

Avertissement

La suppression de l’espace de noms et de toutes les ressources associées est une action permanente. En cas de doute, il est recommandé de conserver l’espace de noms.

Dans les deux cas, les attributions Azure RBAC sont supprimées afin d’éviter des autorisations orphelines.

Créer un espace de noms Managed Fleet

Les exemples Terraform de cette section sont répartis dans deux répertoires, chacun avec son propre fichier d’état Terraform : un exemple préalable qui crée un Gestionnaire de flotte avec un cluster central, et un exemple de scénario qui crée l’espace de noms Managed Fleet dans un Fleet Manager existant. En conservant le gestionnaire de flotte et l’espace de noms de flotte gérée dans des états séparés, vous pouvez créer un espace de noms de flotte gérée pour n’importe quel gestionnaire de flotte existant disposant d’un cluster hub. Cette configuration fonctionne si vous avez créé ou non Fleet Manager à l’aide de Terraform. Vous pouvez supprimer un espace de noms de flotte gérée sans affecter le Fleet Manager ni tout autre espace de noms de flotte gérée qu'il contient.

Créer un Gestionnaire de flotte avec un cluster hub

Si vous disposez déjà d’un Gestionnaire de flotte avec un cluster hub, passez à Créer l’espace de noms Managed Fleet avec Terraform et utilisez son groupe de ressources et son nom Fleet Manager dans cette section.

  1. Créez un répertoire dans lequel tester l’exemple de code Terraform et en faire le répertoire actif. Utilisez un répertoire distinct de celui que vous utilisez pour l’exemple d’espace de noms Managed Fleet plus loin dans cet article, car chaque exemple conserve son propre état Terraform.

  2. Créez un fichier nommé providers.tf et insérez le code suivant :

    terraform {
      required_version = ">= 1.5.0"
      required_providers {
        azurerm = {
          source  = "hashicorp/azurerm"
          version = "~> 4.0"
        }
        azapi = {
          source  = "Azure/azapi"
          version = "~> 2.0"
        }
        random = {
          source  = "hashicorp/random"
          version = "~> 3.0"
        }
      }
    }
    
    provider "azurerm" {
      features {}
    }
    
    provider "azapi" {}
    
  3. Créez un fichier nommé variables.tf et insérez le code suivant :

    variable "resource_group_location" {
      type        = string
      default     = "eastus"
      description = "Location of the resource group"
    }
    variable "resource_group_name_prefix" {
      type        = string
      default     = "rg"
      description = "Prefix of the resource group name that's combined with a random ID so name is unique in your Azure subscription."
    }
    variable "fleet_name" {
      type        = string
      description = "Name of the fleet resource. If left blank, this value is randomly generated."
      default     = ""
    }
    
  4. Créez un fichier nommé main.tf et insérez le code suivant :

    resource "random_pet" "rg_name" {
      prefix = var.resource_group_name_prefix
    }
    
    resource "azurerm_resource_group" "fleet_rg" {
      name     = random_pet.rg_name.id
      location = var.resource_group_location
    }
    
    resource "random_string" "fleet_name" {
      length  = 54
      lower   = true
      numeric = false
      special = false
      upper   = false
    }
    
    locals {
      fleet_name = coalesce(var.fleet_name != "" ? var.fleet_name : null, random_string.fleet_name.result)
    }
    
    # A fleet with a hub cluster is required for features such as managed namespaces,
    # which the plain azurerm_kubernetes_fleet_manager resource cannot provision because
    # its hub_profile attribute is deprecated and is no longer sent to the API.
    resource "azapi_resource" "fleet" {
      type      = "Microsoft.ContainerService/fleets@2025-03-01"
      name      = local.fleet_name
      location  = azurerm_resource_group.fleet_rg.location
      parent_id = azurerm_resource_group.fleet_rg.id
    
      body = {
        properties = {
          hubProfile = {
            dnsPrefix = local.fleet_name
          }
        }
      }
    
      identity {
        type = "SystemAssigned"
      }
    
      response_export_values = ["name"]
    }
    
  5. Créez un fichier nommé outputs.tf et insérez le code suivant :

    output "resource_group_name" {
      value = azurerm_resource_group.fleet_rg.name
    }
    
    output "fleet_name" {
      value = azapi_resource.fleet.name
    }
    

L’exemple crée un groupe de ressources et un Fleet Manager avec un cluster central en utilisant le type de ressource azapi_resource au lieu de azurerm_kubernetes_fleet_manager, car l’attribut hub_profile du fournisseur azurerm est obsolète et l’API Fleet ne l’accepte plus. Si vous ne définissez pas la fleet_name variable, Terraform génère un nom aléatoire pour vous.

Exécutez terraform init pour initialiser le déploiement Terraform. Cette commande télécharge les fournisseurs Azure requis pour gérer vos ressources Azure.

terraform init

Exécutez terraform fmt pour mettre en forme les fichiers de configuration de manière cohérente.

terraform fmt

Exécutez terraform validate pour vérifier que les fichiers de configuration sont valides de manière syntactique.

terraform validate

Exécutez terraform plan pour créer un plan d’exécution.

terraform plan -out main.tfplan

Exécutez terraform apply pour appliquer le plan d’exécution à votre infrastructure cloud.

terraform apply main.tfplan

Enregistrez les noms du groupe de ressources et de Fleet Manager à partir des données de sortie Terraform. Vous avez besoin de ces valeurs pour l’exemple Managed Fleet Namespace.

resource_group_name=$(terraform output -raw resource_group_name)
fleet_manager_name=$(terraform output -raw fleet_name)

Cet exemple ne crée ni ne joint aucun cluster membre à la flotte. Vérifiez si Fleet Manager dispose déjà de clusters membres joints à l’aide de la az fleet member list commande :

az fleet member list \
    --resource-group $resource_group_name \
    --fleet-name $fleet_manager_name \
    -o table

Si cette commande ne retourne aucun membre, vous pouvez toujours effectuer la section suivante pour créer un espace de noms Managed Fleet et afficher sa configuration, mais vous ne pouvez pas vérifier qu’elle est déployée sur un cluster membre tant que vous n’avez pas créé et joint au moins un cluster AKS à la flotte.

Créer le Managed Fleet Namespace avec Terraform

  1. Créez un répertoire distinct pour tester le code Terraform de cet exemple et en faire le répertoire actif.

  2. Créez un fichier nommé providers.tf et insérez le code suivant :

    terraform {
      required_version = ">= 1.5.0"
      required_providers {
        azurerm = {
          source  = "hashicorp/azurerm"
          version = "~> 4.0"
        }
        azapi = {
          source  = "Azure/azapi"
          version = "~> 2.0"
        }
      }
    }
    
    provider "azurerm" {
      features {}
    }
    
    provider "azapi" {}
    
  3. Créez un fichier nommé variables.tf et insérez le code suivant :

    variable "resource_group_name" {
      type        = string
      description = "Name of the resource group that contains the Fleet Manager."
    }
    
    variable "fleet_name" {
      type        = string
      description = "Name of the existing Azure Kubernetes Fleet Manager."
    }
    
    variable "managed_namespace_name" {
      type        = string
      description = "Name of the Managed Fleet Namespace."
      default     = "platform-ns"
    
      validation {
        condition     = can(regex("^[a-z0-9]([-a-z0-9]*[a-z0-9])?$", var.managed_namespace_name)) && length(var.managed_namespace_name) <= 63
        error_message = "The managed namespace name must be 1-63 characters, use lowercase letters, numbers, or hyphens, and start and end with a lowercase letter or number."
      }
    }
    
    variable "tags" {
      type        = map(string)
      description = "Tags to apply to the Managed Fleet Namespace."
      default = {
        environment = "demo"
        managed_by  = "terraform"
      }
    }
    
  4. Créez un fichier nommé main.tf et insérez le code suivant :

    data "azurerm_client_config" "current" {}
    
    data "azurerm_resource_group" "fleet_rg" {
      name = var.resource_group_name
    }
    
    locals {
      fleet_id = "/subscriptions/${data.azurerm_client_config.current.subscription_id}/resourceGroups/${var.resource_group_name}/providers/Microsoft.ContainerService/fleets/${var.fleet_name}"
    }
    
    resource "azapi_resource" "managed_fleet_namespace" {
      type      = "Microsoft.ContainerService/fleets/managedNamespaces@2025-08-01-preview"
      name      = var.managed_namespace_name
      parent_id = local.fleet_id
      location  = data.azurerm_resource_group.fleet_rg.location
      tags      = var.tags
    
      body = {
        properties = {
          adoptionPolicy = "Never"
          deletePolicy   = "Keep"
          managedNamespaceProperties = {
            labels = {
              team        = "platform"
              environment = "demo"
            }
            annotations = {
              owner                          = "aks-fleet-demo"
              "app.kubernetes.io/managed-by" = "terraform"
            }
            defaultNetworkPolicy = {
              ingress = "AllowAll"
              egress  = "AllowAll"
            }
            defaultResourceQuota = {
              cpuRequest    = "100m"
              cpuLimit      = "500m"
              memoryRequest = "128Mi"
              memoryLimit   = "512Mi"
            }
          }
          propagationPolicy = {
            type = "Placement"
            placementProfile = {
              defaultClusterResourcePlacement = {
                policy = {
                  placementType = "PickAll"
                }
              }
            }
          }
        }
      }
    }
    
    
    
  5. Créez un fichier nommé outputs.tf et insérez le code suivant :

    output "managed_fleet_namespace_id" {
      description = "Resource ID of the Managed Fleet Namespace."
      value       = azapi_resource.managed_fleet_namespace.id
    }
    
  6. Créez un fichier nommé terraform.tfvars.example et insérez le code suivant :

    resource_group_name    = "<resource-group-name>"
    fleet_name             = "<fleet-manager-name>"
    managed_namespace_name = "platform-ns"
    
  7. Copiez terraform.tfvars.example vers terraform.tfvars dans le même répertoire. Définissez les valeurs de fleet_name et resource_group_name sur celles que vous avez enregistrées dans la section précédente (ou sur celles de votre Fleet Manager existant). Définissez managed_namespace_name le nom souhaité pour l’espace de noms.

    cp terraform.tfvars.example terraform.tfvars
    

Cet exemple ne crée pas son propre Fleet Manager. Au lieu de cela, il utilise les sources de données azurerm_client_config et azurerm_resource_group pour rechercher le groupe de ressources et l’abonnement actuel. Ensuite, il génère l’ID de ressource de l’instance Fleet Manager existante nommée dans la fleet_name variable à utiliser comme parent de l’espace de noms Managed Fleet. Il s’agit de la façon dont l’exemple utilise les informations Fleet Manager à partir de l’état requis ou d’un gestionnaire de flotte préexistant avec un cluster hub, sans partager l’état Terraform entre les deux exemples.

L'exemple crée l'espace de noms à l'aide du type de ressource azapi_resource dans la version préliminaire 2025-08-01-preview de l'API Microsoft.ContainerService/fleets/managedNamespaces, car ce type de ressource n'a pas encore de ressource azurerm native. Les propriétés suivantes sont codées en main.tf dur et ne sont pas exposées en tant que variables. Pour les modifier, modifiez le body.properties bloc directement :

  • adoptionPolicy est défini sur deletePolicy et Never est défini sur Keep, ce qui correspond aux valeurs par défaut de l’interface Azure CLI indiquées plus haut dans cet article.
  • managedNamespaceProperties.labels définit les étiquettes team=platform Kubernetes et environment=demo.
  • managedNamespaceProperties.annotations définit les annotations owner=aks-fleet-demo Kubernetes et app.kubernetes.io/managed-by=terraform.
  • managedNamespaceProperties.defaultNetworkPolicy définit à la fois ingress et egress à AllowAll.
  • managedNamespaceProperties.defaultResourceQuota définit cpuRequest=100m, cpuLimit=500m, memoryRequest=128Mi, et memoryLimit=512Mi.
  • propagationPolicy.placementProfile.defaultClusterResourcePlacement.policy.placementType est défini sur PickAll, ainsi l’espace de noms est propagé à chaque cluster membre ayant actuellement rejoint Fleet. Contrairement au paramètre de --member-cluster-names Azure CLI, cet exemple n'expose pas un moyen de cibler des clusters membres nommés spécifiques. Pour limiter le placement à un sous-ensemble de clusters, utilisez les onglets Azure CLI ou Portail Azure sur cette page, ou étendez le bloc placementProfile dans main.tf en suivant la référence du modèle ARM Microsoft.ContainerService fleets.

La seule variable qui correspond aux étiquettes Azure Resource Manager (ARM) de la ressource d’espace de noms Managed Fleet, plutôt qu’aux étiquettes Kubernetes sur l’espace de noms lui-même, est tags. Il est facultatif et prend par défaut la valeur { environment = "demo", managed_by = "terraform" } dans variables.tf si vous ne le spécifiez pas. Le/la terraform.tfvars.example de l’exemple n’inclut pas tags, donc ajoutez-le uniquement à votre fichier terraform.tfvars si vous souhaitez remplacer la valeur par défaut.

Exécutez terraform init pour initialiser le déploiement Terraform.

terraform init

Exécutez terraform fmt pour mettre en forme les fichiers de configuration de manière cohérente.

terraform fmt

Exécutez terraform validate pour vérifier que les fichiers de configuration sont valides de manière syntactique.

terraform validate

Exécutez terraform plan pour créer un plan d’exécution.

terraform plan -out main.tfplan

Exécutez terraform apply pour appliquer le plan d’exécution à votre infrastructure cloud.

terraform apply main.tfplan

Attribuer un accès utilisateur ou groupe

Terraform ne gère pas les attributions de rôles Azure RBAC dans cet exemple. Accordez à un utilisateur l’accès à l’espace de noms Managed Fleet sur ses clusters membres à l’aide de la az role assignment create commande. Utilisez la sortie de Terraform comme portée :

managed_namespace_id=$(terraform output -raw managed_fleet_namespace_id)
az role assignment create \
    --role "Azure Kubernetes Fleet Manager RBAC Writer for Member Clusters" \
    --assignee <USER-ENTRA-ID> \
    --scope "$managed_namespace_id"

Ajouter ou supprimer des clusters membres

Étant donné que le PickAll de l’exemple utilise propagationPolicy, l’espace de noms se propage toujours à tous les clusters membres actuels de la flotte. L’ajout d’un cluster membre à la flotte ajoute automatiquement l’espace de noms à celui-ci et la suppression d’un cluster membre de la flotte supprime automatiquement l’espace de noms de celui-ci. L'exemple ne permet pas de cibler une liste précise de noms des clusters membres comme le permet le paramètre --member-cluster-names d’Azure CLI. Si vous devez sélectionner des clusters membres spécifiques, utilisez les Azure CLI ou Azure portail pivots sur cette page à la place.

Configurer un espace de noms Managed Fleet existant

Terraform effectue un upsert pour le type azapi_resource, vous pouvez donc mettre à jour un Managed Fleet Namespace existant en modifiant l’exemple et en le réappliquant.

  • Pour modifier les balises ARM, ajoutez ou mettez à jour la tags variable dans terraform.tfvars (elle est facultative et n’est pas incluse dans terraform.tfvars.example).
  • Pour modifier les étiquettes, annotations, stratégies réseau ou quotas de ressources Kubernetes, modifiez les valeurs correspondantes dans le managedNamespaceProperties bloc de main.tf. L’exemple n’expose pas ces paramètres en tant que variables.

Après avoir apporté vos modifications, réexécutez terraform plan -out main.tfplan et terraform apply main.tfplan dans le répertoire Managed Fleet Namespace.

Afficher la configuration d’un espace de noms de flotte managée

La sortie Terraform retourne uniquement l’ID de ressource de l’espace de noms Managed Fleet. Extrayez le nom du groupe de ressources, le nom du gestionnaire de flotte et les noms des espaces de noms à partir de l’ID. Affichez ensuite les détails de l’espace de noms à l’aide de la az fleet namespace show commande.

managed_namespace_id=$(terraform output -raw managed_fleet_namespace_id)
resource_group_name=$(echo $managed_namespace_id | cut -d'/' -f5)
fleet_manager_name=$(echo $managed_namespace_id | cut -d'/' -f9)
managed_namespace_name=$(echo $managed_namespace_id | cut -d'/' -f11)
az fleet namespace show \
    --resource-group $resource_group_name \
    --fleet-name $fleet_manager_name \
    --name $managed_namespace_name \
    -o table

Pour vérifier le déploiement de l’espace de noms sur l’ensemble des clusters membres, utilisez Resource placements et recherchez le placement de ressources portant le même nom que le Managed Fleet Namespace. Consulter la configuration de l’espace de noms à l’aide de az fleet namespace show n’exige pas qu’un cluster membre soit rattaché à Fleet, mais consulter l’état du déploiement ou du placement nécessite qu’au moins un cluster membre ait rejoint Fleet. Si vous n'en avez pas encore, consultez créer et joindre au moins un cluster Azure Kubernetes Service (AKS) à la flotte.

Supprimer un espace de noms Managed Fleet

Supprimez l’espace de noms de flotte gérée avant de supprimer le gestionnaire de flotte auquel il appartient.

Dans le répertoire contenant l’exemple d’espace de noms du gestionnaire de flotte, exécutez terraform plan avec l’indicateur -destroy pour créer un plan d’exécution de destruction.

terraform plan -destroy -out main.destroy.tfplan

Exécutez terraform apply pour appliquer le plan de destruction.

terraform apply main.destroy.tfplan

Avertissement

La suppression d’un espace de noms de flotte gérée configuré avec un Delete de deletePolicy est une action permanente. Cet exemple définit deletePolicy sur Keep. Ainsi, après la suppression de la ressource ARM, l’espace de noms Kubernetes reste sur le cluster hub de Fleet Manager et les clusters membres, mais n’est plus géré par Azure Resource Manager. Si vous souhaitez plutôt que l’espace de noms soit supprimé partout, remplacez deletePolicy par Delete dans main.tf et appliquez de nouveau la modification avant de détruire la ressource.

Les affectations Azure RBAC ayant pour portée l’espace de noms de flotte managée sont toujours supprimées afin d’éviter les autorisations orphelines.

Si vous avez déployé Fleet Manager avec un exemple de configuration requise pour un cluster hub uniquement pour cet article, et que vous n’en avez pas besoin pour autre chose, basculez vers le répertoire de cet exemple et détruisez-le également.

terraform plan -destroy -out main.destroy.tfplan
terraform apply main.destroy.tfplan

Avertissement

Cette commande supprime Le Gestionnaire de flotte, son cluster hub et le groupe de ressources créé par l’exemple de configuration requise, et pas seulement le Fleet Manager. Vérifiez que le groupe de ressources ne contient pas d’autres ressources que vous souhaitez conserver, et qu’aucun autre espace de noms de flotte managé ou clusters membres ne dépend toujours de Fleet Manager, avant d’exécuter cette commande.

Étapes suivantes