你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
NGroups 滚动更新
简介
随着要求的变化,可能需要不断更新 NGroups 及其容器组 (CG)。
有两种更新模式可用于更新 NGroups:“手动”(默认选项)和“滚动”。
在“滚动更新 (RU)”中,有 2 个选项:就地更新和替换更新。 替换 RU 是默认选项。
本文档详细介绍了 RU。 此处的 NGroups 文档链接介绍了手动更新。
功能说明
请考虑这样一个基本例子,将 CG 配置文件引用从 cgprofile1 更新为 cgprofile2。
就地滚动更新
使用就地 RU 时,当我们更新对 cgprofile2 的引用并发出 UPDATE NGroups 命令时,现有 CG 会使用 cgprofile2 进行更新。 对现有 CG 的更新以小批量进行(而不是一次性更新)。 这可确保对工作负载的影响最小,因为在更新期间可能只有少量的 CG 不可用。
我们可以使用 NGroups API 配置批大小和其他相关的滚动更新模式设置。
由于就地 RU 会更新现有 CG,因此 Azure 容器实例 (ACI) 强制执行的 CG 属性存在一些限制。
请参阅 ACI 关于更新 CG 的限制。 另请参阅此处,了解需要删除(相较于更新)的 CG 属性。
替换滚动更新
使用替换 RU 时,当我们更新对 cgprofile2 的引用并发出 UPDATE NGroups 命令时,新 CG 会使用 cgprofile2 进行创建。 具有 cgprofile1 的现有 CG 被删除。 这种创建和删除是小批量进行的(而不是一次性)。 这可确保对工作负载的影响最小,因为在更新期间只有少量的 CG 受到影响。
类似于就地 RU,我们可以使用 NGroups API 配置批大小和其他相关的滚动更新模式设置。
由于替换 RU 会创建新的 CG,因此 ACI 强制实施的限制更少。 因此,替换 RU 是一个更强大的选项,它是客户选择 RU 时的默认选项。
使用情况
触发滚动更新
当进行 NGroups PUT 调用并且 PUT 调用中的 CG 配置文件不同于 NGroups 中当前引用的 CG 配置文件时,将触发滚动更新。
然后,NGroups 会自动将实例分组成批,并一次更新一个批。 maxBatchPercent 参数确定批的大小。
更新批
“就地”更新调用 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 期间自动选取最新的映像版本。 为了防止应用程序出现意外行为,建议不要对映像使用最新标记。 请改用特定版本。
注意
若要使用替换 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 是另一个故障模型边界。
如果客户设置了包含三个区域的多区域 NGroups,则一个批仅限于最多只属于一个区域的 CG。 一个批永远不会包含分布在多个区域的 CG。
如果客户设置了多区域和多 FD NGroups,则一个批仍包含最多只属于单个区域中的一个 FD 的 CG。
NGroups 在批中维护此故障模型边界,即使为批选择的 CG 数远小于 maxBatchPercent 设置。 它反映了 NGroups 更偏好安全更新而不是更快的(因此风险更高的)更新。
只有当 RU 为第一批选择不正常的 CG 时,故障模型边界才会被越过。 在此批中,RU 会尝试更新所有不正常的 CG,以提高 NGroups 的整体可用性。 因此,更新不正常的 CG 时,RU 可能会超出 maxBatchPercent 设置。