【问题标题】:(How) do node pool autoupgrades in GKE actually work?(如何)GKE 中的节点池自动升级实际上有效吗?
【发布时间】:2019-07-19 18:55:06
【问题描述】:

我们在 GKE 上部署了相当大的 Kubernetes,我们希望通过启用自动升级让我们的生活更轻松一些。 documentation on the topic 告诉您如何启用它,而不是它实际上是如何工作

我们在测试集群上启用了该功能,但从未升级任何节点(尽管 UI 一直在提醒我们“可以升级”)。

文档说它将更新到“最新的稳定”版本,并且它会“由 GKE 团队自行决定定期发生”——这两者都不是很有帮助。

用户界面总是说:“下一次自动升级:未安排”

是否有人在生产中使用过此功能并且可以阐明它的实际作用?

我做了什么:

  • 我在 nodepools 上启用了该功能(不是集群本身)
  • 我设置了维护窗口
  • 集群版本为1.11.7-gke.3
  • 节点池的版本为1.11.5-gke.X
  • 最新的可用版本是1.11.7-gke.6

我的预期:

  • 节点池将更新为1.11.7-gke.3(默认集群版本)或1.11.7-gke.6(最新版本)
  • 更新将在下一个维护时段进行
  • 否则更新将像“手动”更新一样工作

实际发生了什么:

  • 什么都没有
  • 节点池在1.11.5-gke.X 上停留了一个多星期

我的问题

  • nodepool 版本应该更新吗?
  • 如果有,在什么时间?
  • 如果有,是什么版本?

【问题讨论】:

    标签: kubernetes google-kubernetes-engine


    【解决方案1】:

    我最终会自己回答这个问题。自动升级确实有效,但版本升级需要几天到一周的时间。

    没有任何计划升级日期的指示,或版本更新以外的任何反馈。

    它将升级到集群的当前主版本。

    补充:它仍然不能可靠地工作,如果不可靠仍然无法调试。我得到的一个信息是,如果您最初为节点池提供了特定版本,则该机制不起作用。由于无法推断自动更新的内部工作原理,我们不得不再次手动检查状态。

    【讨论】:

    • 它发生在您设置的“维护窗口”上?
    • 窗口已设置,但我无法确定更新是否在窗口期间运行...
    • 我已经等了 10 多天了……但还是一无所获 :( 我想我们再也不会使用自动升级了。我们必须手动进行。
    【解决方案2】:

    我想分享其他两种可能性,说明为什么节点池可能不会自动升级或计划升级。

    我们的一个项目遇到了类似的问题,主版本已自动升级到 1.14.10-gke.27,但我们的节点池在 1.14.10-gke.24 停留了一个多月。

    达到节点配额

    节点池升级可能由于节点配额而失败(尽管我不确定 Web 控制台会显示 Next auto-upgrade: Not scheduled)。从node upgrades documentation,它建议我们可以运行以下命令来查看任何失败的升级操作:

    gcloud container operations list --filter="STATUS=DONE AND TYPE=UPGRADE_NODES AND targetLink:https://container.googleapis.com/v1/projects/[PROJECT_ID]/zones/[ZONE]/clusters/[CLUSTER_NAME]"
    

    自动节点升级仅适用于次要+版本

    在用尽了我的故障排除步骤后,我联系了 GCP 支持并打开了一个案例(Case 23113272 适用于在 Google 工作的任何人)。他们告诉我以下内容:

    自动节点升级: 节点版本不需要自动升级,让我解释一下,一个节点中存在三个升级:次要版本(1.X),补丁版本(1.XY)和安全更新和错误修复(1.XY-gke.N) ,请查看此文档 [2] 自动节点升级从次要版本开始,在您的情况下,升级是无法自动升级的安全更新。

    我回复了,他们确认自动节点升级只会发生在次要版本及以上。我已要求他们提交request to update their documentation,因为(在此回复时)他们的node auto-upgrade documentation任何地方都没有概述它。

    【讨论】:

      【解决方案3】:

      此功能将节点池中运行“旧”Kubernetes 版本的虚拟机(Kubernetes 节点)替换为运行“新”版本的虚拟机。

      节点池“升级”操作以滚动方式完成:它不像 GKE 会删除您的所有虚拟机并同时重新创建它们(除非您的集群中只有 1 个节点)。默认情况下,节点会一个接一个替换为较新的节点(尽管这可能会改变)。

      GKE 内部主要使用managed instance groups 的功能来管理节点池上的操作。

      您可以通过指定某些“维护窗口”在how to schedule node upgrades 上找到文档,从而将您受到的影响降到最低。 (本文还提供了有关升级如何发生的更多见解。)

      也就是说,您可以禁用自动升级手动升级您的集群(尽管不推荐这样做)。一些 GKE 用户有数千个节点,因此对他们来说,逐个升级虚拟机是不可行的。

      为此,GKE 提供了一个选项,可让您选择“一次升级多少个节点”:

      gcloud container clusters upgrade \
          --concurrent-node-count=CONCURRENT_NODE_COUNT
      

      这个标志的文档说:

      同时升级的节点数。有效值为 [1, 20]。建议将此值设置为不高于集群大小的 3%。'

      【讨论】:

      • 我在问题中提供了一些附加信息,以便更清楚地了解我需要知道的内容。我的问题不是关于该功能在工作时如何工作,而是为什么在 GKE 中启用它时它没有效果。
      • 是的,您可能应该早点添加,不应该。 :)
      猜你喜欢
      • 1970-01-01
      • 2019-11-06
      • 1970-01-01
      • 1970-01-01
      • 2021-12-17
      • 1970-01-01
      • 2022-08-20
      • 1970-01-01
      • 2021-06-12
      相关资源
      最近更新 更多