Azure Kubernetes 更新浅谈

时间:2022-01-15 00:58:48

今天我们要和大叫聊一个非常重要的话题,更新。当我说更新时,我指的不仅是Kubernetes更新,还包括工作节点操作系统更新。在很多的使用场景中,很多客户都忘记了去更新修补work node的操作系统,认为它是由微软进行处理的。其实事实并非如此。目前如果您实在Azure中使用Kubernetes服务,则您有责任使集群保持最新状态。


为什么要更新AKS群集

Kubernetes 发展很快。每三到四个月就会发布一个新的次要版本。在这些次要版本中,您可以期待新功能和改进,有时还会出现重大更改,例如 API 版本更改,这可能会阻止您的部署工作。补丁发布的频率更高,有时每周发布一次,以修复严重的错误和安全漏洞。Kubernetes 也没有长期服务 (LTS) 版本。

听起来像是一场噩梦,也许你在想如果它会破坏东西为什么还要更新。首先,支持,Azure 仅支持 AKS 公开发布 (GA) 的最后 3 个 Kubernetes 版本。这意味着一旦 AKS 向所有受支持的 Azure 区域发布了一个 Kubernetes 版本,它就被归类为 GA。因此,假设版本 1.19 已为 AKS 正式发布,则仅支持版本 1.19、1.18 和 1.17 次要版本。AKS 仅支持两个补丁版本。因此,对于 1.19 版本,您只能使用最新的两个补丁,1.19.3 和 19.1。在补丁 1.19.3 发布之前支持 1.19.0。希望这很清楚。

回顾一下,AKS 仅支持最后 3 个次要版本和最后 2 个已发布的补丁版本。如果您需要 Microsoft 的支持并且没有使用受支持的版本,他们会要求您做的第一件事就是更新集群。


AKS控制平面更新

在 AKS 中,有一个叫做控制平面的东西。这实际上只是主节点,由 Microsoft 负责,除了更新之外。没有支持的自动更新 AKS 控制平面的方法。在继续更新生产系统之前,应该始终测试应用程序是否继续工作并可部署到新版本上。

可以通过 Azure 门户或 Azure CLI 更新控制平面。当然,通过门户网站要容易得多,因为它只是一个下拉列表。

Azure Kubernetes 更新浅谈

在对控制平面执行更新时,Microsoft 通过更新集群的控制平面组件来处理所有事情,我们只需稍等片刻即可更新。


AKS节点更新

另一方面,工作节点需要不同类型的更新。在本节中,我将讨论 Kubernetes 版本更新。在下一节中,我将讨论节点操作系统更新。

与控制平面一样,您可以使用 Azure 门户和 Azure CLI 来更新节点。在 AKS 中,每个节点都位于称为节点池的东西中(想想虚拟机规模集)。AKS 也支持多个节点池,它们可以是 Windows 或 Linux,只是不能都在同一个节点池中。

只能将节点池升级到控制平面或更低版本。因此,假设您的控制平面正在运行 Kubernetes 版本 1.18.10。您只能将节点池升级到 1.18.10,但可以将它们升级到 1.18.8。除非先升级控制平面,否则您将无法将它们升级到 1.19.3。

当您执行升级时,AKS 将添加一个称为缓冲节点的东西。这个缓冲节点通常是一个,但可以使用称为 max surge 的功能进行配置,它是在您的集群中创建的。这个缓冲节点正在运行新版本的 Kubernetes。然后,集群将根据最大激增设置*和排空一个或多个旧节点,以帮助最大程度地减少对正在运行的应用程序的中断。当旧节点完全耗尽时,它将使用 Microsoft 的最新 VM 映像和选定的 Kubernetes 版本重新映像。这个重新成像的节点将成为缓冲区节点。这将一直持续到您剩下一个节点为止,一旦它完全耗尽,它将被删除,以保持现有的工作节点数。

整个过程可能需要一些时间,具体取决于您的工作量。每个节点的升级总允许时间为 10 分钟,因此在进行升级时只需将 10 乘以要升级的节点数即可确保有足够的时间。


AKS节点操作系统更新

现在我们了解了 Kubernetes 版本的控制平面更新和节点更新,但您仍然拥有需要修补的操作系统,就像您通常运行的任何服务器一样。幸运的是,您实际上并不需要自己安装补丁。Microsoft 会处理这个问题,至少对于 Linux 节点是这样。您所要做的就是重新启动 Linux 节点以使更新生效。另一方面,Windows 有点不同。让我们先来看看 Linux 节点。

Linux 节点配置为每晚检查更新。如果有可用的安全更新或内核更新,它将自动下载并安装更新。其中一些更新,如内核更新,将需要重新启动。当节点需要重启时,将在 /var/run/ 下创建一个名为 reboot-required 的文件。您可以创建自己的解决方案来监视此文件,也可以使用 Weaveworks 的名为 KURED(KUbernetes 重启守护进程)的开源工具。只需按照他们的 GitHub 存储库中的说明将其安装到您的集群上即可。它甚至可以让您安排日程并向 Slack 或 Teams 发送消息。

对于 Windows 节点池,您需要升级节点操作系统映像。每周 Microsoft 都会提供一个适用于 Windows 和 Linux 的新节点映像。然后可以使用 Azure CLI 升级群集中的节点。您可以执行完整的集群或仅执行节点池。目前没有办法自动执行此操作,希望有一天会实现,但在那之前您可以考虑使用逻辑应用程序或 Azure 自动化来执行此操作。

最后一个选项是更新节点池上的 Kubernetes 版本。如上一节所述,当您升级 Kubernetes 时,它会使用您选择的 Kubernetes 版本的最新映像版本创建新节点,因此您将获得一个包含所有安全补丁的新节点操作系统映像。