Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
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
keepfü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
- Sie benötigen ein Azure-Konto mit einem aktiven Abonnement. Kostenlos ein Konto erstellen.
- Sie benötigen einen Flottenmanager mit einem Hubcluster. Wenn Sie keinen haben, lesen Sie unter Erstellen und Verbinden mindestens eines Azure Kubernetes Service (AKS)-Clusters mit der Flotte.
- Stellen Sie sicher, dass der Benutzer, der die Schritte ausführt, die Rollenbasierte Access Control Administratorrolle für den Flottenmanager zugewiesen ist.
- Verstehen Sie das Konzept des Managed Fleet Namespace, indem Sie die Übersicht lesen.
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
fleetAzure 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 dieaz extension addBefehle verwendenaz extension update.az extension add --name fleet az extension update --name fleetWenn 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
fleetAzure CLI-Erweiterung Version 1.8.0 oder höher. Sie können es installieren und mit denaz extension addaz extension updateBefehlen auf die neueste Version aktualisieren.# Install the extension az extension add --name fleet # Update the extension az extension update --name fleetVergewissern Sie sich, dass die Flottenerweiterungsversion mindestens 1.8.0 mit dem
az extension showBefehl ist.az extension show --name fleetLegen 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 setBefehls 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.
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.
- 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.
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.
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.
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.
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.
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.
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.
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:
- Öffnen Sie Kubernetes Center – Verwaltete Namespaces im Azure-Portal.
- Legen Sie den Typ-Filter auf Verwalteter Flottennamespace fest.
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.
Ä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.
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.
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.
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" {}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 = "" }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"] }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.
Erstellen Sie ein neues, separates Verzeichnis, um den Terraform-Code dieses Beispiels zu testen, und machen Sie es zum aktuellen Verzeichnis.
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" {}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" } }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" } } } } } } }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 }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"Kopieren Sie
terraform.tfvarsinterraform.tfvars.examplein dasselbe Verzeichnis. Setzen Sieresource_group_nameundfleet_nameauf die Werte, die Sie im vorherigen Abschnitt gespeichert haben (oder auf die Werte Ihres vorhandenen Fleet Managers). Legen Siemanaged_namespace_nameauf 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 aufNeverunddeletePolicyist aufKeepfestgelegt , die den Azure CLI Standardwerten entsprechen, die weiter oben in diesem Artikel gezeigt werden. -
managedNamespaceProperties.labelslegt die Kubernetes-Bezeichnungenteam=platformundenvironment=demo. -
managedNamespaceProperties.annotationslegt die Kubernetes-Annotationenowner=aks-fleet-demoundapp.kubernetes.io/managed-by=terraformfest. -
managedNamespaceProperties.defaultNetworkPolicysetzt sowohlingressals auchegressaufAllowAll. -
managedNamespaceProperties.defaultResourceQuotalegtcpuRequest=100m,cpuLimit=500m,memoryRequest=128MiundmemoryLimit=512Mifest. -
propagationPolicy.placementProfile.defaultClusterResourcePlacement.policy.placementTypeist aufPickAllgesetzt, sodass der Namespace an jeden Mitgliedscluster propagiert wird, der derzeit Teil der Fleet ist. Anders als der Parameter--member-cluster-namesder 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 denplacementProfileBlock im Anschluss anmain.tfdie 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.tfvarsintagshinzu oder aktualisieren Sie sie dort (sie ist optional und interraform.tfvars.examplenicht enthalten). - Um die Kubernetes-Bezeichnungen, Anmerkungen, Netzwerkrichtlinien oder Ressourcenkontingente zu ändern, bearbeiten Sie die entsprechenden Werte im
managedNamespacePropertiesBlock vonmain.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
- Verstehen Sie das Konzept von Managed Fleet Namespaces, indem Sie die Übersicht lesen.
- Erfahren Sie, wie Sie verwaltete Flottennamespaces anzeigen und darauf zugreifen können, auf die Sie Zugriff haben.