本文已超过一年。较旧的文章可能包含过时的内容。请检查页面中的信息自发布以来是否已变得不正确。

Kubernetes v1.14 为 Windows 节点和 Windows 容器提供生产级支持

2019 年 Kubernetes 的第一个版本带来了一个备受期待的功能——对 Windows 工作负载的生产级支持。到目前为止,Kubernetes 中的 Windows 节点支持一直处于 beta 阶段,允许许多用户进行实验并了解 Kubernetes 对 Windows 容器的价值。在 beta 阶段,Kubernetes 社区和 Windows Server 团队的开发人员共同努力,改进了容器运行时,构建了持续测试流程,并完成了良好用户体验所需的功能。Kubernetes 现在正式支持添加 Windows 节点作为工作节点和调度 Windows 容器,使庞大的 Windows 应用程序生态系统能够利用我们平台的力量。

随着 Windows 开发人员和 DevOps 工程师在过去几年中采用容器,他们一直在寻找一种使用通用接口来管理所有工作负载的方法。Kubernetes 在容器编排方面处于领先地位,这为用户提供了一种一致的方式来管理他们的容器工作负载,无论他们需要在 Linux 还是 Windows 上运行。

在 Kubernetes 中稳定发布 Windows 的过程并非易事。社区一直在致力于 Windows 支持 3 年,在 v1.5 中发布了 alpha 版本,在 v1.9 中发布了 beta 版本,现在在 v1.14 中发布了稳定版本。如果没有包括微软、Docker、VMware、Pivotal、Cloudbase Solutions、谷歌和 Apprenda 在内的公司的大力支持和重要贡献,我们今天不可能走到这里。在此过程中,有 3 个关键时间点极大地促进了我们的进展。

  1. Windows Server 容器网络方面的进步为创建 CNI(容器网络接口)插件提供了基础架构
  2. Windows Server 半年频道版本中发布的增强功能使 Kubernetes 开发能够向前推进 - 最终在长期服务频道上推出 Windows Server 2019。这是运行容器的最佳 Windows Server 版本。
  3. 采用 KEP(Kubernetes 增强提案)流程。Windows KEP 概述了一组明确且商定的目标、期望和可交付成果,这些目标、期望和可交付成果基于来自多个 SIG 的利益相关者的审查和反馈。这创建了一个 SIG-Windows 可以遵循的清晰计划,为实现此稳定版本铺平了道路。

在 v1.14 中,我们声明 Windows 节点支持是稳定的、经过良好测试的,并且可以在生产场景中采用。这在很多方面都是一个巨大的里程碑。对于 Kubernetes 来说,它加强了其在行业中的地位,使庞大的基于 Windows 的应用程序生态系统能够部署在该平台上。对于 Windows 运维人员和开发人员而言,这意味着他们可以使用相同的工具和流程来管理其 Windows 和 Linux 工作负载,从而充分利用 Kubernetes 驱动的云原生生态系统的效率。让我们稍微深入了解一下这些。

运维人员优势

  • 通过利用现有在解决方案、工具和技术方面的投资,以与管理 Linux 容器相同的方式管理 Windows 容器,从而获得运营效率
  • 容器编排方面的知识、培训和专业知识可以转移到 Windows 容器支持
  • IT 可以为 Linux 和 Windows 开发人员提供可扩展的自助式容器平台

开发人员优势

  • 容器简化了在开发和测试期间打包和部署应用程序的过程。现在,您还可以利用 Kubernetes 的优势来创建可靠、安全和可扩展的分布式应用程序。
  • Windows 开发人员现在可以利用不断增长的云和容器原生工具生态系统来更快地构建和部署,从而缩短应用程序的上市时间
  • 利用 Kubernetes 作为容器编排领域的领导者,开发人员只需要学习如何使用 Kubernetes,并且该技能可以在开发环境和云之间转移

CIO 优势

  • 利用 Kubernetes 引入的运营效率和成本效率
  • 将现有的 .NET 应用程序或基于 Windows 的工作负载容器化,以消除旧硬件或未充分利用的虚拟机,并简化从支持结束的 OS 版本迁移。您保留了应用程序为业务带来的好处,但降低了保持其运行的成本

“在 Windows 上使用 Kubernetes 使我们能够将内部 Web 应用程序作为微服务运行。这提供了对负载的快速扩展、更平稳的升级,并允许不同的开发组进行构建,而无需担心其他组的版本依赖关系。我们节省了资金,因为开发时间缩短了,并且操作时间也不会花在维护多个虚拟机环境上,”一位为一家顶尖跨国律师事务所工作的首席 DevOps 工程师杰里米说,他是 Kubernetes 上 Windows 的早期采用者之一。

此版本中引入了许多功能。我们希望您关注 Kubernetes 中 Windows 支持的一些关键功能和推动因素。有关受支持功能的详细列表,您可以阅读我们的文档

  • 您现在可以添加 Windows Server 2019 工作节点
  • 您现在可以使用部署、Pod、服务和工作负载控制器来调度 Windows 容器
  • 为 Azure、OVN-Kubernetes 和 Flannel 提供了树外 CNI 插件
  • 容器可以使用各种树内和树外存储插件
  • 改进了对指标/配额的支持,与为 Linux 容器提供的功能非常匹配

在考虑 Kubernetes 中的 Windows 支持时,许多人开始将 Linux 容器进行比较。虽然一些突出限制的比较是公平的,但区分 Windows 和 Linux 操作系统之间的操作限制和差异非常重要。从容器管理角度来看,我们必须在保留应用程序兼容性所需的 OS 特定行为与在多个操作系统之间实现 Kubernetes 的操作一致性之间取得平衡。例如,今天,Kubernetes 公开的一些 Linux 特定的文件系统功能、用户 ID 和权限在 Windows 上不起作用,用户已经熟悉这些基本差异。我们还将添加对 Windows 特定的配置的支持,以满足 Windows 客户可能在 Linux 上不存在的需求。对 Windows 组托管服务帐户的 alpha 支持就是一个例子。其他领域(例如 Windows Pod 的内存预留和 Windows kubelet)正在进行中,并突出了操作限制。我们将继续根据我们社区在未来版本中认为重要的内容来解决操作限制。

今天,Kubernetes 主组件将继续在 Linux 上运行。这样,用户可以添加 Windows 节点,而无需创建单独的 Kubernetes 集群。与往常一样,我们未来的方向由社区设定,因此随着时间的推移,将会出现更多组件、功能和部署方法。用户应该了解 Windows 和 Linux 之间的差异,并利用每个平台的优势。我们发布此版本的目的不是要使 Windows 可以与 Linux 互换或回答 Windows 与 Linux 的问题。我们提供管理方面的一致性。在没有自动化的情况下管理工作负载是繁琐且昂贵的。重写或重新架构工作负载的成本甚至更高。无论您的应用程序在 Linux 还是 Windows 上运行,容器都提供了一条清晰的前进道路,而 Kubernetes 为 IT 组织带来了一致的操作。

作为一个社区,我们的工作尚未完成。如前所述,我们仍然存在相当多的限制和一个健康的路线图。我们将继续取得进展,并增强 Kubernetes 中的 Windows 容器支持,其中一些值得注意的即将推出的功能包括

  • 支持 CRI-ContainerD 和 Hyper-V 隔离,在 Pod 之间实现虚拟机监控程序级别的隔离,以增强安全性并扩展我们的容器到节点的兼容性矩阵
  • 其他网络插件,包括 Flannel 覆盖支持的稳定版本
  • 使用 Windows 上的 kubeadm 创建简单的异构集群

我们欢迎您加入我们的社区,分享反馈和部署案例,并为代码、文档和任何类型的改进做出贡献。

感谢您,如果您有任何问题,请随时联系我们个人。

Michael Michael
SIG-Windows 主席
VMware 产品管理总监
Twitter 上的 @michmike77
Slack 上的 @m2

Patrick Lang
SIG-Windows 主席
微软高级软件工程师
Slack 上的 @PatrickLang