K8S的架构及工作原理

2023-11-01

1、Master和Node

在这里插入图片描述

1)、Master

K8S中的Master是集群控制节点,负责整个集群的管理和控制

在Master上运行着以下关键进程:

  • kube-apiserver:提供了HTTP Rest接口的关键服务进程,是K8S里所有资源的增删改查等操作的唯一入口,也是集群控制的入口进程
  • kube-controller-manager:K8S里所有资源对象的自动化控制中心,集群内各种资源Controller的核心管理者,针对每一种资源都有相应的Controller,保证其下管理的每个Controller所对应的资源始终处于期望状态
  • kube-scheduler:负责资源调度(Pod调度)的进程,通过API Server的Watch接口监听新建Pod副本信息,并通过调度算法为该Pod选择一个最合适的Node
  • etcd:K8S里的所有资源对象以及状态的数据都被保存在etcd中

2)、Node

Node是K8S集群中的工作负载节点,每个Node都会被Master分配一些工作负载,当某个Node宕机时,其上的工作负载会被Master自动转移到其他节点上

在每个Node上都运行着以下关键进程:

  • kubelet:负责Pod对应的容器的创建、启停等任务,同时与Master密切协作,实现集群管理的基本功能
  • kube-proxy:实现Kubernetes Service的通信与负载均衡机制的重要组件
  • Docker Engine:Docker引擎,负责本机的容器创建和管理工作

在默认情况下Kubelet会向Master注册自己,一旦Node被纳入集群管理范围,kubelet进程就会定时向Master汇报自身的信息(例如机器的CPU和内存情况以及有哪些Pod在运行等),这样Master就可以获知每个Node的资源使用情况,并实现高效均衡的资源调度策略。而某个Node在超过指定时间不上报信息时,会被Master判定为失败,Node的状态被标记为不可用,随后Master会触发工作负载转移的自动流程

2、Pod

每个Pod都有一个根容器的Pause容器,还包含一个或多个紧密相关的用户业务容器

在这里插入图片描述

Pod里的多个业务容器共享Pause容器的IP,共享Pause容器挂接的Volume。在K8S里,一个Pod里的容器与另外主机上的Pod容器能够直接通信

Pod有两种类型:普通的Pod及静态Pod(Static Pod)。后者并没被存放在K8S的etcd存储里,而是被存放在某个具体的Node上的一个具体文件中,并且只在此Node上启动、运行。而普通的Pod一旦被创建,就会被放入etcd中存储,随后会被K8S的Master调度到某个具体的Node上并进行绑定(Binding),随后该Pod被对应的Node上的kubelet进程实例化成一组相关的Docker容器并启动。在默认情况下,当Pod里的某个容器停止时,K8S会自动检测到这个问题并且重新启动这个Pod(重启Pod里的所有容器),如果Pod所在的Node宕机,就会将这个Node上的所有Pod重新调度到其他节点上

在这里插入图片描述

3、K8S创建一个Pod的流程

在这里插入图片描述

1)、用户提交创建Pod的请求,可以通过API Server的REST API,也可用Kubectl命令行工具

2)、API Server处理用户请求,存储Pod数据到etcd

3)、Schedule通过和API Server的watch机制,查看到新的Pod,尝试为Pod绑定Node

4)、过滤主机:调度器用一组规则过滤掉不符合要求的主机,比如Pod指定了所需要的资源,那么就要过滤掉资源不够的主机

5)、主机打分:对第一步筛选出的符合要求的主机进行打分,在主机打分阶段,调度器会考虑一些整体优化策略,比如把一个Replication Controller的副本分布到不同的主机上,使用最低负载的主机等

6)、选择主机:选择打分最高的主机,进行binding操作,结果存储到etcd中

7)、Kubelet根据调度结果执行Pod创建操作: 绑定成功后,会启动container,Scheduler会调用API在数据库etcd中创建一个bound pod对象,描述在一个工作节点上绑定运行的所有Pod信息。运行在每个工作节点上的Kubelet也会定期与etcd同步bound pod信息,一旦发现应该在该工作节点上运行的bound pod对象没有更新,则调用Docker API创建并启动Pod内的容器

在这期间,Control Manager同时会根据K8S的mainfiles文件执行RC Pod的数量来保证指定的Pod副本数。而其他的组件,比如Scheduler负责Pod绑定的调度,从而完成整个Pod的创建

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

K8S的架构及工作原理 的相关文章

  • SpringMVC如何在web.xml中配置DispatcherServlet呢?

    转自 SpringMVC如何在web xml中配置DispatcherServlet呢 下文讲述SpringMVC中对DispatcherServlet进行配置的方法分享 如下所示 实现思路 只有在web xml中Servlet处理类指向D
  • 如何实现审核功能

    如何实现审核功能 开发工具与关键技术 VS C 作者 撰写时间 2019 7 26 如何实现审核的功能呢 首先是实现弹出审核模态框和重置表单 再通过ID获取要审核的数据和使用post获取到通过ID查询的数据 用loadDatatoForm回
  • IEqualityComparer VS System.IEquatable

    类似于IComparer
  • vuejs 原生JS 拖拽事件案例

    原生JS or Vue 事件案例合集 详细 提示 这里可以添加系列文章的所有文章的目录 目录需要自己手动添加 Section 1 单个或多个鼠标拖拽事件的理解 提示 写完文章后 目录可以自动生成 如何生成可参考右边的帮助文档 文章目录 原生
  • SpringMVC的@InitBinder的作用

    一 前言 在SpringMVC中 InitBinder注解用于自定义数据绑定的方法 在使用表单提交数据时 SpringMVC会将请求参数绑定到Java对象中 但是 有些时候请求参数的数据格式可能与Java对象的属性格式不一致 这时就需要使用
  • 初露头角!Walrus入选服贸会“数智影响力”数字化转型创新案例

    9月5日 由北京市通信管理局 工业和信息化部新闻宣传中心联合主办的 企业数字化转型论坛 在2023中国国际服务贸易交易会期间召开 论坛以 数字化引领 高质量发展 主题 旨在探讨信息技术如何与各行业深度融合 构建数字化转型新格局 赋能产业高质
  • 【转载】如何使用VSCode编译IAR

    参考原址 https blog csdn net lczdk article details 114639094 总结 安装IAR For Visual Studio Code插件 使用VSCode打开IAR prj 当前发现最方便的方法是

随机推荐

  • JVM第三讲 JVM从底层原理分析类加载过程

    类加载运行全过程 其中loadClass的类加载过程有如下几步 加载 gt gt 验证 gt gt 准备 gt gt 解析 gt gt 初始化 gt gt 使用 gt gt 卸载 加载 在硬盘上查找并通过IO读入字节码文件 使用到类时才会加
  • # Maven系列 - 覆盖父级pom文件某jar包版本

    Maven系列 覆盖父级pom文件某jar包版本 一般公司都会有统一的父级pom文件 指定一些通用的jar版本 比如fastjson 假如出现漏洞 最近fastjson就出现了漏洞 需要升级fastjson包 具体有哪些方式呢 具体方式 1
  • Centos7:yum安装MySQL5.7后如何设置root密码

    Centos下安装软件的方式很简单 只需要通过yum install xxx命令即可 第一步当然检查是否有mysql的yum源 命令 yum list grep mysql community 主要还是安装开源的社区版 如果没有如图所示的和
  • Subgraph Retrieval Enhanced Model for Multi-hop Knowledge Base Question Answering

    本文是LLM系列的文章 针对 Subgraph Retrieval Enhanced Model for Multi hop Knowledge Base Question Answering 的翻译 用于多跳知识库问答的子图检索增强模型
  • 共享内存在每个进程里的映射地址是不同的

    共享内存可以说是最有用的进程间通信方式 也是最快的IPC形式 两个不同进程A B共享内存的意思是 同一块物理内存被映射到进程A B各自的进程地址空间 进程A可以即时看到进程B对共享内存中数据的更新 反之亦然 由于多个进程共享同一块内存区域
  • Q格式代码配置

    最近准备自己搞实现一遍电机的foc代码 Q格式 TI的dsp的IQmath学习 自己实现的基本的Q格式的配置 brief Q format Conversion date 2020 11 7 author wangchongwei Q fo
  • python环境与模块日常:Anaconda搭配SublimeText3配置环境,安装Anaconda插件自动补全,conda、pip基础指令与镜像代理

    最近重装SublimeText3和Anaconda 然后安装了pyquery包 跑代码 from pyquery import PyQuery as pq 在cmd gt python Anaconda Prompt gt python A
  • Java开发案例:使用JDBC技术来实现QQ登录

    在实际开发中 用户信息是存放在数据库中的 登录时的账号和密码信息也需要去数据库中查询 本节将使用JDBC技术来完善QQ登录案例 1 创建数据表 并添加用户数据 在jdbc数据库中创建数据表tb qquser 并在表中插入3条数据 其执行的S
  • git 的 Debug分支

    Debug分支 在项目的正常开发过程中 之前发布过的版本可能很会出bug 这时就需要停下来现在的开发任务 先去修改bug 完成后再回来继续开发任务 git中stash提供了保存现场的功能 可以把当前工作区 暂存区中的内容不需要提交而保存下来
  • 上架发布应用市场资料准备iOS和Androd

    一 应用市场 App Store 网站 https itunesconnect apple com login 帐号 密码 360手机助手 网站 http open app 360 cn 帐号 密码 安智市场 网站 http dev anz
  • Linux中的叹号命令

    http blog sina com cn s blog 531bb76301013ulf html 整天在shell环境下操作 不积累点快捷输入的小技巧是不行的 最常用的技巧恐怕就是Tab自动补全以及上方向键来回退上几条历史命令了 这些对
  • linux默认系统进程

    http blog chinaunix net uid 7553302 id 64864 html linux启动后 默认有以下系统进程 Init 1 Linux的第一个进程 也是其它所有进程的父进程 events 0 5 处理内核事件守护
  • Python生成器推导式创建元组

    从形式上看 生成器推导式与列表推导式类似 只是生成器推导式使用小括号 列表推 导式直接生成列表对象 生成器推导式生成的不是列表也不是元组 而是一个生成器对象 我们可以通过生成器对象 转化成列表或者元组 也可以使用生成器对象的 next 方法
  • mysql存储引擎性能比较

    前言 今天看到有人面滴滴被问到知不知道mysql的引擎然后说不会被直接告知面试结束 然后想想自己mysql引擎也只是知道那么一两个还说不全 就想说在这里做个总结 凌晨三点半了 在数据库中存的就是一张张有着千丝万缕关系的表 所以表设计的好坏
  • git 合并多个commit(goland)

    用命令合并 commit 多多少少有点麻烦 发现一个更快速的方法 如何利用 goland 快速 合并多个commit 点击 goland 左下角 git 按钮 会显示你的 gitlog 下图是你的 gitlog 按住 ctrl 然后点击你想
  • Linux安装tomcat8详细步骤

    1 下载tomcat http tomcat apache org 我下载的是 apache tomcat 8 0 50 tar gz 2 用root用户登陆Linux 在usr local 下创建tomcat文件夹 mkdir usr l
  • Hill密码的加密与解密

    Hill密码原理 首先随机生成或选取一个密钥矩阵 该矩阵必须是可逆的 过程如下图所示 在加密过程中 先将明文分为三个字母一组 不足的用 X 代替 然后将其转化成数字 如0 A 得到每个字母所对应的数字 再与密钥矩阵相乘 得到的数字转成字母
  • BUCK/BOOST电路原理分析

    Buck变换器 也称降压式变换器 是一种输出电压小于输入电压的单管不隔离直流变换器 图中 Q为开关管 其驱动电压一般为PWM Pulse width modulaTIon脉宽调制 信号 信号周期为Ts 则信号频率为f 1 Ts 导通时间为T
  • python自动化写入word文件

    工具包使用python docx Github页面 https github com python openxml python docx 官网教程 https python docx readthedocs io en latest in
  • K8S的架构及工作原理

    1 Master和Node 1 Master K8S中的Master是集群控制节点 负责整个集群的管理和控制 在Master上运行着以下关键进程 kube apiserver 提供了HTTP Rest接口的关键服务进程 是K8S里所有资源的