Over NGroups (preview)
Containers werden de standaard voor het verpakken, implementeren en beheren van cloudtoepassingen en het effectief beheren van deze containers is net zo cruciaal als het uitvoeren van de apps zelf. Azure Container Instances (ACI) is een flexibele en schaalbare serverloze computingservice waarmee u toepassingen in containers kunt uitvoeren zonder infrastructuur te beheren.
NGroups biedt geavanceerde mogelijkheden voor het beheren van meerdere gerelateerde containergroepen. Ondersteunde functies zijn onder andere:
- Meerdere exemplaren onderhouden
- Rolling upgrades
- Hoge beschikbaarheid via Beschikbaarheidszones (AZ's)
- Ondersteuning voor beheerde identiteit
- Ondersteuning voor vertrouwelijke containers
- Load balancing
- Zoneherverdeling (zone any)
De functie NGroups bouwt voort op ACI, zodat containergroepen veilig, maximaal beschikbaar zijn en ondersteuning bieden voor de functieset van ACI.
Zie voor meer informatie over Azure Container Instances: Wat is Azure Container Instances?
Architectuur op hoog niveau NGroups
Met Azure Container Instances moeten klanten elke afzonderlijke containergroep handmatig maken en onderhouden. NGroups biedt een eenvoudigere oplossing voor het maken, bijwerken en beheren van N containergroepexemplaren met één API-aanroep.
Het maken van een NGroups-resource is een proces in twee stappen.
Maak een CGProfile (Container Group Profile ), dat als sjabloon fungeert. In het CGProfile geeft een gebruiker CG-eigenschappen op die worden toegepast op alle CG's die zijn gemaakt door NGroups.
Maak een NGroups-resource . U kunt het gewenste aantal (aantal vereiste CG's) en een verwijzing naar het profiel van de containergroep opgeven, samen met andere relevante eigenschappen.
NGroups verwijst naar dit containergroepprofiel en roept vervolgens ACI-API's aan om CG's te maken/bij te werken met de eigenschappen die worden vermeld in het CGProfile.
Concepten
CG-profiel (Container Group Profile)
Voor een grootschalige cloudtoepassing moet u mogelijk meerdere containergroepen beheren. Vanaf vandaag moeten klanten, om meerdere CG's (Containergroepen) uit te voeren, relevante eigenschappen opgeven, zoals containerinstallatiekopieën, beleid voor opnieuw opstarten en andere eigenschappen. Dit kan leiden tot beperking, dubbele inspanning en beheeroverhead.
Om dit probleem te verhelpen, hebben NGroups containergroepprofielen geïntroduceerd. Het containergroepprofiel (CGProfile) fungeert als een sjabloon voor het maken van containergroepen met dezelfde set eigenschappen.
Hier volgen enkele algemene eigenschappen die kunnen worden opgegeven in een containergroepprofiel:
- osType (voorbeeld: Linux, Windows)
- Containers. Afbeeldingsnaam, geheugen, CPU enzovoort.
- restartPolicy
- ipAddress-protocol en interne poort
- shutdownGracePeriod
- timeToLive
En hier volgt een voorbeeld van een CG-profiel:
{
"location": "{{location}}",
"properties": {
"sku": "Standard",
"containers": [
{
"name": "container1",
"properties": {
"image": "nginx",
"ports": [
{
"protocol": "TCP",
"port": 80
}
],
"resources": {
"requests": {
"memoryInGB": 2.0,
"cpu": 1.0
}
}
}
}
],
"restartPolicy": "Always",
"shutdownGracePeriod": "PT1H",
"ipAddress": {
"ports": [
{
"protocol": "TCP",
"port": 80
}
],
"type": "Public",
},
"timeToLive": "PT1H",
"osType": "Linux"
}
}
NGroups
NGroups-resource biedt een manier om 'n' containergroepen te maken en te beheren met een uitgebreide set bewerkingen. Een NGroups-resource verwijst naar een containergroepprofielresource en gebruikt deze om N exemplaren van vergelijkbare CG's te maken. Binnen NGroups-resource kunnen klanten ook andere eigenschappen opgeven, waaronder maar niet beperkt tot het aantal CG's, updatevoorkeuren (handmatige of rolling update), load balancers, subnetten en andere relevante eigenschappen die ze willen koppelen aan CG's onder een NGroups-resource.
Notitie
Er moet een CG-profiel worden gemaakt voordat u een NGroups-resource maakt. Omdat het CG-profiel een ARM-resource is, heeft het eigen ARM-API's. Er moet een CG-profiel worden gemaakt voordat u een NGroups-resource maakt.
Voordelen van het verwijzen naar containergroepprofiel
Containergroepprofiel is een afzonderlijke resource van NGroups. Klanten kunnen meerdere NGroups maken die naar hetzelfde containergroepprofiel kunnen verwijzen. Het garandeert ook consistentie in alle NGroups die verwijzen naar één containergroepprofiel en vermijdt duplicatie.
Er kan ook één ACI CG worden gemaakt op basis van een CG-profiel. Hiermee kunt u snel overstappen van prototype naar productiemodus.
Hier volgt een voorbeeld van een NGroups-resource met beheerde identiteit en zones die verwijst naar een containergroepprofiel en drie containergroepen maakt:
{
"location": "{{location}}",
"properties": {
"elasticProfile": {
"desiredCount": 100 // specifies how many CGs to create
},
"containerGroupProfiles": [
{
"resource": {
"id": "/subscriptions/{{subId}}/resourceGroups/{{rgName}}/providers/Microsoft.ContainerInstance/containerGroupProfiles/{{cgProfile1}}"
}
}
]
}
}
Markeringen van NGroups-functies
- Biedt zowel rolling als handmatige update
- Meerdere zonegebonden containergroepen beheren
- Ondersteunt beheerde identiteiten
- Load balancer en application gateway toevoegen om verkeer tussen containergroepen te beheren
- Containergroepen beheren met verschillende containergroepprofielen
- Containergroepen koppelen en loskoppelen
NGroups-API
NGroups verwijst naar een CG-profiel en voegt andere gerelateerde eigenschappen en mogelijkheden toe. Voorbeeld:
- Het gewenste aantal CG's om te maken of uit te schalen
- Het subnet waarin CG's worden geïmplementeerd bij gebruik van een virtueel netwerk
- De Load Balancer of Application Gateway om inkomend netwerkverkeer aan de CG's te bieden
NGroups roept op zijn beurt de ACI ARM-API's aan om elke CG te maken en te beheren. Omdat er dezelfde ARM-API's worden gebruikt, is er geen verschil tussen de CG's die zijn gemaakt door NGroups en de CG's die rechtstreeks door de klant zijn gemaakt. Ze hebben precies dezelfde API-ervaring.
Een NGroups-resource bijwerken
Naarmate de vereisten veranderen, moeten we onze NGroups en de bijbehorende CG's blijven bijwerken. Er zijn twee updatemodi waarmee we een NGroups kunnen bijwerken: Handmatig (standaardoptie) en Rolling.
Bekijk een eenvoudig voorbeeld van het bijwerken van een CG-profielreferentie van cgprofile1 naar cgprofile2:
- In de handmatige modus werken we de verwijzing naar cgprofile2 bij en verzenden we een UPDATE PUT-aanvraag naar NGroups:
NGroups slaat deze nieuwe CG-profielreferentie op. Bestaande CG's worden echter niet bijgewerkt met deze verwijzing. Bestaande CG's worden momenteel uitgevoerd en er zijn geen gevolgen voor. Wanneer NGroups echter wordt uitgeschaald, worden de CG's gemaakt met cgprofile2.
- Hoe werken we bestaande CG's bij met cgprofile2?
Als u bestaande CG's wilt bijwerken met een nieuw CGProfile, geven we een handmatige updateopdracht uit met een expliciete lijst met CG's die we willen bijwerken. Met deze opdracht worden alleen de CG's bijgewerkt die zijn opgegeven in de lijst. Het bijwerken van de CG omvat het aanroepen van de PUT CG-API van de ACI. De CG's die niet in deze lijst zijn opgegeven, blijven actief met cgprofile1.
Deze modus biedt ons flexibiliteit om CG's selectief bij te werken en biedt volledige controle over de impact op productieworkloads.
Wanneer we in de rolling-modus de verwijzing naar cgprofile2 bijwerken en een opdracht UPDATE NGroups uitgeven, worden bestaande CG's bijgewerkt met cgprofile2. De update van bestaande CG's vindt plaats in kleine batches (en niet allemaal tegelijk). Dit zorgt ervoor dat er een minimale impact op uw workload is, omdat er mogelijk slechts een klein percentage CG's niet beschikbaar is tijdens de update.
We kunnen de batchgrootte en andere gerelateerde instellingen voor de rolling-updatemodus configureren met de NGroups-API.
NGroups uitproberen
Vereisten voor het werken aan NGroups
De momenteel ondersteunde API-versie is 2024-09-01-preview.
Registreer de functie
Microsoft.ContainerInstace/NGroupsPreview
voor uw abonnementen.Zodra de functievlagmen zijn toegepast op het abonnement, registreert u de resourceprovider
Microsoft.ContainerInstance
voor uw abonnementen.
Notitie
Gebruik de API-versie - 2024-09-01-preview en hoger voor preview.
Tip
Volg Azure Container Instance Swagger voor actuele informatie over NGroups-API's. Container Instance NGroups Swagger - 2024-11-01-preview
Als niet aan deze vereisten wordt voldaan, mislukken aanvragen en wordt het resourcetype NGroups niet herkend.
ARM-sjabloonvoorbeelden
CG-profiel maken: ContainerGroupProfile-Sample.json Zonegebonden NGroups maken met CGProfile: NGroups-Zonal-Sample.json
Klanten kunnen zien of een containergroep is gekoppeld aan een NGroups-resource door de eigenschap orchestratorId van de containergroep onder de JSON-weergave te controleren. De orchestratorId vertegenwoordigt de bijbehorende ARM-resource-id van NGroups.
Instructies
Een rolling update uitvoeren
We kunnen de functie Rolling Update gebruiken om automatisch alle CG's bij te werken naar een nieuwere versie zonder downtime van de NGroups. Raadpleeg de documentatie voor rolling updates: NGroups Rolling Update.
Een regionale (zonegebonden/niet-zonegebonden) NGroups maken
Maak eerst een CG-profiel. Hier volgt een voorbeeld van een CG-profiel. Momenteel ondersteunde API-versie is 2024-09-01-preview.
{
"properties": {
"sku": "Standard",
"containers": [
{
"name": "container1",
"properties": {
"image": "nginx",
"ports": [
{
"protocol": "TCP",
"port": 80
}],
"resources": {
"requests": {
"memoryInGB": 2.0,
"cpu": 1.0
}
}
}
}
],
"restartPolicy": "Always",
"shutdownGracePeriod": "PT1H",
"ipAddress": {
"ports": [
{
"protocol": "TCP",
"port": 80
}],
"type": "Public"
},
"timeToLive": "PT1H",
"osType": "Linux"
}
Vervolgens kunt u een zonegebonden/niet-zonegebonden NGroups maken door zones buiten de eigenschappen toe te voegen of de zonesmatrix leeg te laten.
{
"properties": {
"elasticProfile": {
"desiredCount": 5
},
"containerGroupProfiles": [
{
"resource": {
"id": "[resourceId('Microsoft.ContainerInstance/containerGroupProfiles', parameters('cgProfileName'))]"
}
}
]
},
"zones": [ "1", "2", "3" ]
}
Wanneer NGroups wordt uitgeschaald door de eigenschap desiredCount in te stellen, worden de CG's gelijkmatig verdeeld over alle opgegeven zones. Als één zone uitvalt, blijft de toepassing beschikbaar omdat de resterende CG's van NGroups in andere zones blijven worden uitgevoerd.
Kan ik CG bijwerken die is gemaakt door een NGroups-resource rechtstreeks via ACI CG-API's?
Ja, klanten hebben de flexibiliteit om containergroepen (CG's) rechtstreeks bij te werken met behulp van de ACI-API's (Azure Container Instances). Bekijk deze resource voor een beter begrip van ACI-containergroepen en om de gerelateerde API-opties te verkennen: Containergroepen in Azure Container Instances
Tijdens het maken of bijwerken van containergroepen zijn NGroups afhankelijk van dezelfde ACI-API's. Dit betekent dat klanten deze API's kunnen gebruiken om zo nodig specifieke containergroepen bij te werken, zonder extra configuraties.
Technische mogelijkheden en beperkingen
Zodra een NGroups-resource is gemaakt met een set zones (bijvoorbeeld { "1", "2" }), kunnen de zones niet worden verwijderd. Er kan echter een nieuwe zone worden toegevoegd aan de lijst. Bijvoorbeeld{ "1", "2", "3" }
Als een opgegeven zone niet beschikbaar is, mislukt de algehele NGroups-bewerking om de CG's te maken. Voer de aanvraag opnieuw uit zodra de zone een back-up heeft. Een andere optie is het verwijderen van de mislukte CG's.
Tijdens omlaag schalen worden exemplaren willekeurig verwijderd door NGroups, waardoor AZ-spread mogelijk niet altijd behouden blijft. Latere uitschaalbewerkingen proberen echter altijd de AZ-spread opnieuw te verdelen.
AZ-spread wordt niet ondersteund met Spot-containers. Als u een dergelijke vereiste hebt, neemt u contact op met het ACI-team.
Zie ook: impact van beschikbaarheid vanwege infrastructuur-/platformupdates.
NGroups-CG's maken met een voorvoegsel
Klanten kunnen NGroups-CG's maken met een voorvoegsel in plaats van alleen GUID-namen:
"properties": {
"elasticProfile": {
"desiredCount": 2,
"containerGroupNamingPolicy": {
"guidNamingPolicy": {
"prefix": "cg-"
}
}
},
Dit kan handig zijn wanneer u meerdere NGroups in één resourcegroep hebt en CG's wilt onderscheiden die horen bij elke NGroup (bijvoorbeeld in de weergave Azure Portal). U kunt deze ook wijzigen voor elke uitschaalbewerking om CG's te identificeren die in één bewerking zijn uitgeschaald.
NGroups maken met zowel door het systeem toegewezen als door de gebruiker toegewezen beheerde identiteiten
“location”: “{{location}}”
"identity": {
"type": "SystemAssigned, UserAssigned",
"userAssignedIdentities": {
"/subscriptions/{{subId}}/resourceGroups/{{rgName}}/providers/Microsoft.ManagedIdentity/userAssignedIdentities/{{userAssignedIdentity1}}": {},
"/subscriptions/{{subId}}/resourceGroups/{{rgName}}/providers/Microsoft.ManagedIdentity/userAssignedIdentities/{{userAssignedIdentity2}}": {}
}
Als ik enkele CG's uit een NGroups verwijder, kunnen de NGroups zichzelf herbouwen met nieuwe CG's om het gewenste aantal te behouden?
Ja, u kunt de eigenschap properties.elasticProfile.maintainDesiredCount bool instellen op true.
Er wordt een nieuwe CG gemaakt voor elke CG die wordt verwijderd/losgekoppeld van de NGroups. Er wordt geprobeerd de eigenschap DesiredCount van de NGroups te behouden naar de ingestelde waarde.
Dit is handig als u de NGroups wilt gebruiken als een pool die automatisch wordt aangevuld wanneer u CG's uit de pool haalt voor uw workloadscenario's.
Het is een nullable bool-eigenschap. Als u deze weglaat voor volgende NGroups PUT/update-aanroepen, wordt deze niet opnieuw ingesteld op false. Als u het opnieuw wilt instellen, moet u deze expliciet instellen op false. Wanneer het null/false is en wanneer een CG wordt verwijderd/losgekoppeld van de NGroups, vermindert de gewenstecount-eigenschap voor de NGroups dienovereenkomstig.
Hoe kan ik de CG-naam, NGroups-id en andere metagegevens ophalen die in de container worden doorgegeven?
Momenteel maken we alleen de CG-naam en orchestrator-id (de ARM-resource-id) beschikbaar. In de toekomst kunnen andere relevante eigenschappen worden overwogen. Deze twee eigenschappen worden weergegeven als containeromgevingsvariabelen.
Als u deze omgevingsvariabelen wilt ophalen in de container, geeft u deze tags op het niveau NGroups op:
tags: {
“metadata.container.environmentVariable.containerGroupName”: true,
“metadata.container.environmentVariable.orchestratorId”: true,
:
: // other NGroups tags you may have
:
}
NGroups begrijpt deze tags als speciaal en worden de vereiste omgevingsvariabelen naar elke container doorgegeven, zoals hier wordt weergegeven.
Wat is de impact van beschikbaarheid vanwege infrastructuur-/platformupdates?
Voor workloads die een hogere beschikbaarheid bieden (bijvoorbeeld NGroups verspreid over meerdere AZ's), is er nog steeds een lage mogelijkheid van CG's in meer dan één AZ die tegelijkertijd uitvalt. Dit kan gebeuren wanneer de onderliggende Azure-infrastructuur (hostmachines, virtuele-machineschaalsets, enzovoort) een update doorloopt (aangeroepen als een infrastructuurupdate of platformupdate).
Deze update wordt uitgevoerd door AZ met niet veel geautomatiseerde coördinatie tussen AZ's. Coördinatie wordt handmatig bijgehouden en best-effort.
Dus als toevallig een platformupdate gelijktijdig plaatsvindt tussen 2 of meer AZ's, kunnen CG's in deze AZ's gelijktijdig offline zijn waardoor uw NGroups niet beschikbaar zijn.
Vertrouwelijke containers gebruiken met NGroups
NGroups ondersteunt Vertrouwelijke ACI-containergroepen. Vertrouwelijke exemplaren worden gedefinieerd met behulp van de volgende eigenschappen binnen een containergroepprofiel.
{
"location": "{{location}}",
"properties": {
"sku": "Confidential",
"confidentialComputeProperties": {
"ccePolicy": "<base 64 encoded policy>"
},
"containers": [ ... ],
"restartPolicy": "Always",
"shutdownGracePeriod": "PT1H",
"ipAddress": { ... },
"timeToLive": "PT1H",
"osType": "Linux"
}
}
Raadpleeg de ACI-documentatie van vertrouwelijke containers hier: Zelfstudie: Een implementatie voorbereiden voor een vertrouwelijke container in Azure Container Instances
Voorbeelden
Voorbeeld van containergroepprofiel
{
"properties": {
"sku": "Standard",
"containers": [
{
"name": "web",
"properties": {
"image": "mcr.microsoft.com/azuredocs/aci-helloworld",
"ports": [
{
"protocol": "TCP",
"port": 80
}
],
"targetState": "Running",
"resources": {
"requests": {
"memoryInGB": 1,
"cpu": 1
}
}
}
}
],
"restartPolicy": "Always",
"shutdownGracePeriod": "PT2H",
"ipAddress": {
"ports": [
{
"protocol": "TCP",
"port": 80
}
],
"type": "Public"
},
"osType": "Linux",
"revision": 1
},
"id": "/subscriptions/{{subId}}/resourceGroups/{{rgName}}/providers/Microsoft.ContainerInstance/containerGroupProfiles/{{cgProfile1}}",
"name": "{{cgProfile1}}",
"type": "Microsoft.ContainerInstance/containerGroupProfiles",
"location": "{{location}}"
}
NGroups with Zones Sample
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"apiVersion": {
"type": "string",
"maxLength": 32
},
"NGroupsName": {
"type": "string",
"maxLength": 64
},
"containerGroupProfileName": {
"type": "string",
"maxLength": 64
},
"resourceTags": {
"type": "object"
},
"desiredCount": {
"type": "int"
}
},
"variables": {
"description": "This ARM template can be parameterized for a basic CRUD scenario for NGroups. It is self contained with cgProfile and NGroups resource",
"cgProfileName": "[parameters('containerGroupProfileName')]",
"NGroupsName": "[parameters('NGroupsName')]",
"resourcePrefix": "[concat('/subscriptions/', subscription().subscriptionId, '/resourceGroups/', resourceGroup().name, '/providers/')]"
},
"resources": [
{
"apiVersion": "[parameters('apiVersion')]",
"type": "Microsoft.ContainerInstance/containerGroupProfiles",
"name": "[variables('cgProfileName')]",
"location": "[resourceGroup().location]",
"properties": {
"sku": "Standard",
"containers": [
{
"name": "web",
"properties": {
"image": "mcr.microsoft.com/azuredocs/aci-helloworld",
"ports": [
{
"protocol": "TCP",
"port": 80
}
],
"resources": {
"requests": {
"memoryInGB": 1.0,
"cpu": 1.0
}
}
}
}
],
"restartPolicy": "Always",
"ipAddress": {
"ports": [
{
"protocol": "TCP",
"port": 80
}
],
"type": "Public"
},
"osType": "Linux"
}
},
{
"apiVersion": "[parameters('apiVersion')]",
"type": "Microsoft.ContainerInstance/NGroups",
"name": "[variables('NGroupsName')]",
"tags": "[parameters('resourceTags')]",
"location": "[resourceGroup().location]",
"dependsOn": [
"[concat('Microsoft.ContainerInstance/containerGroupProfiles/', variables('cgProfileName'))]"
],
"identity": {
"type": "systemAssigned"
},
"properties": {
"elasticProfile": {
"desiredCount": "[parameters('desiredCount')]",
"maintainDesiredCount": true
},
"containerGroupProfiles": [
{
"resource": {
"id": "[concat(variables('resourcePrefix'), 'Microsoft.ContainerInstance/containerGroupProfiles/', variables('cgProfileName'))]"
}
}
]
},
"zones": [ "1", "2", "3" ]
}
]
}