技术问答集录(六)(K8S、Docker、Service Mesh)
K8S、Docker、Service Mesh怎么理解,解决什么问题?
Docker
属于 Linux 容器的一种封装,提供简单易用的容器使用接口。它是目前最流行的 Linux 容器解决方案。Docker 将应用程序与该程序的依赖,打包在一个文件里面。运行这个文件,就会生成一个虚拟容器。把自己的应用放入容器,容器还可以进行版本管理、复制、分享、修改,就像管理普通的代码一样。
Docker解决了环境依赖问题, 更轻量的虚拟化,节省了虚拟机的性能损耗。
Docker的本质
· Docker首先是一种契约,是串联了整个应用生命周期的契约,核心价值是加快软件交付的效率,提高生产力。
· Docker与虚拟机的定位是本质不一样的,Docker并不是一项虚拟机技术(这其实是容器技术与虚拟机技术的区别)。它不会模拟一台机器的硬件。Docker定位于应用侧,是对应用(包括其配置,环境依赖)的封装——通过标准化的dockerfile规范,而虚拟机定位于OS层,偏重于资源管理。
· Docker也可以与Chef,Jenkins做深度整合。
· Docker的Hub是其应用程序的管理中心,最能够体现其应用侧的特性,每个镜像都可以命名,tag,唯一ID。
Kubernetes
(k8s)是一款开源的优秀的容器编排调度系统,其本身也是一款分布式应用程序。
第一个是“容器的编排调度”,从原来的AIO的应用变成容器化应用微服务化应用,带来的好处就是服务解耦,可以快速扩展服务,带来的不好就是用户管理成本增加,kuebrnetes很好地解决了这个问题,帮助我们实现了应用层面的管理抽象,根据不同业务应用,使用不同的部署类型。
第二个是kubernetes的一致性能力,保障API的一致性
系统部署Docker化后,自然需要一个平台级工具管理这些Docker容器集群。系统规模化后,如何管理这些成百上千上万的Docker资源,还要做到高效进行CI/CD,甚至还要支持一些技术性功能,比如灰度部署方案、流量平滑迁移、监控Docker健康度。Kubernetes 本身设计时高度抽象了一些共有元素,比如控制器、网络、真实部署的应用等,所以Docker成为主流趋势并成为标准后,带动了Kubernetes 的流行,基于Kubernetes来编排Docker容器和管理资源,在Kubernetes之上搭建一套自己的PasS
Service Mesh
微服务分层架构 ,解决服务调度,ks8解决资源调度 。
企业搭建微服务后,成百上千,不断增长的服务规模,以及微服务本身的技术性管理,如负载均衡、限流、路由等要求,每个微服务都需要依赖一些组建客户端来实现这些重复性的建设。怎样才能让所有团队使用/维护/升级库版本?公司有上百个服务,要修改所有应用都使用上面的库吗?Service Mesh把一些技术性的诉求抽象为代理,在网络层作为一个独立的控制面,控制流量的出站和入站,通过规则来达到负载均衡、限流、路由的效果,把这些基础功能从业务应用中独立出来,统一实现和管理,升级部署替换都很方便。
Service Mesh 是一个基础设施层,用于处理微服务中,服务与服务之间通信的一种技术。
在 Service Mesh 的实践方案中,它是由一系列轻量级的网络代理组成的,并且这些网络代理会与咱们的应用部署在一起,特别适用于云原生应用复杂的服务拓扑中实现可靠的请求传递,因为 Service Mesh 可以做到应用无感知。有了 Service Mesh 之后,在微服务中,服务与服务之间的通信就是靠这些网络代理模块来保障。
解决什么问题:
可以实现微服务体系高效部署和运维,解决微服务架构中服务间可靠调用、服务治理等问题。
在传统微服务架构中,随着业务越来越大,拆分的服务实例也越来越多,那么各个服务之间的依赖就变成了非常复杂的网络拓扑结构,在如此复杂的分布式部署结构下,咱们微服务中服务依赖调用和数据传输所面临的问题也成倍增加,极大的提高了服务治理的难度。
同时,由于容器化技术的成熟和规模化,微服务都会采用容器化,并朝着云原生应用的方向发展。而传统的微服务架构中,虽然也有服务治理的组件,但是这些组件大多需要在应用代码里进行集成,这是不符合云原生应用的思想的。因此,大家急需一个标准化,能高效部署和运维的微服务体系方案,Service Mesh 就应运而生了,其设计的目的就是用来解决微服务架构中服务间可靠调用、服务治理等问题。
而Service Mesh正是有下列特点来解决痛点:
- 屏蔽分布式系统通信的复杂性(负载均衡、服务发现、认证授权、监控追踪、流量控制等等),服务只用关注业务逻辑;
- 真正的语言无关,服务可以用任何语言编写,只需和Service Mesh通信即可;
- 对应用透明,Service Mesh组件可以单独升级;
解决了什么问题?
1. Docker是一个开源的容器引擎,K8S是docker集群的管理工具,Service Mesh服务网格是一种微服务架构,将底层那些难以控制的网络通讯统一管理,可基于Docker和K8S实现。
2. 这些技术使用边车模式,有效的分离了系统控制和业务逻辑,可以将所有的服务进行统一管理,让开发人员更专注于业务开发,显著的提升开发效率。将流量控制、服务注册、服务发现、服务限流、服务熔断等提取成一个标准化的 Sidecar ,通过 Sidecar 代理来与其他系统进行交互,这样可以大大简化业务开发和运维。
3. Service Mesh 有如下几个特点:
a) 应用程序间通讯的中间层
b) 轻量级网络代理
c) 应用程序无感知
d) 解耦应用程序的重试/超时、监控、追踪和服务发现
Service Mesh 将底层那些难以控制的网络通讯统一管理,诸如:流量管控,丢包重试,访问控制等。而上层的应用层协议只需关心业务逻辑即可。Service Mesh 是一个用于处理服务间通信的基础设施层,它负责为构建复杂的云原生应用传递可靠的网络请求。
1、Docker解决了运行环境和配置问题,方便发布,也就方便做持续集成。
一个程序要跑起来,需要以下几部分:代码 + 运行环境 + 配置 + 依赖的服务。Docker image中包含了程序需要的所有的运行时依赖,将整个运行时环境打包放到image中,迁移发布更加方便。
2、更轻量的虚拟化,节省了虚拟机的性能损耗。
虚拟机的出现,带来了很多便利,它实现了资源隔离,不同资源之间不会相互影响,但同时也带来了一些不便之处,比如创建速度慢,迁移起来麻烦(因为中间加了一层guest os),并且有性能损耗,一个高配的机器也就创建十几个虚拟机,太浪费资源。
相比虚拟机的重量级虚拟化方案,Docker利用Linux内核级的一些隔离方案等成熟的技术,让虚拟化变得轻量级,其可以瞬间完成创建一个container,达到秒级!cpu指令集不再被翻译执行,性能损耗也非常少。