【问题标题】:Resizing a google cloud Kubernetes cluster to zero not working将谷歌云 Kubernetes 集群的大小调整为零不起作用
【发布时间】:2018-06-01 17:35:36
【问题描述】:

我尝试使用 将 kubernetes 集群的大小调整为零节点

gcloud container clusters resize $CLUSTER_NAME --size=0 --zone $ZONE

我收到一条成功消息,但节点池的大小保持不变(我只使用一个节点池)

是否可以将集群的大小调整为零?

【问题讨论】:

    标签: kubernetes google-cloud-platform


    【解决方案1】:

    有时您只需要等待 10-20 分钟即可自动缩放操作生效。
    在其他情况下,您可能需要检查是否满足某些条件来缩减节点。

    根据autoscaler documentation

    集群自动扩缩器还会根据节点池的总容量需求衡量每个节点的使用情况。如果某个节点在一段时间内没有安排新的 Pod,并且该节点上运行的所有 Pod 都可以调度到池中的其他节点上,则自动扩缩器会移动 Pod 并删除该节点。

    请注意,集群自动扩缩器的工作基于 Pod 资源请求,即您的 Pod 请求了多少资源。集群自动扩缩器不会考虑您的 Pod 正在积极使用的资源。本质上,集群自动扩缩器相信您提供的 Pod 资源请求是准确的,并根据该假设在节点上调度 Pod。

    注意:从 Kubernetes 1.7 版开始,您可以为节点池指定最小大小为零。如果其中的实例不需要运行您的工作负载,这允许您的节点池完全缩减。但是,虽然节点池可以扩展到零大小,但整个集群大小不会缩小到零节点(因为运行系统 Pod 始终需要至少一个节点)

    集群自动扩缩器有以下限制: - 缩减时,集群自动扩缩器支持 Pod 最长 10 分钟的优雅终止期。 Pod 总是在最多 10 分钟后被杀死,即使 Pod 配置了更高的宽限期。

    注意:您对集群自动扩缩器所做的每项更改都会导致 Kubernetes 主节点重新启动,这需要几分钟才能完成。

    但是,FAQ 中提到的某些情况可以阻止 CA 删除节点:

    哪些类型的 pod 可以阻止 CA 移除节点?

    • 具有限制性 PodDisruptionBudget 的 Pod。
    • Kube 系统 pod:
      • 默认不在节点上运行,*
      • 没有 PDB 或他们的 PDB 过于严格(自 CA 0.6 起)。
    • 不受控制器对象支持的 Pod(因此不是由部署、副本集、作业、有状态集等创建的)。 *
    • 具有本地存储的 Pod。 *
    • 由于各种限制(缺乏资源、不匹配的节点选择器或亲和性、匹配的反亲和性等)而无法移动到其他地方的 Pod *除非 pod 具有以下注解(CA 1.0.3 或更高版本支持):

    "cluster-autoscaler.kubernetes.io/safe-to-evict": "true"

    如何将我的集群扩展到只有 1 个节点?

    在 0.6 版之前,Cluster Autoscaler 不会触及运行重要 kube-system pod(如 DNS、Heapster、> Dashboard 等)的节点。如果这些 pod 位于不同的节点上,CA 无法缩减集群,用户可以最终得到一个完全空的 3 节点集群。在 0.6 中,我们添加了一个选项来告诉 CA 一些系统 pod 可以移动。如果用户为 kube-system pod 配置了PodDisruptionBudget,则不接触运行此 pod 的节点的默认策略将被 PDB 设置覆盖。因此,要启用 kube-system pod 迁移,应将 minAvailable 设置为 0(如果有 N+1 个 pod 副本,则设置为 I have a couple of nodes with low utilization, but they are not scaled down. Why?

    如何将节点组缩放到 0?

    假设满足所有缩减条件,从 GCE/GKE 的 CA 0.6 和 AWS 的 CA 0.6.1 开始,可以将节点组扩展到 0(显然是从 0)。

    对于 AWS,如果您使用 nodeSelector,则需要使用节点模板键“k8s.io/cluster-autoscaler/node-template/label/”标记 ASG。

    例如,对于 foo=bar 的节点标签,您可以将 ASG 标记为:

    { "ResourceType": "auto-scaling-group", "ResourceId": "foo.example.com", "PropagateAtLaunch": true, "Value": "bar", "Key": "k8s.io/cluster-autoscaler/node-template/label/foo" }

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-02-20
      • 1970-01-01
      • 1970-01-01
      • 2020-07-02
      • 1970-01-01
      • 1970-01-01
      • 2018-11-02
      • 1970-01-01
      相关资源
      最近更新 更多