Aan de slag met veilige upgradeprocedures
Overzicht
In dit artikel worden veilige upgradeprocedures (SUP) van Azure Operator Service Manager (AOSM) geïntroduceerd. Met deze functieset kan een eindgebruiker veilig complexe upgrades uitvoeren van CNF-workloads (Container Network Function) die worden gehost op Azure Operator Nexus, in overeenstemming met de isSU-vereisten (In Service Software Upgrade), indien van toepassing. Zoek naar toekomstige artikelen in deze services om uit te breiden over SUP-functies en -mogelijkheden.
Inleiding
Een bepaalde netwerkservice die wordt ondersteund door Azure Operator Service Manager, bestaat uit een tot veel op containers gebaseerde netwerkfuncties (CNF's), die na verloop van tijd software-updates vereisen. Voor elke update is het noodzakelijk om een tot veel Helm-bewerkingen uit te voeren, afhankelijke netwerkfunctietoepassingen (NfApps) bij te werken, in een bepaalde volgorde, op een manier die het minst van invloed is op de netwerkservice. Bij Azure Operator Service Manager vertegenwoordigt Safe Upgrade Practices een set functies, waarmee de CNF-bewerkingen die nodig zijn voor het bijwerken van een netwerkservice op Azure Operator Nexus, kunnen worden geautomatiseerd.
- Update voor SNS-reput: voer de helm-upgradebewerking uit voor alle NfApps in NFDV.
- Nexus Platform - Ondersteuning voor SNS-reputbewerkingen op Nexus-platformdoelen.
- Time-outs voor bewerkingen: mogelijkheid om operationele time-outs in te stellen voor elke NfApp-bewerking.
- Synchrone bewerkingen: mogelijkheid om één seriële NfApp-bewerking tegelijk uit te voeren.
- Onderbreken bij fout: stel op basis van vlag het foutgedrag in om alleen de laatste NfApp-bewerking terug te draaien.
- Testvalidatie voor één grafiek: een Helm-testbewerking uitvoeren na een maken of bijwerken.
- Geherstructureerde SNS Reput - Verbeterde methoden, voegt updatevolgorde en opschoningscontrole toe.
Upgradebenadering
Als u een bestaande Azure Operator Service Manager-sitenetwerkservice (SNS) wilt bijwerken, voert de operator een aanvraag voor het bijwerken van een reput uit voor de geïmplementeerde SNS-resource. Wanneer de SNS CNF's met meerdere NfApps bevat, wordt de aanvraag uitgewaakt voor alle NfApps die zijn gedefinieerd in de NFDV-versie (network function definition version). Standaard worden ze in de volgorde weergegeven of optioneel in de volgorde die is gedefinieerd door de parameter UpdateDependsOn.
Voor elke NfApp ondersteunt de aanvraag voor het bijwerken van de opslagplaats het verhogen van een helm-grafiekversie, het toevoegen/verwijderen van Helm-waarden en/of het toevoegen/verwijderen van NfApps. Time-outs kunnen per NfApp worden ingesteld op basis van bekende toegestane runtimes, maar NfApps kan alleen in seriële volgorde worden verwerkt, één na de andere. De reput-update implementeert de volgende verwerkingslogica:
- NfApps worden verwerkt volgens updateDependsOn-volgorde of in de volgorde waarin ze worden weergegeven.
- NfApps met parameter ApplicationEnabled die is ingesteld om uit te schakelen, worden overgeslagen.
- NFApps geïmplementeerd, maar waarnaar niet wordt verwezen door de nieuwe NFDV, worden verwijderd.
- NFApps die gebruikelijk zijn tussen oude en nieuwe NFDV's, worden bijgewerkt.
- NFApps die zich alleen in de nieuwe NFDV bevinden, worden geïnstalleerd.
Om resultaten te garanderen, wordt NfApp-tests ondersteund met behulp van Helm, helm-upgrade vooraf/na tests of zelfstandige Helm-tests. Voor mislukte tests vóór/na tests wordt de atomische parameter gehonoreerd. Met atomic/true wordt de mislukte grafiek teruggedraaid. Met atomisch/onwaar wordt er geen terugdraaiactie uitgevoerd. Voor zelfstandige Helm-tests heeft de parameter rollbackOnTestFailure ons geëerd. Met rollbackOnTestFailure/true wordt de mislukte grafiek teruggedraaid. Met rollbackOnTestFailure/false wordt er geen terugdraaiactie uitgevoerd.
Vereisten
Bij het plannen van een upgrade met Behulp van Azure Operator Service Manager moet u de volgende vereisten vóór de uitvoering van de upgrade afhandelen om de tijd te optimaliseren die nodig is om de upgrade uit te voeren.
Onboard bijgewerkte artefacten met behulp van publisher- en/of designerwerkstromen.
- Publisher, Store, Network Service Design (NSDg) en netwerkfunctieontwerpgroep (NFDg) zijn statisch en hoeven niet te worden gewijzigd.
- Er is een nieuw artefactmanifest nodig om de nieuwe grafieken en afbeeldingen op te slaan. Zie de onboardingdocumentatie voor meer informatie over het uploaden van nieuwe grafieken en afbeeldingen.
- Er zijn nieuwe NFDV- en netwerkserviceontwerpversie (NSDV) nodig, onder bestaande NFDg en NSDg.
- In de stapsgewijze sectie worden basiswijzigingen in de NFDV behandeld.
- Nieuwe NSDV is alleen vereist als er een nieuwe CGS-versie (Configuration Group Schema) wordt geïntroduceerd.
- Indien nodig, nieuwe CGS.
- Vereist als een upgrade nieuwe configuratieparameters introduceert.
- Publisher, Store, Network Service Design (NSDg) en netwerkfunctieontwerpgroep (NFDg) zijn statisch en hoeven niet te worden gewijzigd.
Bijgewerkte artefacten maken met behulp van de Operator-werkstroom.
- Maak indien nodig nieuwe configuratiegroepwaarden (CGV's) op basis van nieuwe CGS.
- Hergebruik en maak nettolading door de bestaande site- en sitenetwerkserviceobjecten te bevestigen.
Werk sjablonen bij om ervoor te zorgen dat upgradeparameters zijn ingesteld op basis van het vertrouwen in de upgrade en het gewenste foutgedrag.
- Instellingen die worden gebruikt voor productie, kunnen foutdetails onderdrukken, terwijl instellingen die worden gebruikt voor foutopsporing of testen, ervoor kiezen om deze details beschikbaar te maken.
Upgradeprocedure
Volg het volgende proces om een upgrade te activeren met Azure Operator Service Manager.
Nieuwe NFDV-resource maken
Voor nieuwe NFDV-versies moet deze een geldige SemVer-indeling hebben, waarbij alleen hogere incrementele waarden van patch- en secundaire versies zijn toegestaan. Een lagere NFDV-versie is niet toegestaan. Gezien een CNF die is geïmplementeerd met NFDV 2.0.0, kan de nieuwe NFDV versie 2.0.1 of 2.1.0 zijn, maar niet 1.0.0 of 3.0.0.
Nieuwe NFDV-parameters bijwerken
Helm-grafiekversies kunnen worden bijgewerkt of Helm-waarden kunnen indien nodig worden bijgewerkt of geparameteriseerd. Er kunnen ook nieuwe NfApps worden toegevoegd waar ze niet bestonden in de geïmplementeerde versie.
NFDV bijwerken voor gewenste NfApp-bestelling
UpdateDependsOn is een NFDV-parameter die wordt gebruikt om de volgorde van NfApps op te geven tijdens updatebewerkingen. Als UpdateDependsOn niet is opgegeven, wordt seriële volgorde van CNF-toepassingen gebruikt, zoals weergegeven in de NFDV.
NFDV bijwerken voor het gewenste upgradegedrag
Zorg ervoor dat u eventuele gewenste time-outs voor CNF-toepassingen, de atomische parameter en rollbackOnTestFailure-parameter instelt. Het kan handig zijn om deze parameters in de loop van de tijd te wijzigen, omdat er meer vertrouwen wordt verkregen in de upgrade.
Probleem met SNS-reput
Wanneer onboarding is voltooid, wordt de reput-bewerking verzonden. Afhankelijk van het aantal, de grootte en complexiteit van de NfApps kan het enige tijd duren voordat de reputbewerking is voltooid (meerdere uren).
Resultaten van reput onderzoeken
Als de opslagplaats een geslaagd resultaat rapporteert, is de upgrade voltooid en moet de gebruiker de status en beschikbaarheid van de service valideren. Als de opslagplaats een fout rapporteert, volgt u de stappen in de sectie herstel van upgradefouten om door te gaan.
Procedure voor opnieuw proberen
In gevallen waarin een reput-update mislukt, kan het volgende proces worden gevolgd om de bewerking opnieuw uit te voeren.
Diagnose mislukte NfApp
Los de hoofdoorzaak voor NfApp-fouten op door logboeken en andere foutopsporingsgegevens te analyseren.
Voltooide grafieken handmatig overslaan
Nadat de mislukte NfApp is hersteld, maar voordat u een upgrade opnieuw probeert uit te voeren, kunt u overwegen de parameter applicationEnablement te wijzigen om het gedrag van nieuwe pogingen te versnellen. Deze parameter kan onwaar worden ingesteld, waarbij een NfApp moet worden overgeslagen. Deze parameter kan handig zijn wanneer een NfApp geen upgrade vereist.
Probleem met reput retry van SNS (herhalen tot geslaagd)
Standaard probeert de reput NfApps in de gedeclareerde updatevolgorde, tenzij ze worden overgeslagen met de vlag applicationEnablement.
ApplicationEnablement gebruiken
In de NFDV-resource, onder deployParametersMappingRuleProfile, is de eigenschap applicationEnablement van het type enum, die waarden accepteert: Onbekend, Ingeschakeld of uitgeschakeld. Het kan worden gebruikt om NfApp-bewerkingen uit te sluiten tijdens de implementatie van de netwerkfunctie (NF).
Wijzigingen in Publisher
Voor de eigenschap applicationEnablement heeft de uitgever twee opties: geef een standaardwaarde op of parametereer deze.
Voorbeeld van NFDV
De NFDV wordt door publisher gebruikt om standaardwaarden in te stellen voor applicationEnablement.
{
"location":"<location>",
"properties": {
"networkFunctionTemplate": {
"networkFunctionApplications": [
{
"artifactProfile": {
"helmArtifactProfile": {
"var":"var"
},
"artifactStore": {
"id": "<artifactStore id>"
}
},
"deployParametersMappingRuleProfile": {
"helmMappingRuleProfile": {
"releaseNamespace": "{deployParameters.role1releasenamespace}",
"releaseName": "{deployParameters.role1releasename}"
},
"applicationEnablement": "Enabled"
},
"artifactType": "HelmPackage",
"dependsOnProfile": "null",
"name": "hellotest"
},
{
"artifactProfile": {
"helmArtifactProfile": {
"var":"var"
},
"artifactStore": {
"id": "<artifactStore id>"
}
},
"deployParametersMappingRuleProfile": {
"helmMappingRuleProfile": {
"releaseNamespace": "{deployParameters.role2releasenamespace}",
"releaseName": "{deployParameters.role2releasename}"
},
"applicationEnablement": "Enabled"
},
"artifactType": "HelmPackage",
"dependsOnProfile": "null",
"name": "hellotest1"
}
],
"nfviType": "AzureArcKubernetes"
},
"description": "null",
"deployParameters": {"type":"object","properties":{"role1releasenamespace":{"type":"string"},"role1releasename":{"type":"string"},"role2releasenamespace":{"type":"string"},"role2releasename":{"type":"string"}},"required":["role1releasenamespace","role1releasename","role2releasenamespace","role2releasename"]},
"networkFunctionType": "ContainerizedNetworkFunction"
}
}
Voorbeeld van CGS-resource (Configuration Group Schema)
De CGS wordt door de uitgever gebruikt voor het vereisen van een roleOverrideValues-variabele die tijdens runtime door Operator moet worden verstrekt. RoleOverrideValues kan niet-standaardinstellingen voor applicationEnablement bevatten.
{
"type": "object",
"properties": {
"location": {
"type": "string"
},
"nfviType": {
"type": "string"
},
"nfdvId": {
"type": "string"
},
"helloworld-cnf-config": {
"type": "object",
"properties": {
"role1releasenamespace": {
"type": "string"
},
"role1releasename": {
"type": "string"
},
"role2releasenamespace": {
"type": "string"
},
"role2releasename": {
"type": "string"
},
"roleOverrideValues1": {
"type": "string"
},
"roleOverrideValues2": {
"type": "string"
}
},
"required": [
"role1releasenamespace",
"role1releasename",
"role2releasenamespace",
"role2releasename",
"roleOverrideValues1",
"roleOverrideValues2"
]
}
},
"required": [
"nfviType",
"nfdvId",
"location",
"helloworld-cnf-config"
]
}
Operatorwijzigingen
Operators nemen standaard applicationEnablement-waarden over zoals gedefinieerd door de NFDV. Als applicationEnablement is geparameteriseerd in CGS, moet deze tijdens runtime worden doorgegeven via de eigenschap deploymentValues.
Voorbeeld van CGV-resource (configuratiegroepwaarde)
De CGV wordt door de operator gebruikt om de variabele roleOverrideValues tijdens runtime in te stellen. RoleOverrideValues bevatten niet-standaardinstellingen voor applicationEnablement.
{
"location": "<location>",
"nfviType": "AzureArcKubernetes",
"nfdvId": "<nfdv_id>",
"helloworld-cnf-config": {
"role1releasenamespace": "hello-test-releasens",
"role1releasename": "hello-test-release",
"role2releasenamespace": "hello-test-2-releasens",
"role2releasename": "hello-test-2-release",
"roleOverrideValues1": "{\"name\":\"hellotest\",\"deployParametersMappingRuleProfile\":{\"applicationEnablement\":\"Enabled\",\"helmMappingRuleProfile\":{\"releaseName\":\"override-release\",\"releaseNamespace\":\"override-namespace\",\"helmPackageVersion\":\"1.0.0\",\"values\":\"\",\"options\":{\"installOptions\":{\"atomic\":\"true\",\"wait\":\"true\",\"timeout\":\"30\",\"injectArtifactStoreDetails\":\"true\"},\"upgradeOptions\":{\"atomic\":\"true\",\"wait\":\"true\",\"timeout\":\"30\",\"injectArtifactStoreDetails\":\"true\"}}}}}",
"roleOverrideValues2": "{\"name\":\"hellotest1\",\"deployParametersMappingRuleProfile\":{\"applicationEnablement\" : \"Enabled\"}}"
}
}
Voorbeeld van NF ARM-sjabloon
De NF ARM-sjabloon wordt door de operator gebruikt om de variabelen roleOverrideValues, die door CGV zijn ingesteld, in te dienen bij de resourceprovider (RP). De operator kan indien nodig de applicationEnablement-instelling in CGV wijzigen en dezelfde NF ARM-sjabloon opnieuw indienen om het gedrag tussen iteraties te wijzigen.
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"nameValue": {
"type": "string",
"defaultValue": "HelloWorld"
},
"locationValue": {
"type": "string",
"defaultValue": "eastus"
},
"nfviTypeValue": {
"type": "string",
"defaultValue": "AzureArcKubernetes"
},
"nfviIdValue": {
"type": "string"
},
"config": {
"type": "object",
"defaultValue": {}
},
"nfdvId": {
"type": "string"
}
},
"variables": {
"deploymentValuesValue": "[string(createObject('role1releasenamespace', parameters('config').role1releasenamespace, 'role1releasename',parameters('config').role1releasename, 'role2releasenamespace', parameters('config').role2releasenamespace, 'role2releasename',parameters('config').role2releasename))]",
"nfName": "[concat(parameters('nameValue'), '-CNF')]",
"roleOverrideValues1": "[string(parameters('config').roleOverrideValues1)]",
"roleOverrideValues2": "[string(parameters('config').roleOverrideValues2)]"
},
"resources": [
{
"type": "Microsoft.HybridNetwork/networkFunctions",
"apiVersion": "2023-09-01",
"name": "[variables('nfName')]",
"location": "[parameters('locationValue')]",
"properties": {
"networkFunctionDefinitionVersionResourceReference": {
"id": "[parameters('nfdvId')]",
"idType": "Open"
},
"nfviType": "[parameters('nfviTypeValue')]",
"nfviId": "[parameters('nfviIdValue')]",
"allowSoftwareUpdate": true,
"configurationType": "Open",
"deploymentValues": "[string(variables('deploymentValuesValue'))]",
"roleOverrideValues": [
"[variables('roleOverrideValues1')]",
"[variables('roleOverrideValues2')]"
]
}
}
]
}
NfApps overslaan die geen wijzigingen hebben
De functie SkipUpgrade is ontworpen om de tijd die nodig is voor CNF-upgrades te optimaliseren. Wanneer de uitgever deze vlag inschakelt in de RoleOverrideValues
onderstaande UpgradeOptions
, voert de AOSM-servicelaag bepaalde prechecks uit om te bepalen of een upgrade voor een specifieke NFApplication
kan worden overgeslagen. Als aan alle criteria voor vooraf controleren wordt voldaan, wordt de upgrade voor die toepassing overgeslagen. Anders wordt een upgrade uitgevoerd op clusterniveau.
Criteria vooraf controleren
Een upgrade kan worden overgeslagen als aan alle volgende voorwaarden wordt voldaan:
- De
NFApplication
inrichtingsstatus is geslaagd. - De naam of versie van de Helm-grafiek is niet gewijzigd.
- De Helm-waarden zijn niet gewijzigd.
De functie SkipUpgrade in- of uitschakelen
De functie SkipUpgrade is standaard uitgeschakeld. Als deze optionele parameter niet is opgegeven RoleOverrideValues
onder UpgradeOptions
, worden CNF-upgrades op de traditionele manier uitgevoerd, waarbij de NFApplications
upgrade op clusterniveau wordt uitgevoerd.
SkipUpgrade inschakelen met netwerkfunctieresource
Raadpleeg het volgende voorbeeld om de functie SkipUpgrade in te schakelen via RoleOverrideValues
.
{
"location": "eastus2euap",
"properties": {
"publisherName": "xyAzureArcRunnerPublisher",
"publisherScope": "Private",
"networkFunctionDefinitionGroupName": "AzureArcRunnerNFDGroup",
"networkFunctionDefinitionVersion": "1.0.0",
"networkFunctionDefinitionOfferingLocation": "eastus2euap",
"nfviType": "AzureArcKubernetes",
"nfviId": "/subscriptions/4a0479c0-b795-4d0f-96fd-c7edd2a2928f/resourcegroups/ashutosh_test_rg/providers/microsoft.extendedlocation/customlocations/ashutosh_test_cl",
"deploymentValues": "",
"roleOverrideValues": [
"{\"name\":\"hellotest\",\"deployParametersMappingRuleProfile\":{\"helmMappingRuleProfile\":{\"options\":{\"installOptions\":{\"atomic\":\"true\",\"wait\":\"true\",\"timeout\":\"1\"},\"upgradeOptions\":{\"atomic\":\"true\",\"wait\":\"true\",\"timeout\":\"4\",\"skipUpgrade\":\"true\"}}}}}",
"{\"name\":\"runnerTest\",\"deployParametersMappingRuleProfile\":{\"helmMappingRuleProfile\":{\"options\":{\"installOptions\":{\"atomic\":\"true\",\"wait\":\"true\",\"timeout\":\"5\"},\"upgradeOptions\":{\"atomic\":\"true\",\"wait\":\"true\",\"timeout\":\"5\"}}}}}"
]
}
}
Uitleg van het voorbeeld
- NfApplication:
hellotest
- De
skipUpgrade
vlag is ingeschakeld. Als de upgradeaanvraag voldoethellotest
aan de criteria voor vooraf controleren, wordt de upgrade overgeslagen op serviceniveau.
- De
- NfApplication:
runnerTest
- De
skipUpgrade
vlag is niet opgegeven.runnerTest
Voert daarom een traditionele Helm-upgrade uit op clusterniveau, zelfs als aan de criteria vooraf wordt voldaan.
- De
Ondersteuning voor in service-upgrades
Azure Operator Service Manager biedt waar mogelijk ondersteuning voor service-upgrades, een upgrademethode die een implementatieversie vooruit gaat zonder de service te onderbreken. De mogelijkheid voor een bepaalde service die zonder onderbreking kan worden geüpgraded, is echter een functie van de service zelf. Raadpleeg de service-uitgever voor meer informatie over de mogelijkheden voor in-service-upgrades.
Uitziende doelstellingen doorsturen
Azure Operator Service Manager blijft de functieset Safe Upgrade Practice vergroten en verbeteringen aanbrengen in aangeboden updateservices. De volgende functies worden momenteel in overweging genomen voor toekomstige beschikbaarheid:
- Besturingselement Voor upgradeopties verbeteren: parameters effectiever beschikbaar maken.
- NfApp overslaan zonder wijziging - Verwerking van NfApps overslaan waarbij er geen wijzigingen optreden.
- NFDV-terugdraaiactie uitvoeren op fout- op basis van vlag alle voltooide NfApps terugdraaien bij fout.
- Asynchroon werken: de mogelijkheid om meerdere NfApp-bewerkingen tegelijk uit te voeren.
- Installatiekopieën downloaden: mogelijkheid om installatiekopieën vooraf te laden naar de edge-opslagplaats.
- Doelgrafieken voor validatie: de mogelijkheid om een Helm-test alleen uit te voeren op een specifieke NfApp.