为什么把k8s比做操作系统:kubernetes与os的架构对比

news2024/12/16 13:33:49

你还在背八大件吗?不如把k8s的架构和os一起看,你会发现一些超有趣的事情!本文旨在将k8s的架构和os做个对比,帮助读者理解为什么k8s要这么设计。

kubernetes架构

kubernetes架构中由master节点和minion节点组成,master节点也叫控制平面(Controll Plane),为毛要叫控制平面这么拗脑的东西,这是个翻译问题(就像container runtime非得翻译成容器运行时),大家理解成master节点就可以了。master节点由四个组件组成,分别是APIServer、etcd、controller manager(控制器管理器)、scheduler(调度器)。

pod vs 进程:

pod是k8s里的最小单位,由一组容器构成,pod里共享网络命名空间和存储卷。可以理解为pod就是一个进程(组)。容器本身在宿主机上的表现形式就是一个进程。将pod理解为进程之后,后面的架构就好理解了。

那么我们再看创建pod的过程,跟创建进程其实是差不多的。父进程通过fork函数创建新进程,fork本质是占用一段占用一段虚拟地址空间,然后放入代码段和数据段,并分配新的pid。虚拟地址空间就相当于申请到了内存,有了pid就可以分配到CPU占用时间。

再看我们创建pod时,通过拉取镜像来启动容器,镜像具有只读、共享的特点,这也是利用了写时复制、读时共享的机制:在需要对镜像提供的文件进行修改时,该文件会从镜像的文件系统中被复制到容器的可写层的文件系统中进行修改,而镜像中的文件不会改变;同时按需分配空间,而非提前分配,即当一个pod被创建出来后,才会分配空间。fork函数在创建进程时也是一样的:父进程的虚拟地址映射着物理内存的实际的物理地址,clone()的时候,并不是在物理地址中直接再复制一份和父进程一样的物理内存块,而是子进程的虚拟地址也直接映射到同一物理内存块中;当操作这个物理内存块时(比如修改变量的值),再复制该部分的实际物理内存到子进程中,并不是全部复制。

APIServer vs OS系统调用:

APIServer是用户请求及其他系统组件与集群交互的唯一入口。对外,所有资源的创建、更新和删除都需要通过调用API Server 的API 接口来完成。对内,API Server 是各个模块之间数据交互的通信枢纽,提供了etcd 的封装接口API,这些API 能够让其他组件监听到集群中资源对象的增、删、改的变化。

举个简单的例子:

  • 此时我想通过yaml文件部署两个pod,那么我在客户端运行命令:kubectl apply -f test.yaml,这时这个请求先跑到APIServer上,APIServer首先这个yaml文件存到etcd,然后根据yaml里对pod的规约(spec),告诉scheduler(调度器)我的pod需要什么样的资源、什么样的node,scheduler再去把pod分配到满足需求的node上。

在这个过程中,客户端发起部署两个pod的请求,其实就等于在用户模式下创建一个程序。OS收到这个请求之后,对内核发起系统调用,用户模式切换为内核模式,调用进程调度器,根据进程的要求,分配地址空间、CPU占用时间等资源给进程。

scheduler vs 进程调度器

操作系统中的进程调度器在干嘛?它主要做的事情就是分配逻辑CPU的时间片,逻辑CPU的时间片等同于CPU资源,这就像scheduler在分配node以及其上的vCPU给pod使用。scheduler在分配node给pod时,有一系列的规则,比如亲和性、容忍度设置等,进程调度器里也有,比如nice函数控制进程分配的优先级、CPU姻亲绑定等。

controller manager vs 操作系统中OS的函数库

k8s有30多个controller manager,比如大家耳熟能详的deployment controller manager、service controller manager、endpoint controller manager,大多数控制器的工作模式雷同,都是通过API Server 监听其相应的资源对象,根据对象的状态来决定接下来的动作,使其达到spec的状态。

kubelet vs 守护进程

kubelet 就相当于运行在每个节点上的负责启动容器的重要的守护进程。在启动时,Kubelet进程加载配置参数,向API Server 处创建一个Node 对象来注册自身的节点信息,例如操作系统、Kernel 版本、IP 地址、总容量(Capacity)和可供分配的容量(Allocatable Capacity)等。然后kubelet 须定时(默认值是每10s 通过NodeStatusUpdateFrequency 设置参数)向API Server 汇报自身情况,例如磁盘空间是否用满、CPU 和Memory 是否有压力,自身服务是否Ready 等,这些信息都将被调度器使用。

kubeProxy vs 内核网络

kube-proxy 在每个节点上都运行,它也从API Server 监听Service 和Endpoint对象的变化,并根据Endpoint 对象的信息设置Service 到后端Pod 的路由,维护网络规则,执行TCP、UDP 和SCTP 流转发。它本质上就是调用内核的网络,因为它是以iptables模式作数据转发的。

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

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

相关文章

c++ deque 的使用

目录 1. deque 的介绍 2. deque 底层原理 3. deque 的迭代器 4. deque 的接口使用 5. deque 和 vector,list 的比较 1. deque 的介绍 下面是 deque 的介绍,来自于:deque - C Reference (cplusplus.com) 的翻译,您可以不用…

MobPush数智化推送,精准定位万圣节狂欢年轻一族

随着中秋十一黄金周的结束,2023年最后一个法定节假日也一去不复返,但是别急,今年还有另一场不放假的狂欢节日——万圣节,万圣节作为西方国家第四季度最为重要的营销节日之一,在国内年轻人群体中同样具有较大的影响力和…

字节流和处理流的对象反序列化问题

细节: 读写要保持一致 序列对象时,默认将里面的所有属性都进行序列化,但除了static或transient修饰的成员 要求序列化或反序列化对象,需要实现Serializable 序列化对象时,要求里面的属性也要实现序列化接口 序列化…

java-- 静态数组

1.静态初始化数组 定义数组的时候直接给数组赋值。 2.静态初始化数组的格式: 注意: 1."数据类型[] 数组名"也可以写成"数据类型 数组名[]"。 2.什么类型的数组只能存放什么类型的数据 3.数组在计算机中的基本原理 当计算机遇到…

【优选算法精品】前缀和

文章目录 一、前缀和前缀和问题一维前缀和模板二维前缀和模板 细节处理题目1思路细节处理: 题目2思路 题目3题目4题目5题目6总结 一、前缀和 前缀和问题 前缀和用来快速解决某一段连续区间的和。 时间复杂度O(1) 注意:不要背模板,不要背模…

死锁Deadlock

定义 死锁是指两个或多个线程互相持有对方所需的资源,从而导致它们无法继续执行的情况。如下图所示,现有两个线程,分别是线程A及线程B,线程A持有锁A,线程B持有锁B。此时线程A想获取锁B,但锁B需等到线程B的结…

计算机网络之数据链路层(全)

[复习提示] 王道:本章是历年考试中考查的重点。要求在了解数据链路层基本概念和功能的基础上,重点掌握滑动窗口机制、三种可靠传输协议、各种MAC协议、HDLC协议和PPP协议,特别是CSMA/CD协议和以太网帧格式,以及局域网的争用期和最…

C++学习笔记之三(标准库、标准模板库、vector类)

C 1、C标准库2、C标准模板库2.1、vector2.1.1、vector与array2.1.2、vector与函数对象2.1.3、vector与迭代器 1、C标准库 C C C标准库指的是标准程序库( S t a n d a r d Standard Standard L i b a r a y Libaray Libaray),它定义了十个大类,其中包括…

只有向内生长,才能向外绽放——中国人民大学与加拿大女王大学金融硕士

这个时代,产业迭代、竞争愈发激烈、世界局势变幻等这些都是我们无法控制的事。我们能做到的是不断地努力提升自己,成为所在领域的佼佼者。人的成长之路,就像是一场循序渐进的蜕变。不断努力是让自己逐步增值的过程。只有向内生长,…

世界经济论坛:ChatGPT等生成式AI,对全球23%岗位产生巨大影响

世界经济论坛与全球最大上市咨询公司之一埃森哲合作,联合发布了《未来工作:大语言模型与就业》白皮书。 世界经济论坛表示,随着ChatGPT、Midjourney、Github Copilot等生成式AI的飞速发展,对全球经济和劳动市场产生巨大影响。未来…

手写Vue渲染器render函数

使用js对象来描述UI更加的灵活。“这种对象”在vue框架中被称为虚拟DOM,渲染函数内部可以创建虚拟DOM,然后vue.js可以将其内容进行渲染。 1.渲染器的介绍 渲染器的作用就是把虚拟DOM渲染为真实DOM 思考下,我们有一个虚拟 DOM,如…

js数组的常用方法

目录 1. 添加/删除元素 2. 查找和遍历 3. 转换 4. 排序 5. 其他 JavaScript中的数组是一种用于存储多个值的对象。数组提供了一系列的方法来进行操作,包括添加、删除、遍历和搜索等。下面列举了一些JavaScript数组的常用方法: 1. 添加/删除元素 pu…

C指针 --- 进阶

目录 1. 字符指针 1.1. 一般使用 1.2. 另一种使用 2. 指针数组 3. 数组指针 3.1. 数组指针 3.2. 数组名和&数组名 3.3. 数组指针的用处 1. 传递一个数组 2. 传递数组首元素的地址 3. 数组指针处理一维数组 4. 数组指针处理二维数组 4. 数组传参和指针传参 4.1…

PHP危险函数

PHP危险函数 文章目录 PHP危险函数PHP 代码执行函数eval 语句assert()语句preg_replace()函数正则表达式里修饰符 回调函数call_user_func()函数array_map()函数 OS命令执行函数system()函数exec()函数shell_exec()函数passthru() 函数popen 函数反引号 实列 通过构造函数可以执…

杂牌行车记录仪特殊AVI结构恢复案例

最近遇到一个杂牌的行车记录仪需要恢复数据,其使用AVI格式,但是在扫描恢复的过程中却发现厂家对其AVI结构进行了“魔改”致程序无法正常识别 故障存储:16G SD卡 fat32文件系统 故障现象: 16G的SD卡,在发生事故后客户尝试自行接到手机上读…

小红书素人铺量推广费用是多少?

小红书作为一个拥有庞大用户群体的社交电商平台,在品牌营销和产品推广方面具有巨大的潜力。其中,素人铺量推广作为一种常见的推广方式,被越来越多的品牌和商家所采用。但是,对于很多刚刚接触小红书推广的人来说,素人铺…

二维码智慧门牌管理系统升级解决方案:一级属性 二级属性

文章目录 前言一、什么是智慧门牌管理系统?二、一级属性 vs. 二级属性三、升级中的实践意义 前言 在本文中,我们将深入探讨二维码智慧门牌管理系统的升级解决方案,特别聚焦于一级属性和二级属性的关键概念。我们将详细解释这些概念&#xff…

如何做好建筑翻译呢

近年来,随着跨国工程项目增加,建筑翻译也越来越受到重视。尤其是建筑图纸翻译在工程设计、规划和施工等方面都具有重要意义。那么,如何做好建筑翻译呢,建筑工程翻译哪个比较正规? 在建筑行业日新月异的发展中&#xff…

项目进度延误,危机管理5大注意事项

项目延误危机管理的重要性是不可忽视的。项目延误可能会导致资源浪费、成本增加、客户不满、信誉受损等一系列问题,严重影响项目的成功与效益。因此,有效地进行项目延误危机管理是至关重要的,一般主要是从以下5个方面进行管理: 1、…

python yield用法

用法和ts中的差不多 def test():i[1,2,3,4]for x in i:yield x for j in test():print(j) 使用的时候就会返回一次值 实际使用中可以这样使用,例如我把df按照半小时进行分割,然后分别取处理每半小时的数据 def test():final_df[raw_timestamp] pd.t…