k8s 节点包含的组件及功能


k8s节点包含的组件及功能

1、kubernetes master与node节点的各组件及功能

k8s集群主要包含:k8s-master、k8s-node、etcd等,如下图:

 

 

1.1 k8s master组件

k8s master主要有kube-apiserver、kube-controller-manager、kube-scheduler组成。

1.1.1 kube-apiserver

◆ kube-apiserver:

https://kubernetes.io/zh/docs/reference/command-line-tools-reference/kube-apiserver/

Kubernetes API Server提供了k8s各类资源对象的增删改查及watch等HTTP Rest接口,这些对象包括pods、services、replicationcontrollers等,API Server为REST操作提供服务,并为集群的共享状态提供前端,所有其他组件都通过该前端进行交互。

◆ RESTful API

是REST风格的网络接口,REST描述的是在网络中client和server的一种交互形式。

◆ REST

是一种软件架构风格,或者说是一种规格,其强调HTTP应当以资源为中心,并且规范了URI的风格,规范了HTTP请求操作(GET/PUT/POST/DELETE/HEAD/OPTIONS)的使用,具有对应的语义。

https://github.com/Arachni/arachni/wiki/REST-API

1.1.2 kube-scheduler

https://kubernetes.io/zh/docs/reference/command-line-tools-reference/kube-scheduler/

◆ Kubernetes调度器是一个控制面进程,负责将Pods指派到节点上。

◆ 通过调度算法为待调度Pod列表的每个pod从可用Node列表中选择一个最适合的Node,并将信息写入etcd中。

◆ node节点上的kubelet通过API Server监听到Kubernetes Scheduler产生的Pod绑定信息,然后获取对应的Pod清单,下载Image,并启动容器。

◆ 策略:

1)先排除不符合条件的节点;2)在剩余的可用选出一个最符合条件的节点。

★ LeastRequestedPriority

   优先从备选节点列表中选择资源消耗最小的节点(CPU+内存)

★ CalculateNodeLabelPriority

   优先选择还有指定Label的节点

★ BalancedResourceAllocation

   优先从备选节点列表中选择各项资源使用率最均衡的节点。

1.1.3 kube-controller-manager

https://kubernetes.io/zh/docs/reference/command-line-tools-reference/kube-controller-manager/

◆ kube-controller-manager:Controller Manager还包括一些子控制器(副本控制器、节点控制器、命名空间控制器和服务账号控制器等),控制器作为集群内部的管理控制中心,负责集群内的node、pod副本、服务端点(Endpoint)、命名空间(Namespace)、服务账号(ServiceAccount)、资源定额(ResourceQuota)的管理,当某个node意外宕机时,Controller Manager会及时发现并执行自动化修复流程,确保集群中的Pod副本始终处于预期的工作状态。

◆ controller-manager控制器每间隔5秒检查一次节点的状态;

◆ 如果controller-manager控制器没有收到自节点的心跳,则将该node节点被标记为不可达;

◆ controller-manager将在标记为无法访问之前等待40秒;

◆ 如果该node节点被标记为无法访问后5分钟还没有恢复,controller-manager会删除当前node节点的所有pod并在其它可用节点重建这些pod。

pod高可用机制:

node monitor period:节点监视周期,5s;

node monitor grace period:节点监视器宽限期,40s;

pod eviction timeout:pod驱逐超时时间,5m;

1.2 k8s node节点

1.2.1 kube-proxy

https://kubernetes.io/zh/docs/reference/command-line-tools-reference/kube-proxy/

◆ kube-proxy:kubernetes网络代理运行在node上,它反映了node上Kubernetes API中定义的服务,并可以通过一组后端进行简单的TCP、UDP和SCTP流转发或者在一组后端进行循环TCP、UDP和SCTP转发,用户必须使用apiserver API创建一个服务来配置代理,其实就是kube-proxy通过在主机上维护网络规则并执行连续转发来实现Kubernetes服务访问。

◆ kube-proxy运行在每个节点上,监听API Server中服务对象的变化,再通过管理Iptables或者IPVS规则,来实现网络的转发。

◆ kube-proxy不同的版本可支持三种工作模式:

   ★ UserSpace:k8s v1.1之前使用,k8s 1.2及以后就已经淘汰;

   ★ iptables:k8s 1.1版本开始支持,1.2开始为默认;

   ★ IPVS:k8s 1.9引入到1.11为正式版本,需要安装ipvsadm、ipset工具包和加载ip_vs内核模块;

1.2.2 kubelet

https://kubernetes.io/zh/docs/reference/command-line-tools-reference/kubelet/

kubelet是运行在每个worker节点的代理组件,它会监视已分配给节点的pod,具体功能如下:

◆ 向master汇报node节点的状态信息;

◆ 接受指令并在Pod中创建docker容器;

◆ 准备Pod所需的数据卷;

◆ 返回Pod的运行状态;

◆ 向node节点执行容器健康检查;

1.3 kubectl

kubectl:https://kubernetes.io/zh/docs/reference/kubectl/kubectl/

◆ kubectl是一个通过命令行对Kubernetes集群进行管理的客户端工具。

2、kubernetes pod调度流程

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM