Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Van toepassing op: ✔️ Fleet Manager ✔️ Fleet Manager met hubcluster
Beheerders kunnen de volgorde van updates voor door Fleet beheerde clusters beheren door een reeks fasen en groepen te definiëren. Ze kunnen configureren wanneer goedkeuringen en pauzes moeten plaatsvinden binnen die fasen en groepen. De volledige configuratie kan worden opgeslagen als een updatestrategie die onafhankelijk van updateuitvoeringen of automatische upgrades kan worden beheerd, zodat strategieën naar behoefte opnieuw kunnen worden gebruikt.
In dit artikel wordt beschreven hoe u updatestrategieën definieert met behulp van groepen en fasen.
Vereisten
Lees het conceptuele overzicht van Fleet-updates, met een uitleg van updateuitvoeringen, fasen, groepen en strategieën waarnaar in deze handleiding wordt verwezen.
U moet een Fleet-resource hebben met een of meer lidclusters. Zo niet, volg de quickstart om een Fleet-resource te maken en Azure Kubernetes Service (AKS)-clusters als leden toe te voegen.
Stel de volgende omgevingsvariabelen in:
export GROUP=<resource-group> export FLEET=<fleet-name> export CLUSTERID=<aks-cluster-resource-id> export STRATEGY=<strategy-name>Als u de Azure CLI instructies in dit artikel volgt, installeert u de nieuwste versie van de Azure CLI. Zie Azure CLI installeren om de CLI te installeren of upgraden.
U hebt ook de
fleetAzure CLI-extensie nodig. Voer de volgende opdracht uit om deze te installeren:az extension add --name fleetVoer de
az extension updateopdracht uit om bij te werken naar de nieuwste versie van de extensie die is uitgebracht:az extension update --name fleet
De nieuwste versie van de Azure CLI installeren Zie Azure CLI installeren om de CLI te installeren of upgraden. U gebruikt de Azure CLI om de updatestrategie te controleren die Terraform maakt.
U hebt ook de
fleetAzure CLI-extensie nodig. Voer de volgende opdracht uit om deze te installeren:az extension add --name fleetVoer de
az extension updateopdracht uit om bij te werken naar de nieuwste versie van de extensie.az extension update --name fleetHet Terraform-voorbeeld dat in dit artikel wordt gebruikt, maakt een eigen resourcegroep en een Azure Kubernetes Fleet Manager zonder een hubcluster. Het neemt geen AKS-clusters op als Fleet-leden. De updatestrategie van het voorbeeld verwijst naar de namen
group-1van de updategroep engroup-2group-3. Als u de strategie wilt toepassen op echte updateuitvoeringen, wijst u bestaande Fleet-lidclusters toe aan die updategroepnamen of bewerkt u de blokken van het voorbeeld zodat deze overeenkomen met de namen vangroupuw eigen updategroep.
Clusters voor uw strategie selecteren
Er zijn twee manieren om te selecteren welke clusters zijn opgenomen in elke fase en groep van uw updatestrategie om de updatevolgorde te beheren:
-
Lidlabels (aanbevolen): wijs labels toe aan elk vlootlid en gebruik
memberSelectordeze om leden door deze labels te selecteren. Elk lid kan meerdere labels hebben. - Updategroepen: Wijs een updategroep toe aan elk vlootlid en definieer vervolgens groepen in uw strategie die overeenkomen met die groepsnamen. Elk lid kan slechts tot één groep behoren.
Een updatestrategie maken met ledenkiezers (preview)
Gebruik lidlabels om clusters in uw updatestrategieën te selecteren. Ze bieden meer flexibiliteit. Zie Groepsclusters met lidlabels voor conceptuele informatie.
Important
Preview-functies van Azure Kubernetes Fleet Manager zijn beschikbaar op basis van selfservice, opt-in. Previews worden geleverd 'zoals het is' en 'voor zover beschikbaar' en zijn uitgesloten van de serviceovereenkomsten en beperkte garantie. Azure Kubernetes Fleet Manager-previews vallen gedeeltelijk onder klantondersteuning op basis van best effort. Zodoende zijn deze functies niet bedoeld voor productiegebruik.
Labels toepassen op lidclusters
Labels toepassen bij het toevoegen van een lidcluster aan de vloot
Gebruik de az fleet member create opdracht om labels toe te passen op uw vlootleden. In het volgende voorbeeld worden twee labels toegepast op het lidcluster: env=staging en tier=frontend:
az fleet member create \
--resource-group $GROUP \
--fleet-name $FLEET \
--name member1 \
--member-cluster-id $CLUSTERID \
--labels "env=staging tier=frontend"
Labels toepassen op een bestaand vlootlid
Gebruik de az fleet member update opdracht om labels toe te passen op uw vlootleden.
az fleet member update \
--resource-group $GROUP \
--fleet-name $FLEET \
--name member1 \
--labels "env=staging tier=frontend"
Een updatestrategie maken
Een updatestrategie bestaat uit een of meer fasen, waarbij een fase een of meer updategroepen kan bevatten.
Notitie
Een Azure portal-ervaring is beschikbaar voordat deze mogelijkheid algemeen beschikbaar is.
Maak een JSON-bestand om de fasen en groepen voor de updateuitvoering te definiëren. Fasen worden opeenvolgend uitgevoerd in de volgorde waarin ze worden weergegeven in het JSON-bestand. Binnen elke fase worden groepen parallel uitgevoerd. In het volgende voorbeeldbestand (example-labels-strategy.json) wordt een strategie gedefinieerd met twee fasen die worden gebruikt om clusters te selecteren op basis van
memberSelectorhun labels en optionelemaxConcurrencyinstellingen bevat:- De
stagingfase maakt gebruik van een faseniveaumemberSelectorom alle clusters met het labelenv=stagingte selecteren en één impliciete groep te maken. - De
productionfase maakt gebruik van een faseniveaumemberSelectorom alle clusters met het labelenv=productionvooraf te filteren en definieert vervolgens twee groepen, elk met een eigenmemberSelectorgroep om clusters op hettierlabel te selecteren.
Wanneer
memberSelectorhet veld van een groep is ingesteld, wordt het veld van de groepnamealleen gebruikt als weergave-id voor statusrapportage en logboekregistratie en niet meer gebruikt voor selectie van vlootleden op basis van een updategroep.{ "stages": [ { "name": "staging", "memberSelector": { "byLabel": "env=staging" }, "maxConcurrency": "1", "afterStageWaitInSeconds": 600 }, { "name": "production", "memberSelector": { "byLabel": "env=production" }, "maxConcurrency": "4", "groups": [ { "name": "frontend", "memberSelector": { "byLabel": "tier=frontend" }, "maxConcurrency": "3" }, { "name": "backend", "memberSelector": { "byLabel": "tier=backend" }, "maxConcurrency": "3" } ] } ] }- De
Notitie
Het maxConcurrency veld is optioneel en bepaalt hoeveel clusters gelijktijdig kunnen worden bijgewerkt op fase- of groepsniveau. Gebruik een grotere waarde om clusters sneller in uw vloot te upgraden, of een kleinere waarde voor een gecontroleerdere uitrol die de impact beperkt als er problemen optreden.
Wanneer een fase memberSelector zonder groepen (zoals staging) wordt gebruikt, vormen alle overeenkomende leden samen één impliciete groep en regelt de fase met maxConcurrency de gelijktijdigheid rechtstreeks. Wanneer groepen worden gedefinieerd (zoals), productionfungeert het faseniveau maxConcurrency als een algemeen plafond voor alle groepen.
In dit voorbeeld stelt de staging fase maxConcurrency in op "1", zodat stagingclusters één voor één worden bijgewerkt. In de production fase kunnen maximaal "4" clusters gelijktijdig uitgevoerd worden, waarbij de frontend en backend groepen elk zijn beperkt tot "3".
Waarden kunnen een vast geheel getal zijn (bijvoorbeeld "3") of een percentage (bijvoorbeeld "50%"). Als u dit weglaat, past het systeem standaardwaarden toe. Zie Maximale gelijktijdigheid (preview) voor meer informatie over hoe deze waarden worden omgezet en de bovengrens.
Maak een nieuwe updatestrategie met behulp van de
az fleet updatestrategy createopdracht waarbij de--stagesvlag is ingesteld op de naam van uw JSON-bestand.az fleet updatestrategy create \ --resource-group $GROUP \ --fleet-name $FLEET \ --name $STRATEGY \ --stages example-labels-strategy.json
Een updatestrategie maken met behulp van updategroepen
U kunt clusters selecteren in updatestrategieën door ze toe te wijzen aan één updategroep. Definieer een updatestrategie die deze updategroepen toewijst aan fasen. Binnen een updatefase worden updates parallel toegepast op elke updategroep. Binnen een updategroep worden lidclusters opeenvolgend bijgewerkt.
Notitie
Een vlootlid kan slechts deel uitmaken van één updategroep, maar aan een updategroep kunnen meerdere vlootleden zijn toegewezen. Een updategroep zelf is geen afzonderlijk resourcetype. Updategroepen zijn alleen tekenreeksen die verwijzingen van de vlootleden vertegenwoordigen. Dus als alle vlootleden met verwijzingen naar een gemeenschappelijke updategroep worden verwijderd, houdt die specifieke updategroep op te bestaan.
Clusters toewijzen om groepen bij te werken
Toewijzen aan groep bij het toevoegen van lidcluster aan de vloot
Navigeer in Azure Portal naar uw Azure Kubernetes Fleet Manager-resource.
Selecteer Lidclusterstoevoegen in het servicemenu onder >.
Selecteer het cluster dat u wilt toevoegen en selecteer vervolgens Volgende: Beoordelen en toevoegen.
Voer de naam in van de updategroep waaraan u het cluster wilt toewijzen en selecteer vervolgens Toevoegen.
Wijs een lidcluster toe aan een updategroep wanneer u het lidcluster aan de vloot toevoegt met behulp van de az fleet member create opdracht met de --update-group parameter die is ingesteld op de naam van de updategroep.
az fleet member create \
--resource-group $GROUP \
--fleet-name $FLEET \
--name member1 \
--member-cluster-id $CLUSTERID \
--update-group group-1a
Een bestaand vlootlid toewijzen aan een updategroep
Navigeer in Azure Portal naar uw Azure Kubernetes Fleet Manager-resource.
Selecteer lidclusters in het servicemenu onder Instellingen.
Selecteer de clusters die u wilt toewijzen aan een updategroep en selecteer vervolgens Updategroep toewijzen
Voer de naam in van de updategroep waaraan u het cluster wilt toewijzen en selecteer vervolgens Toewijzen.
Wijs een bestaand vlootlid toe aan een updategroep met behulp van de az fleet member update opdracht met de --update-group vlag die is ingesteld op de naam van de updategroep.
az fleet member update \
--resource-group $GROUP \
--fleet-name $FLEET \
--name member1 \
--update-group group-1
Een updatestrategie maken
Een updatestrategie bestaat uit een of meer fasen, waarbij een fase een of meer updategroepen kan bevatten.
Navigeer in Azure Portal naar uw Azure Kubernetes Fleet Manager-resource.
Selecteer in het servicemenu onder Instellingen de optie Strategieën voor het bijwerken>van meerdere clusters en vervolgens Maken.
Voer een naam in voor de strategie.
De eerste keer dat u de pagina bekijkt, wordt een uitlegdiagram voor de updatestrategie weergegeven, waarmee u kunt visualiseren hoe strategieën werken.
Selecteer Maak Fase en voer het volgende in:
- Fasenaam - de naam van de fase - deze moet uniek zijn voor alle fasenamen in de strategie.
- (Optioneel) Fasegoedkeuringen : selecteer deze optie als u wilt wachten op een goedkeuring voordat deze fase wordt gestart of nadat deze is voltooid. Zie Goedkeuringen toevoegen om groepen en fasen bij te werken voor meer informatie.
- (Optioneel) Onderbreken na fase : selecteer deze optie als u een pauze wilt definiëren voordat u naar de volgende fase gaat.
- (Optioneel) Onderbrekingsduur : selecteer een vooraf gedefinieerde duur of voer een aangepaste waarde in seconden in.
Wijs een of meer Updategroepen toe aan de fase en selecteer Maken.
Notitie
Het maximum aantal updategroepen in elke updatefase is 50.
Voor dit scenario maken we fasen en groepen die overeenkomen met de details die worden gebruikt voor het Azure Portal-proces.
Maak een JSON-bestand om de fasen en groepen voor de updateuitvoering te definiëren. Fasen worden opeenvolgend uitgevoerd in de volgorde waarin ze worden weergegeven in het JSON-bestand. Groepen worden parallel uitgevoerd binnen elke fase, dus volgorde is niet belangrijk. Het volgende voorbeeldbestand (example-stages.json) definieert een strategie met twee fasen en bevat optioneel
maxConcurrencyenmaxAllowedFailuresinstellingen:{ "stages": [ { "name": "stage-1", "maxConcurrency": "7", "maxAllowedFailures": "2", "groups": [ { "name": "group-1", "maxConcurrency": "3", "maxAllowedFailures": "1" }, { "name": "group-2", "maxConcurrency": "50%", "maxAllowedFailures": "25%" } ], "afterStageWaitInSeconds": 300 }, { "name": "stage-2", "maxConcurrency": "100%", "maxAllowedFailures": "0", "groups": [ { "name": "group-3", "maxConcurrency": "2", "maxAllowedFailures": "0" } ] } ] }maxConcurrencyHet
maxConcurrencyveld is optioneel en bepaalt hoeveel clusters gelijktijdig kunnen worden bijgewerkt op fase- of groepsniveau. Gebruik een grotere waarde om clusters binnen uw vloot sneller te upgraden, of een kleinere waarde voor een meer gecontroleerde uitrol die de impact beperkt als er problemen optreden.In dit voorbeeld stelt
stage-1maxConcurrencyin op"7", waardoor in deze fase maximaal"7"clusters gelijktijdig kunnen worden bijgewerkt. Binnenstage-1beperktgroup-1de gelijktijdigheid tot"3"clusters, wat betekent dat maximaal"3"in deze groep tegelijkertijd kan worden bijgewerkt.group-2maakt het mogelijk dat maximaal"50%"clusters tegelijkertijd worden bijgewerkt (bijvoorbeeld, als de groep vier clusters bevat, kunnen er maximaal 2 tegelijkertijd worden bijgewerkt).Waarden kunnen een vast geheel getal zijn (bijvoorbeeld
"3") of een percentage (bijvoorbeeld"100%"). Als u dit weglaat, past het systeem standaardwaarden toe. Zie Maximale gelijktijdigheid (preview) voor meer informatie over hoe deze waarden worden omgezet en de bovengrens.maxAllowedFailuresHet
maxAllowedFailuresveld is optioneel en bepaalt hoeveel mislukte upgradefouten in het lidcluster worden getolereerd voordat de groep of fase is gemarkeerd als mislukt. Standaard (wanneer dit niet is ingesteld of"0"), stopt één fout de volledige updateuitvoering.Met deze instelling wordt alleen het aantal fouten geëvalueerd. Er wordt geen minimum slagingspercentage afgedwongen. Een groep of fase kan dus op
Completedeindigen, zelfs als sommige of alle leden zijn mislukt, zolang de foutdrempel niet was overschreden toen Fleet zijn planningsbeslissingen nam.In dit voorbeeld stelt
stage-1maxAllowedFailuresin op"2", waarbij uitval van maximaal twee leden binnen de fase wordt getolereerd. Binnenstage-1,group-1tolereert fouten en"1"tolereertgroup-2"25%"van de leden die mislukken (bijvoorbeeld als de groep 4 clusters bevat, maximaal 1 fout wordt getolereerd).stage-2steltmaxAllowedFailuresin op"0", wat betekent dat elke fout de run onmiddellijk stopt en vaak nuttig is voor productiefases.Voor de meeste implementaties geeft u de voorkeur aan waarden op basis van percentages, omdat ze beter worden geschaald in verschillende groepsgrootten. Vermijd de waarde gelijk te stellen aan het totaal aantal leden, tenzij u voor dat segment opzettelijk gedrag wilt waarbij het in de praktijk nooit mislukt.
Waarden kunnen een vast geheel getal zijn (bijvoorbeeld
"3") of een percentage (bijvoorbeeld"25%"). Zie Maximaal toegestane fouten (preview) voor meer informatie over hoe deze waarden worden opgelost.Maak een nieuwe updatestrategie met behulp van de
az fleet updatestrategy createopdracht waarbij de--stagesvlag is ingesteld op de naam van uw JSON-bestand.az fleet updatestrategy create \ --resource-group $GROUP \ --fleet-name $FLEET \ --name $STRATEGY \ --stages example-stages.json
In het Terraform-voorbeeld in deze sectie wordt dezelfde strategievorm met twee fasen gemaakt als in het voorgaande Azure CLI-voorbeeld wordt weergegeven: stage-1 bevat group-1 en group-2, die parallel worden bijgewerkt en vervolgens worden gevolgd door een wachttijd van 300 seconden, waarna stage-2group-3 bijwerkt. In tegenstelling tot het CLI-JSON-voorbeeld stelt het voorbeeld geen maxConcurrency of maxAllowedFailures in voor een fase of groep, waardoor Fleet de standaardwaarden toepast. Als u deze instellingen wilt toevoegen, kunt u de stage en group blokken main.tf uitbreiden met de bijbehorende azurerm_kubernetes_fleet_update_strategy argumenten.
De Terraform-code controleren
Notitie
De voorbeeldcode voor dit artikel bevindt zich in de Azure Terraform GitHub-opslagplaats. Bekijk het logboekbestand met de testresultaten van de huidige en vorige versies van Terraform.
Zie meer artikelen en voorbeeldcode over het gebruik van Terraform voor het beheren van Azure-resources.
Maak een map om de terraform-voorbeeldcode te testen en maak deze de huidige map.
Maak een bestand met de naam
providers.tfen voeg de volgende code in:terraform { required_version = ">= 1.9.0" required_providers { azurerm = { source = "hashicorp/azurerm" version = "~> 4.77" } random = { source = "hashicorp/random" version = "~> 3.0" } } } provider "azurerm" { features {} }Maak een bestand met de naam
variables.tfen voeg de volgende code in:variable "location" { type = string description = "Azure region where the resource group and Fleet Manager are created." default = "eastus" } variable "resource_group_name" { type = string description = "Name of the resource group. If null, a unique name is generated." default = null } variable "fleet_name" { type = string description = "Name of the Azure Kubernetes Fleet Manager. If null, a unique name is generated." default = null } variable "update_strategy_name" { type = string description = "Name of the Fleet update strategy." default = "example-update-strategy" } variable "tags" { type = map(string) description = "Tags to apply to created resources." default = { environment = "demo" managed_by = "terraform" } }Maak een bestand met de naam
main.tfen voeg de volgende code in:resource "random_string" "suffix" { length = 6 lower = true numeric = true special = false upper = false } locals { resource_group_name = coalesce(var.resource_group_name, "rg-fleet-update-strategy-${random_string.suffix.result}") fleet_name = coalesce(var.fleet_name, "fleet-update-strategy-${random_string.suffix.result}") } resource "azurerm_resource_group" "example" { name = local.resource_group_name location = var.location tags = var.tags } resource "azurerm_kubernetes_fleet_manager" "example" { name = local.fleet_name location = azurerm_resource_group.example.location resource_group_name = azurerm_resource_group.example.name tags = var.tags } resource "azurerm_kubernetes_fleet_update_strategy" "example" { name = var.update_strategy_name kubernetes_fleet_manager_id = azurerm_kubernetes_fleet_manager.example.id stage { name = "stage-1" group { name = "group-1" } group { name = "group-2" } after_stage_wait_in_seconds = 300 } stage { name = "stage-2" group { name = "group-3" } } }Maak een bestand met de naam
outputs.tfen voeg de volgende code in:output "resource_group_name" { description = "Name of the created resource group." value = azurerm_resource_group.example.name } output "fleet_manager_id" { description = "Resource ID of the Azure Kubernetes Fleet Manager." value = azurerm_kubernetes_fleet_manager.example.id } output "fleet_manager_name" { description = "Name of the Azure Kubernetes Fleet Manager." value = azurerm_kubernetes_fleet_manager.example.name } output "update_strategy_id" { description = "Resource ID of the Fleet update strategy." value = azurerm_kubernetes_fleet_update_strategy.example.id }Kopieer het bestand
terraform.tfvars.examplevan het voorbeeld naarterraform.tfvarsin dezelfde map en bewerk vervolgens de waarden voor de Azure-regio, de naam van de resourcegroep, de Fleet-naam, de naam van de updatestrategie en de tags die u wilt gebruiken.cp terraform.tfvars.example terraform.tfvars
De configuratie initialiseren, valideren en toepassen
Voer terraform init uit om de Terraform-implementatie te initialiseren. Met deze opdracht worden de Azure providers gedownload die nodig zijn om uw Azure resources te beheren.
terraform init
Voer terraform fmt uit om de configuratiebestanden consistent te formatteren.
terraform fmt
Voer terraform-validatie uit om te controleren of de configuratiebestanden syntactisch geldig zijn.
terraform validate
Voer terraform-plan uit om een uitvoeringsplan te maken.
terraform plan -out main.tfplan
Voer terraform apply uit om het uitvoeringsplan toe te passen op uw cloudinfrastructuur.
terraform apply main.tfplan
De updatestrategie controleren
Haal de namen van de resourcegroep en Fleet Manager op uit de Terraform-uitvoer en pak de naam van de strategie uit de update_strategy_id uitvoer.
resource_group_name=$(terraform output -raw resource_group_name)
fleet_manager_name=$(terraform output -raw fleet_manager_name)
update_strategy_name=$(terraform output -raw update_strategy_id | awk -F'/' '{print $NF}')
De fasen en groepen van de strategie weergeven met behulp van de az fleet updatestrategy show opdracht.
az fleet updatestrategy show \
--resource-group $resource_group_name \
--fleet-name $fleet_manager_name \
--name $update_strategy_name
De stages-array van de opdrachtuitvoer toont stage-1 met group-1 en group-2 en een afterStageWaitInSeconds-waarde van 300, gevolgd door stage-2 met group-3, overeenkomstig de strategie die is gedefinieerd in main.tf.
De hulpbronnen opschonen
Voer terraform plan uit met de -destroy-vlag om een uitvoeringsplan voor vernietiging te maken.
terraform plan -destroy -out main.destroy.tfplan
Voer terraform apply uit om het destroy-plan toe te passen.
terraform apply main.destroy.tfplan
Warning
Met deze opdracht verwijdert u de updatestrategie, de Azure Kubernetes Fleet Manager en de resourcegroep die door dit voorbeeld is gemaakt, niet alleen de strategie. Controleer of de resourcegroep geen andere resources bevat die u wilt behouden voordat u deze opdracht uitvoert.
Volgende stappen
U kunt een updatestrategie gebruiken als onderdeel van een handmatige updateuitvoering of een profiel voor automatische upgrade. Zie:
- Instructies: Voer een upgrade uit van meerdere clusters met azure Kubernetes Fleet Manager-updateuitvoeringen.
- Instructies: Goedkeuringen toevoegen aan Updatestrategieën van Azure Kubernetes Fleet Manager.
- Instructies: Meerdere clusters automatisch upgraden met Behulp van Azure Kubernetes Fleet Manager.
- Veelgestelde vragen over updates voor meerdere clusters.