我有一个活性探测器,配置为检查端点的可用性:
livenessProbe:
httpGet:
path: /path_example/
port: 8000
initialDelaySeconds: 10
periodSeconds: 60
集群已按照此处的说明启用自动缩放功能 -https://cloud.google.com/kubernetes-engine/docs/how-to/cluster-autoscaler 最小值为 1,最大值为 3
尽管已经过去了十多分钟,但集群始终显示“当前总大小 - 3”。除了活跃度探测之外,没有任何东西在使用该应用程序。
这是否会导致节点保留并且永远不会缩小?
我看不出节点永远不会宕机的任何其他原因。
更新: 我已经为 CPU 设置了资源,并在部署中设置了自动缩放器,因此现在对于“kubectl get hpa”,我得到:
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE
one-deployment Deployment/one-deployment 34%/80% 1 3 1 2m8s
two-deployment Deployment/two-deployment 47%/80% 1 3 1 8m16s
three-deployment Deployment/three-deployment 35%/80% 1 3 1 3m29s
four-deployment Deployment/four-deployment 33%/80% 1 3 1 2m48s
five-deployment Deployment/five-deployment 47%/80% 1 3 1 2m24s
但我仍然保持最多 3 个节点。
另一个更新: 我很感激任何关于我认为是我学习总结的反馈。我对 Kubernetes 和 GKE 还很陌生,所以请原谅我。
首先,我现在更好地理解了集群上的节点的自动缩放,然后节点上的 pod 的自动缩放。
我首先需要正确完成的部分是集群上节点的自动缩放。当在集群上启用自动缩放时,例如 --enable-autoscaling --no-of-nodes 2 --min-nodes 1 --max-nodes 3。然后,我将部署运行在 2 个节点上,如果所需资源很少,并且 pod 可以移动节点,那么它可能会减少到 1 个。如果指定的 --num-of-nodes 为 3,那么我将部署到 3 个节点,这可能会导致不可移动的 pod 分布在所有三个节点上,从而阻止缩减到 2 个或 1 个节点的能力。
由于从 1 开始导致我的应用程序无法完全部署,因此我将其设置为 2。
现在扩展我的部署以潜在地增加 pod 的数量:在 GCP GKE 控制台中,我选择了“工作负载”,然后在 pod 列表中选择了我的一个部署。然后从这里,我从顶部的菜单中选择“操作”,然后选择“自动缩放”,我保留了默认值 1 最小值和 3 最大值并确认。我对其他 4 个部署重复了此操作。这是我第一次开始研究集群扩展时混淆的水平 pod 扩展。这是我运行“kubectl get hpa”时获得的详细信息。据我所知,这与集群的节点扩展完全无关。
现在我的应用程序正在运行,当我的 pod 上有足够的负载时,hpa 自动缩放将启动并创建新的 pod。这些 pod 将在我现有的两个节点中运行,除非空间不足,此时集群(配置为最多 3 个)将添加第三个节点并将新 pod 分配给此节点。
所以希望我的最后一个问题是 - 我把两个加两个得到 5 了吗?
答案1
欢迎加入 Stack!以下几点可能对您有帮助:
集群自动扩缩器当某些节点长期处于低利用率状态时,集群规模将减小。当节点利用率较低时,该节点将不再需要,并且其所有重要 pod 都可以移至其他地方。
如果没有关于您的环境的更多信息(你是如何创建集群的,集群中运行着什么,你的利用率如何等等)很难猜测,但这里有一些 Pod 类型可以阻止你的集群缩小(如果你的利用率很低,我猜是那些无法被驱逐的 Pod):
- 正在使用你的集群的 Pod
- 具有限制性 PodDisruptionBudget 的 Pod。
- Kube 系统 Pod 可以:
- 默认情况下不在节点上运行,*
- 没有 pod 中断预算 设置或其 PDB 过于严格(自 CA 0.6 起)。
- 不受控制器对象支持的 Pod(因此不是由部署、副本集、作业、状态集等创建的)。*
- 具有本地存储的 Pod。*
- 由于各种限制(缺乏资源、节点选择器或亲和性不匹配、反亲和性匹配等)而无法移动到其他地方的 Pod
- 设置了以下注释的 Pod:
"cluster-autoscaler.kubernetes.io/safe-to-evict": "false"
*除非 pod 有以下注释(CA 1.0.3 或更高版本支持):
"cluster-autoscaler.kubernetes.io/safe-to-evict": "true"
或者 您已使用相关标志之一覆盖了此行为。 请参阅下文以了解有关这些标志的更多信息。
那么如何扩展集群以仅拥有一个节点呢?
在 0.6 版之前,Cluster Autoscaler 不会触及运行重要 kube-system pod(如 DNS、Metrics Server、Dashboard 等)的节点。如果这些 pod 位于不同的节点上,CA 无法缩小集群,用户最终可能会得到一个完全空的 3 节点集群。在 0.6 版中,我们添加了一个选项来告诉 CA 一些系统 pod 可以移动。如果用户配置 PodDisruptionBudget 对于 kube-system pod,则不接触运行此 pod 的节点的默认策略将被 PDB 设置覆盖。因此,要启用 kube-system pod 迁移,应设置 最低可用 为 0(如果有 N+1 个 pod 副本,则 <= N。)
为了解决此问题,你可能还需要检查 我有几个利用率较低的节点,但它们没有缩减规模。为什么?