K8s 核心组件及运行机制

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

kubernetes核心组件及运行机制

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

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

k8s运行机制

API server

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

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

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

apiserver架构图

controller-manager

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

新版本replication controller 被ReplicaSet替代。

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。

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


责任编辑:武晓燕 来源: 今日头条
相关推荐

2023-07-04 07:30:03

容器Pod组件

2015-11-20 11:20:54

js开发

2022-04-22 13:32:01

K8s容器引擎架构

2021-03-11 12:31:33

K8sCoreDNSDNS服务器

2018-03-15 16:45:47

前端JavaScriptthis

2022-04-29 10:40:38

技术服务端K8s

2022-06-14 07:56:15

Kubernetes存储架构K8S

2019-05-10 14:00:21

小程序运行机制前端

2009-12-11 10:52:37

PHP运行机制

2009-02-03 14:00:20

PHP运行PHP调用PHP原理

2023-06-06 08:14:18

核心Docker应用程序

2023-09-11 15:35:25

2022-08-29 08:21:00

k8sDocker

2024-05-27 00:00:10

KubernetesK8s云原生

2023-11-06 07:16:22

WasmK8s模块

2021-12-20 00:03:38

Webpack运行机制

2010-02-01 17:19:30

C++运行机制

2022-09-05 17:28:25

k8sNode IPClusterIP

2018-12-26 16:30:09

SQL Server内部运行机制数据库

2019-08-15 10:17:16

Webpack运行浏览器
点赞
收藏

51CTO技术栈公众号