Aks 错误无法耗尽节点,中止缩减
Aks Error Failed to drain the node, aborting scale down
我正在使用 Kured 执行节点的安全重启以升级 OS 和内核版本。
在我的理解中,它通过封锁和排空节点来工作,并且 pods 被安排在具有旧版本的新节点上。重启后,节点解除封锁并回到就绪状态,临时工作节点被删除。
直到昨天其中一个节点未能升级到最新的内核版本时,一切都很好。上周升级成功后在 5.4.0-1058-azure 上,昨天打最新补丁后应该在 5.4.0-1059-azure 上,但它使用的是旧版本 5.4.0-1047-azure(我认为是创建的临时节点的版本)。
查看azure上的log analytics,说是缩容失败。
原因:ScaleDownFailed
消息:无法耗尽节点,正在中止 ScaleDown
Error message
知道为什么会这样吗?
首先,对OS和内核打补丁的过程有点误解
In my understanding, it works by cordoning and draining the node, and the pods are scheduled on a new node with the older version.
is/are添加的新节点应该是最新的node image version with latest security patches (which usually does not fall back to an older kernel version) available for the node pool. You can check out the AKS node image releases here. Reference
但是,不是 有必要从正在重新启动的节点中通过 drain 操作逐出 pod过程中的任何一点都必须落在 浪涌节点 上。如果节点符合调度这些节点的要求,则被逐出的 pod(S) 很可能会被调度到现有节点上 pods.
对于调度程序发现的每个 Pod,调度程序负责为该 Pod 到 运行 找到 最佳节点。调度程序根据 here.
中描述的调度原则做出此放置决定
在撰写本文时,文档可能对此有一些误导。
关于错误:
Reason: ScaleDownFailed
Message: failed to drain the node, aborting ScaleDown
发生这种情况的原因有很多。常见的可能是:
调度程序找不到合适的节点来放置被驱逐的 pods,并且由于可用计算配额不足,节点池无法扩展。 [Reference]
调度程序找不到合适的节点来放置被驱逐的 pods,并且由于节点池子网中的 IP 地址不足,集群无法扩展。 [Reference]
PodDisruptionBudgets
(PDB) 不允许一次移动至少 1 个 pod 副本,导致 drain/evict 操作失败。 [Reference]
一般来说,
Eviction API 可以通过以下三种方式之一进行响应:
- 如果驱逐被批准,那么 Pod 将被删除,就好像您向 Pod 的 URL 发送了
DELETE
请求并收到了返回 200 OK
。
- 如果当前情况不允许根据预算中规定的规则进行驱逐,您可以返回
429 Too Many Requests
。这通常用于 任何 请求的通用速率限制,但在这里我们的意思是 现在 不允许此请求,但可能允许稍后.
- 如果存在某种配置错误;例如,引用同一个 Pod 的多个 PodDisruptionBudgets,你会得到一个
500 Internal Server Error
响应。
对于给定的驱逐请求,有两种情况:
- 没有符合此广告连播的预算。在这种情况下,服务器总是 returns
200 OK
.
- 至少有一项预算。在这种情况下,上述三个响应中的任何一个都可能适用。
驱逐停滞
在某些情况下,应用程序可能会达到崩溃状态,除非您进行干预,否则驱逐 API 永远不会 return 除了 429 或 500。
例如:如果 ReplicaSet 正在为您的应用程序创建 Pods 但替换 Pods 不会变成 Ready
,就会发生这种情况。如果最后一个被逐出的 Pod 的终止宽限期很长,您也会看到类似的症状。
如何进一步调查?
在 Azure 门户上导航到您的 AKS 群集
转到左侧菜单中的资源运行状况,然后单击诊断和解决问题
您应该会看到如下内容
如果您单击每个选项,您应该会看到许多支票正在加载。您可以在屏幕右上角设置影响的时间范围,如下所示(请在设置正确的时间范围后按Enter
键)。您可以单击每个条目右侧的 More Info
link 以获取详细信息和建议的操作。
如何缓解这个问题?
确定问题并按照建议修复问题后,请在 AKS 集群上执行 az aks upgrade
到与当前 运行ning 相同的 Kubernetes 版本。这应该在引擎盖下需要的任何地方启动协调操作。
我正在使用 Kured 执行节点的安全重启以升级 OS 和内核版本。 在我的理解中,它通过封锁和排空节点来工作,并且 pods 被安排在具有旧版本的新节点上。重启后,节点解除封锁并回到就绪状态,临时工作节点被删除。
直到昨天其中一个节点未能升级到最新的内核版本时,一切都很好。上周升级成功后在 5.4.0-1058-azure 上,昨天打最新补丁后应该在 5.4.0-1059-azure 上,但它使用的是旧版本 5.4.0-1047-azure(我认为是创建的临时节点的版本)。
查看azure上的log analytics,说是缩容失败。
原因:ScaleDownFailed
消息:无法耗尽节点,正在中止 ScaleDown
Error message
知道为什么会这样吗?
首先,对OS和内核打补丁的过程有点误解
In my understanding, it works by cordoning and draining the node, and the pods are scheduled on a new node with the older version.
is/are添加的新节点应该是最新的node image version with latest security patches (which usually does not fall back to an older kernel version) available for the node pool. You can check out the AKS node image releases here. Reference
但是,不是 有必要从正在重新启动的节点中通过 drain 操作逐出 pod过程中的任何一点都必须落在 浪涌节点 上。如果节点符合调度这些节点的要求,则被逐出的 pod(S) 很可能会被调度到现有节点上 pods.
对于调度程序发现的每个 Pod,调度程序负责为该 Pod 到 运行 找到 最佳节点。调度程序根据 here.
中描述的调度原则做出此放置决定在撰写本文时,文档可能对此有一些误导。
关于错误:
Reason: ScaleDownFailed
Message: failed to drain the node, aborting ScaleDown
发生这种情况的原因有很多。常见的可能是:
调度程序找不到合适的节点来放置被驱逐的 pods,并且由于可用计算配额不足,节点池无法扩展。 [Reference]
调度程序找不到合适的节点来放置被驱逐的 pods,并且由于节点池子网中的 IP 地址不足,集群无法扩展。 [Reference]
PodDisruptionBudgets
(PDB) 不允许一次移动至少 1 个 pod 副本,导致 drain/evict 操作失败。 [Reference]
一般来说,
Eviction API 可以通过以下三种方式之一进行响应:
- 如果驱逐被批准,那么 Pod 将被删除,就好像您向 Pod 的 URL 发送了
DELETE
请求并收到了返回200 OK
。 - 如果当前情况不允许根据预算中规定的规则进行驱逐,您可以返回
429 Too Many Requests
。这通常用于 任何 请求的通用速率限制,但在这里我们的意思是 现在 不允许此请求,但可能允许稍后. - 如果存在某种配置错误;例如,引用同一个 Pod 的多个 PodDisruptionBudgets,你会得到一个
500 Internal Server Error
响应。
对于给定的驱逐请求,有两种情况:
- 没有符合此广告连播的预算。在这种情况下,服务器总是 returns
200 OK
. - 至少有一项预算。在这种情况下,上述三个响应中的任何一个都可能适用。
驱逐停滞
在某些情况下,应用程序可能会达到崩溃状态,除非您进行干预,否则驱逐 API 永远不会 return 除了 429 或 500。
例如:如果 ReplicaSet 正在为您的应用程序创建 Pods 但替换 Pods 不会变成 Ready
,就会发生这种情况。如果最后一个被逐出的 Pod 的终止宽限期很长,您也会看到类似的症状。
如何进一步调查?
在 Azure 门户上导航到您的 AKS 群集
转到左侧菜单中的资源运行状况,然后单击诊断和解决问题
您应该会看到如下内容
如果您单击每个选项,您应该会看到许多支票正在加载。您可以在屏幕右上角设置影响的时间范围,如下所示(请在设置正确的时间范围后按
Enter
键)。您可以单击每个条目右侧的More Info
link 以获取详细信息和建议的操作。
如何缓解这个问题?
确定问题并按照建议修复问题后,请在 AKS 集群上执行 az aks upgrade
到与当前 运行ning 相同的 Kubernetes 版本。这应该在引擎盖下需要的任何地方启动协调操作。