k8s 核心组件分析
参考网站:https://www.cnblogs.com/linuxk/p/10291178.html#master组件
从上图,我们可以看到K8S组件和逻辑及其复杂,但是这并不可怕,我们从宏观上先了解K8S是怎么用的,再进行庖丁解牛。从上图我们可以看出:
Kubernetes集群主要由Master和Node两类节点组成
Master的组件包括:apiserver、controller-manager、scheduler和etcd等几个组件,其中apiserver是整个集群的网关。
Node主要由kubelet、kube-proxy、docker引擎等组件组成。kubelet是K8S集群的工作与节点上的代理组件。
一个完整的K8S集群,还包括CoreDNS、Prometheus(或HeapSter)、Dashboard、Ingress Controller等几个附加组件。其中cAdivsor组件作用于各个节点(master和node节点)之上,用于收集及收集容器及节点的CPU、内存以及磁盘资源的利用率指标数据,这些统计数据由Heapster聚合后,可以通过apiserver访问。
然后我们对每个组件依次进行剖析:
1、Master组件
1、API Server K8S对外的唯一接口,提供HTTP/HTTPS RESTful API,即kubernetes API。所有的请求都需要经过这个接口进行通信。主要负责接收、校验并响应所有的REST请求,结果状态被持久存储在etcd当中,所有资源增删改查的唯一入口。
简单来说:
相关工作原理图
2、etcd
负责保存k8s 集群的配置信息和各种资源的状态信息,当数据发生变化时,etcd会快速地通知k8s相关组件。etcd是一个独立的服务组件,并不隶属于K8S集群。生产环境当中etcd应该以集群方式运行,以确保服务的可用性。
etcd不仅仅用于提供键值数据存储,而且还为其提供了监听(watch)机制,用于监听和推送变更。在K8S集群系统中,etcd的键值发生变化会通知倒API Server,并由其通过watch API向客户端输出。
3、Controller Manager 负责管理集群各种资源,保证资源处于预期的状态。Controller Manager由多种controller组成,包括replication controller、endpoints controller、namespace controller、serviceaccounts controller等 。由控制器完成的主要功能主要包括生命周期功能和API业务逻辑,具体如下: 生命周期功能:包括Namespace创建和生命周期、Event垃圾回收、Pod终止相关的垃圾回收、级联垃圾回收及Node垃圾回收等。 API业务逻辑:例如,由ReplicaSet执行的Pod扩展等。
4、调度器(Scheduler) 资源调度,负责决定将Pod放到哪个Node上运行。Scheduler在调度时会对集群的结构进行分析,当前各个节点的负载,以及应用对高可用、性能等方面的需求。
总的来说:
其工作原理为:
节点调度方式有:
下面是一个通过定向调度将nginx放到一个node上的demo
2、Node组件
Node主要负责提供容器的各种依赖环境,并接受Master管理。每个Node有以下几个组件构成。 1、Kubelet kubelet是node的agent,当Scheduler确定在某个Node上运行Pod后,会将Pod的具体配置信息(image、volume等)发送给该节点的kubelet,kubelet会根据这些信息创建和运行容器,并向master报告运行状态。 2、Container Runtime 每个Node都需要提供一个容器运行时(Container Runtime)环境,它负责下载镜像并运行容器。目前K8S支持的容器运行环境至少包括Docker、RKT、cri-o、Fraki等。 3、Kube-proxy service在逻辑上代表了后端的多个Pod,外借通过service访问Pod。service接收到请求就需要kube-proxy完成转发到Pod的。每个Node都会运行kube-proxy服务,负责将访问的service的TCP/UDP数据流转发到后端的容器,如果有多个副本,kube-proxy会实现负载均衡,有2种方式:LVS或者Iptables
这里介绍的是k8s主要的一些组件,还有未提到的可以自行查阅相关资料~
- struts1源码分析-整体概览和核心组件
- Android 短信模块分析(二) MMS中四大组件核心功能详解
- Cloud Foundry技术全貌及核心组件分析
- Mybatis中SqlSession下的四大核心组件分析
- Yii核心组件AssetManager原理分析
- Spring3.0核心组件的源码简单分析
- 【Cloud Foundry】Could Foundry学习(二)——核心组件分析
- flume架构与核心组件源代码分析
- Netty 核心组件 Pipeline 源码分析(一)之剖析 pipeline 三巨头
- Flume架构与源码分析-核心组件分析-1
- Netty 核心组件 Pipeline 源码分析(二)一个请求的 pipeline 之旅
- Flume架构与源码分析-核心组件分析-2
- WH服务器框架分析系列二:网络核心组件CTCPSocketEngine
- Spring3.0核心组件的源码简单分析
- Spring3.0核心组件的源码简单分析
- Spring3.0核心组件的源码简单分析
- 【Cloud Foundry】Could Foundry学习(二)——核心组件分析
- netty源码分析(十三)Netty核心四大组件关系与构建方式深度解读
- Flume架构与源码分析-核心组件分析-1
- Flume架构与源码分析-核心组件分析-2