全体上了解流程和原理;
一、背景
根据分布式的架构中,需求办理的服务是十分多的,无论是服务的数量仍是体系区分;
从服务的才能上看,能够进行分层管控,只是其中有相当一部分服务层,改动更新的频率很低,所以感知也不明显;
就以自己当下参加研发的体系来说;
经过K8S进行办理的服务近百个,这中间有部分服务采用集群形式,即便是这个规划的体系,也简直不可能依赖纯人工运维的形式,主动化流程必不可少;
二、继续集成
此前围绕该主题写过一个完好的实践事例,首要围绕Jenkins、Docker、K8S等组件的运用层面,总结源码编译、打包、镜像构建、布置等主动化办理的流程;
Jenkins:是一个扩展性十分强的软件,用于主动化各种任务,包含构建、测试和布置等;
Docker:作为开源的运用容器引擎,能够把运用程序和其相关依赖打包生成一个Image镜像文件,是一个规范的运转环境,提供可继续交给的才能;
Kubernetes:作为开源的容器编排引擎,用来对容器化运用进行主动化布置、 扩缩和办理;
三、K8S架构
1、中心组件
Control-Plane-Components:操控平面组件
对集群做出大局决议计划,例如:资源调度、检测、事情呼应,能够在集群中的任何节点上运转;
- api:开放K8S的API,组件之间经过API交互,相当于操控面的前端;
- controllermanager:运转操控器进程,逻辑上是一个独自的进程;
- scheduler:监听新建未指定运转节点的Pods,并为Pod挑选运转节点;
- etcd:兼具一致性和高可用性的键值数据库,作为保存K8S数据的后台库;
Node:节点组件
该组件会在每个节点上运转,负责保护运转的Pod并提供Kubernetes运转环境;
- kubelet:在每个节点上运转的代理,保证容器都运转在Pod中;
- kube-proxy:每个节点上运转的网络代理, 保护节点上的网络规矩;
Container-Runtime:容器运转时
负责运转容器的软件,支撑Docker、containerd、CRI-O等多个容器运转环境,以及任何完结Kubernetes-CRI容器运转环境接口;
2、分层结构
从全体的功用上来考虑,K8S集群能够分为:用户、操控平面、节点三个模块;
用户侧:不论是CLI命令行仍是UI界面,会与操控面板的APIserver进行交互,APIserver再与其他组件交互,最终履行相应的操作命令;
操控平面:曾经也称为Master,中心组件包含APIserver、controller、scheduler、etcd,首要用来调度整个集群,以及做出大局决议计划;
节点:经过将容器放入在节点上运转的Pod中来履行工作负载,简单的了解工作负载便是各种运用程序等,节点上的中心组件包含Pod、kubelet、Container-Runtime、kube-proxy等;
3、中心才能
站在研发的视角来看,K8S提供极端强壮的运用服务办理才能;
3.1 发现与负载
服务Service能够将运转在一个或一组Pod上的网络运用程序揭露为网络服务的方法,一般运用标签对资源目标进行筛选过滤;
3.2 调度
调度器经过监测机制来发现集群中新创立且尚未被调度到节点上的Pod,由于Pod中的容器和Pod本身可能有不同的资源要求,调度会将Pod放置到合适的节点上;
3.3 主动弹性
K8S能够经过目标检查工作负载的资源需求,例如CPU利用率、呼应时长、内存利用率、或许其他,然后判别是否需求履行弹性,垂直维度能够是更多的资源分配,水平维度能够是更多的集群布置;
K8S能够主动弹性,也具有主动修正的才能,当节点故障或许运用服务异常时,会被检查到,可能会进行节点迁移或许重启;
四、运用事例
1、服务布置
在此前的实践事例中,用CLI命令行和脚本文件的方法,完结的布置动作,而在整个流程中触及集群的多个组件协作,多次的通信和调度;
kubectl create -f pod.yaml
2、交互流程
【1】CLI命令行和UI界面,都是经过APIserver接口,与集群内部组件交互,比方上述的Pod布置操作;
【2】在APIserver收到请求之后,会将序列化状况的目标写入到etcd中完结存储操作;
【3】Scheduler调度器经过监测(Watch)机制来发现集群中新创立且尚未被调度到节点上的Pod;
【4】在集群中找到一个Pod的所有可调度节点,对这些可调度节点打分,选出其中得分最高的节点来运转Pod,然后调度器将这个调度决定告诉给APIserver;
【5】APIserver完结信息存储后,然后告诉相应节点的Kubelet;
【6】Kubelet是根据PodSpec来工作的,保证这些PodSpec中描绘的容器处于运转状况且运转状况良好,每个PodSpec是一个描绘Pod的YAML或JSON目标;
【7】Pod是能够在Kubernetes中创立和办理的、最小的可布置的核算单元,包含一个或多个容器;
五、参阅源码
文档库房:
https://gitee.com/cicadasmile/butte-java-note
脚本库房:
https://gitee.com/cicadasmile/butte-auto-parent