今天我们要和大叫聊一个非常重要的话题,更新。当我说更新时,我指的不仅是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 更新控制平面。当然,通过门户网站要容易得多,因为它只是一个下拉列表。
在对控制平面执行更新时,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 版本的最新映像版本创建新节点,因此您将获得一个包含所有安全补丁的新节点操作系统映像。