容器运行时在云原生和 Rancher 上的演进
使用体积比 Docker 更小的容器运行时正成为云原生生态系统的发展趋势。这种转变为群集运营商带来了新的选择,同时也要求群集运营商重新评估自己的 Kubernetes 容器运行时。
SUSE Rancher 预见到了这一趋势,并在开源的 containerd 容器运行时上构建了两个 Kubernetes 发行版——K3s 和 RKE 2。RKE 2 是全面兼容的 Kubernetes 发行版,它基于 K3s 构建,更侧重于安全性和合规性。
基于 containerd 的 RKE2 是 Rancher 管理 Windows 容器的未来趋势。
过渡到 RKE 2 能够提升安全性,为使用 Windows 容器的客户提供更丰富的功能,提升 Windows 与 Linux 容器的功能对等性,并支持 Linux 与 Windows 工作负载在 Rancher 环境下的并行动态部署。
本文将介绍基于 RKE 1 的 Windows 容器的演进和基于 RKE 2 的 Windows 容器最新进展,并探讨客户将 Windows 容器工作负载迁移到 RKE 2 时需要考虑的因素和采取的措施。
RKE 1 上的 Windows 容器演进
Rancher 2.3 版本首次通过 RKE 1 支持 Windows 容器 (https://github.com/rancher/rancher/releases/tag/v2.3.0)。
在 RKE 1 上,Windows 容器采用 Docker EE 运行时,该运行时通过 Microsoft 和 Docker 的合作已内置到 Windows Server 2016 及更高的版本中。
通过 RKE 1,Rancher 用户可为 Windows 工作负载指定一个集群,作为自定义集群配置的一部分。然后,将污点和容忍度应用于节点上,从而将 Windows 工作负载调度到合适的节点上。
这些特殊的 Windows 集群无法转换为 Linux 集群,也无法轻松运行 Linux 和 Windows 混合工作负载。
这是在 Rancher 上支持 Windows 容器重要的第一步,但对于 Windows 和 Linux 节点同时运行的混合操作系统生态,这种方法有很多局限性。
这就需要一个新的方法。
在 RKE 2 上运行 Windows 容器
Rancher 2.6.0 技术预览版首次在 RKE 2 上推出了 Windows 容器 (https://github.com/rancher/rancher/releases/tag/v2.6.0)。
RKE 2 上的 Windows 容器由 containerd 运行时和 Calico CNI 提供支持,首次为 Rancher 上的 Windows 容器启用网络策略。
RKE 2 上的 Windows 容器还推出了一种新的集群配置架构模型,适用于混合 Linux 和 Windows 集群。这种新模型放弃了特定于 Windows 的集群以及对污点和容忍度的使用限制。
RKE 2 上的 Windows 容器采用了更具适应性、更动态的集群配置方法。RKE 2 采用 nodeSelector 标签在适当的 OS 节点上调度工作负载,配置时不再需要声明 Windows 集群,也不仅限于运行 Windows 工作负载。
通过这种新模型,用户能够更灵活地将 Linux 和 Windows 工作负载一起部署到同一个集群上。例如,在单个集群中,用户现在可以在 Windows 节点上部署完整的 .NET 框架应用,并在 Linux 节点上部署 SQL Server,而且规划和配置更加简单。
RKE 2 上的 Windows 容器发展
在 Rancher 2.6.4 版本(Rancher 的最新版本)中,RKE 2 上的 Windows 容器也将 GA,它将超越 RKE 1 上的 Windows 容器,为 Rancher 上的 Windows 和 Linux 容器提供更加对等的功能。
Rancher的Windows 团队一直在开放状态下进行开发(https://github.com/rancher/windows/projects),过程完全透明。
RKE 2 上的 Windows 容器支持 Windows Server 2019 和 Windows Server 2022,这两项都是 Windows Server 的 LTSC 分支。
对于 RKE 1 上的 Windows 容器,用户升级时需考虑许多重要因素。
弃用 Windows Server 上的 Docker EE
自 2022 年 9 月起,Microsoft 将不再支持 Docker EE (Updates to the Windows Container Runtime support - Microsoft Tech Community)。届时,客户需要寻找另一个容器运行时解决方案,例如 Rancher 提供的基于containerd RKE 2。
一直到 2022 年 9 月,Microsoft 都将为 Mirantis 容器运行时提供临时支持,作为 Docker EE 的临时替代。9 月之后,客户需要签署 Mirantis 容器运行时相关付费协议。这意味着 RKE 1 上的 Windows 容器用户需要支付额外的费用。对于在 Mirantis 容器运行时上部署的工作负载,Rancher 无法提供完整的全栈支持。
SUSE Rancher 建议用户开始向自带 containerd 运行时的基于 RKE 2 的 Windows 容器过渡。客户应尽快开始在 2.6.0+ 版本中对基于 RKE2 的 Windows 容器进行工作负载测试,以免 2022 年 9 月过后还需要单独购买 Mirantis 支持协议。
在技术预览阶段,如果用户在测试 RKE 2 上的 Windows 容器时遇到问题,可在 Rancher Windows GitHub 中提出 (https://github.com/rancher/windows/issues)。
从 RKE 1 升级到 RKE 2
RKE 1 中采用的是配置 Windows 专用集群的方法,而 RKE 2 则采用了更为自由的混合操作系统集群,因此,RKE 1 上的 Windows 容器无法直接迁移到 RKE 2。
SUSE Rancher 建议,客户在 RKE 2 技术预览版中测试 Windows 容器上的工作负载时,需开始规划使用 Fleet 重构 RKE 2 上的 Windows 工作负载 (https://fleet.rancher.io/)。Fleet 是 Rancher 的 GitOps 解决方案,现在可以直接集成到 Rancher 中,并支持 Windows 容器。
了解更多,请参考:https://github.com/rancher/windows/issues/150