Aktualizacja krocząca NGroups
Wprowadzenie
W miarę zmiany wymagań może być konieczne aktualizowanie grup NGroup i grup kontenerów (CG).
Dostępne są dwa tryby aktualizacji do aktualizowania NGroups — Ręczne (opcja domyślna) i Rolling.
W ramach aktualizacji stopniowej (RU) dostępne są 2 opcje — aktualizacja w miejscu i zastąpienie aktualizacji. Zamień ru jest opcją domyślną.
W tym dokumencie szczegółowo opisano jednostki RU. Aktualizacja ręczna jest omówiona w linku do dokumentacji NGroups tutaj.
Opis funkcji
Rozważmy podstawowy przykład aktualizowania odwołania profilu CG z pliku cgprofile1 do cgprofile2.
Aktualizacja krocząca w miejscu
W przypadku jednostek RU w miejscu, gdy zaktualizujemy odwołanie do pliku cgprofile2 i wydamy polecenie UPDATE NGroups, istniejące grupy CG są aktualizowane za pomocą pliku cgprofile2. Aktualizacja istniejących grup CG odbywa się w małych partiach (a nie wszystkich jednocześnie). Gwarantuje to minimalny wpływ na obciążenie, ponieważ tylko niewielki procent CG może być niedostępny podczas aktualizacji.
Rozmiar partii i inne powiązane ustawienia trybu aktualizacji stopniowej można skonfigurować za pomocą interfejsu API NGroups.
Ze względu na to, że w miejscu ru aktualizuje istniejące grupy CG, istnieją pewne ograniczenia dotyczące właściwości CG wymuszanych przez usługę Azure Container Instances (ACI).
Zobacz ograniczenia usługi ACI dotyczące aktualizowania grup CG. Zobacz również tutaj, aby uzyskać właściwości w sieciach CG, które wymagają usunięcia (w przeciwieństwie do aktualizacji).
Zastępowanie aktualizacji stopniowej
Zastąp jednostki RU, gdy zaktualizujemy odwołanie do pliku cgprofile2 i wydamy polecenie UPDATE NGroups, nowe grupy CG są tworzone za pomocą pliku cgprofile2. Istniejące grupy CG z plikiem cgprofile1 są usuwane. To tworzenie i usuwanie jest wykonywane w małych partiach (a nie naraz). Gwarantuje to minimalny wpływ na obciążenie, ponieważ podczas aktualizacji będzie miało to wpływ tylko niewielki procent CG.
Podobnie jak w przypadku jednostek RU w miejscu, możemy skonfigurować rozmiar partii i inne powiązane ustawienia trybu aktualizacji stopniowej za pomocą interfejsu API NGroups.
Ponieważ zastąpienie jednostek ŻĄDANIA tworzy nowe grupy CG, istnieje mniej ograniczeń wymuszanych przez usługę ACI. W związku z tym zastąpienie jednostek RU jest bardziej zaawansowaną opcją i jest opcją domyślną, gdy klient wybierze jednostkę RU.
Użycie
Wyzwalanie aktualizacji stopniowej
Aktualizacja cykliczna jest wyzwalana po wywołaniu NGroups PUT, a profil CG w wywołaniu PUT różni się od profilu CG aktualnie przywoływanego w grupach NGroups.
Grupy NGroup następnie automatycznie grupuje wystąpienia w partie i aktualizuje pojedynczą partię. Parametr maxBatchPercent określa rozmiar partii.
Aktualizowanie usługi Batch
Aktualizacja w miejscu wywołuje wywołanie CG PUT w celu zaktualizowania każdej CG partii.
Aktualizacja zamiany wywołuje wywołanie CG PUT, aby utworzyć nowe grupy CG i usunąć istniejące grupy CG partii. Istnieje korespondencja 1:1 między tworzonymi grupami CG a usuniętymi grupami CG. Jednak nazwy CG będą inne.
Jeśli wystarczająca liczba grup CG w partii dostarcza sygnały w dobrej kondycji po okresie pauseTimeBetweenBatches, grupy NGroups automatycznie uruchamia następną partię aktualizacji. W przeciwnym razie zatrzymuje wdrożenie. Parametr maxUnhealthyPercent określa łączną liczbę sieci CG w złej kondycji, podczas gdy maksymalny parametrUnhealthyUpdatedPercent określa łączną liczbę w złej kondycji grup zabezpieczeń po aktualizacji.
Oto przykład, aby wysłać żądanie aktualizacji stopniowej do 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"
}
}
]
}
}
Jeśli wersja obrazu jest ustawiona na najnowszy tag dla obrazów kontenerów w profilu CG, grupa NGroups automatycznie pobiera najnowszą wersję obrazu podczas żądania. Aby zapobiec nieoczekiwanemu zachowaniu w aplikacji, zaleca się, aby nie używać najnowszego tagu dla obrazów. Zamiast tego użyj określonych wersji.
Uwaga
Aby użyć zastąpić RU, ustaw tag "rollingupdate.replace.enabled: true" dla zasobu NGroups. Ten tag jest tymczasowy i nie będzie on wymagany w przyszłości.
“tags”: {
“rollingupdate.replace.enabled”: true
}
Pobieranie stanu uruchomionej aktualizacji stopniowej
Aby uzyskać najnowszy stan aktualizacji stopniowej, możesz użyć tego interfejsu API REST:
GET /subscriptions/{subscriptionId}/resourceGroups/{{rgName}}/providers/Microsoft.ContainerInstance/NGroups/{{ngroupsName}}/latestRollingUpdate
Zwraca to odpowiedź zawierającą odpowiednie informacje o ru.
Anulowanie aktualizacji stopniowej
Aby anulować aktualizację stopniową, użyj następującego interfejsu API. Po anulowaniu żądania żądania nie można wznowić/uruchomić ponownie. Należy wyzwolić nową jednostkę RU.
POST /subscriptions/{subscriptionId}/resourceGroups/{{rgName}}/providers/Microsoft.ContainerInstance/NGroups/{{ngroupsName}}/cancelRollingUpdate
Nie musisz podawać treści żądania podczas wywoływania tego interfejsu API.
Granica partii w aktualizacji stopniowej
Grupy CG określonej partii w ru nie przekraczają granicy modelu błędów. Model błędów reprezentuje kombinację strefy/domeny błędów (FD). Na przykład strefa 1 / FD 0 jest granicą modelu błędów, strefa 1 / FD 1 jest kolejną granicą modelu błędów, a strefa 2 / FD 0 jest kolejną granicą modelu błędów.
Jeśli klient ma wiele strefowych grup NGroup skonfigurowanych z trzema strefami, partia jest ograniczona do grup CG należących do jednej strefy co najwyżej. Partia nigdy nie składa się z grup CG rozmieszczonych w wielu strefach.
Jeśli klient ma konfigurację grup NGroup z wieloma strefami i wieloma grupami FD, partia nadal składa się z grup CG należących do tylko jednego FD w jednej strefie co najwyżej.
Grupy NGroup utrzymują tę granicę modelu błędów w partii, nawet jeśli liczba grup CG wybranych dla partii jest znacznie mniejsza niż ustawienie maxBatchPercent. Odzwierciedla to, że grupy NGroup preferują bezpieczne aktualizacje w przypadku szybszych (a tym samym bardziej ryzykownych) aktualizacji.
Jedynym razem, gdy granica modelu błędów jest przekraczana, gdy jednostka ŻĄDA wybiera złą kondycję grup zabezpieczeń dla pierwszej partii. W tej partii jednostka ŻĄDA próbuje zaktualizować wszystkie grupy CG w złej kondycji, aby poprawić ogólną dostępność sieciowych grup. W związku z tym podczas aktualizowania sieci CG w złej kondycji jednostka ŻĄDANIA może przekroczyć ustawienie maxBatchPercent.