NGroups 롤링 업데이트
소개
요구 사항이 변경되면 NGroup 및 해당 CG(컨테이너 그룹)를 계속 업데이트해야 할 수 있습니다.
NGroup 을 업데이트하는 데 사용할 수 있는 두 가지 업데이트 모드인 수동 (기본 옵션) 및 롤링이 있습니다.
RU(롤링 업데이트) 내에는 현재 위치 업데이트 및 바꾸기 업데이트의 두 가지 옵션이 있습니다. RU 바꾸기가 기본 옵션입니다.
이 문서에서는 RU에 대해 자세히 설명합니다. 수동 업데이트는 여기의 NGroups 설명서 링크 에서 다룹니다.
기능 설명
cgprofile1에서 cgprofile2로 CG 프로필 참조를 업데이트하는 기본 예제를 생각해 보세요.
현재 위치 롤링 업데이트
현재 위치 RU를 사용하면 cgprofile2에 대한 참조를 업데이트하고 UPDATE NGroups 명령을 실행하면 기존 CG가 cgprofile2로 업데이트됩니다. 기존 CG에 대한 업데이트는 작은 일괄 처리로 수행됩니다(한 번에 전부는 아님). 업데이트하는 동안 소수의 CG만 사용할 수 없으므로 워크로드에 미치는 영향이 최소화됩니다.
NGroups API를 사용하여 일괄 처리 크기 및 기타 관련 롤링 업데이트 모드 설정을 구성할 수 있습니다.
현재 위치 RU는 기존 CG를 업데이트하므로 ACI(Azure Container Instances)가 적용하는 CG 속성에는 특정 제한 사항이 있습니다.
CG 업데이트에 대한 ACI의 제한 사항을 참조하세요. 또한 삭제가 필요한 CG의 속성(업데이트와 비교)은 여기를 참조하세요.
롤링 업데이트 바꾸기
대체 RU를 사용하면 cgprofile2에 대한 참조를 업데이트하고 UPDATE NGroups 명령을 실행하면 cgprofile2를 사용하여 새 CG가 만들어집니다. cgprofile1이 있는 기존 CG가 삭제됩니다. 이 생성 및 삭제는 작은 일괄 처리에서 발생합니다(한 번에 모든 것이 아님). 업데이트 중에 소수의 CG만 영향을 받을 수 있으므로 워크로드에 미치는 영향이 최소화됩니다.
현재 위치 RU와 마찬가지로 NGroups API를 사용하여 일괄 처리 크기 및 기타 관련 롤링 업데이트 모드 설정을 구성할 수 있습니다.
대체 RU는 새 CG를 만들기 때문에 ACI에 의해 적용되는 제한 사항이 적습니다. 결과적으로 RU 바꾸기는 더 강력한 옵션이며 고객이 RU를 선택할 때 기본 옵션입니다.
사용
롤링 업데이트 트리거
롤링 업데이트는 NGroups PUT 호출이 이루어지고 PUT 호출의 CG 프로필이 현재 NGroups에서 참조되는 CG 프로필과 다를 때 트리거됩니다.
그런 다음 NGroup은 인스턴스를 일괄 처리로 자동으로 그룹화하고 한 번에 하나의 일괄 처리를 업데이트합니다. maxBatchPercent 매개 변수는 일괄 처리의 크기를 결정합니다.
Batch 업데이트
현재 위치 업데이트는 CG PUT 호출을 호출하여 일괄 처리의 각 CG를 업데이트합니다.
바꾸기 업데이트는 CG PUT 호출을 호출하여 새 CG를 만들고 일괄 처리의 기존 CG를 삭제합니다. 생성되는 CG와 삭제되는 CG 사이에는 1:1 서신이 있습니다. 그러나 CG 이름은 다릅니다.
일괄 처리에 충분한 수의 CG가 pauseTimeBetweenBatches 기간 후에 정상 신호를 제공하는 경우 NGroups는 업데이트에 대한 다음 일괄 처리를 자동으로 시작합니다. 그렇지 않으면 롤아웃을 중지합니다. maxUnhealthyPercent 매개 변수는 비정상 CG의 총 수를 지정하고 maxUnhealthyUpdatedPercent 매개 변수는 업데이트 후 비정상 CG의 총 수를 지정합니다.
다음은 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"
}
}
]
}
}
이미지 버전이 CG 프로필 내의 컨테이너 이미지에 대한 최신 태그로 설정된 경우 NGroups는 RU 중에 최신 이미지 버전을 자동으로 선택합니다. 애플리케이션에서 예기치 않은 동작을 방지하려면 이미지에 최신 태그를 사용하지 않는 것이 좋습니다. 대신 특정 버전을 사용합니다.
참고 항목
REPLACE RU를 사용하려면 NGroups 리소스에 대해 "rollingupdate.replace.enabled: true" 태그를 설정합니다. 이 태그는 일시적이므로 나중에 필요하지 않습니다.
“tags”: {
“rollingupdate.replace.enabled”: true
}
실행 중인 롤링 업데이트의 상태 가져오기
롤링 업데이트의 최신 상태를 가져오기 위해 다음 REST API를 사용할 수 있습니다.
GET /subscriptions/{subscriptionId}/resourceGroups/{{rgName}}/providers/Microsoft.ContainerInstance/NGroups/{{ngroupsName}}/latestRollingUpdate
그러면 RU에 대한 관련 정보가 포함된 응답이 반환됩니다.
롤링 업데이트 취소
롤링 업데이트를 취소하려면 다음 API를 사용합니다. 취소되면 RU를 다시 시작/다시 시작할 수 없습니다. 새 RU를 트리거해야 합니다.
POST /subscriptions/{subscriptionId}/resourceGroups/{{rgName}}/providers/Microsoft.ContainerInstance/NGroups/{{ngroupsName}}/cancelRollingUpdate
이 API를 호출할 때 요청 본문을 제공할 필요가 없습니다.
롤링 업데이트의 일괄 처리 경계
RU에서 특정 일괄 처리의 CG는 오류 모델 경계를 넘지 않습니다. 오류 모델은 영역/FD(장애 도메인) 조합을 나타냅니다. 예를 들어 영역 1/FD 0은 장애 모델 경계이고, 영역 1/FD 1은 다른 장애 모델 경계이고, 영역 2/FD 0은 또 다른 장애 모델 경계입니다.
고객에게 3개의 영역으로 설정된 다중 영역 NGroup이 있는 경우 일괄 처리는 한 영역에만 속하는 CG로 제한됩니다. 일괄 처리는 여러 영역에 분산된 CG로 구성되지 않습니다.
고객에게 다중 영역 및 다중 FD NGroups 설정이 있는 경우 일괄 처리는 단일 영역에 있는 하나의 FD에만 속하는 CG로 구성됩니다.
NGroups는 일괄 처리에 대해 선택한 CG 수가 maxBatchPercent 설정보다 훨씬 적은 경우에도 이 오류 모델 경계를 일괄 처리로 유지 관리합니다. 이는 NGroups가 더 빠른(따라서 더 위험한) 업데이트보다 안전한 업데이트를 선호한다는 것을 반영합니다.
RU가 첫 번째 일괄 처리에 대해 비정상 CG를 선택할 때 오류 모델 경계가 교차하는 유일한 시간입니다. 이 일괄 처리에서 RU는 모든 비정상 CG를 업데이트하여 NGroup의 전반적인 가용성을 개선하려고 시도합니다. 따라서 비정상 CG를 업데이트할 때 RU가 maxBatchPercent 설정을 초과할 수 있습니다.