K8S的架构图
首先,云原生的重要组件是K8S,K8S是一个围绕容器打造的分布式高并发系统:①、容器元数据的管理;②、容器的生命周期管理
早期的容器管理:称之为容器管理的原始时代:使用命令的形式进行容器的管理;包括容器的启动和停止,包括服务地址和端口的配置,在原始时代的后期使用yml文件进行容器编排,所有容器的元数据通过yml文件进行管理,很多个容器的话手都会敲断,所以k8s从原始时代带入工业时代。
二、Kubernetes的对象之间的组合关系
k8s的资源对象之间的组合关系:非常类似于springmvc的持久层的实体Bean
Deployment:滚动升级策略:副本数:PodTemplate
Replicaset:版本信息(templateHash) ,描述副本数:类似于微服务的实例对象
Node:整个k8s节点的计算节点的计算资源健康状况
Pod:核心的资源对象,镜像地址资源需求:内存,硬盘,cpu
Service:容器在外面访问的服务协议服务端口
Ingress:容器在外面访问的域名 访问http协议的 URL 目标服务
三、K8S的分布式子系统架构图,和业务架构图相呼应
K8S Master:负责的是容器的元数据管理
Kubelet:工作节点:也可以说是Node Worker:负责的是容器的生命周期管理
在整个K8S容器当中,我们的业务服务都是通过容器的方式部署的
所以k8s集群有很多个工作节点或者说是node节点/计算节点。
他们都是通过master组件的API Server组件进行 容器的元数据的查询和订阅
四、分布式容器管理流程架构图
(1)、首先是用户拿了一份容器部署的描述文件:Deployment文件,提交给到控制平面的master节点的API Server核心组件。
(2)、API Server可以理解为k8s的数据总线:只负责容器元数据资源对象的crud,并不负责元数据的处理,元数据的处理是由一些控制器来完成的。
(3)、然后API Server把处理好的元数据对象给到注册中心etcd分布式协调组件进行元数据的持久化,第二种是通过发布订阅机制通知到工作节点里面的容器管理的角色kubelet,
(4)、然后kubelet监听到元数据的变化之后:一旦监听到是属于当前工作节点的容器,就是通过下面的接口来进行容器的创建,和网络资源的分配,存储资源的分配。
(5)、在整个容器管理的流程当中:核心的数据总线提供了HTTP Rest接口完成了K8S各类资源对象pod,RC,Service(元数据对象)的等的增删改查以及watch(元数据变化的监听操作)等,是整个系统的数据总线
五、K8S的内部数据传输架构图
(1)、K8S内部数据传输架构:通过长短连接实现性能最优化
(2)、工作节点的Kubelet组件和控制节点的api server组件之间有两种方式的数据传输一种是http接口的短连接传输:获取全量的元数据,一种是长连接的数据传输:获取增量元数据的变化;传输性能最优化;kubelet使用了缓存架构。
六、容器对外暴漏的架构图
当我们容器创建好之后:怎么对外进行暴漏,方便外面的访问
①、容器元数据对象创建的阶段:k8s会创建一个资源Service对象,根据选择器selector,和元数据的标签labels进行容器的挑选;另外Service会配置对外暴漏统一的端口port;分发阶段,会通过暴漏的,端口来访问;k8s有一个专门的组件kube-proxy:Service的负载均衡器来完成流量的分发和pod之间的负载均衡
七、k8s的总的架构:有两个核心的架构:
master:负责容器元数据的管理和监控,在Master上面有个数据总线API Server
node:负责容器生命周期管理和外部流量的代理和路由:有个Kubelet组件