Modifying/Replacing 探测导致 CannotModifyRuleUsedByProbeUsedByVMSS
Modifying/Replacing Probe causes CannotModifyRuleUsedByProbeUsedByVMSS
我创建了一个带有负载均衡器的 vmss 和为 http 80 地址配置的探测器 /
。
我现在已经用专用的实时路线更新了我的应用程序,例如/api/alive
回复基础 url 的速度要快得多,这就是我想用作负载平衡规则探测的那个。
我已经用新的探测细节更新了我的模板(基础是 https://github.com/Azure/vm-scale-sets/blob/master/preview/upgrade/autoupdate.json),但我不断收到以下错误:
"error": {
"code": "CannotModifyRuleUsedByProbeUsedByVMSS",
"message": "Load balancer rule /subscriptions/SUBID/resourceGroups/GROUPNAME/providers/Microsoft.Network/loadBalancers/RESNAME-lb/loadBalancingRules/webhttpslb cannot be modified because it references the load balancer probe /subscriptions/SUBID/resourceGroups/GROUPNAME/providers/Microsoft.Network/loadBalancers/RESNAME-lb/probes/saProbe that used as health probe by VM scale set /subscriptions/SUBID/resourceGroups/GROUPNAME/providers/Microsoft.Compute/virtualMachineScaleSets/RESNAME. To make changes to this rule, please update VM scale set to remove the reference to the probe.",
}
无论我尝试什么方法,删除所有探测器,只修改探测器的细节,我总是收到这个错误。
我们是否要让规模集中的所有 VM 更新探测器?还有其他办法吗?非常感谢您提前提供的帮助。
更新
之前的模板:https://pastebin.com/YisgUbRk
之后的模板:https://pastebin.com/2VmgPMur
我正在尝试用规则和 VMSS 替换 saProbe
,规则用 httpProbe
,VMSS 用 sshProbe
。
我也试过将 VMSS 探测器保持为 saProbe
并仅将 httpProbe
添加到 LB 规则,但这也没有用,得到了同样的错误。
这是 saProbe 的当前设置 https://pasteboard.co/HuKMcwA.png 它们与粘贴后的设置相匹配。
更新 2
试图在 LB 规则上保持 saProbe
,但将 VM 探测更改为 sshProbe
,在 webhttpslb
规则上具有相同的结果和相同的错误。
关于如何优雅地更换探针有什么建议吗?没有 LB 和 VM 停机?
更新 3
尼尔,确实是正确的(好地方!)还有一个我没有注意到的额外变化。
但是,现在很明显,我实际想要实现的目标可能无法实现。我将 saProbe 保留在 LB 规则上,但将 VMSS 探测器更改为 sshProbe
并收到此错误:
"error": {
"details": [],
"code": "CannotUseInactiveHealthProbe",
"message": "VM scale set /subscriptions/SUBID/resourceGroups/GROUPNAME/providers/Microsoft.Compute/virtualMachineScaleSets/RESNAME cannot use probe /subscriptions/SUBID/resourceGroups/GROUPNAME/providers/Microsoft.Network/loadBalancers/RESNAME-lb/probes/sshProbe as a HealthProbe because load balancing rules (weblb, webhttpslb) that send traffic to the scale set IPs in backend address pools (RESNAME-bepool) do not use this probe."
}
谁能证实这一点?如果我添加一个虚拟规则来激活 sshProbe
会怎样?这种情况的最佳做法是什么?
更新 4
是的,首先从 VMSS 中移除探测器是关键。不得不 运行 模板几次,但最后的现在只包括附加到规则和 VMSS 的 httpProbe
。
嗯,错误明确指出您不能修改此规则,您可以创建一个新规则并改用那个规则。
好的,如错误所述,您不能对规则进行任何更改,只要它引用用作 VMSS 运行状况探测的探测即可:
在您的模板中您得到了:
"healthProbe": {
"id": "[concat(variables('lbId'), '/probes/', variables('saProbeName'))]"
},
您应该在部署之前从 vmss 中删除它,或者创建一组不使用该探测器的新规则,这样您就可以修改它们。
查看之前和之后的模板,loadDistribution 似乎从 SourceIPProtocol 更改为 SourceIP(两次指定 loadDistribution 似乎都是这种情况)。这可能是您看到的错误的原因(不确定,但这是我最好的猜测)
希望对您有所帮助! :)
-尼尔
我创建了一个带有负载均衡器的 vmss 和为 http 80 地址配置的探测器 /
。
我现在已经用专用的实时路线更新了我的应用程序,例如/api/alive
回复基础 url 的速度要快得多,这就是我想用作负载平衡规则探测的那个。
我已经用新的探测细节更新了我的模板(基础是 https://github.com/Azure/vm-scale-sets/blob/master/preview/upgrade/autoupdate.json),但我不断收到以下错误:
"error": {
"code": "CannotModifyRuleUsedByProbeUsedByVMSS",
"message": "Load balancer rule /subscriptions/SUBID/resourceGroups/GROUPNAME/providers/Microsoft.Network/loadBalancers/RESNAME-lb/loadBalancingRules/webhttpslb cannot be modified because it references the load balancer probe /subscriptions/SUBID/resourceGroups/GROUPNAME/providers/Microsoft.Network/loadBalancers/RESNAME-lb/probes/saProbe that used as health probe by VM scale set /subscriptions/SUBID/resourceGroups/GROUPNAME/providers/Microsoft.Compute/virtualMachineScaleSets/RESNAME. To make changes to this rule, please update VM scale set to remove the reference to the probe.",
}
无论我尝试什么方法,删除所有探测器,只修改探测器的细节,我总是收到这个错误。
我们是否要让规模集中的所有 VM 更新探测器?还有其他办法吗?非常感谢您提前提供的帮助。
更新
之前的模板:https://pastebin.com/YisgUbRk
之后的模板:https://pastebin.com/2VmgPMur
我正在尝试用规则和 VMSS 替换 saProbe
,规则用 httpProbe
,VMSS 用 sshProbe
。
我也试过将 VMSS 探测器保持为 saProbe
并仅将 httpProbe
添加到 LB 规则,但这也没有用,得到了同样的错误。
这是 saProbe 的当前设置 https://pasteboard.co/HuKMcwA.png 它们与粘贴后的设置相匹配。
更新 2
试图在 LB 规则上保持 saProbe
,但将 VM 探测更改为 sshProbe
,在 webhttpslb
规则上具有相同的结果和相同的错误。
关于如何优雅地更换探针有什么建议吗?没有 LB 和 VM 停机?
更新 3
尼尔,确实是正确的(好地方!)还有一个我没有注意到的额外变化。
但是,现在很明显,我实际想要实现的目标可能无法实现。我将 saProbe 保留在 LB 规则上,但将 VMSS 探测器更改为 sshProbe
并收到此错误:
"error": {
"details": [],
"code": "CannotUseInactiveHealthProbe",
"message": "VM scale set /subscriptions/SUBID/resourceGroups/GROUPNAME/providers/Microsoft.Compute/virtualMachineScaleSets/RESNAME cannot use probe /subscriptions/SUBID/resourceGroups/GROUPNAME/providers/Microsoft.Network/loadBalancers/RESNAME-lb/probes/sshProbe as a HealthProbe because load balancing rules (weblb, webhttpslb) that send traffic to the scale set IPs in backend address pools (RESNAME-bepool) do not use this probe."
}
谁能证实这一点?如果我添加一个虚拟规则来激活 sshProbe
会怎样?这种情况的最佳做法是什么?
更新 4
是的,首先从 VMSS 中移除探测器是关键。不得不 运行 模板几次,但最后的现在只包括附加到规则和 VMSS 的 httpProbe
。
嗯,错误明确指出您不能修改此规则,您可以创建一个新规则并改用那个规则。
好的,如错误所述,您不能对规则进行任何更改,只要它引用用作 VMSS 运行状况探测的探测即可:
在您的模板中您得到了:
"healthProbe": {
"id": "[concat(variables('lbId'), '/probes/', variables('saProbeName'))]"
},
您应该在部署之前从 vmss 中删除它,或者创建一组不使用该探测器的新规则,这样您就可以修改它们。
查看之前和之后的模板,loadDistribution 似乎从 SourceIPProtocol 更改为 SourceIP(两次指定 loadDistribution 似乎都是这种情况)。这可能是您看到的错误的原因(不确定,但这是我最好的猜测)
希望对您有所帮助! :)
-尼尔