OpenStack与K8S结合主要有两种方案。一是K8S部署在OpenStack平台之上,二是K8S和OpenStack组件集成。
首先第一种方案目前也是大多数用户选择的方案,这种方式的优点是K8S能够快速部署、弹性扩容,并且通过虚拟机的多租户间接实现了容器的多租户,隔离性好。
缺点是容器跑在虚拟机上,多多少少计算性能可能会有点损耗,网络的多层overlay嵌套也可能导致性能下降。
OpenStack Magnum项目是该方案实现的代表,该项目为OpenStack提供容器编排服务,通过该组件,用户可以快速部署一个K8S、Mesos以及Swarm集群,原理和OpenStack大多数的高级服务实现差不多,先通过heat完成资源编排(创建虚拟机、volume、安全组等),然后通过镜像里面的heat-container-agent以及一些脚本完成K8S、Mesos以及Swarm集群的安装配置。当然,通过Ironic,Magnum支持将容器编排组件直接部署在物理机(裸机)上。
第二种方案是K8S与OpenStack的各个组件集成,在OpenStack社区以及K8S社区的共同努力下,目前可以集成的组件还是挺多的,下面简单介绍下。
1 K8S与OpenStack Keystone集成
K8S可以和OpenStack Keystone集成,即K8S可以使用Keystone认证,参考keystone authentication kubernetes-cluster。
2 K8S与OpenStack Glance集成
这个没有必要,因为Docker的镜像是分层的,使用Registry或者Harbor即可。当然如果有必要可以使用Glance存储Docker镜像作为备份,不过更建议备份到OpenStack Swift,Registry以及Harbor都原生支持使用Swift作为存储后端。
3 K8S与OpenStack Neutron集成
前面提到的通过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时指定。
4 K8S与Cinder集成
目前K8S已经实现了很多volume插件,PV支持对接各种存储系统,比如Ceph RBD、GlusterFS、NFS等等,参考kubernetes persistent volumes,其中就包含了Cinder,即K8S可以使用Cinder提供volume服务,这样K8S和Nova共享一套存储系统,都是Cinder的消费者。Cinder屏蔽了底层存储系统,K8S直接对接Cinder,省去了一堆plugins的安装配置。
5 K8S与Manila集成
前面提到K8S与Cinder集成,其实K8S还支持与OpenStack Manila服务集成,目前该插件已经包含在K8S的external storage项目中。
*声明:推送内容及图片来源于网络,部分内容会有所改动,版权归原作者所有,如来源信息有误或侵犯权益,请联系我们删除或授权事宜。
- END -