Erstellen und Konfigurieren von Namespaces für verwaltete Flotten

Gilt für: ✔️ Flottenmanager mit Hubcluster

In diesem Artikel wird erläutert, wie Sie mithilfe von Fleet Manager einen Namespace für verwaltete Flotten erstellen und konfigurieren, der Ressourcenkontingente, Netzwerkrichtlinien und delegierten Benutzerzugriff für die Namespaces auf mehreren Clustern definiert.

Wenn Sie vorhandene verwaltete Flottennamespaces anzeigen oder darauf zugreifen möchten, auf die Sie Zugriff haben, siehe Verwaltete Flottennamespaces ansehen und darauf zugreifen.

Bekannte Einschränkungen

  • Wenn ein Managed Fleet Namespace einen einzelnen Managed Kubernetes Namespace übernimmt oder umgekehrt, kann es zu widersprüchlichem Besitz führen. Um dies zu vermeiden, verwenden Sie eine Löschrichtlinie keep für die Namespaces "Managed Fleet" und "Kubernetes".
  • Cluster müssen Mitglieder sein, die vom Flottenmanager verwaltet werden, der den Managed Fleet Namespace hosten wird.
  • Cluster müssen über eine Kubernetes-Version von mindestens 1.30.0 verfügen. Cluster unterhalb dieser Version blockieren keine Benutzer auf dem Cluster daran, die platzierten Kubernetes-Ressourcen zu ändern.
  • RBAC-Rollen, die einem verwalteten Flottennamensraum zugewiesen sind, gewähren gleichwertigen Zugriff auf alle nicht verwalteten Kubernetes-Namespaces mit demselben Namen in Mitgliedsclustern.

Bevor Sie anfangen

  • Installieren und konfigurieren Sie Terraform.

  • Sie müssen die Azure CLI installiert haben, um den Namespace der verwalteten Flotte zu überprüfen, den Terraform erstellt. Informationen zum Ausführen einer Installation oder eines Upgrades finden Sie unter Installieren der Azure CLI.

  • Sie benötigen die fleet Azure CLI-Erweiterung in Version 1.8.0 oder höher, um den Namespace der Managed Fleet zu überprüfen. Sie können es installieren und auf die neueste Version aktualisieren, indem Sie die az extension add Befehle verwenden az extension update .

    az extension add --name fleet
    az extension update --name fleet
    
  • Wenn Sie noch nicht über einen Flottenmanager mit einem Hubcluster verfügen, erstellt der erste Teil dieses Artikels eins für Sie, indem Sie ein separates Terraform-Beispiel und einen separaten Zustand aus dem Beispiel "Managed Fleet Namespace" verwenden. Wenn Sie bereits einen haben, notieren Sie sich den Namen der Ressourcengruppe und den Namen des Flottenmanagers, und springen Sie zu Namespace der verwalteten Flotte mit Terraform erstellen.

  • Das erforderliche Terraform-Beispiel erstellt nur einen Flottenmanager und Hubcluster; sie erstellt oder verknüpft keine Mitgliedscluster. Sie können einen Managed-Fleet-Namespace erstellen und seine Konfiguration anzeigen, ohne dass Mitgliedscluster beigetreten sind. Um jedoch zu überprüfen, ob der Namespace tatsächlich auf ein Mitgliedscluster ausgerollt (propagiert) wird, ist mindestens ein AKS-Cluster erforderlich, das der Fleet beigetreten ist. Wenn Sie noch über keinen verfügen, lesen Sie unter Erstellen und Einbinden von mindestens einem Azure Kubernetes Service (AKS)-Cluster in die Flotte nach, und verwenden Sie dabei die vorhandene unterstützte Anleitung.

  • Sie benötigen Azure CLI, Version 2.78.0 oder höher, um diesen Artikel abzuschließen. Informationen zum Ausführen einer Installation oder eines Upgrades finden Sie unter Installieren der Azure CLI.

  • Sie benötigen die fleet Azure CLI-Erweiterung Version 1.8.0 oder höher. Sie können es installieren und mit den az extension addaz extension update Befehlen auf die neueste Version aktualisieren.

    # Install the extension
    az extension add --name fleet
    
    # Update the extension
    az extension update --name fleet
    
  • Vergewissern Sie sich, dass die Flottenerweiterungsversion mindestens 1.8.0 mit dem az extension show Befehl ist.

    az extension show --name fleet
    
  • Legen Sie die folgenden Umgebungsvariablen für Ihre Abonnement-ID, Ressourcengruppe, Flotte und Flottenmitglied fest:

    export SUBSCRIPTION_ID=<subscription-id>
    export GROUP=<resource-group-name>
    export FLEET=<fleet-name>
    export FLEET_ID=<fleet-id>
    
  • Legen Sie das Standardmäßige Azure-Abonnement mithilfe des az account set Befehls fest.

    az account set --subscription ${SUBSCRIPTION_ID}
    

Erstellen eines neuen Verwalteten Flottennamespaces

Erstellen Sie mithilfe des Befehls az fleet namespace create einen neuen verwalteten Flotten-Namespace.

    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

Hinweis

Diese Einstellungen sind optional: Netzwerkrichtlinien, Berechnen von Kontingenten, Löschungs- und Einführungsrichtlinien, Bezeichnungen und Anmerkungen.

Bei der Verwendung von Netzwerkrichtlinien können Benutzer mit einer Microsoft.ContainerService/managedClusters/networking.k8s.io/networkpolicies/write-Aktion, wie zum Beispiel Azure Kubernetes Service RBAC Writer in der ihnen zugewiesenen Microsoft Entra-ID-Rolle, weitere Netzwerkrichtlinien über die Kubernetes-API hinzufügen.

Wenn ein Administrator z. B. eine Deny All Richtlinie für Eingang/Ausgang anwendet und ein Benutzer eine Allow Richtlinie für einen Namespace über die Kubernetes-API anwendet, hat die Allow Richtlinie Vorrang vor der Deny All Richtlinie, und der Netzwerkverkehr für den Namespace wird zugelassen. Dieses additive Verhalten ist Standard für Netzwerkrichtlinien.

Zuweisen des Benutzer- oder Gruppenzugriffs

Mit einer der integrierten Azure RBAC-Rollen können Sie jetzt Zugriff auf einen Benutzer für den Namespace der verwalteten Flotte über Mitgliedscluster gewähren.

Erstellen Sie eine Rollenzuweisung mithilfe des az role assignment create Befehls.

Im folgenden Beispiel wird einem Benutzer die Rolle Azure Kubernetes Fleet Manager RBAC Writer für Mitgliedercluster auf allen Clustern zugewiesen, die den my-managed-namespace Namespace der verwalteten Flotte empfangen:

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"

Hinzufügen von Mitgliederclustern

Sie können steuern, für welche Membercluster der verwaltete Namespace bereitgestellt werden soll, indem Sie die gewünschte Liste der Memberclusternamen angeben.

Geben Sie die vollständige Liste der Membercluster an, für die Sie den verwalteten Namespace mithilfe des az fleet namespace create Befehls mit dem --member-cluster-names Parameter bereitstellen möchten. Der verwaltete Namespace wird an alle Cluster in der Liste verteilt.

In diesem Beispiel wird der verwaltete Namespace in contoso-prd-01-fm und contoso-prd-02-fm bereitgestellt.

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

Entfernen von Mitgliedsclustern

Sie können Mitgliedscluster aus einem Namespace der verwalteten Flotte entfernen, indem Sie sie aus der Liste der Mitgliedscluster ausschließen, die im Namespace enthalten sein sollen.

Geben Sie die Liste der Membercluster an, für die der verwaltete Namespace weiterhin verwendet werden soll, indem Sie den az fleet namespace create Befehl mit dem --member-cluster-names Parameter verwenden. Der verwaltete Namespace wird aus allen Clustern entfernt, die aus der Liste ausgeschlossen sind.

In diesem Beispiel wird der verwaltete Namespace aus contoso-prd-02-fmentfernt.

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

Konfigurieren eines vorhandenen Verwalteten Flottennamespaces

Sie können Netzwerkrichtlinien, Ressourcenkontingente, Bezeichnungen und Anmerkungen für einen vorhandenen Verwalteten Flottennamespace mithilfe des az fleet namespace create Befehls mit aktualisierten Parameterwerten ändern. Der Befehl führt einen Upsert-Vorgang durch und aktualisiert den Namespace, sofern er bereits vorhanden ist.

Von Bedeutung

Beim Aktualisieren eines vorhandenen verwalteten Namespaces müssen Sie alle Parameter angeben, die Sie beibehalten möchten, auch wenn Sie sie nicht ändern. Alle parameter, die Sie weglassen, werden auf ihre Standardwerte zurückgesetzt. Dazu gehören Netzwerkrichtlinien, Ressourcenkontingente, Bezeichnungen, Anmerkungen, Löschrichtlinie, Übernahmerichtlinie und Mitglieder-Cluster-Namen.

Im folgenden Beispiel werden die Netzwerkrichtlinien, Ressourcenkontingente, Bezeichnungen und Anmerkungen für einen vorhandenen verwalteten Namespace aktualisiert:

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

Anzeigen der Konfiguration eines Verwalteten Flottennamespaces

Zeigen Sie mithilfe des az fleet namespace show Befehls die Details eines bestimmten Managed Fleet-Namespaces an.

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

Ihre Ausgabe sollte in etwa wie die folgende Beispielausgabe aussehen:

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

Löschen eines Verwalteten Flottennamespaces

Löschen Sie einen verwalteten Flotten-Namespace mithilfe des az fleet namespace delete Befehls.

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

Warnung

Das Löschen eines von der Flotte verwalteten Namespace, wobei DeletePolicy auf delete festgelegt ist, kann nicht rückgängig gemacht werden. Wenn Sie nicht sicher sind, sollten Sie die Richtlinie auf keep aktualisieren, um den Namespace beizubehalten.

Azure RBAC-Zuweisungen werden immer gelöscht, um hängende Berechtigungen zu vermeiden.

Erstellen eines neuen Verwalteten Flottennamespaces

Sie können einen neuen Managed Fleet Namespace aus dem Fleet Manager oder über Kubernetes Center erstellen.

Beginnend im Flottenmanager:

  • Navigieren Sie im Azure-Portal zu Ihrer Azure Kubernetes Fleet Manager-Ressource.
  • Wählen Sie im linken Menü unter "Flottenressourcen" die Option "Namespaces" aus.
  • Wählen Sie im Menü +Erstellen und dann Verwalteten Flottennamespace aus.

Screenshot des Azure-Portalmenüs zum Erstellen eines Verwalteten Flottennamespaces in Azure Kubernetes Fleet Manager.

Beginn im Kubernetes-Zentrum:

  • Öffnen Sie Kubernetes Center – Verwaltete Namespaces im Azure-Portal.
  • Wählen Sie im Menü +Erstellen und dann Verwalteten Flottennamespace aus.
  • Wählen Sie eine Abonnementinstanz und eine Flotten-Manager-Instanz aus.

Screenshot des Azure-Portals Kubernetes Center-Menü zum Erstellen eines verwalteten Flottennamespaces.

  • Wählen Sie eine der folgenden Optionen für "Bereich" aus:
    • Neu – Erstellen Sie einen neuen Kubernetes-Namespace, der nicht im Fleet Manager-Hubcluster vorhanden ist. Geben Sie einen Namen für den neuen Namespace ein.
    • In verwaltet konvertieren – Verwenden Sie einen vorhandenen Kubernetes-Namespace im Fleet Manager-Hubcluster. Wählen Sie den Namespace aus der Liste der Namespaces im Fleet Manager-Hubcluster aus.

Screenshot des Azure-Portals mit der Registerkarte „Grundlagen“ und den Projektdetails, die für einen neuen verwalteten Fleet Namespace abgeschlossen wurden.

Zuweisen des Benutzer- oder Gruppenzugriffs

Wählen Sie die Microsoft Entra-Benutzer und -Gruppen aus, die auf den Flottenverwaltungs-Namespace auf den Clustern zugreifen, auf die er verteilt wurde.

Screenshot des Azure-Portals mit vollständigen Zugriffsdetails für einen neuen Managed Fleet-Namespace.

Hinweis

Dieser Schritt ist optional. Sie können einen Namespace für verwaltete Flotten erstellen und verteilen, ohne Benutzer oder Gruppen zuzuweisen. Auf diese Weise können Sie den Namespace verteilen, ohne sofort Zugriff zu gewähren.

Hinzufügen von Netzwerkrichtlinien und Rechenkontingent

Steuern Sie den Netzwerkdatenverkehr in und aus dem Namespace in jedem Cluster, an den er verteilt wird, sowie die CPU- und Speicherressourcenkontingente für den Namespace.

Screenshot des Azure-Portals mit abgeschlossenen Netzwerkrichtlinien und Berechnungskontingent für einen neuen Namespace für verwaltete Flotten.

Hinweis

Diese Einstellungen sind optional. Sie können einen Namespace für verwaltete Flotten erstellen und verteilen, ohne Netzwerkrichtlinien oder Kontingentkontrollen anzuwenden.

Benutzer mit einer Microsoft.ContainerService/managedClusters/networking.k8s.io/networkpolicies/write-Aktion, wie Azure Kubernetes Service RBAC Writer, in der ihnen zugewiesenen Microsoft Entra-ID-Rolle können über die Kubernetes-API weitere Netzwerkrichtlinien hinzufügen.

Wenn ein Administrator z. B. eine Deny All Richtlinie für Eingang/Ausgang anwendet und ein Benutzer eine Allow Richtlinie für einen Namespace über die Kubernetes-API anwendet, hat die Allow Richtlinie Vorrang vor der Deny All Richtlinie, und der Netzwerkverkehr für den Namespace wird zugelassen. Dieses additive Verhalten ist Standard für Netzwerkrichtlinien.

Mitgliedercluster auswählen

Definieren Sie, an welche Membercluster der verwaltete Namespace verteilt werden soll, indem Sie diese wie folgt hinzufügen.

  • Wählen Sie im Menü +Hinzufügen aus.
  • Suchen Sie im Dialogfeld "Mitgliedercluster auswählen " nach den Mitgliedsclustern, und wählen Sie sie aus, indem Sie das Kontrollkästchen aktivieren.
  • Wählen Sie schließlich "Auswählen" aus, um die Mitgliedscluster hinzuzufügen.

Screenshot des Azure-Portals mit zwei ausgewählten Mitgliedsclustern, um einen neuen verwalteten Flotten-Namespace zu hosten.

Hinweis

Dieser Schritt ist optional. Wenn Sie keine Mitgliedscluster bereitstellen, wird der Managed Fleet Namespace nur im Fleet Manager Hub Cluster bereitgestellt. Sie können Mitgliedercluster zu einem späteren Zeitpunkt hinzufügen.

Festlegen von Bezeichnungen, Anmerkungen und Tags

Definieren Sie optionale Kubernetes-Bezeichnungen und Anmerkungen sowie Arm-Tags (Azure Resource Manager), die Metadaten bereitstellen, die für die Automatisierung und Ressourcenverwaltung verwendet werden können.

Screenshot des Azure-Portals mit Einstellungen für Bezeichnungen und Anmerkungen für einen neuen verwalteten Flottennamespace.

Hinweis

Dieser Schritt ist optional. Sie können Bezeichnungen, Anmerkungen und Tags zu einem späteren Zeitpunkt verwalten.

Erstellen des verwalteten Flotten-Namespaces

Nachdem Sie alle Eigenschaften für den neuen Verwalteten Flottennamespace konfiguriert haben, können Sie die Details bestätigen, bevor Sie den Namespace erstellen, indem Sie "Erstellen" auswählen.

Es wird sofort eine Implementierung des Azure Resource Manager gestartet und dadurch die Platzierung der Fleet Manager-Workload initiiert, was das Verteilen des Namespace auf die ausgewählten Cluster ermöglicht.

Sobald die Bereitstellung abgeschlossen ist, finden Sie den Managed Fleet Namespace in der Liste der Namespaces für den Fleet Manager.

Screenshot des Azure-Portals mit dem neuen verwalteten Flottennamespace, der mit anderen Namespaces im Hubcluster aufgeführt ist.

Um den Rollout des Kubernetes-Namespace über Cluster hinweg zu überprüfen, verwenden Sie Ressourcenplatzierungen, und suchen Sie nach der Ressourcenplatzierung, die mit dem Verwalteten Flottennamespace identisch ist.

Screenshot des Azure-Portals mit dem Ressourcenplatzierungsstatus des neuen Verwalteten Flottennamespaces.

Konfigurieren eines vorhandenen Verwalteten Flottennamespaces

Sie können einen verwalteten Fleet-Namespace im Fleet Manager oder über das Kubernetes Center auffinden.

Beginnend im Flottenmanager:

  • Navigieren Sie im Azure-Portal zu Ihrer Azure Kubernetes Fleet Manager-Ressource.
  • Wählen Sie im linken Menü unter "Flottenressourcen" die Option "Namespaces" aus.

Beginn im Kubernetes-Zentrum:

Konfiguration ändern

Ändern Sie Netzwerkrichtlinien, Ressourcenkontingente, Bezeichnungen, Anmerkungen und Tags, indem Sie neben dem entsprechenden Element im Übersichtsbildschirm "Managed Fleet Namespace" die Option "Bearbeiten" auswählen.

Wenn Sie " Bearbeiten " neben Bezeichnungen, Anmerkungen oder Tags auswählen, wird ein Dialogfeld geöffnet, in dem Sie eines dieser drei Elemente ändern können.

Wenn Sie "Bearbeiten " neben einer der Netzwerkrichtlinien- oder Ressourcenkontingentoptionen auswählen, wird ein Dialogfeld geöffnet, in dem Sie diese Elemente ändern können.

Screenshot des Azure-Portals mit dem Übersichtsbildschirm für einen Namespace der verwalteten Flotte mit in roten Feldern hervorgehobenen Bearbeitungsoptionen.

Ändern des Benutzer- oder Gruppenzugriffs

Ein Verwalteter Flottennamespace ist eine Azure Resource Manager (ARM)-Ressource, sodass die Verwaltung des Benutzer- und Gruppenzugriffs durch Auswählen der Zugriffssteuerung (IAM) im linken Navigationsbereich im Übersichtsbildschirm "Flottennamespace verwalten" erreicht werden kann.

Bearbeiten von Mitgliederclustern

Wählen Sie im Überblick zum verwalteten Fleet Namespace im linken Navigationsbereich Mitgliedscluster aus.

So entfernen Sie Mitglieder-Cluster:

  • Wählen Sie die zu entfernenden Cluster aus, indem Sie das Kontrollkästchen links neben der Zeile aktivieren.
  • Wählen Sie in der oberen Navigationsleiste "Entfernen" aus.
  • Bestätigen Sie die Aktion, und wählen Sie "Entfernen" aus.

Um Membercluster hinzuzufügen:

  • Wählen Sie im Menü +Hinzufügen aus.
  • Suchen Sie im Dialogfeld " Mitgliedercluster hinzufügen " nach den Mitgliedsclustern, und wählen Sie sie aus, indem Sie das Kontrollkästchen aktivieren.
  • Wählen Sie schließlich "Hinzufügen" aus, um die Mitgliedscluster hinzuzufügen.

Screenshot des Azure-Portals, in dem ein einzelner Cluster angezeigt wird, der zum Entfernen aus dem Namespace

Sobald die Cluster, die den Namespace der verwalteten Flotte hosten, geändert wurden, wird die Übersicht aktualisiert, um die Cluster anzuzeigen, die den Namespace aktiv hosten.

Löschen eines Verwalteten Flottennamespaces

Wählen Sie im Überblick über den verwalteten Flotten-Namespace die Option Löschen in der oberen Navigationsleiste aus.

In der Bestätigung Verwalteten Flotten-Namespace löschen wählen Sie die gewünschte Option aus.

  • Namespace beibehalten, Verwaltungsfunktionen entfernen: Der Namespace der verwalteten Flotte wird in einen Kubernetes-Standardnamespace konvertiert, der auf dem Fleet Manager-Hubcluster und Mitgliedscluster verbleibt, aber nicht mehr von Azure Resource Manager (ARM) verwaltet wird.
  • Löschen Sie Namespace und alle zugehörigen Ressourcen: Die ARM-Ressource des verwalteten Flottennamespaces wird zusammen mit dem Kubernetes-Namespace sowohl auf dem Fleet Manager-Hub-Cluster als auch auf Mitglieds-Clustern gelöscht.

Warnung

Das Löschen des Namespace und alle zugehörigen Ressourcen sind eine dauerhafte Aktion. Wenn Sie sich nicht sicher sind, sollten Sie sich entscheiden, den Namespace beizubehalten.

In beiden Fällen werden Azure RBAC-Zuweisungen gelöscht, um überhängende Berechtigungen zu vermeiden.

Erstellen eines neuen Verwalteten Flottennamespaces

Die Terraform-Beispiele in diesem Abschnitt sind auf zwei Verzeichnisse aufgeteilt, die jeweils über einen eigenen Terraform-Status verfügen: ein Voraussetzungsbeispiel, das einen Fleet Manager mit einem Hub-Cluster erstellt, und ein Szenariobeispiel, das den Managed Fleet Namespace auf einem vorhandenen Fleet Manager erstellt. Indem Sie den Flottenmanager und den Namespace der verwalteten Flotte in separaten Zuständen beibehalten, können Sie einen Namespace der verwalteten Flotte für jeden vorhandenen Flottenmanager mit einem Hubcluster erstellen. Dieses Setup funktioniert unabhängig davon, ob Sie den Flottenmanager mithilfe von Terraform erstellt haben. Sie können den Namespace einer verwalteten Flotte löschen, ohne den Fleet Manager oder andere Namespaces verwalteter Flotten zu beeinträchtigen.

Erstellen eines Flottenmanagers mit einem Hubcluster

Wenn Sie bereits einen Fleet Manager mit einem Hubcluster haben, springen Sie zu Erstellen des Managed Fleet-Namespaces mit Terraform und verwenden Sie in diesem Abschnitt die zugehörige Ressourcengruppe und den Fleet Manager-Namen.

Hinweis

Der Beispielcode für diesen Abschnitt befindet sich im Azure Terraform GitHub Repository. Zeigen Sie die Protokolldatei an, die die Testergebnisse aus den aktuellen und früheren Versionen von Terraform enthält.

Sehen Sie weitere Artikel und Beispielcode, die zeigen, wie Terraform zur Verwaltung von Azure-Ressourcen verwendet wird.

  1. Erstellen Sie ein Verzeichnis, in dem der Terraform-Beispielcode getestet und zum aktuellen Verzeichnis wird. Verwenden Sie ein anderes Verzeichnis als das, das Sie weiter unten in diesem Artikel für das Beispiel zum Namespace für verwaltete Flotten verwenden, da jedes Beispiel seinen eigenen Terraform-Status beibehält.

  2. Erstellen Sie eine Datei namens providers.tf, und fügen Sie den folgenden Code ein:

    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. Erstellen Sie eine Datei namens variables.tf, und fügen Sie den folgenden Code ein:

    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. Erstellen Sie eine Datei namens main.tf, und fügen Sie den folgenden Code ein:

    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. Erstellen Sie eine Datei namens outputs.tf, und fügen Sie den folgenden Code ein:

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

In diesem Beispiel werden mithilfe des Ressourcentyps azapi_resource anstelle von azurerm_kubernetes_fleet_manager eine Ressourcengruppe und ein Fleet Manager mit einem Hubcluster erstellt, da das Attribut hub_profile des Anbieters azurerm veraltet ist und von der Fleet-API nicht mehr akzeptiert wird. Wenn Sie die fleet_name Variable nicht festlegen, generiert Terraform einen zufälligen Namen für Sie.

Führen Sie terraform init aus, um die Terraform-Bereitstellung zu initialisieren. Mit diesem Befehl werden die Azure Anbieter heruntergeladen, die zum Verwalten Ihrer Azure Ressourcen erforderlich sind.

terraform init

Führen Sie terraform fmt aus, um die Konfigurationsdateien konsistent zu formatieren.

terraform fmt

Führen Sie terraform validate , um zu bestätigen, dass die Konfigurationsdateien syntaktisch gültig sind.

terraform validate

Führen Sie terraform plan aus, um einen Ausführungsplan zu erstellen.

terraform plan -out main.tfplan

Führen Sie terraform apply aus, um den Ausführungsplan auf Ihre Cloudinfrastruktur anzuwenden.

terraform apply main.tfplan

Sparen Sie die Namen der Ressourcengruppe und des Flottenmanagers aus den Terraform-Ausgaben. Sie benötigen diese Werte für das Beispiel „Managed Fleet Namespace“.

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

In diesem Beispiel werden keine Mitgliedscluster zur Flotte erstellt oder verknüpft. Überprüfen Sie, ob der Flottenmanager bereits Mitgliedscluster mit dem az fleet member list Befehl verknüpft hat:

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

Wenn dieser Befehl keine Mitglieder zurückgibt, können Sie weiterhin den folgenden Abschnitt abschließen, um einen Namespace für verwaltete Flotte zu erstellen und seine Konfiguration anzuzeigen, aber Sie können nicht überprüfen, ob es auf einem Mitgliedscluster bereitgestellt wird, bis Sie mindestens einen AKS-Cluster zur Flotte erstellen und beitreten.

Erstellen Sie den Managed-Fleet-Namespace mit Terraform

Hinweis

Der Beispielcode für diesen Abschnitt befindet sich im Azure Terraform GitHub Repository. Zeigen Sie die Protokolldatei an, die die Testergebnisse aus den aktuellen und früheren Versionen von Terraform enthält.

Sehen Sie weitere Artikel und Beispielcode, die zeigen, wie Terraform zur Verwaltung von Azure-Ressourcen verwendet wird.

  1. Erstellen Sie ein neues, separates Verzeichnis, um den Terraform-Code dieses Beispiels zu testen, und machen Sie es zum aktuellen Verzeichnis.

  2. Erstellen Sie eine Datei namens providers.tf, und fügen Sie den folgenden Code ein:

    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. Erstellen Sie eine Datei namens variables.tf, und fügen Sie den folgenden Code ein:

    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. Erstellen Sie eine Datei namens main.tf, und fügen Sie den folgenden Code ein:

    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. Erstellen Sie eine Datei namens outputs.tf, und fügen Sie den folgenden Code ein:

    output "managed_fleet_namespace_id" {
      description = "Resource ID of the Managed Fleet Namespace."
      value       = azapi_resource.managed_fleet_namespace.id
    }
    
  6. Erstellen Sie eine Datei namens terraform.tfvars.example, und fügen Sie den folgenden Code ein:

    resource_group_name    = "<resource-group-name>"
    fleet_name             = "<fleet-manager-name>"
    managed_namespace_name = "platform-ns"
    
  7. Kopieren Sie terraform.tfvars in terraform.tfvars.example in dasselbe Verzeichnis. Setzen Sie resource_group_name und fleet_name auf die Werte, die Sie im vorherigen Abschnitt gespeichert haben (oder auf die Werte Ihres vorhandenen Fleet Managers). Legen Sie managed_namespace_name auf den gewünschten Namen für den Namespace fest.

    cp terraform.tfvars.example terraform.tfvars
    

In diesem Beispiel wird kein eigener Flottenmanager erstellt. Stattdessen verwendet es die Datenquellen azurerm_resource_group und azurerm_client_config, um die Ressourcengruppe und das aktuelle Abonnement zu ermitteln. Anschließend wird die Ressourcen-ID des vorhandenen Fleet Managers erstellt, der in der Variablen fleet_name angegeben ist, um ihn als übergeordnetes Element für den Managed Fleet Namespace zu verwenden. So nutzt die Stichprobe die Fleet Manager-Informationen aus dem voraussetzungszustand oder von einem bereits vorhandenen Flottenmanager mit einem Hubcluster, ohne den Terraform-Zustand zwischen den beiden Stichproben zu teilen.

Das Beispiel erstellt den Namespace mithilfe des Ressourcentyps azapi_resource in der Vorschau-API-Version 2025-08-01-preview von Microsoft.ContainerService/fleets/managedNamespaces, da dieser Ressourcentyp noch keine native Ressource azurerm hat. Die folgenden Eigenschaften sind hartcodiert main.tf und werden nicht als Variablen verfügbar gemacht. Um sie zu ändern, bearbeiten Sie den body.properties Block direkt:

  • adoptionPolicyist auf Never und deletePolicy ist auf Keepfestgelegt , die den Azure CLI Standardwerten entsprechen, die weiter oben in diesem Artikel gezeigt werden.
  • managedNamespaceProperties.labels legt die Kubernetes-Bezeichnungen team=platform und environment=demo.
  • managedNamespaceProperties.annotations legt die Kubernetes-Annotationen owner=aks-fleet-demo und app.kubernetes.io/managed-by=terraform fest.
  • managedNamespaceProperties.defaultNetworkPolicy setzt sowohl ingress als auch egress auf AllowAll.
  • managedNamespaceProperties.defaultResourceQuota legt cpuRequest=100m, cpuLimit=500m, memoryRequest=128Mi und memoryLimit=512Mi fest.
  • propagationPolicy.placementProfile.defaultClusterResourcePlacement.policy.placementType ist auf PickAll gesetzt, sodass der Namespace an jeden Mitgliedscluster propagiert wird, der derzeit Teil der Fleet ist. Anders als der Parameter --member-cluster-names der Azure CLI bietet dieses Beispiel keine Möglichkeit, bestimmte benannte Membercluster gezielt anzusprechen. Um die Platzierung auf eine Teilmenge von Clustern zu beschränken, verwenden Sie die Azure CLI oder Azure Portal-Pivots auf dieser Seite, oder erweitern Sie den placementProfile Block im Anschluss an main.tf die Microsoft. Arm-Vorlagenreferenz für ContainerService-Flotten.

Die einzige Variable, die den Azure Resource Manager (ARM)-Tags der Ressource „Managed Fleet Namespace“ und nicht den Kubernetes-Labels des Namespace selbst zugeordnet wird, ist tags. Es ist optional und standardmäßig auf { environment = "demo", managed_by = "terraform" } in variables.tf gesetzt, wenn Sie es nicht festlegen. Das terraform.tfvars.example des Beispiels enthält keinen tags. Fügen Sie es daher nur dann Ihrer terraform.tfvars-Datei hinzu, wenn Sie die Standardeinstellung überschreiben möchten.

Führen Sie terraform init aus, um die Terraform-Bereitstellung zu initialisieren.

terraform init

Führen Sie terraform fmt aus, um die Konfigurationsdateien konsistent zu formatieren.

terraform fmt

Führen Sie terraform validate , um zu bestätigen, dass die Konfigurationsdateien syntaktisch gültig sind.

terraform validate

Führen Sie terraform plan aus, um einen Ausführungsplan zu erstellen.

terraform plan -out main.tfplan

Führen Sie terraform apply aus, um den Ausführungsplan auf Ihre Cloudinfrastruktur anzuwenden.

terraform apply main.tfplan

Zuweisen des Benutzer- oder Gruppenzugriffs

Terraform verwaltet in diesem Beispiel keine Azure RBAC-Rollenzuweisungen. Gewähren Sie einem Benutzer mit dem Befehl az role assignment create Zugriff auf den Managed-Fleet-Namespace über ihre Mitgliedscluster hinweg. Verwenden Sie die Terraform-Ausgabe als Bereich:

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"

Hinzufügen oder Entfernen von Mitgliedsclustern

Da das propagationPolicy des Beispiels PickAll verwendet, wird der Namespace immer an jeden derzeitigen Membercluster der Fleet weitervererbt. Durch das Hinzufügen eines Mitgliedsclusters zur Flotte wird automatisch der Namespace hinzugefügt, und durch das Entfernen eines Mitgliedsclusters aus der Flotte wird der Namespace automatisch daraus entfernt. Das Beispiel unterstützt nicht die Angabe einer bestimmten Liste von Namen von Memberclustern, wie dies mit dem Parameter --member-cluster-names der Azure CLI möglich ist. Wenn Sie bestimmte Mitgliedscluster auswählen müssen, verwenden Sie stattdessen die Azure CLI oder die Pivots im Azure-Portal auf dieser Seite.

Konfigurieren eines vorhandenen Verwalteten Flottennamespaces

Terraform führt einen Upsert für den azapi_resource-Typ aus, sodass Sie einen vorhandenen Namespace der verwalteten Flotte aktualisieren können, indem Sie das Beispiel ändern und erneut anwenden.

  • Um die ARM-Tags zu ändern, fügen Sie die Variable terraform.tfvars in tags hinzu oder aktualisieren Sie sie dort (sie ist optional und in terraform.tfvars.example nicht enthalten).
  • Um die Kubernetes-Bezeichnungen, Anmerkungen, Netzwerkrichtlinien oder Ressourcenkontingente zu ändern, bearbeiten Sie die entsprechenden Werte im managedNamespaceProperties Block von main.tf. Im Beispiel werden diese Einstellungen nicht als Variablen verfügbar gemacht.

Nachdem Sie Ihre Änderungen vorgenommen haben, führen Sie terraform plan -out main.tfplan und terraform apply main.tfplan im Verzeichnis des Namespace der verwalteten Flotte erneut aus.

Anzeigen der Konfiguration eines Verwalteten Flottennamespaces

Die Terraform-Ausgabe gibt nur die Ressourcen-ID des Managed Fleet Namespace zurück. Extrahieren Sie die Ressourcengruppe, den Flotten-Manager und die Namespacenamen aus der ID. Zeigen Sie dann die Details des Namespace mithilfe des az fleet namespace show Befehls an.

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

Um den Rollout des Namespace in den Memberclustern zu überprüfen, verwenden Sie Ressourcenplatzierungen und suchen Sie nach der Ressourcenplatzierung, die denselben Namen wie der Managed Fleet Namespace trägt. Zum Überprüfen der Namespace-Konfiguration mit az fleet namespace show müssen keine Mitgliedscluster der Fleet beigetreten sein, für die Überprüfung des Rollout- oder Platzierungsstatus muss jedoch mindestens ein Mitgliedscluster der Fleet beigetreten sein. Wenn Sie noch keinen haben, lesen Sie zunächst Erstellen und Hinzufügen von mindestens einem Azure Kubernetes Service (AKS)-Cluster zu der Flotte.

Löschen eines Verwalteten Flottennamespaces

Löschen Sie den Managed-Fleet-Namespace, bevor Sie den Fleet Manager löschen, zu dem er gehört.

Führen Sie im Verzeichnis mit dem Beispiel „Namespace der verwalteten Flotte“ terraform plan mit dem Flag -destroy aus, um einen Ausführungsplan für die Zerstörung zu erstellen.

terraform plan -destroy -out main.destroy.tfplan

Führen Sie terraform apply aus, um den Destroy-Plan anzuwenden.

terraform apply main.destroy.tfplan

Warnung

Das Löschen eines verwalteten Flotten-Namespace, das mit einem deletePolicy von Delete konfiguriert ist, ist ein unumkehrbarer Vorgang. In diesem Beispiel wird deletePolicy auf Keep gesetzt, sodass der Kubernetes-Namespace nach dem Löschen der ARM-Ressource auf dem Fleet Manager-Hubcluster und den Mitgliedsclustern verbleibt, aber nicht mehr von Azure Resource Manager verwaltet wird. Wenn der Namespace stattdessen überall entfernt werden soll, ändern Sie deletePolicy in Delete in main.tf, und wenden Sie ihn erneut an, bevor Sie die Ressource zerstören.

Azure RBAC-Zuordnungen, die auf den Namespace "Managed Fleet" beschränkt sind, werden immer gelöscht, um zu vermeiden, dass Berechtigungen verdingt werden.

Wenn Sie den Fleet Manager nur für diesen Artikel mit einem Hubcluster-Voraussetzungsbeispiel bereitgestellt haben und es für nichts anderes benötigen, wechseln Sie zum Verzeichnis dieses Beispiels, und zerstören Sie es ebenfalls.

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

Warnung

Dieser Befehl löscht den Fleet Manager, seinen Hub-Cluster und die Ressourcengruppe, die im Rahmen des vorausgesetzten Beispiels erstellt wurde, nicht nur den Fleet Manager. Vergewissern Sie sich, dass die Ressourcengruppe keine anderen Ressourcen enthält, die Sie beibehalten möchten, und dass keine anderen verwalteten Fleet-Namespaces oder Mitgliedscluster weiterhin von Fleet Manager abhängig sind, bevor Sie diesen Befehl ausführen.

Nächste Schritte