Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
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
keepzaró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
- Potrzebujesz konta platformy Azure z aktywną subskrypcją. Utwórz konto bezpłatnie.
- Potrzebujesz menedżera floty z klastrem hubu. Jeśli go nie masz, zobacz Tworzenie i dołączanie co najmniej jednego klastra usługi Azure Kubernetes Service (AKS) do floty.
- Upewnij się, że użytkownik wykonujący te czynności ma przypisaną rolę Administrator kontroli dostępu opartej na rolach dla usługi Fleet Manager.
- Zapoznaj się z koncepcją zarządzanej przestrzeni nazw floty, czytając omówienie.
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
fleetrozszerzenia Azure CLI w wersji 1.8.0 lub nowszej. Możesz ją zainstalować i zaktualizować do najnowszej wersji za pomocą poleceńaz extension addiaz extension update.az extension add --name fleet az extension update --name fleetJeś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
fleetAzure w wersji 1.8.0 lub nowszej. Można zainstalować i zaktualizować do najnowszej wersji za pomocą poleceńaz extension addiaz extension update.# Install the extension az extension add --name fleet # Update the extension az extension update --name fleetUpewnij się, że wersja rozszerzenia floty wynosi co najmniej 1.8.0, używając polecenia
az extension show.az extension show --name fleetUstaw 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.
Rozpoczynanie w centrum Kubernetes:
- Otwórz Centrum Kubernetes — zarządzane przestrzenie nazw w portalu Azure.
- Wybierz z menu pozycję + Utwórz, a następnie pozycję Zarządzana przestrzeń nazw dla floty.
- Wybierz wystąpienie subskrypcji i wystąpienie menedżera 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.
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.
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.
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.
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.
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.
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.
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:
- Otwórz Centrum Kubernetes — zarządzane przestrzenie nazw w portalu Azure.
- Ustaw filtr Typ na Zarządzaną Przestrzeń Nazw Floty.
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.
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.
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.
Uwaga / Notatka
Przykładowy kod tej sekcji znajduje się w repozytorium Azure Terraform GitHub. Wyświetl plik dziennika zawierający wyniki testu z bieżących i poprzednich wersji programu Terraform.
Zobacz więcej artykułów i przykładowego kodu pokazującego, jak zarządzać zasobami platformy Azure przy użyciu narzędzia Terraform.
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.
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" {}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 = "" }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"] }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
Uwaga / Notatka
Przykładowy kod tej sekcji znajduje się w repozytorium Azure Terraform GitHub. Wyświetl plik dziennika zawierający wyniki testu z bieżących i poprzednich wersji programu Terraform.
Zobacz więcej artykułów i przykładowego kodu pokazującego, jak zarządzać zasobami platformy Azure przy użyciu narzędzia Terraform.
Utwórz nowy, osobny katalog, aby przetestować kod Terraform dla tego przykładu, i ustaw go jako katalog bieżący.
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" {}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" } }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" } } } } } } }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 }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"Skopiuj
terraform.tfvars.exampledoterraform.tfvarsw tym samym katalogu. Ustawresource_group_nameifleet_namena wartości zapisane w poprzedniej sekcji (lub na wartości istniejącego Fleet Managera). Ustawmanaged_namespace_namenazwę, 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:
-
adoptionPolicyma wartośćNever, adeletePolicyma wartośćKeep, co odpowiada domyślnym wartościom Azure CLI pokazanym wcześniej w tym artykule. -
managedNamespaceProperties.labelsustawia etykiety Kubernetesteam=platformienvironment=demo. -
managedNamespaceProperties.annotationsustawia adnotacje Kubernetesowner=aks-fleet-demoiapp.kubernetes.io/managed-by=terraform. -
managedNamespaceProperties.defaultNetworkPolicyustawia zarównoingress, jak iegressnaAllowAll. -
managedNamespaceProperties.defaultResourceQuotaustawiacpuRequest=100m,cpuLimit=500m,memoryRequest=128MiimemoryLimit=512Mi. -
propagationPolicy.placementProfile.defaultClusterResourcePlacement.policy.placementTypejest ustawiona naPickAll, więc przestrzeń nazw jest propagowana do każdego klastra członkowskiego obecnie dołączonego do floty. W przeciwieństwie do parametru--member-cluster-namesw 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 blokplacementProfilewmain.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ą
tagswterraform.tfvars(jest opcjonalna i nie jest uwzględniona wterraform.tfvars.example). - Aby zmienić etykiety Kubernetes, adnotacje, zasady sieciowe lub limity zasobów, edytuj odpowiednie wartości w bloku
managedNamespacePropertiesw plikumain.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
- Zapoznaj się z koncepcją przestrzeni nazw floty zarządzanej, zapoznając się z omówieniem.
- Dowiedz się, jak wyświetlać przestrzenie nazw zarządzanej floty, do których masz dostęp.