先从架构层面分析

最传统的架构是所有的页面链接都是建立在一个域名之上,一旦主web服务器down机那么所的有服务都无法打开

传统架构的优缺点:

优点:

  • 开发简单,集中式管理
  • 基本不会重复开发
  • 功能都在本地,没有分布式的管理和调用消耗

    缺点

  • 效率低:开发都在同一个项目改代码,相互等待,冲突不断

  • 维护难:代码功能耦合在一起,新人不知道何从下手
  • 不灵活:构建时间长,任何小修改都要重构整个项目,耗时
  • 稳定性差:一个微小的问题,都可能导致整个应用挂掉
  • 扩展性不够:无法满足高并发下的业务需求


    微服务的概念:

  • 为了不影响用户的使用,提升应用服务的健壮性,把每个链接都拆分成一个独立的一个服务,单独的模块,相对于其它模块互不影响,对于能够拆分成单独模块的服务简称微服务

  • 对于每个独立的服务都是一个单独的容器运行而来的(假设所有的服务都是由docker部署的),当web服务器处于访问压力过大时如何实现资源的弹性伸缩,服务的自动发现,以及版本的自动更新,如果这些管理都是通过人力来完成,那么将消耗大量的人力和时间
  • 如果有一个统一的管理工具,那么就可以省去很的人力和物力。
  • 我们知道kvm虚拟机多的时候可以由openstack来管理,容器数量太多的时候可以通k8s来编排管理

docker前期编排工具:

  • docker-compose docker-swarm docker-machine
  • docker-compose 主要是单机编排工具
  • docker-swarm 主要是管理多台docker主机的工具
  • docker-machine 主要负责把单台docker主机加入到集群中的工具

其它编排工具有:mesos+Marathon

  • mesos idc的系统,是资源统一的管理工具,不能直接托管容器运行,必须提供上层的一个接口才能实现(marathon) ,Marathon还可以作为容器编排平台,为容器工作负载提供扩展和自我修复

kubernetes容器编排工具

  • 它的是意思是舵手、飞行员,此技术早期在google公司使用,称为borg已经使用将尽有10几年的历史,
  • k8s于2014出现,用go语言重写一遍,只有短短几年的时间占据市场80%以上
  • 2015年7月 发布kubernetes 1.0, 加入cncf基金会
  • 2016年,kubernetes干掉两个对手,docker swarm,mesos marathon 1.2版
  • 2017年 1.5 -1.9
  • 2019年: 1.13, 1.14 ,1.15,1.16

k8s的特点

  • 自我修复、自动实现水平扩展、自动实现服务发现和负载均衡、自动发布和回滚、支持密钥和配置管理、存储编排、任务批量处理执行

k8s架构模型

image.png