第一篇:k8s架构与组件详解

没有那么多花里胡哨,直接进行一个K8s架构与组件的学习。

一、K8s架构

在Master通常上包括 kube-apiserver、etcd 存储、kube-controller-manager、cloud-controller-manager、kube-scheduler 和用于 K8s 服务的 DNS 服务器(插件)。这些对集群做出全局决策(比如调度),以及检测和响应集群事件的组件集合也称为控制平面。

其实K8s官方并没有Master这一说,只是大多数安装工具(kubeadm)或者脚本为了架构更明了会把控制平面中的组件安装到一台机器上即Master机器,并且不会在此机器上运行用户容器。这不是强制性的,所以你也可以对将控制平面实行分布式部署,不过这样的话高可用会是一个不小的挑战。

在Node上组件包括 kubelet 、kube-porxy 以及服务于pod的容器运行时(runtime)。外部storage与registry用于为容器提供存储与镜像仓库服务。

从kubectl开始,我们来看一下K8s的基本工作流程:

1.kubectl 客户端首先将CLI命令转化为RESTful的API调用,然后发送到kube-apiserver。

2.kube-apiserver 在验证这些 API 调用后,将任务元信息并存储到etcd,接着调用 kube-scheduler 开始决策一个用于作业的Node节点。

3.一旦 kube-scheduler 返回一个适合调度的目标节点后,kube-apiserver 就把任务的节点信息存入etcd,并创建任务。

4.此时目标节点中的 kubelet正监听apiserver,当监听到有新任务需要调度到本节点后,kubelet通过本地runtime创建任务容器,执行作业。

5.接着kubelet将任务状态等信息返回给apiserver存储到etcd。

6.这样我们的任务已经在运行了,此时control-manager发挥作用保证任务一直是我们期望的状态。

二、K8s组件介绍
1、控制平面组件
kube-apiserver

API服务器为K8s集群资源操作提供唯一入口,并提供认证、授权、访问控制、API 注册和发现机制。

Kubernetes API 服务器的主要实现是 kube-apiserver。kube-apiserver 设计上考虑了水平伸缩,也就是说,它可通过部署多个实例进行伸缩。你可以运行 kube-apiserver 的多个实例,并在这些实例之间进行流量平衡。

etcd

etcd 是兼具一致性和高可用性的键值数据库,可以作为保存 Kubernetes 所有集群数据的后台数据库(例如 Pod 的数量、状态、命名空间等)、API 对象和服务发现细节。在生产级k8s中etcd通常会以集群的方式存在,安全原因,它只能从 API 服务器访问。

etcd也是k8s生态的关键应用。关于 etcd 可参考 etcd 文档[1]。

kube-scheduler

kube-scheduler 负责监视新创建、未指定运行Node的 Pods,决策出一个让pod运行的节点。

例如,如果应用程序需要 1GB 内存和 2 个 CPU 内核,那么该应用程序的 pod 将被安排在至少具有这些资源的节点上。每次需要调度 pod 时,调度程序都会运行。调度程序必须知道可用的总资源以及分配给每个节点上现有工作负载的资源。

调度决策考虑的因素包括单个 Pod 和 Pod 集合的资源需求、硬件/软件/策略约束、亲和性和反亲和性规范、数据位置、工作负载间的干扰和最后时限。

kube-controller-manager

k8s在后台运行许多不同的控制器进程,当服务配置发生更改时(例如,替换运行 pod 的镜像,或更改配置 yaml 文件中的参数),控制器会发现更改并开始朝着新的期望状态工作。

从逻辑上讲,每个控制器都是一个单独的进程, 但是为了降低复杂性,它们都被编译到同一个可执行文件,并在一个进程中运行。

控制器包括:

•节点控制器(Node Controller): 负责在节点出现故障时进行通知和响应•任务控制器(Job controller): 监测代表一次性任务的 Job 对象,然后创建 Pods 来运行这些任务直至完成•端点控制器(Endpoints Controller): 填充端点(Endpoints)对象(即加入 Service 与 Pod)•服务帐户和令牌控制器(Service Account & Token Controllers): 为新的命名空间创建默认帐户和 API 访问令牌

cloud-controller-manager

云控制器管理器使得你可以将你的集群连接到云提供商的 API 之上, 同时可以将云平台交互组件与本地集群中组件分离。

cloud-controller-manager 仅运行特定于云平台的控制回路。如果我们在自己的环境中运行 Kubernetes,大多数时候非混合云环境是用不到这个组件的。

kube-controller-manager 类似,cloud-controller-manager 将若干逻辑上独立的 控制回路组合到同一个可执行文件中,供你以同一进程的方式运行。你可以对其执行水平扩容(运行不止一个副本)以提升性能或者增强容错能力。

下面的控制器都包含对云平台驱动的依赖:

•节点控制器(Node Controller): 用于在节点终止响应后检查云提供商以确定节点是否已被删除•路由控制器(Route Controller): 用于在底层云基础架构中设置路由•服务控制器(Service Controller): 用于创建、更新和删除云提供商负载均衡器

2.Node中组件

节点组件在每个节点上运行,维护运行的 Pod 并提供 Kubernetes 运行环境。

kubelet

一个在集群中每个node上运行的代理。它保证容器都 运行在 Pod 中。kubelet 定期接收新的或修改过的 pod 规范 PodSpecs(主要通过 kube-apiserver)并确保 pod 及容器健康并以所需状态运行。该组件还向 kube-apiserver 报告运行它的主机的健康状况。

kubelet 不会管理不是由 Kubernetes 创建的容器。

kube-proxy

kube-proxy[2] 是集群中每个节点上运行的网络代理, 实现 Kubernetes 服务(Service) 概念的一部分。用于处理单个主机子网划分并向外部世界公开服务。它跨集群中的各种隔离网络将请求转发到正确的 pod/容器。

kube-proxy 维护节点上的网络规则。这些网络规则允许从集群内部或外部的网络会话与 Pod 进行网络通信。

如果操作系统提供了数据包过滤层并可用的话,kube-proxy 会通过它来实现网络规则。否则, kube-proxy 仅转发流量本身。

容器运行时(Container Runtime)

容器运行时负责创建容器运行环境。

Kubernetes 支持多个容器运行时: Docker(即将被废弃)、containerd、CRI-O以及任何实现 Kubernetes CRI (容器运行环境接口)[3]的runtime。

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

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

相关文章

Leetcode—3001. 捕获黑皇后需要的最少移动次数【中等】

2024每日刷题(201) Leetcode—3001. 捕获黑皇后需要的最少移动次数 C实现代码 class Solution { public:int minMovesToCaptureTheQueen(int a, int b, int c, int d, int e, int f) {// 车跟皇后在同一行if(a e) {// 象是否挡在车和皇后中间return (…

visual studio2019开发过程中遇到的问题和有帮助的插件

文章目录 1. 注释中有中文导致报错2. 打开一个vs2013或者vs2010等老的项目兼容性3. LNK2019 unresolved external symbol main referenced in function __tmainCRTStartup4. image watch插件/扩展使用 1. 注释中有中文导致报错 C4819 The file contains a character that cann…

如何在PortainerCE中创建NextCloud网盘并随时随地管理文件

文章目录 前言1. 在PortainerCE中创建NextCloud容器2. 公网远程访问本地NextCloud容器2.1 内网穿透工具安装3.2 创建远程连接公网地址 3. 固定NextCloud私有云盘公网地址 前言 大家好!今天我们要来聊聊如何在本地使用Portainer CE的可视化界面创建一个属于你自己的…

各种常见生信格式文件的随机抽样

样本检验、随机生成数据、模拟用等,都需要从现有测序数据中随机抽样出一小部分数据来,按照自己需求。 0,最经典的方式: 使用awk等,只要了解各种数据格式具体的行列组成(一般是headerrecord)&a…

代码随想录算法训练营day31|56合并区间,738单调递增的数字,968监控二叉树

星海横流,岁月成碑。转眼之间,算法训练营的进程已经过半,而我也在日复一日的坚持中,找寻到了对算法的热爱。 56 合并区间 这题和前面的射爆气球等题目比较像,难度也不大,都是先按第一个元素排序后&#x…

基于VTX356语音识别合成芯片的智能语音交互闹钟方案

一、方案概述 本方案旨在利用VTX356语音识别合成芯片强大的语音处理能力,结合蓝牙功能、APP或小程序,打造一款功能全面且智能化程度高的闹钟产品。除了基本的时钟显示和闹钟提醒功能外,还拥有正计时、倒计时、日程安排、重要日提醒以及番茄钟…

fpga vga转hdmi 8位转十位 encoder模块

case语句写法 理解 //为了完成 RGB 图像数据 8b 转 10b 的编码 //此为xilinx 官方提供的编码模块代码 // TMDS 通过逻辑算法将 8 位字符数据通过编码转换为 10 位字符数据,前 8 位数据由原始信号经运算后 // 获得,第 9 位表示运算的方式,1 表…

北斗系统增强技术和应用

原创 风一样的航哥 航哥小站 2024年12月05日 08:00 江苏 一、北斗系统增强技术的定义 北斗系统增强技术是指通过一系列技术手段,提高北斗卫星导航系统的定位精度、可靠性和服务范围的技术。它主要包括地基增强技术、星基增强技术和低轨卫星导航增强技术等。 二、北…

大语言模型应用开发框架LangChain

大语言模型应用开发框架LangChain 一、LangChain项目介绍1、简介2、LangChain的价值3、实战演练 二、LangChain提示词大语言模型应用1、简介1.1、提示词模板化的优点1.2、提示词模板LLM 的应用1.3、Prompt 2、应用实战2.1、PromptTemplate LLM2.2、PromptTemplate LLM Outpu…

【C++|Linux|计网】构建Boost站内搜索引擎的技术实践与探索

目录 1、项目的相关背景 2.搜索引擎的相关宏观原理 3.搜索引擎技术栈和项目环境 4.正排索引vs倒排索引-搜索引擎具体原理 5.编写数据去标签与数据清洗的模块 Parser 5.1.去标签 目标: 5.2.代码的整体框架: EnumFile函数的实现: Enu…

产品批量分类设置——未来之窗行业应用跨平台架构

一、批量统计分类 提高效率 节省时间:当商品数量庞大时,手动逐个修改商品分类是一项极其耗时的任务。例如,一个电商平台有数千种商品,如果手动操作,可能需要花费数天甚至数周的时间来完成分类转移。而批量设置功能可以…

Linux 系统上配置 Go 环境

在 Linux 系统上配置 Go 环境比较简单,下面是详细的步骤,适用于大多数 Linux 发行版(如 Ubuntu、CentOS、Debian 等): ### 1. **更新软件包列表** 在安装 Go 之前,首先确保您的软件包列表是最新的。使用以下…

异步FIFO的实现

异步FIFO是verilog中常见的设计,通常用于不同时钟域下的数据同步。 在实现 FIFO 时,无论是同步 FIFO 还是异步 FIFO ,通常会通过双口 RAM ( Dual Port RAM )并添加一些必要的逻辑来实现。双口 RAM的设计如下&#xff1…

专题三:穷举vs暴搜vs深搜vs回溯vs剪枝

> 作者:დ旧言~ > 座右铭:松树千年终是朽,槿花一日自为荣。 > 目标:了解什么是穷举vs暴搜vs深搜vs回溯vs剪枝,并且掌握其算法。 > 毒鸡汤:有些事情,总是不明白,所以我不…

停更期李子柒品牌线上破亿,电商内容营销策略怎样重塑升级?

11月13日,李子柒在接受新华网记者的专访时被问到了“未来的商业化考虑”。她表示:“肯定会有这方面的考虑,只是目前还没有特别明确的规划。我就想继续做我自己喜欢的事情,如果这件事情能够被认同,而且它是有价值的&…

2020年国赛高教杯数学建模E题校园供水系统智能管理解题全过程文档及程序

2020年国赛高教杯数学建模 E题 校园供水系统智能管理 原题再现 校园供水系统是校园公用设施的重要组成部分,学校为了保障校园供水系统的正常运行需要投入大量的人力、物力和财力。随着科学技术的发展,校园内已经普遍使用了智能水表,从而可以…

【SpringBoot】使用IDEA创建SpringBoot项目

1、使用SpringBoot脚手架创建 我们使用SpringBoot的脚手架Spring Initializr创建,如图所示: 2、选择SpringBoot版本 最开始做项目时候,组长说创建一个 springboot 2.5.4 的项目,mysql使用 5.6.X ,maven使用是3.6.X…

MFC实现全屏功能

之前全屏都是参考: MFC单文档(SDI)全屏程序的实现 主要思路就是将各种菜单工具栏隐藏恢复。 随着MFC的升级,MFC框架本身就具备了全屏的功能。 微软有一个全屏实现类: CFullScreenImpl Class managing full-screen mod…

灰狼算法与蚁群算法的结合:一种新颖的优化方法

✅作者简介:2022年博客新星 第八。热爱国学的Java后端开发者,修心和技术同步精进。 🍎个人主页:Java Fans的博客 🍊个人信条:不迁怒,不贰过。小知识,大智慧。 💞当前专栏…

Mybatis要点总结

MyBatis 是一款优秀的 持久层 框架 ,用于简化 JDBC 的开发。 Java Data Base Connectivity(Java语言连接数据库) 数据库连接池 数据库连接池的好处: 资源重用 提升系统响应速度 避免数据库连接遗漏 常见的数据库连接池&…