2

K8s 核心组件及运行机制

 2 years ago
source link: https://www.51cto.com/article/701197.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client
K8s 核心组件及运行机制
作者:怪兽在此 2022-02-11 23:11:09
一个 Kubernetes 集群由一组被称作节点的机器组成。这些节点上运行 Kubernetes所管理的容器化应用。集群具有至少一个工作节点。

kubernetes核心组件及运行机制

一个 Kubernetes 集群由一组被称作节点的机器组成。这些节点上运行 Kubernetes所管理的容器化应用。集群具有至少一个工作节点。

工作节点托管作为应用负载的组件的 Pod 。控制平面管理集群中的工作节点和 Pod 。为集群提供故障转移和高可用性,这些控制平面一般跨多主机运行,集群跨多个节点运行。

a9545fb3246825e9ab47617c03f9083747dcc5.jpg

k8s运行机制

API server

API server 的核心功能是提供k8s各类资源对象(如Pod、RC、Service)的增删改查及Watch等HTTP REST接口,成为集群内各个功能模块之间数据交互和通信的中心枢纽,是整个集群的数据总线和数据中心。 通常还具有以下功能。

  • 集群管理的API入口
  • 资源配额控制的入口
  • 提供了完备的集群安全机制。

通常我们会通过kubectl命令与API server进行交互,提供restful API,所以说也可以通过代码方式直接调用k8s的API server。

589eb21734450a9c66f812c593bbcf7f91f9d2.jpg

apiserver架构图

controller-manager

controller-manager 作为集群内部的管理控制中心,负责集群内部的Node、Pod、Endpoint、Namespace、ServiceAccount、ResourceQuota等的管理,意为控制器。

新版本replication controller 被ReplicaSet替代。

e96fa2977d6609555fe4581310378d125814fb.png

controller manager

从逻辑上讲,每个控制器都是一个单独的进程, 但是为了降低复杂性,它们都被编译到同一个可执行文件,并在一个进程中运行。

每个controller通过API server 提供的接口实时监控着集群里每个资源对象的状态,当发生各种故障导致系统状态发生变化,会尝试着将系统从“现有状态”修正到“期望状态”。

以下为一些控制器的作用

  • 节点控制器(Node Controller): 负责在节点出现故障时进行通知和响应 。
  • 端点控制器(Endpoints Controller): 填充端点(Endpoints)对象(即加入 Service 与 Pod)。
  • 服务帐户和令牌控制器(Service Account & Token Controllers): 为新的命名空间创建默认帐户和 API 访问令牌。

scheduler

kube-scheduler意为调度器,在集群承担了"承上启下"的重要功能,“承上”指的是它负责接收 Controller -manager创建的新Pod。为其安排一个可以安置的node;“启下”指的是安置完成之后,目前Node上的kubelet服务进程接管后继续工作,负责Pod生命周期中的下半生。

具体来说,Kubernetes Scheduler的作用是将待调度的Pod(API新创建的Pod、Controller Manager为补足副本而创建的Pod等)按照特定的调度算法和调度策略绑定(Binding)到集群中某个合适的Node上,并将绑定信息写入etcd中。在整个调度过程中涉及三个对象,分别是待调度Pod列表、可用Node列表,以及调度算法和策略。简单地说,就是通过调度算法调度为待调度Pod列表中的每个Pod从Node列表中选择一个最适合的Node。

86a6f0c79d9aead5b7c7787a780f6914c328be.jpg

scheduler运行机制

kubelet

一个在集群中每个节点(node)上运行的代理。 它保证容器(containers)都 运行在 Pod 中。

kubelet 接收一组通过各类机制提供给它的 PodSpecs,确保这些 PodSpecs 中描述的容器处于运行状态且健康。

kube-proxy

kube-proxy 是集群中每个节点上运行的网络代理, 实现 Kubernetes 服务(Service) 概念的一部分。

kube-proxy 维护节点上的网络规则。这些网络规则允许从集群内部或外部的网络会话与 Pod 进行网络通信。

如果操作系统提供了数据包过滤层并可用的话,kube-proxy 会通过它来实现网络规则。否则, kube-proxy 仅转发流量本身

这里介绍一下 RC RSDeployment的区别

  • replicationController POD管理控制器 老版本使用
  • replicaset 新版本的POD控制器,替代RC 支持集合式的selector:(version in (v1.0, v2.0)或env notin (dev, qa))
  • Deployment 声明式的pod部署方式 支持rolling update,Deployment为Pod和ReplicaSet提供声明式更新。

你只需要在Deployment中描述你想要的目标状态是什么,Deployment controller就会帮你将Pod和Replica

Set的实际状态改变到你的目标状态。你可以定义一个全新的Deployment,也可以创建一个新的替换旧的Deployment

责任编辑:武晓燕 来源: 今日头条
zanpc.bd208a1.pngzanpchover.fdd60ba.png
weixin.23cd8b3.png 分享到微信
weibo.16d6b4f.png 分享到微博

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK