Paralleles Update von NGroups
Einführung
Wenn sich die Anforderungen ändern, müssen Sie Ihre NGroups und Containergruppen weiterhin aktualisieren.
Es gibt zwei Updatemodi für die Aktualisierung von NGroups: manuell (Standardoption) und parallel.
Für parallele Updates (Rolling Update, RU) gibt es zwei Optionen: direkte Updates und Ersetzungsupdates. Die Standardoption sind parallele Ersetzungsupdates.
In diesem Dokument werden parallele Updates ausführlich beschrieben. Manuelle Updates werden unter diesem Link zur Dokumentation von NGroups behandelt.
Funktionsbeschreibung
Betrachten Sie ein einfaches Beispiel für das Update eines Verweises auf ein Containergruppenprofil von cgprofile1 auf cgprofile2.
Direktes paralleles Update
Wenn Sie beim direkten parallelen Updaten den Verweis auf cgprofile2 aktualisieren und den NGroups-Befehl UPDATE ausführen, werden die vorhandenen Containergruppen auf cgprofile2 aktualisiert. Updates vorhandener Containergruppen erfolgen in kleinen Batches (nicht für alle gleichzeitig). Dadurch wird sichergestellt, dass sich der Vorgang nur minimal auf Ihre Workload auswirkt, da während des Updates möglicherweise nur ein kleiner Prozentsatz der Containergruppen nicht verfügbar ist.
Sie können die Batchgröße und andere zugehörige Einstellungen für den parallelen Updatemodus mit der NGroups-API konfigurieren.
Da mit direkten parallelen Updates vorhandene Containergruppen aktualisiert werden, gelten bestimmte Einschränkungen für die Containergruppeneigenschaften, die Azure Container Instances (ACI) erzwingt.
Weitere Informationen zu Updates von Containergruppen finden Sie unter Einschränkungen in der ACI-Dokumentation. Sehen Sie sich auch die Eigenschaften von Containergruppen an, die eine Löschung erfordern (im Vergleich zu einem Update).
Paralleles Ersetzungsupdate
Bei einem parallelen Ersetzungsupdate auf einen Verweis auf cgprofile2 mit dem NGroups-Befehl UPDATE werden neue Containergruppen mit cgprofile2 erstellt. Vorhandene Containergruppen mit cgprofile1 werden gelöscht. Diese Erstellungs- und Löschvorgänge erfolgen in kleinen Batches (nicht für alle gleichzeitig). Dadurch wird sichergestellt, dass sich der Vorgang nur minimal auf die Workload auswirkt, da während des Updates nur ein kleiner Prozentsatz der Containergruppen betroffen ist.
Wie bei direkten parallelen Updates können Sie die Batchgröße und andere zugehörige Einstellungen für den parallelen Updatemodus mit der NGroups-API konfigurieren.
Da bei parallelen Ersetzungsupdates neue Containergruppen erstellt werden, werden von ACI weniger Einschränkungen erzwungen. Daher stellen parallele Ersetzungsupdates eine leistungsfähigere Option dar und sind die Standardoption bei der Auswahl paralleler Updates.
Verbrauch
Auslösen paralleler Updates
Parallele Updates wird ausgelöst, wenn ein PUT-Aufruf für die NGroups erfolgt, und das Containergruppenprofil im PUT-Aufruf unterscheidet sich von dem Containergruppenprofil, auf das derzeit in den NGroups verwiesen wird.
NGroups gruppiert die Instanzen dann automatisch in Batches und aktualisieren jeweils nur einen Batch. Der Parameter maxBatchPercent bestimmt die Größe der Batches.
Aktualisieren eines Batches
Ein direktes Update ruft CG PUT auf, um jede Containergruppe im Batch zu aktualisieren.
Ein Ersetzungsupdate ruft CG PUT auf, um neue Containergruppen zu erstellen und vorhandene Containergruppen aus dem Batch zu löschen. Es besteht eine 1:1-Beziehung zwischen erstellten und gelöschten Containergruppen. Die CG-Namen unterscheiden sich jedoch.
Wenn eine ausreichende Anzahl von Containergruppen im Batch nach dem pauseTimeBetweenBatches-Zeitraum Fehlerfreiheit signalisiert, startet NGroups automatisch das Update des nächsten Batches. Andernfalls wird der Rollout beendet. Der maxUnhealthyPercent-Parameter gibt die Gesamtanzahl fehlerhafter Containergruppen an, während der maxUnhealthyUpdatedPercent-Parameter die Gesamtanzahl fehlerhafter Containergruppen nach dem Update angibt.
Das folgende Beispiel zeigt eine Anforderung für ein paralleles Update an NGroups:
{
"location": "{{location}}",
"properties": {
"updateProfile": {
"updateMode": "Rolling",
"rollingUpdateProfile": {
// Maximum percentage of total CGs which can be updated
// simultaneously by rolling update in one batch.
“maxBatchPercent”: “10”, // optional, defaults to 20%
// Maximum percentage of the total CGs across the whole NGroup
// that can be unhealthy at a time either by rolling update or health
// checks by liveness probes. If there are more unhealthy CGs than this,
// the current rolling update is marked as failed.
// This check is a prerequisite to start any batch.
“maxUnhealthyPercent”: “10”, // optional, defaults to 20%
// Maximum percentage of the updated CGs which can be in unhealthy state
// after each batch is updated. If there are more unhealthy CGs than this,
// the current rolling update is marked as failed.
“maxUnhealthyUpdatedPercent”: 10, // optional, defaults to 20%
// The wait time between batches after completing one batch of the rolling
// update and before starting the next batch. The time duration should
// be specified in ISO 8601 format for duration.
"pauseTimeBetweenBatches": "PT2M", // optional, defaults to PT1M
// A nullable boolean property. Default is null
// Sets the mode to either in-place RU (when true) or replace (default) RU.
“inPlaceUpdate”: null/false/true
}
},
"containerGroupProfiles": [
{
"resource": {
"id": "/subscriptions/{{subId}}/resourceGroups/{{rgName}}/providers/Microsoft.ContainerInstance/containerGroupProfiles/cgp1"
}
}
]
}
}
Wenn die Imageversion auf das latest-Tag für Containerimages innerhalb des Containergruppenprofils festgelegt ist, wählt NGroups während des parallelen Updates automatisch die aktuellste Imageversion aus. Um zu verhindern, dass die Anwendung unerwartetes Verhalten zeigt, sollten Sie das latest-Tag nicht für Images verwenden. Verwenden Sie stattdessen bestimmte Versionen.
Hinweis
Um parallele Ersetzungsupdates auszuführen, legen Sie das Tag für die NGroups-Ressource auf „rollingupdate.replace.enabled: true“ fest. Dieses Tag ist temporär und wird in Zukunft nicht mehr benötigt.
“tags”: {
“rollingupdate.replace.enabled”: true
}
Abrufen des Status laufender paralleler Updates
Um den aktuellen Status Ihres parallelen Updates abzurufen, können Sie diese REST-API verwenden:
GET /subscriptions/{subscriptionId}/resourceGroups/{{rgName}}/providers/Microsoft.ContainerInstance/NGroups/{{ngroupsName}}/latestRollingUpdate
Sie gibt eine Antwort zurück, die relevante Informationen zum parallelen Update enthält.
Abbrechen paralleler Updates
Verwenden Sie die folgende API, um ein paralleles Update abzubrechen. Nach dem Abbrechen können die parallelen Updates nicht mehr fortgesetzt oder neu gestartet werden. Sie müssen stattdessen ein neues paralleles Update auslösen.
POST /subscriptions/{subscriptionId}/resourceGroups/{{rgName}}/providers/Microsoft.ContainerInstance/NGroups/{{ngroupsName}}/cancelRollingUpdate
Sie müssen beim Aufrufen dieser API keinen Anforderungstext angeben.
Grenze eines Batches in einem parallelen Update
Die Containergruppen eines bestimmten Batches bei einem parallelen Update überschreiten keine Fehlermodellgrenzen. Ein Fehlermodell stellt eine Kombination aus Zone und Fehlerdomäne (FD) dar. Beispielsweise ist Zone 1/FD 0 eine Fehlermodellgrenze, Zone 1/FD 1 ist eine weitere Fehlermodellgrenze, und Zone 2/FD 0 ist noch eine weitere Fehlermodellgrenze.
Wenn Sie über mehrere NGroups verfügen, die mit drei Zonen eingerichtet wurden, werden die einzelnen Batches auf Containergruppen beschränkt, die höchstens einer Zone angehören. Ein Batch enthält niemals Containergruppen, die sich über mehrere Zonen erstrecken.
Wenn Sie ein NGroups-Setup mit mehreren Zonen und Fehlerdomänen verwenden, besteht ein Batch trotzdem nur aus Containergruppen, die höchstens einer Fehlerdomäne in einer einzigen Zone angehören.
NGroups behält diese Fehlermodellgrenze in einem Batch auch dann bei, wenn die Anzahl der für einen Batch ausgewählten Containergruppen viel kleiner ist als die maxBatchPercent-Einstellung. Der Grund ist, dass NGroups sichere Updates gegenüber schnelleren (und damit riskanteren) Updates bevorzugt.
Der einzige Fall, in dem eine Fehlermodellgrenze überschritten wird, ist, wenn das parallele Update fehlerhafte Containergruppen für den ersten Batch auswählt. Bei einem parallelen Updates dieses Batches wird versucht, alle fehlerhaften Containergruppen zu aktualisieren, um die Gesamtverfügbarkeit von NGroups zu verbessern. Daher kann das parallele Update fehlerhafter Containergruppen die maxBatchPercent-Einstellung überschreiten.