kubernetes

Kubernetes是一个集群,将多台主机的资源整合为一个大的资源池,并进行统一对外提供存储、计算等能力的集群。

这个集群就是将多台主机上安装上kubernetes的相关应用程序,并通过这个应用程序协同工作,将多个主机当作一个主机来使用。

SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。

在kubernetes集群中,主机是分角色的。一个或一组节点是主节点(两到三个),各node节点中每一个节点都有来贡献一些计算或存储能力。各node节点就是为了运行容器。

1、kubernetes架构概述 随笔 第1张

用户如何在集群中创建、启动容器呢?

客户端把创建、启动容器的请求先发给集群中的master,master中有一个调度器(scheduler)去分析各node节点现有可用资源状态,从中找一个最适合运行用户请求的容器的节点,然后master把这个请求调度到节点上。由被选中节点本地的docker或其他容器引擎负责把这个容器启动起来。要启动这个容器就需要镜像,镜像一半是在docker hub这样的registry当中。所以node负责启动容器时先检查本地是否有镜像,如果本地没有就需要到docker hub中下载,然后在node上启动。kubernetes cluster自身可能并没有托管所需要依赖的每一个容器镜像,就需要到registry上下载。同时registry自身也可以是一个容器,因此registry也可以托管在kubernetes集群中运行。

接受客户端请求的只能是kubernetes cluster,而提供服务让客户端远程访问一般需要一个套接字,所以kubernetes cluster把master上的一个组件成为API SERVER。API SERVER负责接收、解析和处理请求的,如果用户的请求是要创建一个容器,这个容器不应该运行在master上,而应该运行在node上。选择哪一个node更合适,就需要调度器来分析了。调度器会观测每一个node上总共可用的计算和存储资源,并根据用户所请求创建的这个容器所需要的最低资源量(CPU、内存等)来评估哪个节点最合适。注意资源请求的维度不是一个,比如至少用到的CPU或者内存,因此kubernetes设计了一个两级调度的模式,第一步先做预选,即评估每一个node,测量哪些node是符合容器运行需求(必须总共10个点节点只有3符合),第二步是优选,从符合需求的node中再选出一个最佳适配的node。至于哪个node最佳,取决于调度算法中优选算法来决定。

kubernetes有一堆控制器的应用程序,负责监控管理的每一个容器是否正常运行,一旦发现不健康,控制器就向master发请求,调度器就会在其他node中挑一个合适的node,并在此node上重新启动挂掉的容器。控制器需要在本地不停的loop(循环),即进行周期性探测。

控制器管理器(control mananger):负责监控每一个控制器是否健康,如果控制器不健康了,有控制器管理器确保它是健康的。为了确保控制器管理器是健康的,就要求控制器管理器是冗余的,因为master是多个节点的,所以可以确保控制器管理器是冗余的。

Pod

1、kubernetes架构概述 随笔 第2张

在K8S上最小运行的单元不是容器,而是pod。kubernetes并不直接调度容器的运行,而是调度pod,pod可以理解为容器的外壳,为容器做了一层抽象的封装。pod是kubernets系统上最小的调度的逻辑单元,pod内部主要就是用来放容器的。

pod的工作特点是将多个容器联合起来加入到同一个网络名称空间去。kubernetes做了一个逻辑组件pod,在pod内部运行容器,一个pod内部可以运行多个容器。多个容器共享同一个底层的网络名称空间:net、uts、ipc,另外三个:user、mnt、pid是互相隔离的。因此一个pod内的多个容器(容器是为了运行程序)就共享同一个主机名、同一个网络等,因此程序对外就更像是一个虚拟机,pod就是模拟传统的虚拟机的(用同一个地址对外通信,容器之间的通信是使用lo的)

另外同一个pod内部的多个容器还共享第二种资源:存储卷。假如定义一个存储卷,让pod中第一个容器可以访问,那么第二个容器可以共享挂载同一个存储卷。可以说存储卷不再属于容器,而是属于存储卷,就像虚拟机的磁盘。

调度器调度的是pod,各node主要是为了运行pod。一般一个pod中运行一个容器,如果容器之间联系特别紧密,可以在一个pod中运行多个容器。如果同一pod中放置多个容器的话,那么有一个容器是主容器,其他容器是为了辅助主容器中的应用程序完成更多功能。比如主容器中运行的是nginx,另外想要收集日志,那么就可以在辅助容器中运行收集日志的应用程序。

为了实现pod的识别,就需要在pod上附加一些元数据,

 

node

node是kubernetes集群的工作节点,负责运行由master指派的的各种任务,最核心的任务就是以pod的形式去运行容器的。理论上将node可以是任何形式的设备,只要有cpu、内存、存储空间等可以安装kuberneters cluster的代理程序,那么就可以作为整个kubernetes cluster的一个部分进行工作。

1、kubernetes架构概述 随笔 第3张

 

 

 

 

 

 

 

 

 

 

 

扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄