当前位置: 首页 > news >正文

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/

相关文章:

  • SpringBoot 集成 Kafka消息中间件,Docker安装Kafka环境
  • Eureka相关面试题及答案
  • Jenkins 系列:Jenkins 安装(Windows、Mac、Centos)和简介
  • C++基础-文件读写操作详解
  • SpringBoot 请求参数
  • pycharm配置pyrcc5外部工具
  • 详解数组的轮转
  • 总结项目中oauth2模块的配置流程及实际业务oauth2认证记录(Spring Security)
  • ArcGIS Pro中Conda环境的Scripts文件解读
  • 在 Android 手机上从SD 卡恢复数据的 6 个有效应用程序
  • C#判断骨龄与生活年龄的比较
  • MySQL8 一键部署
  • 插入排序 InsertionSort
  • 多线程编程设计模式(单例,阻塞队列,定时器,线程池)
  • asp.net core 教程
  • 分享一款快速APP功能测试工具
  • 【翻译】babel对TC39装饰器草案的实现
  • 345-反转字符串中的元音字母
  • create-react-app做的留言板
  • ECMAScript 6 学习之路 ( 四 ) String 字符串扩展
  • Javascript设计模式学习之Observer(观察者)模式
  • JS字符串转数字方法总结
  • Lucene解析 - 基本概念
  • nginx 负载服务器优化
  • Redis中的lru算法实现
  • Redis字符串类型内部编码剖析
  • SpiderData 2019年2月16日 DApp数据排行榜
  • 百度贴吧爬虫node+vue baidu_tieba_crawler
  • 翻译--Thinking in React
  • 前端面试之CSS3新特性
  • 源码之下无秘密 ── 做最好的 Netty 源码分析教程
  • 策略 : 一文教你成为人工智能(AI)领域专家
  • ​linux启动进程的方式
  • ​人工智能书单(数学基础篇)
  • # MySQL server 层和存储引擎层是怎么交互数据的?
  • # Panda3d 碰撞检测系统介绍
  • ## 临床数据 两两比较 加显著性boxplot加显著性
  • #if 1...#endif
  • (Redis使用系列) Springboot 使用Redis+Session实现Session共享 ,简单的单点登录 五
  • (板子)A* astar算法,AcWing第k短路+八数码 带注释
  • (二)Eureka服务搭建,服务注册,服务发现
  • (附源码)spring boot建达集团公司平台 毕业设计 141538
  • (附源码)基于SpringBoot和Vue的厨到家服务平台的设计与实现 毕业设计 063133
  • (算法)求1到1亿间的质数或素数
  • (一)WLAN定义和基本架构转
  • (一)基于IDEA的JAVA基础10
  • ./include/caffe/util/cudnn.hpp: In function ‘const char* cudnnGetErrorString(cudnnStatus_t)’: ./incl
  • .NET Compact Framework 3.5 支持 WCF 的子集
  • .NET Core SkiaSharp 替代 System.Drawing.Common 的一些用法
  • .NET core 自定义过滤器 Filter 实现webapi RestFul 统一接口数据返回格式
  • .NET delegate 委托 、 Event 事件,接口回调
  • .NET 指南:抽象化实现的基类
  • .NET(C#、VB)APP开发——Smobiler平台控件介绍:Bluetooth组件
  • .NET框架类在ASP.NET中的使用(2) ——QA
  • .stream().map与.stream().flatMap的使用