k8s的整体架构及其内部工作原理,以及创建一个pod的原理

一、k8s整体架构

二、k8s的作用,为什么要用k8s,以及服务器的发展历程

1、服务器:缺点容易浪费资源,且每个服务器都要装系统,且扩展迁移成本高
2、虚拟机很好地解决了服务器浪费资源的缺点,且部署快,成本低但每台虚拟机需要安装系统,从而对内存等资源造成了一定的浪费

3、容器恰好解决了虚拟机装系统浪费资源的缺点,也能很好地实现隔离,且一台机器上可以部署好多容器,但当机器出现宕机时,一台机器上的所有容器都会停止运行,不能自我修复

因此需要一个资源管理,资源编排的工具即k8s应用而生

三、k8s基本概念

1、pod

Pod本身是豌豆荚,为k8s的最小调度单元,里面会包含一个或多个容器(Container),Pod内的容器共享存储及网络,可通过localhost通信。

2、Deployment


pod 上层的一个抽象,它可以定义一组 Pod 的副本数目、以及这个 Pod 的版本。一般用 Deployment 来做应用的真正的管理,而 Pod 是组成 Deployment 最小的单元

  • 定义一组Pod的副本数量,版本等;
  • 通过控制器维护Pod的数目;
  • 自动恢复失败的Pod;
  • 通过控制器以指定的策略控制版本

3、Service


Pod是不稳定的,IP会发生变化,因此需要一层抽象来屏蔽这种变化,Service可以实现,其主要功能为:

  • 提供访问一个或者多个Pod实例稳定的访问地址;
  • 支持多种访问方式ClusterIP(对集群内部访问)NodePort(对集群外部访问)LoadBalancer(集群外部负载均衡)。

4、Volume


Volume表示存储卷,Pod访问文件系统的抽象层,具体的后端存储可以是本地存储、NFS网络存储、云存储以及分布式存储等。

  • 声明在Pod中容器可以访问的文件系统;
  • 可以被挂载在Pod中一个或多个容器的指定路径下;
  • 支持多种后端储存

5、NameSpace


用以资源的逻辑隔离,上述小节均属于资源,不同ns下可以同名,相同ns下需唯一。

  • 一个集群内部的逻辑隔离机制(鉴权、资源等);
  • 每个资源都属于一个Namespace;
  • 同一个Namespace中资源命名唯一;
  • 不同Namespace中资源可重名;

6、Master组件

kube-apiserver:Kubernetes API,集群统一入口,各组件协调者,以RESTful API提供接口服务,所有对象的资源的增删改查和监听操作都交给APIServer处理后在提交给Etcd存储。

1)提供了集群管理的REST API接口(包括认证授权、数据校验以及集群状态变更);
2)提供其他模块之间的数据交互和通信的枢纽(其他模块通过API Server查询或修改数据,只有API Server才直接操作etcd);
3)是资源配额控制的入口;

controller-manager:是 Kubernetes 的大脑,它通过 apiserver 监控整个集群的状态,并确保集群处于预期的工作状态。

scheduler:scheduler 负责分配调度 Pod 到集群内的节点上,它监听 kube-apiserver,查询还未分配 Node 的 Pod,然后根据调度策略为这些 Pod 分配节点(更新 Pod 的 NodeName 字段)

工作原理:

kube-scheduler 调度分为两个阶段,predicate 和 priority
1)predicate:过滤不符合条件的节点
2)priority:优先级排序,选择优先级最高的节点

etcd:Etcd 是 CoreOS 基于 Raft 开发的分布式 key-value 存储,可用于服务发现、共享配置以及一致性保障(如数据库选主、分布式锁等)。etcd作为一个受到ZooKeeper与doozer启发而催生的项目,除了拥有与之类似的功能外,更专注于以下四点:

1)简单:基于HTTP+JSON的API让你用curl就可以轻松使用。

2)安全:可选SSL客户认证机制。

3)快速:每个实例每秒支持一千次写操作。

4)可信:使用Raft算法充分实现了分布式。

主要功能:

1)基本的 key-value 存储
2)监听机制
3)key 的过期及续约机制,用于监控和服务发现
4)原子性操作(CAS 和 CAD),用于分布式锁和 leader 选举

7、Node组件

kubelet:kubelet是Master在Node节点上的Agent,管理本机运行容器的生命周期,比如创建容器、Pod挂载数据卷、下载Secret、获取容器节点状态工作。kubelet将每个Pod转换成一组容器。

每个节点上都运行一个 kubelet 服务进程,默认监听 10250 端口,接收并执行 master 发来的指令,管理 Pod 及 Pod 中的容器。每个 kubelet 进程会在 API Server 上注册节点自身信息,定期向 master 节点汇报节点的资源使用情况,并通过 cAdvisor 监控节点和容器的资源。

kube-proxy:在node节点上实现Pod网络代理,维护网络规则和四层负载均衡工作。

每台机器上都运行一个 kube-proxy 服务,它监听 API server 中 service 和 endpoint 的变化情况,并通过 iptables 等来为服务配置负载均衡(仅支持 TCP 和 UDP)。

kube-proxy 可以直接运行在物理机上,也可以以 static pod 或者 daemonset 的方式运行。

docker或rocket:容器引擎,运行容器。

8、K8S创建一个Pod的流程

1、用户通过kubectl向api-server发起创建pod请求。

2、apiserver通过对应的kubeconfig进行认证,认证通过后将yaml中的po信息存到etcd。

3、Controller-Manager通过apiserver的watch接口发现了pod信息的更新,执行该资源所依赖的拓扑结构整合,整合后将对应的信息交给apiserver,apiserver写到etcd,此时pod已经可以被调度。4、Scheduler同样通过apiserver的watch接口更新到pod可以被调度,通过算法给pod分配节点,并将pod和对应节点绑定的信息交给apiserver,apiserver写到etcd,然后将pod交给kubelet。

5、kubelet收到pod后,调用CNI接口给pod创建pod网络,调用CRI接口去启动容器,调用CSI进行存储卷的挂载。

6、网络,容器,存储创建完成后pod创建完成,等业务进程启动后,pod运行成功。

流程图如下:

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

量化研究---A股赚钱日历,上证指数为例,提供源代码

今天把A股的全部数据导出做了一些赚钱日历分析,看那个月赚钱容易,那个月赚钱困难 导入需要的库 import pandas as pdimport matplotlib.pyplot as pltimport quantstats as qsfrom trader_tool.index_data import index_datafrom trader_tool import j…

IT行业的革新力量:技术进步与未来展望

在当今时代,信息技术(IT)行业无疑是全球经济的重要推动力之一。随着数字化转型的不断深入,IT行业的边界正在扩大,它不仅包括传统的软硬件开发、网络建设和运维服务,还涵盖了云计算、大数据、人工智能&#…

Http常见问题

这里写自定义目录标题 1. 常见状态码2. HTTP3. HTTP2 1. 常见状态码 2 xxx:成功 4 xxx:一一般是前端错误 5 xxx:一般是后端错误 2. HTTP 记住二点: 无连接:每次连接只处理一个请求,服务器处理完客户的…

LeetCode 126题:单词接龙 II

❤️❤️❤️ 欢迎来到我的博客。希望您能在这里找到既有价值又有趣的内容,和我一起探索、学习和成长。欢迎评论区畅所欲言、享受知识的乐趣! 推荐:数据分析螺丝钉的首页 格物致知 终身学习 期待您的关注 导航: LeetCode解锁100…

系统思考—团队学习

结束昨日435期JSTO“探索学习的新视界:硬核工具分享”,有伙伴分享的提升效率的AI工具,也有自我发现团队问题解决的工具,伙伴们都在各自的领域实践、吸收、反馈、复盘。这次的团队学习不仅是知识的传递,更是一场脑力激荡…

详解pytorch中循环神经网络(RNN、LSTM、GRU)的维度

详解pytorch中循环神经网络(RNN、LSTM、GRU)的维度 RNNtorch.nn.rnn详解RNN输入输出维度 LSTMtorch.nn.LSTM详解LSTM输入输出维度 GRUtorch.nn.GRU详解GRU输入输出维度 三种RNN的示例 首先如果你对RNN、LSTM、GRU不太熟悉,可点击查看。 RNN …

2万字实操入门案例之在Springboot框架下用Mybatis简化JDBC开发实现基础的操作MySQL之预编译SQL主键返回增删改查

环境准备 准备数据库表 use mybatis;-- 部门管理 create table dept(id int unsigned primary key auto_increment comment 主键ID,name varchar(10) not null unique comment 部门名称,create_time datetime not null comment 创建时间,update_time datetime not null comme…

做一个犬榜小程序,警示社会。

2024-5-15新闻:流浪狗咬死3岁男童。 相关链接:3岁男童被恶犬咬伤离世 母亲发声 急寻狗主讨公道_中华网 恶狗的主人终于付出代价 链接:这回,恶狗的主人终于付出代价 - 知乎 7岁女童家门口玩耍被恶犬咬伤头面部,多处撕…

【SQL每日一练】获取PADS公司用户名称和各职业总数并根据格式输出

文章目录 题目一、解析二、题解1.MySQL 题目 生成以下两个结果集: 1、查询 OCCUPATIONS 表中所有名字,紧跟每个职业的第一个字母作为括号(即:括在括号中),并按名字顺序排序。例如:AnActorName…

OpenCV-android-sdk配置及使用(NDK)

opencv官网下载Android版Releases - OpenCV 下载好OpenCV-android-sdk并解压好,然后新建一个jni文件夹测试,测试项目目录结构如下: ├── jni │ ├── Android.mk │ ├── Application.mk │ └── test.cpp Application.mk: APP_STL := c++_static APP_CPP…

Cow Exhibition G的来龙去脉

[USACO03FALL] Cow Exhibition G - 洛谷 曲折经过 爆搜 一开始没什么好的想法&#xff0c;就针对每头奶牛去or不去进行了爆搜。 #include <cstdio> #include <algorithm> using namespace std;#define maxn 405 int iq[maxn], eq[maxn]; int ans; int n;void d…

Stm32串口搭配DMA实现自定义printf、scanf

前言:本文仅供学习参考使用&#xff0c;主要目的是让大家快速使用串口调试&#xff0c;文章所提及的GCC适用于Clion&#xff0c;Vscode等第三方编辑器的用户。作者有时间会继续更新^_^ 一、GCC环境 1、标准库 (1)、使用方法 在主函数while(1)初始化中&#xff0c;添加Seria…

【复试分数线】综合性985历年分数线汇总(第四弹)

国家线和34所自划线 可以看作是考研上岸最最最基础的门槛。真正决定你能不能进入复试的还要看院线&#xff08;复试分数线&#xff09;&#xff01;今天我将分析考信号的除C9、工科类985的其他7所985近三年复试分数线&#xff08;不包括2024&#xff09;&#xff0c;大家可以参…

Web前端开发 - 4 - CSS3动画

CSS3动画 一、 设计2D变换二、 设计3D变换三、 设计过渡动画四、设计帧动画 一、 设计2D变换 transform : none | <transform-function> /* <transform-function> 设置变换函数&#xff0c;可以是一个或多个变换函数列表。函数包括: martrix(x缩放,x倾斜,y倾斜,y…

玩转Matlab-Simscape(初级)-01-从一个简单模型开始学习之旅

** 玩转Matlab-Simscape&#xff08;初级&#xff09;- 01 - 从一个简单模型开始学习之旅 ** 目录 玩转Matlab-Simscape&#xff08;初级&#xff09;- 01 - 从一个简单模型开始学习之旅 前言一、从模板开始建模二、建模一个简单的连杆2.1 建模2.2 生成子系统 总结 前言 在产…

如何在 Windows 11/10 中恢复已删除的分区

在将重要数据存储在计算机上之前&#xff0c;许多用户会创建分区以更好地组织和管理他们的文件。此分区可以在内部硬盘驱动器或外部存储设备上创建。但是&#xff0c;有时可能会意外删除分区。如果发生这种情况&#xff0c;您可能想知道是否可以在不丢失任何信息的情况下恢复已…

适用于 Windows 8/10/11 的 10 大 PC 迁移工具:电脑克隆迁移软件

当您发现自己拥有一台新的 PC 或笔记本电脑时&#xff0c;PC 迁移变得至关重要。将数据从旧计算机传输到新计算机的过程似乎令人生畏&#xff0c;尤其是如果您是第一次这样做。迁移过程中数据丢失的潜在风险加剧了焦虑。为确保文件和系统设置的无缝无忧传输&#xff0c;使用专为…

初识C语言——第二十天

do while ()循环 do 循环语句; while(表达式); 句式结构&#xff1a; 执行过程&#xff1a; do while循环的特点&#xff1a; 代码练习&#xff1a; 二分法算法&#xff1a; int main() {int arr[] { 0,1,2,3,4,5,6,7,8,9};int k 7;//查找数字7&#xff0c;在arr这个数组…

prompt工程策略(三:使用 LLM 防护围栏创建系统提示)

原文&#xff1a;我是如何赢得GPT-4提示工程大赛冠军的 原文的原文&#xff1a; How I Won Singapore’s GPT-4 Prompt Engineering Competition &#xff01;&#xff01;本内容仅适用于具有 System Prompt&#xff08;系统提示&#xff09;功能的 LLM。具有这一功能的最著名 …

Python sort() 和 sorted() 的区别应用实例详解

大家好&#xff0c;今天针对 Python 中 sort() 和 sorted() 之间的区别&#xff0c;来一个实例详细解读。sort — 顾名思义就是排序的意思&#xff0c;它可以接收的对象为可迭代的数据类型。今天以列表为例子演示两者的不同点、相同点&#xff0c;以及其中一些常用的高级参数使…