Tworzenie i konfigurowanie przestrzeni nazw zarządzanej floty

Dotyczy: ✔️ Fleet Manager z klastrem hubowym

W tym artykule pokazano, jak za pomocą programu Fleet Manager utworzyć i skonfigurować przestrzeń nazw zarządzanej floty, która definiuje przydziały zasobów, zasady sieciowe i delegowany dostęp użytkowników dla przestrzeni nazw w wielu klastrach.

Jeśli chcesz wyświetlić lub uzyskać dostęp do istniejących przestrzeni nazw floty zarządzanej, do których masz dostęp, zobacz Wyświetlanie przestrzeni nazw floty zarządzanej i uzyskiwanie do tego dostępu.

Znane ograniczenia

  • Gdy przestrzeń nazw zarządzanej floty przyjmuje przestrzeń nazw Kubernetes zarządzaną w jednym klastrze lub odwrotnie, może to prowadzić do konfliktu własności. Aby tego uniknąć, należy użyć zasady usuwania keep zarówno dla przestrzeni nazw Managed Fleet, jak i Kubernetes.
  • Klastry muszą być członkami zarządzanymi przez usługę Fleet Manager hostująca przestrzeń nazw zarządzanej floty.
  • Klastry muszą mieć wersję kubernetes co najmniej 1.30.0. Klastry poniżej tej wersji nie blokują użytkownikom w klastrze modyfikowania umieszczonych zasobów platformy Kubernetes.
  • Role RBAC przypisane do zakresu przestrzeni nazw floty zarządzanej zapewniają równoważny dostęp do wszystkich niezarządzanych przestrzeni nazw Kubernetes o tej samej nazwie w klastrach członkowskich.

Zanim rozpoczniesz

  • Zainstaluj i skonfiguruj rozwiązanie Terraform.

  • Aby zweryfikować utworzoną przez program Terraform przestrzeń nazw zarządzanej floty, musisz zainstalować Azure CLI. Aby zainstalować lub uaktualnić, zobacz Instalowanie interfejsu wiersza polecenia platformy Azure.

  • Aby sprawdzić przestrzeń nazw zarządzanej floty, potrzebujesz fleet rozszerzenia Azure CLI w wersji 1.8.0 lub nowszej. Możesz ją zainstalować i zaktualizować do najnowszej wersji za pomocą poleceń az extension add i az extension update.

    az extension add --name fleet
    az extension update --name fleet
    
  • Jeśli nie masz jeszcze Fleet Managera z klastrem centralnym, w pierwszej części tego artykułu utworzysz go przy użyciu oddzielnego przykładu Terraform i pliku stanu z przykładu Managed Fleet Namespace. Jeśli masz już taki zasób, zanotuj jego grupę zasobów i nazwę usługi Fleet Manager, a następnie przejdź do Tworzenie zarządzanej przestrzeni nazw floty za pomocą Terraform.

  • Wymagany wcześniej przykład Terraform tworzy tylko Fleet Managera i klaster centralny; nie tworzy żadnych klastrów członkowskich ani ich nie dołącza. Możesz utworzyć przestrzeń nazw zarządzanej floty i wyświetlić jej konfigurację bez dołączonych klastrów członkowskich, ale sprawdzenie, czy przestrzeń nazw została rzeczywiście wdrożona (rozpropagowana) do klastra członkowskiego, wymaga dołączenia do floty co najmniej jednego klastra AKS. Jeśli jeszcze go nie masz, zobacz jak utworzyć i dołączyć co najmniej jeden klaster Azure Kubernetes Service (AKS) do floty, korzystając z dostępnych instrukcji.

  • Aby ukończyć ten artykuł, musisz zainstalować interfejs wiersza polecenia platformy Azure w wersji 2.78.0 lub nowszej. Aby zainstalować lub uaktualnić, zobacz Instalowanie interfejsu wiersza polecenia platformy Azure.

  • Potrzebujesz rozszerzenia interfejsu wiersza polecenia platformy fleet Azure w wersji 1.8.0 lub nowszej. Można zainstalować i zaktualizować do najnowszej wersji za pomocą poleceń az extension add i az extension update.

    # Install the extension
    az extension add --name fleet
    
    # Update the extension
    az extension update --name fleet
    
  • Upewnij się, że wersja rozszerzenia floty wynosi co najmniej 1.8.0, używając polecenia az extension show.

    az extension show --name fleet
    
  • Ustaw następujące zmienne środowiskowe dla identyfikatora subskrypcji, grupy zasobów, floty i członka floty.

    export SUBSCRIPTION_ID=<subscription-id>
    export GROUP=<resource-group-name>
    export FLEET=<fleet-name>
    export FLEET_ID=<fleet-id>
    
  • Ustaw subskrypcję Azure jako domyślną przy użyciu polecenia az account set.

    az account set --subscription ${SUBSCRIPTION_ID}
    

Tworzenie nowej przestrzeni nazw zarządzanej floty

Utwórz nową przestrzeń nazw zarządzanej floty za pomocą polecenia 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

Uwaga / Notatka

Te ustawienia są opcjonalne: zasady sieciowe, limit przydziału zasobów obliczeniowych, usuwanie i zasady wdrażania, etykiety i adnotacje.

W przypadku korzystania z zasad sieci użytkownicy z akcją Microsoft.ContainerService/managedClusters/networking.k8s.io/networkpolicies/write, na przykład Azure Kubernetes Service RBAC Writer, w roli Microsoft Entra ID mogą dodawać więcej zasad sieci za pośrednictwem API Kubernetes.

Jeśli na przykład administrator stosuje Deny All zasady dla ruchu przychodzącego/wychodzącego, a użytkownik stosuje Allow zasady dla przestrzeni nazw za pośrednictwem interfejsu API Kubernetes, Allow zasady mają priorytet nad Deny All zasadami, a ruch może przepływać dla przestrzeni nazw. To zachowanie addytywne jest standardowe w przypadku zasad sieciowych.

Przypisywanie dostępu użytkowników lub grup

Teraz możesz udzielić dostępu użytkownikowi dla przestrzeni nazw zarządzanej floty w klastrach członkowskich przy użyciu jednej z wbudowanych ról RBAC platformy Azure.

Utwórz przypisanie roli za pomocą polecenia az role assignment create.

W poniższym przykładzie przypisano użytkownikowi rolę autora RBAC w usłudze Azure Kubernetes Fleet Manager dla klastrów członkowskich w dowolnym klastrze, który odbiera przestrzeń nazw zarządzanego zespołu:

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"

Dodawanie klastrów członkowskich

Możesz kontrolować, które klastry członkowskie mają wdrożyć zarządzaną przestrzeń nazw, określając żądaną listę nazw klastrów członkowskich.

Określ pełną listę klastrów członkowskich, do których chcesz wdrożyć zarządzaną przestrzeń nazw przy użyciu az fleet namespace create polecenia z parametrem --member-cluster-names . Zarządzana przestrzeń nazw jest propagowana do wszystkich klastrów na liście.

W tym przykładzie zarządzana przestrzeń nazw jest wdrażana do contoso-prd-01-fm i 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

Usuwanie klastrów składowych

Klastry członkowskie można usunąć z przestrzeni nazw floty zarządzanej, wykluczając je z listy klastrów, w których ma być przestrzeń nazw.

Określ listę klastrów członkowskich, na których ma pozostać zarządzana przestrzeń nazw przy użyciu az fleet namespace create polecenia z parametrem --member-cluster-names . Zarządzana przestrzeń nazw jest usuwana z wszystkich klastrów wykluczonych z listy.

W tym przykładzie zarządzana przestrzeń nazw jest usuwana z 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

Skonfiguruj istniejącą przestrzeń nazw floty zarządzanej.

Zasady sieciowe, przydziały zasobów, etykiety i adnotacje można modyfikować w istniejącej przestrzeni nazw floty zarządzanej przy użyciu az fleet namespace create polecenia ze zaktualizowanymi wartościami parametrów. Polecenie wykonuje operację upsert, aktualizując przestrzeń nazw, jeśli już istnieje.

Ważne

Podczas aktualizowania istniejącej zarządzanej przestrzeni nazw należy określić wszystkie parametry, które chcesz zachować, nawet jeśli nie są one zmieniane. Wszystkie pominięte parametry są resetowane do ich wartości domyślnych. Dotyczy to zasad sieciowych, przydziałów zasobów, etykiet, adnotacji, usuwania zasad, zasad wdrażania i nazw klastrów członkowskich.

Poniższy przykład aktualizuje zasady sieciowe, przydziały zasobów, etykiety i adnotacje dla istniejącej zarządzanej przestrzeni nazw:

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

Wyświetlanie konfiguracji przestrzeni nazw floty zarządzanej

Aby wyświetlić szczegóły określonej przestrzeni nazw zarządzanej floty, użyj polecenia az fleet namespace show.

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

Dane wyjściowe powinny przypominać następujące przykładowe dane wyjściowe:

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

Usuń przestrzeń nazw zarządzanej floty

Usuń przestrzeń nazw zarządzanej floty, używając polecenia az fleet namespace delete.

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

Ostrzeżenie

Usuwanie przestrzeni nazw zarządzanej przez flotę z ustawieniem DeletePolicydelete jest trwałą akcją. Jeśli nie masz pewności, zaktualizuj politykę, aby keep zachować przestrzeń nazw.

Przypisania RBAC platformy Azure są zawsze usuwane, aby uniknąć zwisania uprawnień.

Tworzenie nowej przestrzeni nazw zarządzanej floty

Możesz utworzyć nową przestrzeń nazw floty zarządzanej z poziomu usługi Fleet Manager lub za pośrednictwem centrum Kubernetes.

Począwszy od programu Fleet Manager:

  • W witrynie Azure Portal przejdź do zasobu usługi Azure Kubernetes Fleet Manager.
  • Po lewej stronie, w sekcji Zasoby floty, wybierz Przestrzenie nazw.
  • Wybierz z menu pozycję + Utwórz, a następnie pozycję Zarządzana przestrzeń nazw dla floty.

Zrzut ekranu przedstawiający menu portalu Azure służące do tworzenia przestrzeni nazw zarządzanej floty w usłudze Azure Kubernetes Fleet Manager.

Rozpoczynanie w centrum Kubernetes:

Zrzut ekranu przedstawiający menu Centrum Kubernetes w portalu Azure, służące do tworzenia przestrzeni nazw zarządzanej floty.

  • Wybierz jedną z następujących opcji dla pozycji Zakres:
    • Nowy — utwórz nową przestrzeń nazw Kubernetes, która nie istnieje w klastrze głównym Fleet Manager. Wprowadź nazwę nowej przestrzeni nazw.
    • Przekonwertuj na zarządzaną — użyj istniejącej przestrzeni nazw Kubernetes w klastrze centrum Fleet Manager. Wybierz Namespace z listy przestrzeni nazw w klastrze centrum Fleet Manager.

Zrzut ekranu portalu Azure przedstawiający kartę Podstawy z ukończonymi szczegółami projektu dla nowej zarządzanej przestrzeni nazw floty.

Przypisywanie dostępu użytkowników lub grup

Wybierz użytkowników i grupy Microsoft Entra, które uzyskują dostęp do Managed Fleet Namespace w klastrach, do których jest dystrybuowana.

Zrzut ekranu witryny Azure Portal przedstawiający ukończone szczegóły dostępu dla nowej przestrzeni nazw floty zarządzanej.

Uwaga / Notatka

Ten krok jest opcjonalny. Przestrzeń nazw zarządzanej floty można tworzyć i dystrybuować bez przypisywania użytkowników lub grup. Dzięki temu można dystrybuować przestrzeń nazw bez natychmiastowego udzielania dostępu.

Dodawanie zasad sieciowych i limitu przydziału zasobów obliczeniowych

Kontroluj przepływ ruchu sieciowego do i z przestrzeni nazw w każdym z klastrów, do których jest ona dystrybuowana, oraz definiuj przydziały zasobów CPU i pamięci dla przestrzeni nazw.

Zrzut ekranu portalu Azure przedstawiający ukończone zasady sieciowe i limit zasobów obliczeniowych dla nowej przestrzeni nazw zarządzanej floty.

Uwaga / Notatka

Te ustawienia są opcjonalne. Przestrzeń nazw zarządzanej floty można tworzyć i dystrybuować bez zastosowania zasad sieciowych ani kontroli przydziałów.

Użytkownicy z akcją Microsoft.ContainerService/managedClusters/networking.k8s.io/networkpolicies/write, taką jak Azure Kubernetes Service RBAC Writer, w roli Microsoft Entra ID, do której są przypisani, mogą dodawać więcej zasad sieci za pośrednictwem interfejsu API Kubernetes.

Jeśli na przykład administrator stosuje Deny All zasady dla ruchu przychodzącego/wychodzącego, a użytkownik stosuje Allow zasady dla przestrzeni nazw za pośrednictwem interfejsu API Kubernetes, Allow zasady mają priorytet nad Deny All zasadami, a ruch może przepływać dla przestrzeni nazw. To zachowanie addytywne jest standardowe w przypadku zasad sieciowych.

Wybieranie klastrów członkowskich

Zdefiniuj klastry członkowskie do dystrybucji zarządzanej przestrzeni nazw, dodając je w następujący sposób.

  • Z menu wybierz pozycję + Dodaj.
  • W oknie dialogowym Wybieranie klastrów członkowskich wyszukaj klastry członkowskie i zaznacz je, zaznaczając pole wyboru.
  • Na koniec wybierz pozycję Wybierz , aby dodać klastry członkowskie.

Zrzut ekranu witryny Azure Portal przedstawiający dwa klastry członkowskie wybrane do hostowania nowej przestrzeni nazw floty zarządzanej.

Uwaga / Notatka

Ten krok jest opcjonalny. Jeśli nie podasz żadnych klastrów członkowskich, przestrzeń nazw zarządzanej floty zostanie wdrożona tylko w klastrze centralnym Fleet Manager. Klastry członkowskie można dodawać później.

Ustawianie etykiet, adnotacji i tagów

Zdefiniuj opcjonalne etykiety i adnotacje platformy Kubernetes oraz tagi usługi Azure Resource Manager (ARM), które zapewniają metadane, które mogą być używane do automatyzacji i zarządzania zasobami.

Zrzut ekranu witryny Azure Portal przedstawiający ustawienia etykiet i adnotacji dla nowej przestrzeni nazw floty zarządzanej.

Uwaga / Notatka

Ten krok jest opcjonalny. W późniejszym czasie można zarządzać etykietami, adnotacjami i tagami.

Tworzenie przestrzeni nazw zarządzanej floty

Po skonfigurowaniu wszystkich właściwości nowej przestrzeni nazw floty zarządzanej można potwierdzić szczegóły przed utworzeniem przestrzeni nazw, wybierając pozycję Utwórz.

Wdrożenie usługi Azure Resource Manager jest natychmiast uruchamiane, co inicjuje umieszczanie obciążenia usługi Fleet Manager w celu dystrybucji przestrzeni nazw do wybranych klastrów.

Po zakończeniu wdrażania możesz znaleźć przestrzeń nazw floty zarządzanej na liście przestrzeni nazw programu Fleet Manager.

Zrzut ekranu portalu Azure z nową zarządzaną przestrzenią nazw flot wymienioną obok innych przestrzeni nazw w klastrze węzłowym.

Aby sprawdzić wdrożenie przestrzeni nazw Kubernetes w klastrach, użyj opcji Resource placements i poszukaj elementu resource placement o nazwie takiej samej jak nazwa przestrzeni nazw Managed Fleet Namespace.

Zrzut ekranu witryny Azure Portal przedstawiający stan umieszczania zasobów nowej przestrzeni nazw floty zarządzanej.

Skonfiguruj istniejącą przestrzeń nazw floty zarządzanej.

Przestrzeń nazw zarządzanej floty można znaleźć w programie Fleet Manager lub za pośrednictwem centrum Kubernetes.

Począwszy od programu Fleet Manager:

  • W witrynie Azure Portal przejdź do zasobu usługi Azure Kubernetes Fleet Manager.
  • Po lewej stronie, w sekcji Zasoby floty, wybierz Przestrzenie nazw.

Rozpoczynanie w centrum Kubernetes:

Modyfikowanie konfiguracji

Zmodyfikuj zasady sieciowe, przydziały zasobów, etykiety, adnotacje i tagi, klikając edytuj obok odpowiedniego elementu na ekranie przeglądu Przestrzeni Nazw Zarządzanej Floty.

Wybranie pozycji Edytuj obok etykiet, adnotacji lub tagów powoduje otwarcie okna dialogowego, w którym można zmodyfikować dowolny z tych trzech elementów.

Wybranie opcji edytuj obok dowolnego z zasad sieciowych lub opcji przydziału zasobów powoduje otwarcie okna dialogowego, w którym można zmodyfikować dowolny z tych elementów.

Zrzut ekranu witryny Azure Portal przedstawiający ekran przeglądu przestrzeni nazw zarządzanej floty z wyróżnionymi opcjami edycji w czerwonych polach.

Modyfikowanie dostępu użytkowników lub grup

Przestrzeń nazw zarządzanej floty to zasób usługi Azure Resource Manager (ARM), więc zarządzanie dostępem użytkowników i grup można osiągnąć, wybierając pozycję Kontrola dostępu (IAM) w lewym obszarze nawigacji na ekranie przeglądu Zarządzanie przestrzenią nazw floty.

Modyfikowanie klastrów składowych

Na przeglądzie przestrzeni nazw zarządzanej floty wybierz pozycję Klastry członkowskie w lewej nawigacji.

Aby usunąć klastry członkowskie:

  • Zaznacz klastry do usunięcia, zaznaczając pole po lewej stronie wiersza.
  • W górnej nawigacji wybierz pozycję Usuń.
  • Potwierdź akcję i wybierz pozycję Usuń.

Aby dodać klastry członkowskie:

  • Z menu wybierz pozycję + Dodaj.
  • W oknie dialogowym Dodawanie klastrów członkowskich wyszukaj klastry członkowskie i zaznacz je, zaznaczając pole wyboru.
  • Na koniec wybierz pozycję Dodaj , aby dodać klastry członkowskie.

Zrzut ekranu witryny Azure Portal przedstawiający wybrany jeden klaster członkowski gotowy do usunięcia z przestrzeni nazw floty zarządzanej.

Po zmodyfikowaniu klastrów hostujących przestrzeń nazw zarządzanej floty, przegląd zostanie zaktualizowany, aby wyświetlać klastry aktywnie hostujące przestrzeń nazw.

Usuń przestrzeń nazw zarządzanej floty

Na przeglądzie przestrzeni nazw flotą zarządzaną, wybierz Usuń w górnym pasku nawigacyjnym.

W potwierdzeniu Usuń przestrzeń nazw zarządzanej floty wybierz odpowiednią opcję:

  • Zachowaj przestrzeń nazw Kubernetes, usuń możliwości zarządzania: Zarządzana przestrzeń nazw floty jest konwertowana na standardową przestrzeń nazw Kubernetes, pozostającą w klastrze głównym oraz klastrach członkowskich Fleet Manager, ale nie jest już zarządzana przez Azure Resource Manager (ARM).
  • Usuń przestrzeń nazw i wszystkie skojarzone zasoby: zasób ARM Przestrzeni Nazw Zarządzanej Floty jest usuwany wraz z przestrzenią nazw Kubernetes zarówno w klastrze Centrum Zarządzania Flotą, jak i w klastrach członkowskich.

Ostrzeżenie

Usunięcie przestrzeni nazw i wszystkich skojarzonych zasobów jest trwałą akcją. Jeśli nie masz pewności, musisz wybrać opcję zachowania przestrzeni nazw.

W obu przypadkach przypisania RBAC platformy Azure są usuwane, aby uniknąć zbędnych uprawnień.

Tworzenie nowej przestrzeni nazw zarządzanej floty

Przykłady Terraform w tej sekcji są podzielone na dwa katalogi, z których każdy ma własny stan Terraform: przykład konfiguracji wstępnej, który tworzy Fleet Managera z klastrem centralnym, oraz przykład scenariusza, który tworzy Managed Fleet Namespace w istniejącym Fleet Managerze. Utrzymując Fleet Manager i Managed Fleet Namespace w osobnych stanach, możesz utworzyć Managed Fleet Namespace dla dowolnego istniejącego Fleet Managera z klastrem centralnym. Ta konfiguracja działa niezależnie od tego, czy program Fleet Manager został utworzony przy użyciu narzędzia Terraform. Przestrzeń nazw zarządzanej floty można zniszczyć bez wpływu na usługę Fleet Manager lub inne zarządzane przestrzenie nazw floty.

Utwórz Fleet Manager przy użyciu klastra centralnego

Jeśli masz już menedżera floty z klastrem centralnym, przejdź do sekcji Tworzenie przestrzeni nazw zarządzanej floty za pomocą narzędzia Terraform i użyj w tej sekcji jego grupy zasobów oraz nazwy menedżera floty.

  1. Utwórz katalog, w którym chcesz przetestować przykładowy kod narzędzia Terraform i utwórz go jako bieżący katalog. Użyj katalogu oddzielnego od tego, którego używasz w przykładzie przestrzeni nazw floty zarządzanej w dalszej części tego artykułu, ponieważ każdy przykład zachowuje swój własny stan programu Terraform.

  2. Utwórz plik o nazwie providers.tfi wstaw następujący kod:

    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. Utwórz plik o nazwie variables.tfi wstaw następujący kod:

    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. Utwórz plik o nazwie main.tfi wstaw następujący kod:

    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. Utwórz plik o nazwie outputs.tfi wstaw następujący kod:

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

Przykład tworzy grupę zasobów i usługę Fleet Manager z klastrem centralnym przy użyciu typu zasobu azapi_resource zamiast azurerm_kubernetes_fleet_manager, ponieważ atrybut azurerm dostawcy hub_profile jest przestarzały, a interfejs API usługi Fleet już go nie akceptuje. Jeśli zmienna fleet_name nie zostanie ustawiona, program Terraform wygeneruje dla Ciebie losową nazwę.

Uruchom terraform init, aby zainicjalizować wdrożenie Terraform. To polecenie pobiera dostawców Azure wymaganych do zarządzania zasobami Azure.

terraform init

Uruchom narzędzie terraform fmt , aby spójnie sformatować pliki konfiguracji.

terraform fmt

Uruchom terraform validate, aby sprawdzić, czy pliki konfiguracji są poprawne składniowo.

terraform validate

Uruchom terraform plan, aby utworzyć plan realizacji.

terraform plan -out main.tfplan

Uruchom terraform apply, aby zastosować plan wykonawczy do infrastruktury chmury.

terraform apply main.tfplan

Zapisz nazwy grup zasobów i Fleet Manager z danych wyjściowych programu Terraform. Te wartości są potrzebne w przykładzie Managed Fleet Namespace.

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

Ten przykład nie tworzy ani nie dołącza żadnych klastrów członkowskich do floty. Sprawdź, czy usługa Fleet Manager ma już przyłączone klastry członkowskie przy użyciu az fleet member list polecenia :

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

Jeśli to polecenie nie zwróci żadnych członków, nadal możesz wykonać poniższą sekcję, aby utworzyć przestrzeń nazw Managed Fleet i wyświetlić jej konfigurację, ale nie możesz sprawdzić, czy zostanie ona wdrożona w klastrze członkowskim, dopóki nie utworzysz i dołączysz do floty co najmniej jednego klastra AKS.

Tworzenie przestrzeni nazw zarządzanej floty za pomocą programu Terraform

  1. Utwórz nowy, osobny katalog, aby przetestować kod Terraform dla tego przykładu, i ustaw go jako katalog bieżący.

  2. Utwórz plik o nazwie providers.tfi wstaw następujący kod:

    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. Utwórz plik o nazwie variables.tfi wstaw następujący kod:

    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. Utwórz plik o nazwie main.tfi wstaw następujący kod:

    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. Utwórz plik o nazwie outputs.tfi wstaw następujący kod:

    output "managed_fleet_namespace_id" {
      description = "Resource ID of the Managed Fleet Namespace."
      value       = azapi_resource.managed_fleet_namespace.id
    }
    
  6. Utwórz plik o nazwie terraform.tfvars.examplei wstaw następujący kod:

    resource_group_name    = "<resource-group-name>"
    fleet_name             = "<fleet-manager-name>"
    managed_namespace_name = "platform-ns"
    
  7. Skopiuj terraform.tfvars.example do terraform.tfvars w tym samym katalogu. Ustaw resource_group_name i fleet_name na wartości zapisane w poprzedniej sekcji (lub na wartości istniejącego Fleet Managera). Ustaw managed_namespace_name nazwę, której chcesz użyć dla przestrzeni nazw.

    cp terraform.tfvars.example terraform.tfvars
    

Ten przykład nie tworzy własnego menedżera floty. Zamiast tego używa źródeł danych azurerm_resource_group i azurerm_client_config do wyszukania grupy zasobów i bieżącej subskrypcji. Następnie tworzy identyfikator zasobu istniejącego Fleet Managera określonego w zmiennej fleet_name, aby użyć go jako elementu nadrzędnego dla przestrzeni nazw Managed Fleet. W ten sposób przykład korzysta z informacji usługi Fleet Manager ze stanu wstępnego lub z dowolnego istniejącego środowiska Fleet Manager z klastrem centralnym, bez współdzielenia stanu Terraform między tymi dwoma przykładami.

Przykład tworzy przestrzeń nazw przy użyciu typu zasobu azapi_resource w zapoznawczej wersji interfejsu API 2025-08-01-preview dla Microsoft.ContainerService/fleets/managedNamespaces, ponieważ ten typ zasobu nie ma jeszcze natywnego zasobu azurerm. Następujące właściwości są zakodowane na stałe w main.tf i nie są udostępniane jako zmienne. Aby je zmienić, zmodyfikuj body.properties blok bezpośrednio:

  • adoptionPolicy ma wartość Never, a deletePolicy ma wartość Keep, co odpowiada domyślnym wartościom Azure CLI pokazanym wcześniej w tym artykule.
  • managedNamespaceProperties.labels ustawia etykiety Kubernetes team=platform i environment=demo.
  • managedNamespaceProperties.annotations ustawia adnotacje Kubernetes owner=aks-fleet-demo i app.kubernetes.io/managed-by=terraform.
  • managedNamespaceProperties.defaultNetworkPolicy ustawia zarówno ingress, jak i egress na AllowAll.
  • managedNamespaceProperties.defaultResourceQuota ustawia cpuRequest=100m, cpuLimit=500m, memoryRequest=128Mi i memoryLimit=512Mi.
  • propagationPolicy.placementProfile.defaultClusterResourcePlacement.policy.placementType jest ustawiona na PickAll, więc przestrzeń nazw jest propagowana do każdego klastra członkowskiego obecnie dołączonego do floty. W przeciwieństwie do parametru --member-cluster-names w Azure CLI ten przykład nie umożliwia kierowania na określone klastry członkowskie o podanych nazwach. Aby ograniczyć rozmieszczanie do podzbioru klastrów, użyj interfejsu wiersza polecenia platformy Azure lub kart usługi Azure Portal na tej stronie albo rozszerz blok placementProfile w main.tf, zgodnie z informacjami w dokumencie referencyjnym szablonu ARM usługi Microsoft.ContainerService fleets.

Jedyną zmienną, która jest mapowana na tagi usługi Azure Resource Manager (ARM) w zasobie Managed Fleet Namespace, a nie na etykiety Kubernetes w samej przestrzeni nazw, jest tags. Jest to opcjonalne i domyślnie ustawione na { environment = "demo", managed_by = "terraform" } w variables.tf, jeśli tego nie ustawisz. Przykład terraform.tfvars.example nie zawiera tags, więc dodaj go do pliku terraform.tfvars tylko wtedy, gdy chcesz nadpisać ustawienie domyślne.

Uruchom terraform init, aby zainicjalizować wdrożenie Terraform.

terraform init

Uruchom narzędzie terraform fmt , aby spójnie sformatować pliki konfiguracji.

terraform fmt

Uruchom terraform validate, aby sprawdzić, czy pliki konfiguracji są poprawne składniowo.

terraform validate

Uruchom terraform plan, aby utworzyć plan realizacji.

terraform plan -out main.tfplan

Uruchom terraform apply, aby zastosować plan wykonawczy do infrastruktury chmury.

terraform apply main.tfplan

Przypisywanie dostępu użytkowników lub grup

Terraform nie zarządza przypisaniami ról RBAC na platformie Azure w tym przykładzie. Udziel użytkownikowi dostępu do przestrzeni nazw Managed Fleet we wszystkich jej klastrach członkowskich za pomocą polecenia az role assignment create. Użyj danych wyjściowych narzędzia Terraform jako zakresu:

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"

Dodawanie lub usuwanie klastrów składowych

Ponieważ przykład używa propagationPolicy i PickAll, przestrzeń nazw jest zawsze propagowana do każdego bieżącego klastra członkowskiego usługi Fleet. Dodanie klastra członkowskiego do floty automatycznie dodaje do niej przestrzeń nazw, a usunięcie klastra członkowskiego z floty powoduje automatyczne usunięcie z niej przestrzeni nazw. Przykład nie obsługuje wskazywania określonej listy nazw klastrów członkowskich w taki sposób, jak robi to parametr --member-cluster-names interfejsu wiersza polecenia platformy Azure. Jeśli musisz wybrać określone klastry członkowskie, użyj zamiast tego interfejsu wiersza polecenia platformy Azure lub kart witryny Azure Portal na tej stronie.

Skonfiguruj istniejącą przestrzeń nazw floty zarządzanej.

Terraform wykonuje operację upsert dla typu azapi_resource, dzięki czemu można zaktualizować istniejącą przestrzeń nazw zarządzanej floty, modyfikując przykładową konfigurację i ponownie ją stosując.

  • Aby zmienić tagi ARM, dodaj lub zaktualizuj zmienną tags w terraform.tfvars (jest opcjonalna i nie jest uwzględniona w terraform.tfvars.example).
  • Aby zmienić etykiety Kubernetes, adnotacje, zasady sieciowe lub limity zasobów, edytuj odpowiednie wartości w bloku managedNamespaceProperties w pliku main.tf. Przykład nie uwidacznia tych ustawień jako zmiennych.

Po wprowadzeniu zmian uruchom ponownie terraform plan -out main.tfplan i terraform apply main.tfplan w katalogu Managed Fleet Namespace.

Wyświetlanie konfiguracji przestrzeni nazw floty zarządzanej

Dane wyjściowe narzędzia Terraform zwracają tylko identyfikator zasobu przestrzeni nazw zarządzanej floty. Wyodrębnij grupę zasobów, menedżer floty i nazwy przestrzeni nazw z identyfikatora. Następnie wyświetl szczegóły przestrzeni nazw przy użyciu az fleet namespace show polecenia .

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

Aby sprawdzić wdrożenie przestrzeni nazw w klastrach członkowskich, użyj Resource placements i odszukaj umieszczenie zasobów o nazwie takiej samej jak przestrzeń nazw zarządzanej floty. Przeglądanie konfiguracji przestrzeni nazw za pomocą az fleet namespace show nie wymaga dołączenia żadnych klastrów członkowskich do Fleet, ale sprawdzanie stanu wdrożenia lub rozmieszczenia wymaga dołączenia do Fleet co najmniej jednego klastra członkowskiego. Jeśli jeszcze go nie masz, zobacz tworzenie i dołączanie co najmniej jednego klastra Azure Kubernetes Service (AKS) do floty.

Usuń przestrzeń nazw zarządzanej floty

Usuń przestrzeń nazw zarządzanej floty, zanim usuniesz menedżera floty, do którego ona należy.

W katalogu zawierającym przykład przestrzeni nazw Managed Fleet uruchom polecenie terraform plan z flagą -destroy, aby utworzyć plan zniszczenia.

terraform plan -destroy -out main.destroy.tfplan

Uruchom terraform apply, aby zastosować plan niszczenia.

terraform apply main.destroy.tfplan

Ostrzeżenie

Usunięcie przestrzeni nazw floty zarządzanej skonfigurowanej za pomocą deletePolicy z Delete jest działaniem nieodwracalnym. W tym przykładzie ustawiono deletePolicy na Keep, więc po zniszczeniu zasobu ARM przestrzeń nazw Kubernetes pozostaje w klastrze centralnym i klastrach członkowskich usługi Fleet Manager, ale nie jest już zarządzana przez usługę Azure Resource Manager. Jeśli zamiast tego chcesz, aby przestrzeń nazw została usunięta we wszystkich miejscach, zmień wartość deletePolicy na Delete w main.tf i zastosuj ją ponownie, zanim zniszczysz zasób.

Przypisania kontroli dostępu opartej na rolach platformy Azure w obrębie przestrzeni nazw zarządzanej floty są zawsze usuwane, aby uniknąć osieroconych uprawnień.

Jeśli wdrożono Fleet Managera przy użyciu przykładowego klastra centralnego wymaganego wstępnie wyłącznie na potrzeby tego artykułu i nie jest on potrzebny do niczego innego, przejdź do katalogu tego przykładu i również go usuń.

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

Ostrzeżenie

To polecenie usuwa usługę Fleet Manager, jej klaster centralny oraz grupę zasobów utworzoną przez przykład dotyczący wymagań wstępnych, a nie tylko usługę Fleet Manager. Przed uruchomieniem tego polecenia upewnij się, że grupa zasobów nie zawiera innych zasobów, które chcesz zachować, i że żadne inne przestrzenie nazw floty zarządzanej ani klastry członkowskie nadal nie zależą od programu Fleet Manager.

Dalsze kroki