kubernetes - Kubernetes Horizontal Pod Autoscaler 未利用节点资源
问题描述
我目前正在运行 Kubernetes 1.9.7 并成功使用Cluster Autoscaler和多个Horizontal Pod Autoscaler。
但是,我最近开始注意到 HPA 在缩小副本时会偏爱更新的 Pod。
例如,我有 1 个服务 A 的副本在一个节点上与其他几个服务一起运行。该节点有大量可用资源。在加载期间,服务 A 的目标 CPU 利用率高于配置的阈值,因此 HPA 决定将其扩展到 2 个副本。由于没有其他可用节点,CAS 跨越了一个新节点,新副本在该节点上成功调度 - 到目前为止一切顺利!
问题是,当目标 CPU 利用率回落到配置的阈值以下时,HPA 决定缩减到 1 个副本。我希望看到新节点上的新副本被删除,从而使 CAS 能够关闭该新节点。但是,HPA 删除了在具有大量可用资源的节点上运行的现有服务 A 副本。这意味着我现在在一个新节点上运行服务 A,它本身无法被 CAS 删除,即使现有节点上有足够的空间来安排服务 A。
这是 HPA 或 Kubernetes 调度程序的问题吗?服务 A 现在已经在新节点上运行了 48 小时,尽管现有节点上有足够多的资源,但仍未重新调度。
解决方案
在浏览了我的集群配置之后,我设法得出了关于为什么会发生这种情况的结论。
服务 A 配置为在公共子网上运行,并且 CA 创建的新节点是公共的。运行服务 A 的原始副本的现有节点是私有的,因此导致 HPA 删除此副本。
我不确定服务 A 一开始是如何安排到这个节点上的,但这是一个不同的问题。
推荐阅读
- python - Matlab datenum 到 python,我得到大约 3 小时的错误
- javascript - 如何使用 JQuery 将 css 属性应用于子元素
- ruby-on-rails - 当我执行 rake db:setup 时,rake 中止
- c# - 我可以在调试期间发送电子邮件,但在发布时不能(ASP.NET)
- python - 重置命令行、路径等
- json - 从 Sentry 的本地实例中解压缩压缩的 json blob-as-text(nodestore_node 表)数据
- python-3.x - pyspark的parallelize()出错
- reactjs - 如何在我的 Gatsby 博客网站中有效地显示 GIF 图像?
- python - 在数组中重塑数组
- javascript - 防止 addEventListener 在元素上重复