k8s学习总结之各组件功能及作用的详细介绍

K8S集群架构:
一个K8S集群是由两大部分组成:
Master节点和Node节点
一.Master节点主要包括API Server、Scheduler、Controller manager、etcd几大组件

1.API Server (提供其他模块之间的数据交互和通信的枢纽(其他模块通过API Server查询或修改数据,只有API Server才直接和etcd进行交互)
Kubernetes 集群中,API Server 扮演着通信枢纽的位置。API Server 不仅负责和 etcd 交互(其他组件不会直接操作 etcd,只有 API Server 这么做),并切对外提供统一的API调用入口, 所有的交互都是以 API Server 为核心的。API Server 提供了以下的功能:

1).整个集群管理的 API 接口:所有对集群进行的查询和管理都要通过 API 来进行。集群内部的组件(如kubelet)也是通过Apiserver更新和同步数据到etcd中。
2).集群内部各个模块之间通信的枢纽:所有模块之前并不会之间互相调用,而是通过和 API Server 打交道来完成自己那部分的工作。
3).集群安全控制:API Server 提供的验证和授权保证了整个集群的安全。
4).数据中心枢纽: API Server 负责和 Etcd 交互存放集群用到的运行数据。

2.Scheduler (负责对集群内部的资源进行调度,相当于“调度室”。)

Scheduler负责节点资源管理,接收来自kube-apiserver创建Pods的任务,收到任务后它会检索出所有符合该Pod要求的Node节点(通过预选策略和优选策略),开始执行Pod调度逻辑。调度成功后将Pod绑定到目标节点上。

3.Controller manager

controller-manager 作为 k8s 集群的管理控制中心,负责集群内 Node、Namespace、Service、Token、Replication 等资源对象的管理,使集群内的资源对象维持在预期的工作状态。
每一个 controller 通过 api-server 提供的 restful 接口实时监控集群内每个资源对象的状态,当发生故障,导致资源对象的工作状态发生变化,就进行干预,尝试将资源对象从当前状态恢复为预期的工作状态,常见的 controller 有 Namespace Controller、Node Controller、Service Controller、ServiceAccount Controller、Token Controller、ResourceQuote Controller、Replication Controller等。

Controller Manager的主要职责包括:

资源控制器管理:Controller Manager负责持续监视Kubernetes集群中的各种资源对象(如Pod、Node、Service、ReplicationController、Deployment等),并确保它们的状态与预期的状态保持一致。
自动伸缩和负载均衡:Controller Manager管理自动伸缩控制器和负载均衡控制器。自动伸缩控制器根据定义的自动伸缩规则自动调整Pod的副本数量,以适应应用的负载情况。负载均衡控制器则负责将请求均衡地分发给后端Pod。
健康检查和自愈能力:Controller Manager管理健康检查控制器和自愈控制器。健康检查控制器负责监控容器的健康状态,并根据配置的策略进行相应的处理。自愈控制器负责重新启动失败的Pod或迁移运行在不健康节点上的Pod。
回滚和版本管理:Controller Manager管理回滚控制器,可以根据应用定义的Deployment对象实现应用的回滚操作,以及管理不同版本的应用。

Kubernetes中常见的几个Controller的作用和原理

Replication Controller (RC):Replication Controller用于确保在Kubernetes集群中的Pod副本数量保持在期望的数量。它负责监控Pod的运行状态,如果Pod的副本数量少于预期,则会自动创建新的Pod副本以补足。如果多出预期的Pod副本数量,则会自动删除多余的Pod。
Replica Set (RS):Replica Set是Replication Controller的增强版,用于支持更复杂的Pod选择器和副本集的管理。它可以通过使用更多丰富的标签选择器来定义副本集。RS与RC类似,通过监控Pod的状态,并进行创建和删除操作,来维护集群中的Pod副本数量。
Deployment:Deployment是更高级别的控制器,它使用Replica Set来部署和管理Pod副本。Deployment提供了对应用的滚动更新、回滚、版本管理等功能。它可以根据定义的Replica Set模板创建和管理Pod副本。
StatefulSet:StatefulSet是用于管理有状态应用的控制器。它确保有状态应用中的每个Pod都具有唯一的标识和稳定的网络标识。StatefulSet会按序地启动、停止和更新Pod,确保每个Pod都与之前的Pod一致,这对于一些有状态的应用是很重要的。
DaemonSet:DaemonSet是一种控制器,它用于在每个节点上运行一个Pod副本,确保每个节点都有一个相同的Pod运行。它通常用于一些需要在每个节点上运行的守护程序或监控任务。

4.Etcd

etcd在kubernetes集群是用来存放数据并通知变动的。
Kubernetes中没有用到数据库,它把关键数据都存放在etcd中,这使kubernetes的整体结构变得非常简单。在kubernetes中,数据是随时发生变化的,比如说用户提交了新任务、增加了新的Node、Node宕机了、容器死掉了等等,都会触发状态数据的变更。状态数据变更之后呢,Master上的kube-scheduler和kube-controller-manager,就会重新安排工作,它们的工作安排结果也是数据。这些变化,都需要及时地通知给每一个组件。etcd有一个特别好用的特性,可以调用它的api监听其中的数据,一旦数据发生变化了,就会收到通知。有了这个特性之后,kubernetes中的每个组件只需要监听etcd中数据,就可以知道自己应该做什么。kube-scheduler和kube-controller-manager呢,也只需要把最新的工作安排写入到etcd中就可以了,不用自己费心去逐个通知了

二.Node节点主要包括kubelet、kube-proxy模块和pod对象
1.Pod

Pod是Kubernetes最基本的操作单元。一个Pod代表着集群中运行的一个进程,它内部封装了一个或多个紧密相关的容器。

2.Kubelet

运行在每个计算节点上
1).kubelet 组件通过 api-server 提供的接口监测到 kube-scheduler 产生的 pod 绑定事件,然后从 etcd 获取 pod 清单,下载镜像并启动容器。
2).同时监视分配给该Node节点的 pods,周期性获取容器状态,再通过api-server通知各个组件。

3.kube-proxy

首先k8s 里所有资源都存在 etcd 中,各个组件通过 apiserver 的接口进行访问etcd来获取资源信息
kube-proxy 会作为 daemon(守护进程) 跑在每个节点上通过watch的方式监控着etcd中关于Pod的最新状态信息,它一旦检查到一个Pod资源被删除了或新建或ip变化了等一系列变动,它就立即将这些变动,反应在iptables 或 ipvs规则中,以便之后 再有请求发到service时,service可以通过ipvs最新的规则将请求的分发到pod上

总结:kube-proxy和service的关系:
Kube-proxy负责为 Service 提供 cluster 内部的服务发现和负载均衡,并以守护进程的模式对各个节点的pod信息实时监控并更新转发规则,service收到请求后会根据kube-proxy制定好的策略来进行请求的转发,从而实现负载均衡
以上便是我在K8S学习过程中对其中各组件功能及作用的理解的总结,希望对大家有用,有问题的地方欢迎指出,如转载请标明出处。

posted @ 2020-08-18 00:20  渡边灬  阅读(5248)  评论(0编辑  收藏  举报
/* 看板娘 */