将Google云Kubernetes群集调整为零以使其无法正常工作

时间:2018-05-31 10:52:52

标签: kubernetes google-cloud-platform

我尝试使用

将kubernetes群集调整为零节点
gcloud container clusters resize $CLUSTER_NAME --size=0 --zone $ZONE

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

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

1 个答案:

答案 0 :(得分:1)

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

根据autoscaler documentation

  

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

     

请注意,群集自动缩放器基于Pod资源请求工作,即Pod已请求的资源数量。群集自动缩放器不会考虑Pod正在使用的资源。从本质上讲,集群自动调节器信任您提供的Pod资源请求是准确的,并根据该假设在节点上调度Pod。

     

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

     

群集自动缩放器具有以下限制:     - 缩小时,群集自动缩放器支持最长10分钟的Pod的正常终止时间。即使Pod配置了较宽的宽限期,Pod也会在最多10分钟后被终止。

     

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

但是,FAQ中提到的可能会阻止CA删除节点的情况:

  

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

     
      
  • Pods具有限制性PodDisruptionBudget。
  •   
  • Kube系统吊舱:      
        默认情况下,
    • 不在节点上运行,*
    •   
    • 没有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系统pod的节点,如DNS,Heapster,>仪表板等。如果这些pod落在不同的节点上,CA无法缩小群集,用户可能最终得到一个完全空的3节点群集。在0.6中,我们添加了一个选项,告诉CA可以移动一些系统pod。如果用户为kube-system pod配置PodDisruptionBudget,则使用PDB设置覆盖不触及运行此pod的节点的默认策略。因此,要启用kube-system pods迁移,应将minAvailable设置为0(如果有N + 1个pod副本,则设置为< = N。)另请参阅I have a couple of nodes with low utilization, but they are not scaled down. Why?

     

如何将节点组缩放为0?

     

从CA 0.6 for GCE / GKE和CA 0.6.1 for AWS,可以将节点组缩放为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" }