Condividi tramite


Informazioni su NGroups (anteprima)

I contenitori sono diventati lo standard per la creazione di pacchetti, la distribuzione e la gestione delle applicazioni cloud e la gestione efficace di questi contenitori è fondamentale come l'esecuzione delle app stesse. Istanze di Azure Container (ACI) è un servizio di elaborazione serverless flessibile e scalabile che consente di eseguire applicazioni in contenitori senza gestire l'infrastruttura.

NGroups offre funzionalità avanzate per la gestione di più gruppi di contenitori correlati. Le funzionalità supportate includono:

  • Gestione di più istanze
  • Aggiornamenti in sequenza
  • Disponibilità elevata tramite zone di disponibilità (AZ)
  • Supporto delle identità gestite
  • Supporto per i contenitori riservati
  • Bilanciamento del carico
  • Ribilanciamento della zona (zona qualsiasi)

La funzionalità NGroups si basa su ACI, assicurandosi che i gruppi di contenitori siano sicuri, a disponibilità elevata e supportino il set di funzionalità di ACI.

Per informazioni sulle Istanze di Azure Container, vedere: Che cos'è Istanze di Azure Container?

Architettura generale NGroups

Diagramma che mostra il flusso di lavoro di alto livello di NGroups.

Con Istanze di Azure Container, i clienti devono creare e gestire ogni singolo gruppo di contenitori manualmente. NGroups offre una soluzione più semplice per creare, aggiornare e gestire istanze di gruppi di contenitori N con una singola chiamata API.

La creazione di una risorsa NGroups è un processo in due passaggi.

  1. Creare un profilo del gruppo di contenitori (CGProfile), che funge da modello. Nel file CGProfile, un utente specifica le proprietà CG applicate in tutti i gruppi di controllo di rete creati da NGroups.

  2. Creare una risorsa NGroups . È possibile specificare il numero desiderato (numero di gruppi di controllo necessari) e un riferimento al profilo del gruppo di contenitori insieme ad altre proprietà pertinenti.

NGroups fa riferimento a questo profilo del gruppo di contenitori e quindi chiama le API ACI per creare/aggiornare i gruppi di controllo di accesso con le proprietà indicate nel file CGProfile.

Concetti

Profilo gruppo contenitori (profilo CG)

Un'applicazione cloud su larga scala può richiedere la gestione di più gruppi di contenitori. A partire da oggi, per eseguire più CG (gruppi di contenitori), i clienti devono fornire proprietà pertinenti, ad esempio immagini del contenitore, criteri di riavvio e altre proprietà ogni volta. Ciò può comportare una limitazione, un impegno duplicato e un sovraccarico di gestione.

Per alleviare questo problema, NGroups ha introdotto i profili del gruppo di contenitori. Il profilo del gruppo di contenitori (CGProfile) funge da modello per la creazione di gruppi di contenitori con lo stesso set di proprietà.

Ecco alcune delle proprietà comuni che è possibile specificare in un profilo di gruppo di contenitori:

  • osType (esempio: Linux, Windows)
  • contenitori. Nome dell'immagine, memoria, CPU e così via.
  • restartPolicy
  • protocollo ipAddress e porta interna
  • shutdownGracePeriod
  • timeToLive

Ecco un profilo CG di esempio:

{ 
    "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" 
    }     
}

NGroup

La risorsa NGroups consente di creare e gestire gruppi di contenitori "n" con un set completo di operazioni. Una risorsa NGroups fa riferimento a una risorsa profilo del gruppo di contenitori e usa tale risorsa per creare N istanze di gruppi di controllo simili. All'interno della risorsa NGroups, i clienti possono anche specificare altre proprietà, tra cui, a titolo esemplificativo, il numero di gruppi di disponibilità, le preferenze di aggiornamento (aggiornamento manuale o in sequenza), i servizi di bilanciamento del carico, le subnet e altre proprietà pertinenti da associare ai gruppi di disponibilità in una risorsa NGroups.

Nota

Prima di creare una risorsa NGroups, è necessario creare un profilo CG. Poiché il profilo CG è una risorsa ARM, ha le proprie API ARM. Prima di creare una risorsa NGroups, è necessario creare un profilo CG.

Vantaggi del riferimento al profilo del gruppo di contenitori

  • Il profilo del gruppo di contenitori è una risorsa separata da NGroups. I clienti possono creare più NGroup che possono fare riferimento allo stesso profilo del gruppo di contenitori. Garantisce inoltre la coerenza tra tutti i gruppi di sicurezza di rete che fanno riferimento a un singolo profilo di gruppo di contenitori ed evita la duplicazione.

  • È anche possibile creare un singolo CG ACI da un profilo CG. Consente di passare rapidamente dal prototipo alla modalità di produzione.

Di seguito è riportato un esempio di risorsa NGroups con identità gestita e zone che fanno riferimento a un profilo di gruppo di contenitori e crea tre gruppi di contenitori:

{ 
    "location": "{{location}}", 
    "properties": { 
        "elasticProfile": { 
            "desiredCount": 100 // specifies how many CGs to create
        }, 
        "containerGroupProfiles": [ 
            { 
                "resource": { 
                    "id": "/subscriptions/{{subId}}/resourceGroups/{{rgName}}/providers/Microsoft.ContainerInstance/containerGroupProfiles/{{cgProfile1}}" 
                } 
            } 
        ] 
    } 
}

Evidenziazioni delle funzionalità NGroups

  • Offre sia aggiornamento in sequenza che manuale
  • Gestire i gruppi di contenitori tra zone
  • Supporta le identità gestite
  • Aggiungere il servizio di bilanciamento del carico e il gateway applicazione per gestire il traffico tra gruppi di contenitori
  • Gestire i gruppi di contenitori con profili di gruppo di contenitori diversi
  • Collegare e scollegare gruppi di contenitori

NGroups API

NGroups fa riferimento a un profilo CG e aggiunge altre proprietà e funzionalità correlate. Esempio:

  • Numero desiderato di gruppi di disponibilità per creare o aumentare il numero di istanze
  • Subnet in cui vengono distribuiti gruppi di disponibilità quando si usa una rete virtuale
  • Load Balancer o gateway applicazione per fornire l'ingresso di rete ai gruppi di disponibilità

NGroups richiama a sua volta le API ARM di ACI per creare e gestire ogni CG. Poiché usa le stesse API ARM, non esiste alcuna differenza tra i gruppi di disponibilità creati da NGroups e i gruppi di disponibilità creati direttamente dal cliente.Since it uses the same ARM APIs, there's no difference between the CGs created by NGroups and the CGs created directly by the customer. Hanno esattamente la stessa esperienza API.

Aggiornamento di una risorsa NGroups

Man mano che cambiano i requisiti, è necessario continuare ad aggiornare i gruppi di sicurezza di rete e i relativi gruppi di disponibilità. Esistono due modalità di aggiornamento con cui è possibile aggiornare un NGroups- Manuale (opzione predefinita) e Rolling.

Si consideri un esempio di base dell'aggiornamento di un riferimento al profilo CG da cgprofile1 a cgprofile2:

  • In modalità manuale si aggiorna il riferimento a cgprofile2 e si invia una richiesta UPDATE PUT a NGroups:

NGroups archivia questo nuovo riferimento al profilo CG. Ma non aggiorna i gruppi di disponibilità esistenti con questo riferimento. I gruppi di disponibilità esistenti sono attualmente in esecuzione e non hanno alcun impatto su di essi. Tuttavia, quando NGroups viene ridimensionato, i gruppi di controllo vengono creati con cgprofile2.

  • Come si aggiornano i gruppi di disponibilità esistenti con cgprofile2?

Per aggiornare i gruppi di disponibilità esistenti con il nuovo file CGProfile, viene eseguito un comando di aggiornamento manuale con un elenco esplicito di gruppi di disponibilità da aggiornare.To update existing CGs with new CGProfile, we issue a manual update command with an explicit list of CGs we want to update. Questo comando aggiorna solo i gruppi di disponibilità specificati nel relativo elenco. L'aggiornamento del CG comporta la chiamata dell'API PUT CG di ACI. I gruppi di disponibilità non specificati in questo elenco continuano a essere eseguiti con cgprofile1.

Questa modalità offre flessibilità per aggiornare i gruppi di disponibilità in modo selettivo e offre il controllo completo sull'impatto sui carichi di lavoro di produzione.

In modalità in sequenza, quando aggiorniamo il riferimento a cgprofile2 ed esegui un comando UPDATE NGroups, i CG esistenti vengono aggiornati con cgprofile2.In modalità rolling mode, when we update the reference to cgprofile2 and issue an UPDATE NGroups command, existing CGs are updated with cgprofile2. L'aggiornamento ai gruppi di disponibilità esistenti avviene in batch di piccole dimensioni (e non tutti contemporaneamente). In questo modo si garantisce un impatto minimo sul carico di lavoro, perché durante l'aggiornamento potrebbe non essere disponibile solo una piccola percentuale di gruppi di disponibilità.

È possibile configurare le dimensioni del batch e altre impostazioni relative alla modalità di aggiornamento in sequenza con l'API NGroups.

Provare NGroups

Prerequisiti per l'uso di NGroup

La versione dell'API attualmente supportata è 2024-09-01-preview.

  1. Registrare la funzionalità Microsoft.ContainerInstace/NGroupsPreview nelle sottoscrizioni.

  2. Dopo aver applicato i flag di funzionalità alla sottoscrizione, registrare il provider di Microsoft.ContainerInstance risorse nelle sottoscrizioni.

Nota

Usare api-version - 2024-09-01-preview e versioni successive per l'anteprima.

Suggerimento

Per informazioni aggiornate sulle API NGroups, seguire Swagger dell'istanza di Azure Container. NGroup dell'istanza del contenitore Swagger - 2024-11-01-preview

Se questi prerequisiti non sono soddisfatti, le richieste hanno esito negativo e il tipo di risorsa NGroups non viene riconosciuto.

Esempi di modelli di Resource Manager

Creare un profilo CG: ContainerGroupProfile-Sample.json Creare NGroup di zona con CGProfile: NGroups-Zonal-Sample.json

I clienti possono verificare se un gruppo di contenitori è associato a una risorsa NGroups controllando la proprietà orchestratorId del gruppo di contenitori nella visualizzazione JSON. OrchestratorId rappresenta l'ID risorsa ARM NGroups associato.

Screenshot di un file JSON ARM di NGroups che mostra la proprietà OrchestratorId.

Guida pratica

Eseguire un aggiornamento in sequenza

È possibile usare la funzionalità Aggiornamento in sequenza per aggiornare automaticamente tutti i gruppi di disponibilità a una versione più recente senza tempi di inattività dei gruppi di sicurezza di rete. Vedere la documentazione relativa all'aggiornamento in sequenza: Aggiornamento in sequenza di NGroups.

Creare un gruppo di gruppi NGroup a livello di area (zonale/non di zona)

Creare prima di tutto un profilo CG. Ecco un profilo CG di esempio. La versione dell'API attualmente supportata è 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" 
    }

Successivamente, è possibile creare un NGroup zonale/non di zona aggiungendo zone esterne alle proprietà o lasciando vuota la matrice di zone.

{ 
    "properties": { 
        "elasticProfile": { 
            "desiredCount": 5 
        }, 
        "containerGroupProfiles": [ 
            { 
                "resource": { 
                    "id": "[resourceId('Microsoft.ContainerInstance/containerGroupProfiles', parameters('cgProfileName'))]" 
                } 
            } 
        ] 
    }, 
    "zones": [ "1", "2", "3" ] 
}

Quando NGroups viene ridimensionato impostando la proprietà desiredCount, i gruppi di controllo vengono distribuiti uniformemente in tutte le zone specificate. Se una zona diventa inattiva, l'applicazione rimane disponibile perché i gruppi di sicurezza di rete rimanenti continuano a essere eseguiti in altre zone.

È possibile aggiornare CG creato da una risorsa NGroups direttamente tramite le API CG di ACI?

Sì, i clienti hanno la flessibilità necessaria per aggiornare direttamente i gruppi di contenitori usando le API di Istanze di Azure Container (ACI). Per una conoscenza più approfondita dei gruppi di contenitori ACI e per esplorare le opzioni api correlate, vedere questa risorsa: Gruppi di contenitori in Istanze di Azure Container

Durante la creazione o l'aggiornamento di gruppi di contenitori, NGroups si basa sulle stesse API ACI. Ciò significa che i clienti possono usare queste API per aggiornare gruppi di contenitori specifici in base alle esigenze, senza alcuna configurazione aggiuntiva.

Funzionalità tecniche e vincoli
  • Dopo aver creato una risorsa NGroups con un set di zone (ad esempio, { "1", "2" }), le zone non possono essere rimosse. Tuttavia, è possibile aggiungere una nuova zona all'elenco. Ad esempio, { "1", "2", "3" }

  • Se una zona specificata è inattiva, l'operazione NGroups complessiva per creare i gruppi di disponibilità ha esito negativo. Ripetere la richiesta una volta eseguito il backup della zona. Un'altra opzione consiste nell'eliminare i gruppi di disponibilità non riusciti.

  • Durante la riduzione delle prestazioni, NGroups elimina in modo casuale le istanze, che potrebbero non sempre mantenere az spread. Tuttavia, le successive operazioni di scalabilità orizzontale tentano sempre di ribilanciare lo spread AZ.

  • Az spread non è supportato con i contenitori Spot. Se si ha un requisito di questo tipo, contattare il team ACI.

  • Vedere anche: impatto della disponibilità a causa di aggiornamenti dell'infrastruttura o della piattaforma.

Creare gruppi di sicurezza di rete con un prefisso

I clienti possono creare gruppi di sicurezza di rete con un prefisso anziché solo nomi GUID:

"properties": { 
    "elasticProfile": { 
        "desiredCount": 2,             
        "containerGroupNamingPolicy": { 
            "guidNamingPolicy": { 
                "prefix": "cg-" 
            } 
        } 
    },

Ciò può essere utile quando si hanno più NGroup in un singolo gruppo di risorse e si vuole distinguere i gruppi di disponibilità appartenenti a ogni gruppo di sicurezza di rete( ad esempio, nella visualizzazione portale di Azure). È anche possibile modificarlo per ogni operazione di aumento del numero di istanze per identificare i gruppi di disponibilità con scalabilità orizzontale in un'unica operazione.

Creare NGroup con identità gestite assegnate dal sistema e assegnate dall'utente

“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}}": {} 
    }

Se si eliminano alcuni gruppi di disponibilità da un gruppo di sicurezza di rete, i gruppi di sicurezza di rete possono ricompilarsi con i nuovi gruppi di disponibilità per mantenere il conteggio desiderato?

Sì, è possibile impostare la proprietà properties.elasticProfile.maintainDesiredCount bool su true.

Crea un nuovo CG per ogni CG che viene eliminato/scollegato dai gruppi di sicurezza di rete. Tenta di mantenere la proprietà desiredCount di NGroups sul valore impostato.

Ciò è utile quando si vogliono usare I gruppi di sicurezza di rete come pool che vengono riforniti automaticamente quando si eliminano i gruppi di disponibilità dal pool per gli scenari del carico di lavoro.

Si tratta di una proprietà bool nullable. Se lo si omette per le successive chiamate PUT/update di NGroups, non viene reimpostato su false. Per reimpostare, è necessario impostarlo in modo esplicito su false. Quando è null/false e quando un CG viene eliminato/scollegato da NGroups, la proprietà desiredCount per NGroups riduce di conseguenza.

Ricerca per categorie ottenere il nome CG, l'ID NGroups e altri metadati propagati nel contenitore?

Attualmente, vengono esposti solo il nome CG e l'ID dell'agente di orchestrazione (ID risorsa ARM). In futuro, potrebbero essere considerate altre proprietà rilevanti. Queste due proprietà vengono visualizzate come variabili di ambiente del contenitore.

Per ottenere queste variabili di ambiente nel contenitore, specificare questi tag a livello di NGroups:

tags: { 
    “metadata.container.environmentVariable.containerGroupName”: true, 
    “metadata.container.environmentVariable.orchestratorId”: true, 
    : 
    : // other NGroups tags you may have 
    : 
}

I gruppi di sicurezza di rete comprendono questi tag come speciali e propagano le variabili di ambiente necessarie a ogni contenitore, come illustrato di seguito.

Screenshot di una risorsa contenitore in portale di Azure visualizzazione delle variabili di ambiente contenenti le proprietà 'ContainerGroupName' e 'OrchestratorId'.

Qual è l'impatto della disponibilità a causa degli aggiornamenti dell'infrastruttura o della piattaforma?

Per i carichi di lavoro che offrono disponibilità più elevata (ad esempio, NGroup distribuiti tra più reti AZ), esiste ancora una bassa possibilità di gruppi di disponibilità in più di un az che si arresta contemporaneamente. Può verificarsi quando l'infrastruttura di Azure sottostante (computer host, set di scalabilità di macchine virtuali e così via) passa attraverso un aggiornamento (denominato aggiornamento dell'infrastruttura o aggiornamento della piattaforma).

Questo aggiornamento viene eseguito da AZ con un coordinamento non molto automatizzato tra le reti AZ. Il coordinamento viene monitorato manualmente e il massimo sforzo.

Pertanto, se per caso, un aggiornamento della piattaforma avviene contemporaneamente tra 2 o più AZ, i CG in queste reti AZ possono essere inattivo contemporaneamente causando l'indisponibilità per i gruppi di sicurezza di rete.

Come usare contenitori riservati con NGroup

NGroups supporta i gruppi di contenitori Confidential ACI. Le istanze riservate vengono definite usando le proprietà seguenti all'interno di un profilo del gruppo di contenitori.

{ 
    "location": "{{location}}", 
    "properties": { 
        "sku": "Confidential",
        "confidentialComputeProperties": { 
            "ccePolicy": "<base 64 encoded policy>" 
          }, 
        "containers": [ ... ], 
        "restartPolicy": "Always", 
        "shutdownGracePeriod": "PT1H", 
        "ipAddress": { ... }, 
        "timeToLive": "PT1H", 
        "osType": "Linux" 
    }     
} 

Fare riferimento alla documentazione ACI dei contenitori riservati qui: Esercitazione: Preparare una distribuzione per un contenitore riservato in Istanze di Azure Container

Esempi

Esempio di profilo del gruppo di contenitori

{
    "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}}"
}

Esempio di NGroup con zone

{
  "$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" ]
    }
  ]
}