看完这个你就清楚了。
Kubernetes 面向应用层,变革的是业务架构,而 OpenStack 面向资源层,改变的是资源供给模式。使用容器且集群规模不大,直接用 Kubenetes 就可以;集群规模大,不管应用是否只是跑在容器中,都是 OpenStack + Kubernetes 更好。
OpenStack + Kubernetes 是各取所长,并不只是因为惯性,而是对于多租户需求来说,Container(容器)的隔离性还需要加强,需要加一层 VM(虚拟机) 来弥补,而 OpenStack 是很好的方案。不过,VM + Container 的模式,必然有性能的损耗,所以 OpenStack 基金会也推出一个项目叫 Kata Containers,希望减少虚拟化的开销,兼顾容器的性能和隔离性。
永恒的只有变化,未来的业务都会运行在云上,容器是走向 DevOps、Cloud Native(云原生)的标准工具,已经开始走向平凡,而 Kubernetes 的编排能力,让容器能够落地到业务应用中,所以我们看到 Docker、Mesos、OpenStack 以及很多公有云、私有云服务商,都在支持 Kubernetes,大家都加入了 CNCF(云原生计算基金会)。
总结起来,OpenStack 是兼容传统的架构,而 Kubernetes 是面向未来的架构。
最后,计算开源云这几年发展很快,从这个问题提出到现在,社区又有了很多变化。所以要修正一个观点:Kubernetes 支持的容器运行时不仅仅是 Docker,也包括 Rkt,当然 Docker 更加流行。
简单的说,kubernetes是管理container的工具,openstack是管理VM的工具。
container可以运行在物理机上,也可以运行在VM上。所以kubernetes不是需要openstack的支持。但对于云计算来说,很多IasS都通过openstack来管理虚拟机。然后用户可以在这些虚拟机上运行docker,可以通过kubernetes进行管理。
openstack是OS层面的虚拟化技术,kubernetes是编排器,你说的应该是docker,是容器虚拟化技术。在启动速度上docker要比openstack快很多,毕竟docker在系统内仅仅是个进程,是靠namespace进行隔离。
openstack中的KVM或者其他虚拟机都是基于hypervisor的,具有独立的OS隔离机制。从安全上和性能上,目前KVM这类的hypervisor还是比较有优势。
这样理解吧,kubernetes面向微服务,细颗粒度,openstack面向云,相对来说颗粒度较粗
但k8s也不是百利无一害的,
1.对于有状态服务的编排,是需要极高的运维技能的,举个例子,redis集群和mysql集群怎么使用k8s进行编排,每个集群的实现高可用的方法是不一样的,现在找不到一个共通性以实现k8s像管理无服务状态那样管理有服务状态,虽然有一个statefulSet控制器。。。
2.传统应用转型微服务是极其困难的,到底如何拆分,怎么拆分这个问题就很难去实现
而openstack等虚拟化技术,则可以痛点较少或者是无痛点的将传统业务p2v至云平台之上,并享受其优点和性能
裸机去跑k8s和裸机上的虚拟机跑k8s肯定会有性能差距的,但这个性能差距是可以缩小的,openstack现在有一个magnum和zun组件,以实现对docker和k8s的部署和管理
收起