VDU 放置错误处理

本文档描述了由于可用区资源不足导致的 VDU 放置错误的处理方式。

由于资源不足导致的 VDU 放置错误

放置约束在 ETSI NFV-SOL 003 v3.3.1 中定义,并且 VNFM 将其发送给 NFVO 以进行资源放置决策。在 VNF 生命周期管理 (LCM) 中,存在一些由于可用区资源不足而导致 VDU 未部署的错误情况。

当堆栈创建/更新失败时,可以从 Heat-API 响应的 显示堆栈详情 中检测到失败是否由于资源不足。指示资源不足的错误消息是从响应中的“stack_status_reason”参数中提取的。

注意

在资源不足的情况下,错误发生在堆栈创建/更新返回接受响应之后,因此可以使用“显示堆栈详情”响应来检测原因。

以下是当资源不足时存储在“stack_status_reason”中的错误消息示例。

  • 示例 1) 将“OS::Nova::Server”中定义的 flavor 设置为无法部署的大值(存储不足/vCPU 不足/内存不足)。

    • 资源创建失败:ResourceInError: resources.<VDU-name>: 状态变为 ERROR,原因是“Message: 未找到有效的宿主机。, Code: 500”

  • 示例 2) 指定了无法分配给“OS::Nova::Server”中定义的 flavor 的 extra-spec。

    • 资源创建失败:ResourceInError: resources.<VDU-name>: 状态变为 ERROR,原因是“Message: 超过最大重试次数。耗尽了所有可用于重试构建失败实例 <server-UUID> 的宿主机。, Code: 500”

可用区重新选择

如果由于可用区资源不足导致的 VDU 放置错误发生,则可用区重新选择可以作为错误处理。

VNF LCM v2 API(VNF 的 instantiate/heal/scale)过程可以在必要时更改 NFVO 通知的使用可用区。如果 NFVO 通知的可用区资源不足,则 VNF 将在不同的可用区中重新创建/更新。重新选择可用区并重新创建/更新 VNF,直到没有更多候选区为止。

设置

执行可用区重新选择的设置如下。

  • 将 StandardUserData 作为 UserData 类使用

  • tacker.conf 文件中设置 placement_fallback_best_effort = True

注意

默认情况下,可用区重新选择的重试次数不受限制。如果需要设置重试限制,请将限制数设置为 tacker.conf 中的 placement_az_select_retry。(默认值 0 表示无限次重试。)

注意

默认情况下,检测资源不足错误的正则表达式如下。

Resource CREATE failed: ResourceInError: resources\.(.*)\.(.*): (.*) | Resource UPDATE failed: resources\.(.*): Resource CREATE failed: ResourceInError: resources\.(.*): (.*)

如果需要更改资源不足错误的检测条件,请将正则表达式设置为 tacker.conf 中的 placement_az_resource_error

如果您从默认值更改 placement_az_resource_error,则不在社区支持范围内,请自行承担风险。

策略

在重新选择候选区时,将排除出错的可用区,并优先从未选择的可用区中重新选择。

注意

在重新选择期间,不会考虑 PlacementConstraint 的亲和性/反亲和性以及可用区资源的当前状态。

可以通过以下方式识别出错的可用区。

  1. 在“堆栈创建/更新”中发生错误后,调用 Heat-API“显示堆栈详情”

  2. 通过响应 1 中的 stack_status_reason 识别由于资源不足而发生错误的 VDU。

  3. 通过在 2 中识别的 VDU 识别可用区。

注意

在重新选择尝试期间,一旦失败的可用区中的资源不足问题得到解决,该可用区将不会被重新选择。在 Scale/Heal 操作中,已经部署的 VDU 将不会被重新创建。

对于每个 VNF LCM v2 API(VNF 的 instantiate/heal/scale)的可用区重新选择如下。

先决条件:存在可用区 AZ-1/AZ-2/AZ-3/AZ-4/AZ-5,并且部署了 VNF VDU1-0/VDU1-1/VDU2-0/VDU2-1

注意

VDU1 中的 VNF 位于同一可用区(亲和性),VDU2 中的 VNF 与 VDU1/VDU2 位于不同的可用区(反亲和性)。

  • 实例化

    • 在重新选择之前,以下尝试部署失败(AZ-1 和 AZ-2 资源不足)

      • VDU1-0: AZ-1

      • VDU1-1: AZ-1

      • VDU2-0: AZ-2

      • VDU2-1: AZ-3

    • VDU1-0/1: 重新选择以下(排除 AZ-1/AZ-2/AZ-3,选择 AZ-4 或 AZ-5)

      • VDU1-0: AZ-4

      • VDU1-1: AZ-4

      • VDU2-0: AZ-2

      • VDU2-1: AZ-3

    • VDU2-0: 重新选择以下(排除 AZ-2/AZ-3/AZ-4,选择 AZ-1 或 AZ-5)

      • VDU1-0: AZ-4

      • VDU1-1: AZ-4

      • VDU2-0: AZ-5

      • VDU2-1: AZ-3

      注意

      以上只是一个示例,重新选择的目标是从未选择的可用区中随机选择的。

  • Heal (VDU1-1/VDU2-0)

    • 在重新选择之前,以下尝试部署失败(AZ-1 和 AZ-2 资源不足)

      • VDU1-0: AZ-1

      • VDU1-1: AZ-1

      • VDU2-0: AZ-2

      • VDU2-1: AZ-3

    • VDU1-1: 重新选择以下(排除 AZ-1/AZ-2/AZ-3,选择 AZ-4 或 AZ-5)

      • VDU1-0: AZ-1

      • VDU1-1: AZ-4

      • VDU2-0: AZ-2

      • VDU2-1: AZ-3

      注意

      仅 Heal 目标 VNF 是可用区重新选择的目标。因此,由于重新选择操作,可能无法满足亲和性。

    • VDU2-0: 重新选择以下(排除 AZ-1/AZ-2/AZ-3/AZ-4,选择 AZ-5)

      • VDU1-0: AZ-1

      • VDU1-1: AZ-4

      • VDU2-0: AZ-5

      • VDU2-1: AZ-3

  • Scale out (添加 VDU1-2/VDU1-3)

    • 在重新选择之前,VDU1-3 部署失败(AZ-1 资源不足)

      • VDU1-0: AZ-1

      • VDU1-1: AZ-1

      • VDU1-2: AZ-1

      • VDU1-3: AZ-1

      • VDU2-0: AZ-2

      • VDU2-1: AZ-3

    • VDU1-2/3: 重新选择以下(排除 AZ-1/AZ-2/AZ-3,选择 AZ-4 或 AZ-5)

      • VDU1-0: AZ-1

      • VDU1-1: AZ-1

      • VDU1-2: AZ-4

      • VDU1-3: AZ-4

      • VDU2-0: AZ-2

      • VDU2-1: AZ-3

      注意

      在亲和性情况下,即使 VDU1-2 已成功部署,VDU1-2/VDU1-3 的可用区也将被重新选择。现有的 VDU1-0/VDU1-1 将不会被重新选择,因此即使在亲和性情况下,所有 VDU 可能不会位于同一可用区。

  • Scale out (添加 VDU2-2/VDU2-3)

    • 在重新选择之前,VDU2-3 部署失败(AZ-5 资源不足)

      • VDU1-0: AZ-1

      • VDU1-1: AZ-1

      • VDU2-0: AZ-2

      • VDU2-1: AZ-3

      • VDU2-2: AZ-4

      • VDU2-3: AZ-5

    • VDU2-3: 重新选择以下(排除 AZ-5,选择 AZ-1 或 AZ-2 或 AZ-3 或 AZ-4)

      • VDU1-0: AZ-1

      • VDU1-1: AZ-1

      • VDU2-0: AZ-2

      • VDU2-1: AZ-3

      • VDU2-2: AZ-4

      • VDU2-3: AZ-1

      注意

      如果没有剩余未选择的可用区,则从选择的可用区中随机选择重新选择目标。在这种情况下,无法满足反亲和性。