Informace o NGroups (Preview)
Kontejnery se staly standardem pro balení, nasazování a správu cloudových aplikací a efektivní správa těchto kontejnerů je stejně zásadní jako provozování samotných aplikací. Azure Container Instances (ACI) je flexibilní a škálovatelná bezserverová výpočetní služba, která umožňuje spouštět kontejnerizované aplikace bez správy infrastruktury.
NGroups poskytuje pokročilé funkce pro správu více souvisejících skupin kontejnerů. Mezi podporované funkce patří:
- Údržba více instancí
- Postupné upgrady
- Vysoká dostupnost prostřednictvím Zóny dostupnosti (AZ)
- Podpora spravované identity
- Podpora důvěrných kontejnerů
- Vyrovnávání zatížení
- Vyrovnávání zóny (zóna libovolná)
Funkce NGroups vychází z ACI a zajišťuje zabezpečení, vysokou dostupnost skupin kontejnerů a podporuje sadu funkcí ACI.
Informace o službě Azure Container Instances najdete v tématu: Co je Azure Container Instances?
Architektura vysoké úrovně NGroups
Se službou Azure Container Instances musí zákazníci vytvářet a udržovat jednotlivé skupiny kontejnerů ručně. NGroups nabízí jednodušší řešení pro vytváření, aktualizaci a správu instancí skupin kontejnerů N pomocí jednoho volání rozhraní API.
Vytvoření prostředku NGroups je dvoustupňový proces.
Vytvořte profil skupiny kontejnerů (CGProfile), který slouží jako šablona. V souboru CGProfile uživatel určuje vlastnosti CG, které se použijí ve všech skupinách CG vytvořených skupinami NGroups.
Vytvořte prostředek NGroups. Můžete zadat požadovaný počet (počet požadovaných skupin CG) a odkaz na profil skupiny kontejnerů spolu s dalšími relevantními vlastnostmi.
NGroups odkazuje na tento profil skupiny kontejnerů a potom volá rozhraní API ACI, aby bylo možné vytvořit nebo aktualizovat skupiny CG s vlastnostmi CGProfile.
Koncepty
Profil skupiny kontejnerů (profil CG)
Rozsáhlá cloudová aplikace může vyžadovat správu více skupin kontejnerů. K dnešnímu dni musí zákazníci při každém spuštění několika skupin CG (skupiny kontejnerů) poskytovat relevantní vlastnosti, jako jsou image kontejnerů, zásady restartování a další vlastnosti. To může vést k omezování, duplikovanému úsilí a režii správy.
Pro zmírnění tohoto problému NGroups zavedly profily skupin kontejnerů. Profil skupiny kontejnerů (CGProfile) slouží jako šablona pro vytváření skupin kontejnerů se stejnou sadou vlastností.
Tady jsou některé běžné vlastnosti, které je možné zadat v profilu skupiny kontejnerů:
- osType (příklad: Linux, Windows)
- kontejnery. Název image, paměť, procesor atd.
- restartPolicy
- protokol ipAddress a interní port
- shutdownGracePeriod
- timeToLive
A tady je ukázkový profil CG:
{
"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
Prostředek NGroups poskytuje způsob, jak vytvářet a spravovat skupiny kontejnerů n s bohatou sadou operací. Prostředek NGroups odkazuje na prostředek profilu skupiny kontejnerů a používá ho k vytvoření N instancí podobných skupin CG. V rámci prostředku NGroups můžou zákazníci také zadat další vlastnosti, mimo jiné také počet skupin CG, předvolby aktualizace (ruční nebo kumulativní aktualizace), nástroje pro vyrovnávání zatížení, podsítě a další relevantní vlastnosti, které chtějí přidružit ke skupinám CG v rámci prostředku NGroups.
Poznámka:
Před vytvořením prostředku NGroups je potřeba vytvořit profil CG. Vzhledem k tomu, že profil CG je prostředek ARM, má vlastní rozhraní API ARM. Před vytvořením prostředku NGroups je potřeba vytvořit profil CG.
Výhody odkazování na profil skupiny kontejnerů
Profil skupiny kontejnerů je samostatný prostředek od NGroups. Zákazníci můžou vytvořit více skupin NGroup, které můžou odkazovat na stejný profil skupiny kontejnerů. Zaručuje také konzistenci ve všech skupinách NGroup, které odkazují na jeden profil skupiny kontejnerů, a zabraňuje duplikaci.
Jednu ACI CG lze také vytvořit z profilu CG. Umožňuje rychle přejít z prototypu do produkčního režimu.
Tady je ukázka prostředku NGroups se spravovanou identitou a zónami, které odkazují na profil skupiny kontejnerů a vytvoří tři skupiny kontejnerů:
{
"location": "{{location}}",
"properties": {
"elasticProfile": {
"desiredCount": 100 // specifies how many CGs to create
},
"containerGroupProfiles": [
{
"resource": {
"id": "/subscriptions/{{subId}}/resourceGroups/{{rgName}}/providers/Microsoft.ContainerInstance/containerGroupProfiles/{{cgProfile1}}"
}
}
]
}
}
Zvýraznění funkcí NGroups
- Nabízí kumulativní i ruční aktualizaci.
- Správa více zónových skupin kontejnerů
- Podporuje spravované identity.
- Přidání nástroje pro vyrovnávání zatížení a aplikační brány pro správu provozu napříč skupinami kontejnerů
- Správa skupin kontejnerů s různými profily skupin kontejnerů
- Připojení a odpojení skupin kontejnerů
NGroups API
NGroups odkazuje na profil CG a přidá další související vlastnosti a možnosti. Příklad:
- Požadovaný počet skupin CG pro vytvoření nebo horizontální navýšení kapacity
- Podsíť, do které se nasazují skupiny CG při použití virtuální sítě
- Load Balancer nebo Application Gateway za účelem poskytování příchozího přenosu dat sítě do skupin zabezpečení sítě
Skupiny NGroup zase vyvolávají rozhraní API ACI ARM k vytvoření a správě jednotlivých CG. Vzhledem k tomu, že používá stejná rozhraní API ARM, neexistuje žádný rozdíl mezi skupinami CG vytvořenými skupinami NGroup a skupinami CG vytvořenými přímo zákazníkem. Mají stejné rozhraní API.
Aktualizace prostředku NGroups
Vzhledem k tomu, že se požadavky mění, budeme muset skupiny NGroup a jejich skupiny zabezpečení dál aktualizovat. Existují dva režimy aktualizace, se kterými můžeme aktualizovat NGroups – Manual (výchozí možnost) a Rolling.
Podívejte se na základní příklad aktualizace odkazu na profil CG z cgprofile1 na cgprofile2:
- V ručním režimu aktualizujeme odkaz na cgprofile2 a odešleme požadavek UPDATE PUT do NGroups:
NGroups ukládá tento nový odkaz na profil CG. Neaktualizuje ale stávající skupiny CG pomocí tohoto odkazu. Stávající skupiny CG jsou aktuálně spuštěné a nemají na ně žádný vliv. Při horizontálním navýšení kapacity NGroups se však skupiny CG vytvoří pomocí cgprofile2.
- Jak aktualizujeme stávající skupiny CG pomocí souboru cgprofile2?
Pokud chceme aktualizovat stávající skupiny CG pomocí nového souboru CGProfile, vydáme příkaz ruční aktualizace s explicitním seznamem skupin CG, které chceme aktualizovat. Tento příkaz aktualizuje pouze skupiny CG zadané v seznamu. Aktualizace CG zahrnuje volání rozhraní ACI PUT CG API. Skupiny CG nezadané v tomto seznamu budou nadále spouštět s cgprofile1.
Tento režim nám umožňuje selektivně aktualizovat skupiny CG a poskytuje úplnou kontrolu nad dopadem na produkční úlohy.
Když v režimu rolling aktualizujeme odkaz na cgprofile2 a vydáme příkaz UPDATE NGroups, existující skupiny CG se aktualizují pomocí cgprofile2. Aktualizace existujících skupin CG probíhá v malých dávkách (a ne všechny najednou). Tím se zajistí minimální dopad na vaši úlohu, protože během aktualizace může být nedostupné jenom malé procento skupin CG.
Velikost dávky a další související nastavení režimu kumulativní aktualizace můžeme nakonfigurovat pomocí rozhraní NGroups API.
Vyzkoušení skupin NGroup
Požadavky pro práci na NGroups
Aktuálně podporovaná verze rozhraní API je 2024-09-01-preview.
Zaregistrujte funkci
Microsoft.ContainerInstace/NGroupsPreview
ve svých předplatných.Jakmile se příznaky funkcí použijí na předplatné, zaregistrujte u svých předplatných poskytovatele
Microsoft.ContainerInstance
prostředků.
Poznámka:
Použijte api-version – 2024-09-01-preview a novější verze preview.
Tip
Aktuální informace o rozhraních API NGroups najdete v nástroji Azure Container Instance Swagger. Container Instance NGroups Swagger – 2024-11-01-preview
Pokud tyto požadavky nejsou splněné, požadavky selžou a typ prostředku NGroups se nerozpozná.
Ukázky šablon ARM
Vytvoření profilu CG: ContainerGroupProfile-Sample.json Vytvoření skupin Zonal NGroups pomocí CGProfile: NGroups-Zonal-Sample.json
Zákazníci můžou zjistit, jestli je skupina kontejnerů přidružená k prostředku NGroups, a to kontrolou vlastnosti orchestratorId skupiny kontejnerů v zobrazení JSON. OrchestratorId představuje přidružené ID prostředku NGroups ARM.
Praktický průvodce
Provedení kumulativní aktualizace
Pomocí funkce Kumulativní aktualizace můžeme automaticky aktualizovat všechny skupiny CG na novější verzi bez výpadků skupin NGroup. Viz dokumentace k kumulativní aktualizaci: Kumulativní aktualizace NGroups.
Vytvoření skupin NGroup v oblasti (zónové nebo jiné než zónové)
Nejprve vytvořte profil CG. Tady je ukázkový profil CG. Aktuálně podporovaná verze rozhraní API je 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"
}
Dále můžete vytvořit zónové nebo jiné skupiny NGroup, a to buď přidáním zón mimo vlastnosti, nebo ponecháním pole zón prázdné.
{
"properties": {
"elasticProfile": {
"desiredCount": 5
},
"containerGroupProfiles": [
{
"resource": {
"id": "[resourceId('Microsoft.ContainerInstance/containerGroupProfiles', parameters('cgProfileName'))]"
}
}
]
},
"zones": [ "1", "2", "3" ]
}
Když se NGroups škáluje na více instancí nastavením požadované vlastnostiCount, skupiny CG se rovnoměrně distribuují napříč všemi zadanými zónami. Pokud dojde k výpadku jedné zóny, zůstane aplikace dostupná, protože zbývající skupiny CG skupin NGroup se budou dál spouštět v jiných zónách.
Můžu aktualizovat skupinu CG vytvořenou prostředkem NGroups přímo prostřednictvím rozhraní API ACI CG?
Ano, zákazníci mají možnost aktualizovat skupiny kontejnerů přímo pomocí rozhraní API služby Azure Container Instances (ACI). Podrobnější znalosti skupin kontejnerů ACI a prozkoumání souvisejících možností rozhraní API najdete v tomto prostředku: Skupiny kontejnerů ve službě Azure Container Instances
Při vytváření nebo aktualizaci skupin kontejnerů se NGroups spoléhá na stejná rozhraní API ACI. To znamená, že zákazníci můžou tato rozhraní API použít k aktualizaci konkrétních skupin kontejnerů podle potřeby bez jakýchkoli dalších konfigurací.
Technické možnosti a omezení
Jakmile se prostředek NGroups vytvoří se sadou zón (například { "1", "2" }), zóny se nedají odebrat. Do seznamu ale můžete přidat novou zónu. Například { "1", "2", "3" }
Pokud je zadaná zóna vypnutá, celková operace NGroups, která vytvoří skupiny CG, selže. Po zálohování zóny zkuste požadavek zopakovat. Další možností je odstranit neúspěšné skupiny CG.
Během vertikálního snížení kapacity NGroup náhodně odstraní instance, které nemusí vždy udržovat rozšíření AZ. Následné operace horizontálního navýšení kapacity se ale vždy pokusí znovu vyvážit rozpětí az.
Rozšíření AZ se u spotových kontejnerů nepodporuje. Pokud takový požadavek máte, spojte se s týmem ACI.
Viz také: Dopad dostupnosti kvůli aktualizacím infrastruktury nebo platformy.
Vytvoření skupin NGroups s předponou
Zákazníci můžou vytvářet skupiny CG NGroups s předponou místo jenom názvů GUID:
"properties": {
"elasticProfile": {
"desiredCount": 2,
"containerGroupNamingPolicy": {
"guidNamingPolicy": {
"prefix": "cg-"
}
}
},
To může být užitečné, pokud máte v jedné skupině prostředků několik skupin NGroup a chcete rozlišovat skupiny CG patřící do každé skupiny NGroup (například v zobrazení webu Azure Portal). Můžete ho také změnit pro každou operaci horizontálního navýšení kapacity a identifikovat skupiny CG, které byly škálovány společně v jedné operaci.
Vytváření skupin NGroup se spravovanými identitami přiřazenými systémem i přiřazenými uživatelem
“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}}": {}
}
Pokud odstraním některé skupiny CG ze skupin NGroups, můžou se skupiny NGroups znovu sestavit s novými skupinami CG, aby se zachoval požadovaný počet?
Ano, můžete nastavit vlastnost properties.elasticProfile.maintainDesiredCount bool na true.
Vytvoří novou skupinu CG pro každou skupinu CG, která je odstraněna nebo odpojena od skupin NGroup. Pokusí se udržovat vlastnostdesiredCount NGroups na její nastavenou hodnotu.
To je užitečné, když chcete použít skupiny NGroup jako fond , který se automaticky doplní při vyřazuje skupiny CG z fondu pro vaše scénáře úloh.
Jedná se o logickou vlastnost s možnou hodnotou null. Pokud ji vynecháte pro následná volání NGroups PUT/update, neobnoví se na false. Pokud chcete resetovat, musíte ji explicitně nastavit na false. Pokud má hodnotu null/false a když se CG odstraní nebo odpojí z NGroups, desiredCount vlastnost NGroups odpovídajícím způsobem sníží.
Návody získat název CG, ID NGroups a další metadata rozšířená do kontejneru?
V současné době zveřejňujeme pouze název CG a ID orchestrátoru (ID prostředku ARM). V budoucnu by se mohly zvážit další relevantní vlastnosti. Tyto dvě vlastnosti se zobrazí jako proměnné prostředí kontejneru.
Pokud chcete získat tyto proměnné prostředí v kontejneru, zadejte tyto značky na úrovni NGroups:
tags: {
“metadata.container.environmentVariable.containerGroupName”: true,
“metadata.container.environmentVariable.orchestratorId”: true,
:
: // other NGroups tags you may have
:
}
NGroups tyto značky rozumí jako speciální a šíří požadované proměnné prostředí do každého kontejneru, jak je znázorněno zde.
Jaký je dopad dostupnosti kvůli aktualizacím infrastruktury nebo platformy?
U úloh, které nabízejí vyšší dostupnost (například skupiny NGroup rozložené mezi více zón AZ), stále existuje nízká možnost CG ve více než jednom az poklesu současně. K tomu může dojít, když základní infrastruktura Azure (hostitelské počítače, škálovací sady virtuálních počítačů atd.) prochází aktualizací (označovanou jako aktualizace infrastruktury nebo aktualizace platformy).
Tato aktualizace provádí az az s příliš automatizovanou koordinaci napříč AZs. Koordinace se sleduje ručně a nejlépe se snaží.
Takže pokud náhodou dojde k aktualizaci platformy současně ve 2 nebo více zónách AZ, můžou být skupiny CG v rámci těchto zón současně vypnuté, což způsobí nedostupnost skupin NGroup.
Jak používat důvěrné kontejnery s NGroups
NGroups podporuje důvěrné skupiny kontejnerů ACI. Důvěrné instance se definují pomocí následujících vlastností v profilu skupiny kontejnerů.
{
"location": "{{location}}",
"properties": {
"sku": "Confidential",
"confidentialComputeProperties": {
"ccePolicy": "<base 64 encoded policy>"
},
"containers": [ ... ],
"restartPolicy": "Always",
"shutdownGracePeriod": "PT1H",
"ipAddress": { ... },
"timeToLive": "PT1H",
"osType": "Linux"
}
}
Projděte si dokumentaci ACI k důvěrným kontejnerům tady: Kurz: Příprava nasazení pro důvěrný kontejner ve službě Azure Container Instances
Ukázky
Ukázka profilu skupiny kontejnerů
{
"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 s ukázkou zón
{
"$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" ]
}
]
}