Kubernetes 学习总结(43)—— Kubernetes 从提交 deployment 到 pod 运行的全过程

当用户向 Kubernetes 提交了一个创建 deployment 的请求后,Kubernetes 从接收请求直至创建对应的 pod 运行这整个过程中都发生了什么呢?

kubernetes 架构简述

在搞清楚从 deployment 提交到 pod 运行整个过程之前,我们有先来看看 Kubernetes 的集群架构:

图片

上图与下图相同:

图片

如图所示,k8s 集群分为 control plane 控制平面和 node 节点。control plane 控制平面(也称之为主节点)主要包含以下组件:

  • kube-api-server: 顾名思义,负责处理所有 api,包括客户端以及集群内部组件的请求。

  • etcd: 分布式持久化存储、事件订阅通知。只有 kube-api-server 直接操作 etcd,其它所有组件都是与 kube-api-server 进行相互。

  • scheduler: 处理 pod 的调度,将 pod 绑定到具体的 node 节点。

  • controller manager: 控制器,处理各种资源对象。

  • cloud controller manager: 对接云服务商的控制器。

node 节点,专门部署用户的应用程序(与控制平面隔离,避免影响到 k8s 的核心组件),主要包含以下组件:

  • kubelet: 管理节点上的 pod 以及状态检查和上报。

  • kube-proxy: 进行流量的路由转发(目前是通过操作节点的 iptables 或者 ipvs 实现)。

  • CRI: 容器运行时接口。

从 Deployment 到 Pod

从 Deployment 到 Pod 的整个过程如下图所示:

图片

1. 请求发送到 kube-api-server

请求发送到 kube-api-server,然后会进行认证、鉴权、变更、校验等一系列过程,最后将 deployment 的数据持久化存储至 etcd

图片

在这个过程我们可以通过 mutation admission 的 webhook 自主地对资源对象进行任意的变更,比如注入 sidecar 等等。

2. controller manager 处理

controller manager 组件针对不同的资源对象有不同的处理部分。针对 Deployment,由于其并不直接管理 Pod,而是 Deployment 管理 ReplicaSetReplicaSet 再管理 Pod

图片

因此其中涉及到 controller manager 中的两个部分:

  • deployment controller

  • replicaset controller

(1) 先是 deployment controller 监听到 deployment 的创建事件,然后进行相关的处理,最后创建 replicaset

(2) 然后 replicaset controller 监听到 replicaset 的创建事件,进行相关处理后,最后创建 pod

3. scheduler 调度

scheduler 接受到 pod 需要调度的事件后,进行一系列调度逻辑处理,最后选择一个合适的 node 节点,将 pod 绑定到这个节点上(所谓的节点调度在这里只是修改 pod 数据,对其中的 nodeName 进行赋值)。具体的调度算法比较复杂,涉及强制性调度、亲和与反亲和、污点和容忍、以及硬件资源计算、优先级等等,本文不做展开。

4. 节点 kubelet 处理

调度完成后,pod 被绑定的 node 节点上的 kubelet 同样通过 kube-api-server 会接受到相应的事件,然后 kubelet 会进行 pod 的创建。在这个过程中 kubelet 会分别调用 CRICNICSI

  • CRI(Container Runtime Interface): 容器运行时接口,CRI 插件负责执行拉取镜像、创建、删除容器等操作。CRI 的几种常用插件:

    • containerd

    • CRI-O

    • Docker Engine

  • CNI(Container Network Interface): 容器网络接口,CNI 插件负责给 pod 分配 IP 地址,确保 pod 能够与集群内的其它 pod 进行通信。CNI 的几种常用插件:

    • Cilium

    • Calico

  • CSI(Container Storage Interface): 容器存储接口,CSI 插件负责与外部存储提供者通信,执行卷的附加、挂载等操作。

所谓的接口其实只是定义了通信的规范或者标准(使用的是 grpc 协议),具体的实现则是交给了插件。至此,Kubernetes 从创建 deployment 到 pod 运行的全过程就是这样了。

图片

参考资料:

  • https://kubernetes.io/docs/concepts/architecture/

  • https://kubernetes.io/docs/concepts/scheduling-eviction/

  • https://kubernetes.io/docs/setup/production-environment/container-runtimes/

  • https://kubernetes.io/docs/tasks/administer-cluster/network-policy-provider/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/584211.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Ubuntu 20.04使用Livox Mid-360

参考文章: Ubuntu 20.04使用Livox mid 360 测试 FAST_LIO-CSDN博客 一:Livox mid 360驱动安装与测试 前言: Livox mid360需要使用Livox-SDK2,而非Livox-SDK,以及对应的livox_ros_driver2 。 1. 安装Livox-SDK2 参…

RabbitMQ是做什么的

rabbitMQ是做异步通讯的。用于解决同步同讯的拓展性差,级联失败的问题。 异步调用方式其实就是基于消息通知的方式,一般包含三个角色:。 消息发送者:投递消息的人,就是原来的调用方 消息代理:管理、暂存、转发消息,你可以把它理…

软件测试/测试开发丨Python常用数据结构-列表list

列表的定义 列表是有序的可变元素的集合,使用中括号[ ]包围,元素之间用逗号分隔;列表是动态的,可以随时扩展和收缩;列表是异构的,可以同时存放不同类型的对象;列表允许出现重复的元素。 列表的…

六、从0开始卷出一个新项目瑞萨RZN2L之loader app分离工程优化

六、loader app分离工程 6.1 概述 6.2 官方资料与不足 6.3 loader app分离工程的优化 6.3.1 自动调节合并appsection 6.3.2 loader中使用外设 6.3.3 app使用sram mirror 6.3.4 sram atcm同时使用 六、从0开始卷出一个新项目之瑞萨RZN2L loader…

深入浅出理解转置卷积Conv2DTranspose

温故而知新,可以为师矣! 一、参考资料 论文:A guide to convolution arithmetic for deep learning github源码:Convolution arithmetic bilibili视频:转置卷积(transposed convolution) 转置…

STM32入门教程-2023版【3-2】点亮LED灯之库函数介绍

关注 点赞 不错过精彩内容 大家好,我是硬核王同学,最近在做免费的嵌入式知识分享,帮助对嵌入式感兴趣的同学学习嵌入式、做项目、找工作! 二、正式点亮一个LED灯 操作STM32的GPIO需要三个步骤: 1.使用RCC打开GPIO的时钟&#…

基于策略模式和简单工厂模式实现zip、tar、rar、7z四种压缩文件格式的解压

推荐语 这篇技术文章深入探讨了基于策略模式和简单工厂模式实现四种常见压缩文件格式的解压方法。通过阅读该文章,你将了解到如何利用这两种设计模式来实现灵活、可扩展的解压功能,同时适应不同的压缩文件格式。如果你对设计模式和文件处理感兴趣或刚好…

Springboot配置http-Only

项目框架 jdk1.8、springboot2.5.10 情况一 项目中未使用(权限认证框架:Sa-Token) application.yml文件内增加配置 server.servlet.session.cookie.http-onlytrueserver.servlet.session.cookie.securetrue (此条配置建议也加上) 情况二…

课题学习(十八)----捷联测试电路设计与代码实现(基于MPU6050和QMC5883L)

一、 电路设计 本周主要工作是在项目上,抽空做了一个跟本课题相关的电路板,之前用开发板来做测试,MPU6050和QMC5883L都是用杜邦线连接的,导致接线很乱,也不美观,当然也不符合“捷联”的定义。   下面是电…

【领域驱动设计】模式--通用语言(Ubiquitous language)

一.前言 有道无术术可求,有术无道止于术。方法论的形成都是为了让我们能够更高效,系统的解决问题,而不至于遇到问题不知所措。 二.通用语言的必要性 相信大家在实际的软件开发流程过程中,经常会遇到参照 Prd原型 编码出的系统与实…

SSM驾校预约管理系统----计算机毕业设计

项目介绍 本项目分为管理员、教练、学员三种角色, 管理员角色包含以下功能: 学员管理、教练管理、车辆管理、关系管理、车辆维修管理、个人中心等功能。 教练角色包含以下功能: 我的课程、我的学员、车辆中心、个人中心等功能。 学员角色包…

zabbix添加监控主机(agent)并告警

一、添加监控主机 总体来说,在被监控主机上安装部署zabbix-agent,并修改配置文件(zabbix_agentd.conf)的参数。然后在zabbix 服务端zabbix-get检查是否可以监控。如果可以了,就可以在web页面添加了,要监控…

Ubuntu16.04 安装Anaconda

步骤 1: 去官网下载安装包,链接如下: https://repo.anaconda.com/archive/ 找到对应版本下载至本地电脑,并上传至服务器。 步骤2: 通过命令解压 sh Anaconda3-2023.03-0-Linux-x86_64.sh 一路选择yes或则回车,直到安装成功出现下面画面&…

Spring高手之路-@Autowired和@Resource注解异同点

目录 相同点 不同点 1.来源不同。 2.包含的属性不同 3.匹配方式(装配顺序)不同。 ​编辑 4.支持的注入对象类型不同 5.应用地方不同 相同点 都可以实现依赖注入,通过注解将需要的Bean自动注入到目标类中。都可以用于注入任意类型的Bean…

vue如何实现局部刷新?

应用场景&#xff1a; 比如你要切换tap栏实现刷新下面form表单等&#xff0c;相当于刷新页面。 如何使用如下&#xff1a; <div v-if"isReloadData"> 比如你想刷新那个位置就把 v-if"isReloadData"写到那个标签上 </div> 在data中定义刷新标…

如何本地搭建FastDFS文件服务器并实现远程访问【内网穿透】

文章目录 前言1. 本地搭建FastDFS文件系统1.1 环境安装1.2 安装libfastcommon1.3 安装FastDFS1.4 配置Tracker1.5 配置Storage1.6 测试上传下载1.7 与Nginx整合1.8 安装Nginx1.9 配置Nginx 2. 局域网测试访问FastDFS3. 安装cpolar内网穿透4. 配置公网访问地址5. 固定公网地址5.…

基于零和收益的DEA模型研究python实现

传统的DEA模型往往假设相关的是相互独立的,此时DEA模型只能计算出相对效率,无法进行效率的调整。如在碳排放分配问题上,碳排放总量保持不变,利用DEA模型只能计算出每个省份分配的相对效率,这在讨论固定资源下的碳排放配额分配问题时具有明显的局限性。在这种情况下,利用Z…

软件测试/测试开发丨Windows Appium环境搭建

windows 版本 Appium 环境搭建 安装 nodejs 下载.msi文件 https://nodejs.org/en/download/ 注意&#xff1a; 1、下载12.*版本双击安装即可。 2、无须配置环境变量,直接重启一个 cmd 输入下面的命令&#xff0c;能够查看这两个版本号即安装成功。 安装 appium desktop 直…

js对象方法大全(开发必会)

目录 前言 assgin(对象合并) 参数 功能 返回值 测试 结果 结论 create(以源对象为原型创建新对象) 参数 功能 返回值 测试 结果 结论 defineProperties(对属性进行具体定义) 参数 功能 返回值 测试 结果 结论 defineProperty(重写或定义新属性) 参数 功…

无论男孩女孩都要尽情打扮

这款柔软又细腻的开衫外套 上身体验感很不错的哈 舒适软糯百搭还透气&#xff0c;抗起球的面料 黑灰两色简单大方 胸前加上了流行的刺绣设计&#xff0c;可爱又精致 单穿内搭都可&#xff0c;现在天气还比较冷 外面可以套个羽绒服之类的 时尚叠穿风&#xff0c;韩系范儿…