openstack vs docker

openstack在硬件资源的管理方面已经比较成熟了:

  • 单机的虚拟化技术优化

  1. 计算:kvm用的最多,已经非常成熟了;目前的一些重点在虚机热迁移的优化上。
  2. 存储/网络:SR-IOV或者vhost-net/vhost-block已经可以把存储和网络IO的的虚拟化算好从几年前的40-50%减少到20%;目前有人在尝试把hadoop之类IO密集型应用部署到openstack上。

  • SDS:目前看无论openstack的厂商,还是用户本身,对ceph热情很高,ceph版本本身的稳定性已经可以在生产上跑了(ceph社区目前把重点放在了文件系统上);缺点是ceph软件本身需要根据自己的硬件配置做深度的perfomance tune;以笔者自己的经验看用户不太放心把重要数据放在虚机的数据盘上。数据库还是在物理环境的比较多。
  • SDN:各种传统的网络设备厂商的硬件SDN方案到OpenvSwitch的稳定和强大的openflow协议支持。传统的负载均衡、防火墙硬件厂商也纷纷为neutron提供plugin,以后配置负载均衡和防火墙开端口,都可以在OpenStack上进行;openstack的SDN对于私有云来说足够了,做vlan隔离方案已经比较成熟了;多租户的公有云方案再推出了DVR的方案之后逐步演进把;前段跟一个阿里前辈交流过,neutron缺的东西,mac nat,vpc之类,DPDK,sr-iov之类,阿里云应该已经解决了;其他小厂商也是用的软的SDN,在openflow的流表控制方面,还不太成熟。
  • 编排:heat和murano发展还是比较快打,跟docker比yaml编写过于复杂,一是编写时需要指定各种物理资源,必须熟悉整套openstack环境才可以;二是配置操作的各种shell脚本,例如yum之类,需要写在编排的yaml里面,而对于docker来说只要写在dockerfile里面就行了,不需要写到yaml里面。

与openstack对比,Docker则在应用程序的部署和编排方面具有较大的优势;

  • 物理机/虚机环境下,自动化部署一个分布式系统是一件很专业和复杂的事情。需要借助puppet/salt/ansible的自动化部署工具,通过远程执行各种rpm install,sytemctl、设置主机名,免密码登录等等复杂操作。很多的复杂系统,专门成立一个子项目来解决自动化部署问题。
  • docker解决了包冲突问题,不需要关心是ubuntu还是centos,可以在一个centos的host的启动一个ubuntu容器编译ubuntu的包;如果比较激进,cents也不要了,coreOS+rocket,国内用coreOS还比较少
  • 对于docker而言,启动一个一个容器就是一个应用的运行时环境,这个应用的启动参数,可以用环境变量、命令行参数、配置文件等多种方式传给应用,这些东西既可以固化在dockerfile里面,可以通过编排系统在容器启动时动态生成;
  • 有了docker后,复杂的配置工作可以通过dockerfile和容器编排引擎来做;静态配置写到dockerfile里面,动态配置在容器启动时从编排引擎下发给容器的环境变量。
  • 分布式系统的自动化部署的容器化,已经成为一个趋势。现在openstack自己的部署也向容器化发展。
  • 有兴趣的可以看下rancher,部署起来非常方便,不需要关心自己是部署在公有云还是私有云还是物理机上。

Docker的缺点

  1. 主要是网络方案不太成熟。有个朋友说docker把各种SDN方案引进之后,搞的跟openstack一样复杂。Docker网络比较困难的是实现容器环境和原来的物理环境的双向三层互通、隔离和QoS保障;目前没有特别好的方案,需要根据自己的需求、应用特点、和网络设备环境和人员配置进行折中选择。
  2. 另外一个缺点是太火了乃至于社区内部分家了,hypervisor有了fork,网络接口也有了fork(com/cni),调度和编排引擎竟然有三个(算上rancher/cattle就更多),组网模型则有n个(neutron+ovs,calico,flannel,swarm vxlan,contive,weave,cattle/ipsec,nat映射,物理三层交换机等等),新手绝对是选择恐惧症。
  3. cgroup还有些坑,比如内核中软件资源的隔离,比如文件描述符,inode,slab内存等,低版本内核和发行版支持不太好,coreOS没太研究,可能好些。
  4. docker registry的管理功能比较弱,查个镜像的版本号需要自己写脚本,修改一个镜像的环境变量,需要push/pull整个镜像。
  5. 网络依赖搞,必须通外网,否则也得设置个代理;docker file的编写,对于新手工程师,有些难度。

总结一下个人建议:

  • 如果公司规模足够大,IaaS肯定要做,openstack已经比较成熟了,用os做编排和ci/cd也是可以的
  • 全新环境,规模不大,对应用的SLA要求不是太高,上docker没问题。
  • 生产上做大规模部署,还是要等下docker的网络方案更成熟一些,另外一个是等cgroup的一些没做完的工作再完善些。
  • 想玩大数据,用docker不错,部署扩容之类,都很快,github上的开源项目不少。openstack/sahara就不建议尝试了。

你可能感兴趣的:(openstack vs docker)