关于k8s微服务的基础知识分享总结
1.说起k8s,先得讲讲微服务,来个图(百度上找到的图),初识
1.微服务架构强调的是一种架构模式,提倡将单一的应用程序,划分为一组小的服务,每个服务运行在其独立的自己的进程中,服务之间相互协调配合,为用户提供最终的价值
2.服务之间的通信(轻量级)基于http的 restful api
3.每个服务都是围绕着具体的业务进行构建,能够独立部署
4.核心:将传统的一站式应用,根据业务拆分成一个一个的服务,每个微服务提供单个业务功能的服务,一个服务做一件事,类似进程的概念,能够自行的单独启动或者销毁,拥有自己独立的数据库
(先注册再调用)
微服务的缺点:
1.处理分布式系统的复杂度----开发
2.多服务运维成本增加---运维
3.系统部署依赖----运维
4.服务之间通信的成本---运维
5.数据的一致性--运维
6.系统的集成测试---测试
7.性能监控---测试
针对这个图中的两个点(网关/nacos):
1.SpingCloud-gateway (网关):
1.过滤器:filter 拦截修改请求,对上游的响应做二次处理
2.路由:routes 根据目标URL进行路由
3.断言:predicates 根据yaml文件,做路径匹配
2.Nacos(注册中心)
2018年6月阿里推出的开源注册管理中心,常用端口:8848
1.支持DNS,基于RPC的服务器发现(springcloud的注册中心),动态的配置服务(配置中心),动态DNS服务
2.可视化平台
3.所有的微服务模块都得在注册中心注册
第二块基础知识笔记:
1.kubernetes (简称k8s),google开源容器集群管理系统
2.k8s用于容器集群的自动化部署,扩容,运维的一个开源平台
3.k8s特点:快速响应用户需求,快速且有预期的部署,快速扩展应用,无缝对接新应用,节省资源,优化硬件资源,容器编排
4.k8s负责管理服务中所有的docker容器,创建,运行,重启容器,删除容器,实现容器集群的自动化部署,自动缩容,维护
5.可以根据不同的条件,进行动态的扩容,缩容,快速响应
6.k8s在部署应用时会自动检查各个服务器的cpu与内存的使用量,同时会根据申请的cpu与内存资源,将服务部署到合适的服务器上(容器调度策略)
k8s基础组件:
1.master节点
1.kube-apiserver: k8s API 集群的统一入口,各组件的协调者,以restful api 提供接口服务,所有的对象资源的增删改查,监听都是交给apiserver处理后,再提交给etcd存储
2.kube-controller-manager: 处理集群中常规的后台任务,一个资源对应一个控制器,controller-manager负责管理这么控制器
3.kube-scheduler: 根据调度算法为新建的pod选择一个node节点,可以任意部署
4.etcd: 分布式键值存储系统,用于保存集群状态数据,比如pod,service等对象信息
2.nodde节点
1.kubelet:负责pod对应的容器的创建,启停等任务,同时与master密切协作,实现集群管理的基本功能
2.kube-proxy:实现kubernetes service 的通信与负载均衡机制的重要组件
3.docker engine:docker引擎,负责本机的容器的创建与管理工作
1.node是k8s集群架构中运行pod的服务节点,node是k8s集群操作的单元,用来承载被分配的pod的运行,是pod运行的宿主机
2.每个node都会被master分配一些工作负载,当某个node宕机,其上的工作负载会被master自动转移到其他的节点上
3.kubelet 会向master注册自己,一旦node被纳入集群的管理范围,kubelet进程就会定时向master汇报自己的信息(例如机器的cpu,内存,pod的运行情况),这样master就可以获取每个node的资源使用情况,并实现了高效均衡的资源调度策略
4.当某个node在运行超过指定的时间不上报信息时,会被master判定为死亡,node的状态会被标记为不可以用
3.pod解释:
1.运行在node节点上的,若干相关的容器的组合,pod内包含的容器运行在同意宿主机上,使用相同的网络命名空间,ip地址,端口,可以通过localhost进行通信
2.pod是k8s进行创建,调度,管理的最小单位,一个pod包含了一个容器或者多个容器
3.一个node上运行同一个类型的pod(比如mysql,一个node上运行一个MySQL的pod)
4.k8s三层网络模型:
1.NodeIP:每个节点服务器的IP
2.PodIP:每个服务的ip,可以解决端口冲突问题,同时也是每个服务的唯一标识,podip无法通过外网访问,只能在内网访问
3.ClusterIP:集群IP,对同一个服务多个实例(每个服务都有自己的podIP)组成的集群的入口IP