K8s工做流程详解

2021年09月15日 阅读数:1
这篇文章主要向大家介绍K8s工做流程详解,主要内容包括基础应用、实用技巧、原理机制等方面,希望对大家有所帮助。

在学习k8s工做流程以前,咱们得再次认识一下上篇k8s架构与组件详解中提到的kube-controller-manager一个k8s中许多控制器的进程的集合。html

好比Deployment 控制器(DeploymentController)和 Job 控制器(JobController)是 Kubernetes 内置控制器的典型例子。在 Kubernetes 中,一个控制器至少追踪一种类型的 Kubernetes 资源。这些 资源对象有一个表明指望状态的 spec 字段。 该资源的控制器负责所属对象当前状态接近指望状态。node


1、控制器与apiserver的交互

上面提到的这些资源的控制器是如何确保资源对象当前状态接近于指望状态?git

固然是持续同步apiserver中(查询etcd)资源对象的元数据,并不断更新对象属性。是这样么?github

当集群中有几十上百万个资源对象时,光控制器的http同步请求就够apiserver喝一壶的,显然不太棒。因此Kubernetes采用了一个叫Informer的机制。Informer 是 Client-go 中的一个核心工具包。数据库

在这里informer主要实现的做用以下:api

  1. 更快地返回 List/Get 请求,减小对 Kubenetes API 的直接调用

使用 Informer 实例的 Lister() 方法, List/Get Kubernetes 中的 Object 时,Informer 不会去请求 Kubernetes API,而是直接查找缓存在本地内存中的数据,依赖Etcd的List&Watch机制,客户端及时获知这些对象的状态变化,而后更新本地缓存,这样就在客户端为这些API对象维护了一份和Etcd数据库中几乎一致的数据,而后控制器等客户端就能够直接访问缓存获取对象的信息,而不用去直接访问apiserver。经过这种方式,Informer 既能够更快地返回结果,又能减小对 Kubernetes API 的直接调用。缓存

  1. 可监听事件并触发回调函数

Informer 经过 Kubernetes Watch API 监听某种 resource 下的全部事件。Watch API 本质上就是一种 APIServer 主动向客户端推送 Kubernetes 资源修改、建立的一种机制。这样咱们就能够获取到资源的变动,及时更新对象状态。架构

关于k8s中 informer详细可参考:kubenetes informer 详解函数

经过上面咱们知道了控制器是经过watch api监听apiserver中资源对象的更新,下面咱们进入正题:k8s工做流程。工具


2、k8s工做流程

咱们来看经过deployment部署pod的常规流程:

image-20210914114226232

  1. kubectlapiserver发送部署请求(例如使用 kubectl create -f deployment.yml)

  2. apiserver将 Deployment 持久化到etcd;etcd与apiserver进行一次http通讯。

  3. controller manager经过watch api监听 apiserverdeployment controller看到了一个新建立的deplayment对象更后,将其从队列中拉出,根据deployment的描述建立一个ReplicaSet并将 ReplicaSet 对象返回apiserver并持久化回etcd

    以此类推,当replicaset控制器看到新建立的replicaset对象,将其从队列中拉出,根据描述建立pod对象。

  4. 接着scheduler调度器看到未调度的pod对象,根据调度规则选择一个可调度的节点,加载到pod描述中nodeName字段,并将pod对象返回apiserver并写入etcd。

  5. kubelet在看到有pod对象中nodeName字段属于本节点,将其从队列中拉出,经过容器运行时建立pod中描述的容器。


上面咱们说到的deployment-replicaset-pod的关系以下:

Deploy-Replica-Pod


但愿小做文对你有些许帮助,若是内容有误请指正。

您能够随意转载、修改、发布本文,无需通过本人赞成。 没什么用的blog:iqsing.github.io