最近在学习k8s与serviceMesh技术时,由于发现网上内容概念太多,太乱,太细,没连贯性,很多文章就是COPY很多基本知识,与我期望的认知过程不符合,不仅想知道怎么安装使用用,还想知道当初是怎么想到超这个方向发展的,以及大概技术可行性。所以写这样一个学习笔记。不讲安装,不讲demo,只是整合一些知识点,并理清相关的概念与关联,形成一个知识框架方便记忆与使用。
正好看到这么一篇文章“关于整体性学习”
https://www.jianshu.com/p/1019549f256b,与我想法不谋而合,我的目的就是建立这么一个基础的知识框架。
因为水平有限,有些知识点还是自己猜测的,有不对的请各位看官指正。
## 前言
k8s有master与node,看多了分布式系统的设计,总会感觉套路都差不多。比如:
一般都有管理中心(协调中心,配置中心)与业务中心,无论k8s,hadoop,rocketmq。由于配置ssh,免密登陆,机器间通过相关TCP等协议,可以远程操作很多事件,传数据,传脚本,传代码,可以安排哪个业务节点,用什么代码,处理什么数据 。有新节点加入了,控制中心可以知道,可以合理分配任务,所以就很好扩容增能了。
再比如大数据处理中间件,除了移动数据,还可以把jar包发给业务中心,classLoader动态加载到自己的jvm中,处理分给自己的数据。
业务中心一般要向控制中心心跳,要报告数据处理情况,报告性能情况。hadoop的节点还分两类,map业务节点要知道有哪些reduce业务节点,要把自己的数据给过去继续处理,自己的数据要不要持久化本地。
管理中心一般要实现高可用,有相关的一致性协议。
甚至再推广一下,看到蚂蚁的三城五中心10单元部署,为了尽可能在一个机房调用,还有备份,这样的用户与应用分区安排与kafka的分区也是非常像的。包括数据库分片也同样按用户按机房分片,一个单元的从应用到数据都紧密耦合一起,还有跨机房备份,更像kafka跨节点分区了。
那么k8s的master当然可以行程控制Node节点上启动一个容器,加载一个远程导入的镜像,映射一个端口,容器知道主masterip,上报心跳,自己的IP地址等信息。那自然就可以组成一个集群。也很容易想到可以分类,可以扩容。
所以,从直觉上会大概知道这些系统是怎么工作的,但是如何把这些套路与真正的k8s实现结合起来,到底Pod, Deployment, ReplicaSet,Service这些都是什么?都存在于哪里呢?
## 一、从docker到k8s
开始用docker还是比较方便的,但如何从docker的组合角度进一步理解,如何实现部署可伸缩应用,应用编组提供服务,进一步提供对外的服务?K8s会怎么做出选择呢?
先上图,左边是我理解的k8s中的东西,右边是一般使用Docker。
### 1. docker容器与pod
先不讲伸缩(假设有脚本可以帮你完成),你在装有Linux的物理机或者虚拟机上,如何用docker组织出一个微服务呢?首先是相同的应用应分散在不同的机器上,另外不同的应用之间如何调用?至于分散在哪,哪些相同,假设有静态配置供查找。
如果不同的应用在同一个机器上,而在不同的容器内,可以通过4种方式调用。如果在不同的机器上,只能通过机器ip与内外映射进入容器内。如果要无差别对待两种情况,都映射机器端口来调用可以。
如果容器内被调用应用的容器要自由漂移,从同机移动到其它机器,调用方需要知道这个变化造成的ip变化,这个可以办到。但同主机的多容器使用的宿主机volumn,共享一些主机东西,密切相关可能就破坏了。
另外,如果想调度容器,容器有可能Docker容器,但它也可能是一个rkt的容器,所以不如让宿主机(当然物理机不行)漂移起来。这可以理解为k8s的基本操作单元pod。
看到这些,共享IP,端口空间,分配CPU,共享volumn,这pod与虚拟机是多么的相似,可以认为就是一个虚拟机吧。虚拟机的启停,迁移,远程安装docker,都可以实现的。
但Deployment, ReplicaSet,Service又是什么呢?是存在于mater还是node呢?不少文章介绍了配置文件,用简图表示了包含关系,比如Deployment调用ReplicaSet控制pod复制的。所以猜测Deployment与ReplicaSet都是mater上的组件,pod在哪个node产生,是由mater控制的。那service又是什么,又在哪呢?
### 2. 多个层次的通讯
既然类似虚拟机的pod飘移起来,从一个主机到另一个主机。应用也要分组来组成同一种service。service应该是一个比较固定的概念,它包含的同类应用pod是变化的,需要一个映射关系。主机是固定的,service是数量不定比较稳定的,pod是变化的,所以每个主机上有相关的关系表。我从一个pod发起调用,从当前所在的主机上找到这个服务service的pod都在哪,按策略找到一个,连接过去。
主机、服务、pod是分属三个层次的内容,两层映射关系表。主机的Ip当然在主机物理网络内了。可飘移pod之间类似虚拟机之间,自己有完善的ip来组网,毕竟真正的调用就在这层ip上,就是plannel虚拟网络。服务层的ip应该是处理两者之间,只做数据包转发功能,是一层特殊性质的ip。前面docker提到容器通讯,也可能有一层桥接网络,这个如果有的话,层次最低,这里提一下。
这三个层次关系,由kuber-proxy处理。当service给外部提供服务,要有主机与端口与service的映射关系,否则内部不用配置。
所以,service应该是在每个Node上存在的组件,应该与kuber-proxy一起工作吧。
### 3. k8s的结构
再总结一下:k8s由mater与node组成,这种结构与很多软件产品的结构相似,比如hadoop,yarn,rocketmq。一个负责总的管理,一个负责具体业务。比如总控通过deploy与ReplicaSet组件来处理Pod漂移与增减,同时更新每个节点node上的service信息,这样就更新映射关系表。
## 二、从k8s到istio(一丝踢藕)(serverMesh)
istio主要功能是为每个服务,分离出公共的调用,发现,流量控制等通用功能,服务专注于业务功能,其它交给istio。istio肯定有一个附着在应用一起的sideCar(贴身待者)。
istio的sideCar就叫Envoy,在上图中红色背景标识出来了。它注入到每个pod创建过程中,拉起一个容器运行Envoy,与应用在同一个pod中。一开始我受springCloud的sideCar影响,以为Envoy与你的服务之间有调用关系。springCloud中是为了包装异构服务的发现,其实就是一个网关应用代理了异构服务, 7层协议调用。
后来发现了一个图,看到了Linxu/netFilter,一查此概念,恍然大悟。
引用
> Netfilter/IPTables是Linux2.4.x之后新一代的Linux防火墙机制,是linux内核的一个子系统。Netfilter采用模块化设计,具有良好的可扩充性。其重要工具模块IPTables从用户态的iptables连接到内核态的Netfilter的架构中,Netfilter与IP协议栈是无缝契合的,并允许使用者对数据报进行过滤、地址转换、处理等操作。
这正好是4层通讯拦截,路由的地方,Envoy并不与你的应用有半毛钱的直接关系,它是给Netfilter用的。
Envoy具体特点:
- 1. 对业务透明的请求拦截。
- 2. 对拦截请求基于一定规则做校验、认证、统计、流量调度、路由等。
- 3. 将请求转发出去,在ServiceMesh中所有的流量出入都要经过Sidecar,即由Sidecar承担起所有的网络通讯职责,由此可知请求转出后的下一个接收方也必然是Sidecar。
猜测一下,比如之前K8s中一个pod调用另一个服务,要走上一层找到服务,返回对应的随机pod,没办法控制流量。现在sideCar可能从k8s拿到了映射关系,并附加了自己的策略,就按配置的比例,在pannle虚拟网络上路由数据包。
当然sideCar要接受一些控制管理监控,这些就是建一群专门的pod服务了,没啥特别要讲的。
## 三、SpringCloud与k8s关系
### 1. 基本关系
这篇文章写的比较清楚:
https://www.cnblogs.com/assion/p/11249519.html
更细的可以看:
https://blog.csdn.net/M2l0ZgSsVc7r69eFdTj/article/details/78919669
准确点说SpringCloud是适合实现微服务的一套基础开发框架,SpringCloud有助于讯速的落地微服务架构。SpringCloud是以Java库的形式工作所以它的工作层面是在应用层(研发层)。
k8s并不是因为微服务而生,而是因为docker而生,只是天时地利人和正好赶上了微服务流行的时代,docker的特性正好特别适用于微服务,而k8s进一步对docker方便的编排。它的工作层面是在容器层(运维层)
Istio开始就是与k8s结合设计的,加入了特色功能,Istio结合k8s可以牛逼的落地微服务架构。
### 2. 不能理解的用法
话说还看到一个把springcloud部署到k8s的例子,感觉怪怪的,一种发现套另一种发现上,一种路由套另一种路由。不知道把springcloud套在istio会怎么样?一种限流,熔断套另一种限流熔断吗?
https://blog.csdn.net/weixin_44388301/article/details/99575907
## 四、istio在蚂蚁的发展
网上只看到些蚂蚁金服在搞istio的进一步扩展,他们的 SOFAMesh 项目,是蚂蚁金服推出的 Service Mesh 开源产品,简单的理解为是 Istio 的落地增强版本。
http://www.uml.org.cn/wfw/201910213.asp?artid=22547
### 1. 重点是拓展Envoy的功能
在这个架构中,和 Istio 原版最大的不同在于没有选择 Istio 默认集成的 Envoy,而是用 Golang 开发了一个名为 SOFAMosn 的 Sidecar 来替代 Envoy。为什么我们选择了用 Golang 语言来实现?
我们需要考虑在 SOFAMesh 和 SOFAMosn 中增加这些通讯协议的支持,需要支持 REST 和 gRPC 之外的众多协议,尤其是要可以让客户非常方便的扩展支持各种私有TCP协议。
### 2. 落地中遇到的典型问题和解决方案
快速的扩展支持一个新的通讯协议。
解决问题:注册模型不匹配,原有用接口调用的代码调不通。一般情况下 Dubbo 程序是按照 Interface 来注册和发现,调用时也是通过 Interface 来调用。
设计了一个名为 **DNS通用选址方案** 的解决方案,用来支持 Dubbo 等SOA框架,容许通过接口名来调用服务。不做 SOA 程序的微服务改造,就直接搬迁到 SOFAMesh,提前受益。
我猜测接口名是相对service的,要靠拢istio就要是ip定位,具体的实现不知道在哪,就要有一个接口与DNS对应关系。
### 3. 探索一下服务间通讯的范围
然后我们将探索一下服务间通讯的范围,看看 Service Mesh 可以在哪些领域得到应用
Service Mesh 起初关注的是东西向通讯,即系统内部各个服务之间的通讯,而这通常都是同步的,走REST或者RPC协议。
通过将 Sidecar 用于南北向通讯,重用 Sidecar 的请求转发和服务治理功能。如服务发现,负载均衡,路由,灰度,安全,认证,加密,限流,熔断……
分享到:
相关推荐
SpringCloud还是Kubernetes?答案是都可以,只是各自有其优势。SpringCloud和Kubernetes都宣称自己是开发和运行微服务的最佳环境,但是它们的本质非常不一样,所追求的目标也不同。本文我们分析一下两个平台是如何在...
k8s docker 部署springcloud集群文档。 部署开发、云平台、容器技术
Springcloud学习笔记.md,Springcloud学习笔记.md,Springcloud学习笔记.md,Springcloud学习笔记.md,Springcloud学习笔记.md,Springcloud学习笔记.md,Springcloud学习笔记.md,Springcloud学习笔记.md,Spring...
微服务框架如SpringCloud和Istio在业界有着广泛的应用。而近来,微软主导的Dapr作为新兴的云原生开源项目,凭借其独特的设计理念和特性,正逐渐走入公众视野,并被越来越多的开发者和企业所青睐。 Dapr,即...
Spring Cloud 学习笔记 本笔记主要介绍了从单体架构到微服务架构的演变过程,以及 Spring Cloud 中的微服务架构搭建。下面是本笔记的详细知识点总结: 一、单体架构 单体架构是指整个系统只有一个工程,打包往往...
Spring Cloud是一套微服务架构下的分布式系统解决方案,提供了在分布式系统环境下快速构建一些常见模式的工具,如配置管理、服务发现、断路器、智能路由、微代理、控制总线、一次性令牌、全局锁、领导选举、分布式...
Google_K8S与阿里微服务Spring_Cloud_Alibaba三高架构实战
简单来说,Istio充当了微服务框架和服务治理的角色,使得开发者无需依赖特定的微服务开发框架(如Spring Cloud或Dubbo)。 Istio的关键特性包括: 1. 自动的HTTP/1.1、HTTP/2、gRPC和TCP流量的区域感知负载平衡和...
该架构旨在利用K8s和Istio实现负载均衡和服务治理,通过Spring Boot和Feign/Grpc优化服务通信,从而减轻Spring Cloud的维护工作量,降低开发成本,并统一团队技术栈。此外,项目通过Kubesphere进行K8s管理,提升运维...
文档中提到的SpringCloud&K8S蔡波斯广发证券深圳金融科技研发中心,表明这些技术正在被金融机构采纳,以推动金融科技的发展。在金融行业中,高性能、高可靠性的系统尤其重要,而Spring Cloud和Kubernetes正是为了...
### Spring Cloud + K8s 最佳实践 #### 一、为何选择微服务化? 随着互联网技术的发展,传统单体应用已经难以满足当前企业对于高可用性、可扩展性以及快速迭代的需求。微服务架构能够更好地解决这些问题,它通过将...
k8s客户端kubectl 跳板机 发布部署springcloud+nacos+gateway 微服务脚本
【尚硅谷周阳老师SpringCloud笔记】是一份深入学习SpringCloud技术体系的教程资源,由知名教育机构尚硅谷的周阳老师编撰。SpringCloud作为微服务架构的重要框架,广泛应用于现代企业的分布式系统开发中。这份笔记...
狂神springcloud学习笔记加代码 笔记可以看:https://www.kuangstudy.com/bbs/1374942542566551554#header4 视频链接:https://www.bilibili.com/video/BV1jJ411S7xr
spring cloud k8s的特性分享
【尚硅谷SpringCloud第二季笔记】是一份详细记录了SpringCloud组件使用的学习笔记,涵盖了SpringCloud在云原生环境下的核心概念和实践应用。SpringCloud是基于Spring Boot实现的微服务框架,它提供了构建分布式系统...
SpringCloud学习手册是一个针对微服务架构的资源包,主要涵盖了SpringCloud的相关知识,适用于初学者。SpringCloud作为Java领域中的主流微服务框架,为开发者提供了构建分布式系统所需的工具和服务发现、配置管理、...
在构建基于Spring Cloud的微服务架构时,版本选型是一个至关重要的步骤,它直接影响到系统的稳定性和可维护性。Spring Cloud作为一个广泛使用的微服务框架,其版本迭代迅速,每个版本都有其特定的功能特性和生命周期...
本文将对比两种主流的微服务治理框架——Spring Cloud和Istio,以帮助读者理解它们各自的特性和适用场景。 Spring Cloud是Java生态系统中的一个热门选择,它提供了一套全面的工具和服务发现、配置管理、断路器、...
无论做毕业设计还是用于学习技能,或工作中当做参考资料,都能发挥重要作用 亲们下载我任何一个付费资源后,即可私信联系我免费下载其他相关资源哦~ 个人花大量时间整理出的实战资料,内容丰富,文档也很详细。无论...