Linux 与 Windows
众所周知,Windows 的应用无法运行在 Linux 上,而 Linux 应用也无法运行在 Windows 上。但是,事实上,当 Docker 将容器作为一种显著的打包应用的方法,并且可以在“任意地方”封装它的时候,这里的“任意地方”就已经包含了“Linux”。Windows 也有容器,但是要让所有工作都一起运行还是不太可能的。
但是,今天 Kubernetes1.5 的发布,让 Linux 和 Windows 一起运行的梦想能够实现了。
Kubernetes1.5 (alpha 版本)支持 Windows 服务器容器,跟 Docker 类似,他们共享同一个内核模式;而 Hyper-V 容器的单核模式则为多租户环境提供了更好的隔离(代价是延迟时间更长了)。最终的结果就是,在你创建的这个 Kubernetes 集群上,Linux 节点可以运行 Linux 容器,Windows 节点可以运行 Windows 容器;同时,Linux 节点也可以运行 Windows 容器,Windows 节点也可以运行 Linux 容器,真正实现混合集群。比如,单个 service 允许 Pod 使用 Windows 服务器容器,也允许其它的 Pod 使用 Linux 容器。
虽然 Kubernetes1.5 功能全面,但是也有它的局限性,比如:
Kubernetes 是由 Go 语言编写的,以至于它带有一定的依赖性,所以 Kubernetes master 必须运行在 Linux 上。如果端口映射到 Windows 也是可以的,但是技术团队更愿意把主要精力放在客户组件上。
Windows 本地不支持网络叠加功能的容器,所以网络就被限制在了 L3。(虽然问题也有其它的解决办法,但是这些办法都不支持本地。)Kubernetes Windows SIG 正在跟 Microsoft 协同工作解决这些问题,希望明年发布的 Kubernetes1.6 版本中,这些问题都能够得到解决。
Windows 容器间的网络更加复杂,因为每个容器都有自己的网络 namespace,所以推荐使用单个容器 pod。
运行在 Windows 服务器上的应用能够以任意 Windows 支持的语言运行。可以在 Linux 容器中运行 .NET 应用,但是前提是这些应用必须是用 .NET Core 写的才可以。Nano 服务器操作系统也支持 .NET core,而且还可以部署在 Windows 服务器容器上。
这次 Kubernetes1.5 的发布也支持 IIS(目前它占据了网上 11.4% 的江山)和 ASP.NET。
Apprenda 努力开发 Kubernetes,就是为了让企业既能够享受 Kubernetes 带来的益处,同时还能够有效利用他们已有的 Windows 资源。“我们的策略就是给我们的企业客户提供坚定使用 Kubernetes 的理由。要做到这点,没有 Windows 的支持是不行的。2016 年 3 月,我们承诺 Kubernetes 会支持 Windows 服务器,我们在这次发布的 1.5 版本中做到了。”Apprenda CEO,Sinclair 说道,“我们会在编排 Windows 服务器容器、Hyper-V 容器的时候,将全部功能交付到 Linux 上,使机构组织者可以为他们的分布式应用获得单个控制面板。”
Kubernetes 其余功能
Kubernetes 1.5 (beta 版本)也支持 StatefulSets(由 PetSets 改名)。由 Kubernetes 管理的 ReplicaSets 和 Pods,会变成无状态,所以,如果这些功能不使用,或者用不到的话,就会变成“一次性”应用。但是在某些情况下,比如数据库,集群软件(比如 RabbitMQ 集群),或者其它旧的有状态对象,可能性就比较小了。StatefulSets 提供更加具体的辨识资源的方法,这样更好维护这些项目之间的联系。
Kubernetes1.5 还包括了一些早期所做的努力,比如让 Kubernetes 部署符合 OCI 标准的容器等等。
本文转载自才云 Caicloud 公众号。
原文链接:https://mp.weixin.qq.com/s/oouECIPeT4mx15XGFYd0vg
评论