OpenStack 的 IaaS 和 容器 进行结合构建一体化平台的时候,我们目前调研的情况存在两个大的方向:
1、将 OpenStack 打入到容器中,然后采用容器化的方式进行部署
2、在 OpenStack 的 IaaS 之上构建一套基于 K8S 的 容器调度 平台
但是由于时间和费用的整体考量,还没有进行更多的比较,请问一下这两种方式的优缺点是什么?而且现在是否还有其它的解决方案?
建议第二种方式,这也是大多数客户所采取的方式。
基于K8S的容器云位于IaaS与PaaS之间,它可以部署在裸机之上也可以部署在openstack之上。当部署在OpenStack之上时可以利用后者提供的IaaS功能贯穿计算存储和网络资源,实现资源的统一分配部署与扩展。
其实还有第三种方案,K8S和OpenStack集成。
题主说的以上两种方案,社区都已经实现:
关于第三种方案,社区也已经有实现,不过还不成熟。
K8S可以和OpenStack Keystone集成,即K8S可以使用Keystone认证,参考keystone authentication kubernetes-cluster。
这个没有必要,因为Docker的镜像是分层的,使用Registry或者Harbor即可。当然如果有必要可以使用Glance存储Docker镜像作为备份,不过更建议备份到OpenStack Swift,Registry以及Harbor都原生支持使用Swift作为存储后端。
前面提到的通过Magnum把容器部署在虚拟机,其实并没有根本改变K8S的网络模型,K8S的底层网络依然还是诸如Flannel、Contrail等网络模型,和Neutron其实没有多大关系。另外,容器运行在虚拟机中不仅可能会导致计算性能损耗,网络的多层Overlay嵌套也可能会大大降低容器的网络性能。
其实社区已经实现K8S直接OpenStack Neutron网络集成,即kuryr-kubernetes项目。K8S的pod与OpenStack虚拟机是平等公民,共享Neutron网络服务,K8S网络具备和OpenStack虚拟机等同的功能,比如安全组、防火墙、QoS等。
不过遗憾的是,目前kuryr还不支持多租户,Kuryr使用Neutron的network以及subnet都是配置写死的,而不是创建port时指定。
目前K8S已经实现了很多volume插件,支持各种存储系统,比如Ceph、GlusterFS、NFS等等,参考kubernetes persistent volumes,其中就包含了Cinder,即K8S可以使用Cinder提供volume服务,这样K8S和Nova共享一套存储系统,都是Cinder的消费者。Cinder屏蔽了底层存储系统,K8S直接对接Cinder,省去了一堆plugins的安装配置。
前面提到K8S与Cinder集成,其实K8S还支持与OpenStack Manila服务集成,目前该插件已经包含在K8S的external storage项目中。
收起