k8s资源介绍

Kubernetes架构图

Kubernetes系统用于管理分布式节点集群中的微服务或容器化应用程序,并且其提供了零停机时间部署、自动回滚、缩放和容器的自愈(其中包括自动配置、自动重启、自动复制的高弹性基础设施,以及容器的自动缩放等)等功能。

Kubernetes系统最重要的设计因素之一是能够横向扩展,即调整应用程序的副本数以提高可用性。设计一套大型系统,且保证其运行时健壮、可扩展、可移植和非常具有挑战性,尤其是在系统复杂度增加时,系统的体系结构会直接影响其运行方式、对环境的依赖程度及相关组件的耦合程度。

Kubernetes的系统架构设计与Borg的系统架构设计理念非常相似,如Scheduler调度器、Pod资源对象管理等。Kubernetes总架构图如图所示。

图片

Kubernetes系统架构遵循客户端/服务端(C/S)架构,系统架构分为Master和Node两部分,Master作为服务端,Node作为客户端。Kubernetes系统具有多个Master服务端,可以实现高可用。在默认的情况下,一个Master服务端即可完成所有工作。

Master服务端也被称为主控节点,它在集群中主要负责如下任务。

  1. \1. 集群的“大脑”,负责管理所有节点(Node)。
  2. \2. 负责调度Pod在哪些节点上运行。
  3. \3. 负责控制集群运行过程中的所有状态。

Node客户端也被称为工作节点,它在集群中主要负责如下任务。

  1. \1. 负责管理所有容器(Container)。
  2. \2. 负责监控/上报所有Pod的运行状态。

Master服务端(主控节点)主要负责管理和控制整个Kubernetes集群,对集群做出全局性决策,相当于整个集群的“大脑”。集群所执行的所有控制命令都由Master服务端接收并处理。Master服务端主要包含如下组件。

  • • kube-apiserver组件:集群的HTTP REST API接口,是集群控制的入口。
  • • kube-controller-manager组件:集群中所有资源对象的自动化控制中心。
  • • kube-scheduler组件:集群中Pod资源对象的调度服务。

Node客户端(工作节点)是Kubernetes集群中的工作节点,Node节点上的工作由Master服务端进行分配,比如当某个Node节点宕机时,Master节点会将其上面的工作转移到其他Node节点上。Node节点主要包含如下组件。

  • • kubelet组件:负责管理节点上容器的创建、删除、启停等任务,与Master节点进行通信。
  • • kube-proxy组件:负责Kubernetes服务的通信及负载均衡服务。
  • • container组件:负责容器的基础管理服务,接收kubelet组件的指令。

下面让我们深入了解每个节点上运行的组件。

Kubernetes各组件的功能

1. kubectl

kubectl是Kubernetes官方提供的命令行工具(CLI),用户可以通过kubectl以命令行交互的方式对Kubernetes API Server进行操作,通信协议使用HTTP/JSON。

kubectl发送相应的HTTP请求,请求由Kubernetes API Server接收、处理并将结果反馈给kubectl。kubectl接收到响应并展示结果。至此,kubectl与kube-apiserver的一次请求周期结束。

2. client-go

kubectl是通过命令行交互的方式与Kubernetes API Server进行交互的,Kubernetes还提供了通过编程的方式与Kubernetes API Server进行通信。client-go是从Kubernetes的代码中单独抽离出来的包,并作为官方提供的Go语言的客户端发挥作用。client-go简单、易用,Kubernetes系统的其他组件与Kubernetes API Server通信的方式也基于client-go实现。

在大部分基于Kubernetes做二次开发的程序中,建议通过client-go来实现与Kubernetes API Server的交互过程。这是因为client-go在Kubernetes系统上做了大量的优化,Kubernetes核心组件(如kube-scheduler、kube-controller-manager等)都通过client-go与Kubernetes API Server进行交互。

提示:熟练使用并掌握client-go是每个Kubernetes开发者必备的技能。

3. kube-apiserver

kube-apiserver组件,也被称为Kubernetes API Server。它负责将Kubernetes“资源组/资源版本/资源”以RESTful风格的形式对外暴露并提供服务。Kubernetes集群中的所有组件都通过kube-apiserver组件操作资源对象。kube-apiserver组件也是集群中唯一与Etcd集群进行交互的核心组件。例如,开发者通过kubectl创建了一个Pod资源对象,请求通过kube-apiserver的HTTP接口将Pod资源对象存储至Etcd集群中。

Etcd集群是分布式键值存储集群,其提供了可靠的强一致性服务发现。Etcd集群存储Kubernetes系统集群的状态和元数据,其中包括所有Kubernetes资源对象信息、集群节点信息等。Kubernetes将所有数据存储至Etcd集群中前缀为/registry的目录下。

Etcd集群是分布式键值存储集群,其提供了可靠的强一致性服务发现。Etcd集群存储Kubernetes系统集群的状态和元数据,其中包括所有Kubernetes资源对象信息、集群节点信息等。Kubernetes将所有数据存储至Etcd集群中前缀为/registry的目录下。

kube-apiserver属于核心组件,对于整个集群至关重要,它具有以下重要特性。

  • • 将Kubernetes系统中的所有资源对象都封装成RESTful风格的API接口进行管理。
  • • 可进行集群状态管理和数据管理,是唯一与Etcd集群交互的组件。
  • • 拥有丰富的集群安全访问机制,以及认证、授权及准入控制器。
  • • 提供了集群各组件的通信和交互功能。

4. kube-controller-manager

kube-controller-manager组件,也被称为Controller Manager(管理控制器),它负责管理Kubernetes集群中的节点(Node)、Pod副本、服务、端点(Endpoint)、命名空间(Namespace)、服务账户(ServiceAccount)、资源定额(ResourceQuota)等。例如,当某个节点意外宕机时,Controller Manager会及时发现并执行自动化修复流程,确保集群始终处于预期的工作状态。

Controller Manager负责确保Kubernetes系统的实际状态收敛到所需状态,其默认提供了一些控制器(Controller),例如DeploymentControllers控制器、StatefulSet控制器、Namespace控制器及PersistentVolume控制器等,每个控制器通过kube-apiserver组件提供的接口实时监控整个集群每个资源对象的当前状态,当因发生各种故障而导致系统状态出现变化时,会尝试将系统状态修复到“期望状态”。

Controller Manager具备高可用性(即多实例同时运行),即基于Etcd集群上的分布式锁实现领导者选举机制,多实例同时运行,通过kube-apiserver提供的资源锁进行选举竞争。抢先获取锁的实例被称为Leader节点(即领导者节点),并运行kube-controller-manager组件的主逻辑;而未获取锁的实例被称为Candidate节点(即候选节点),运行时处于阻塞状态。在Leader节点因某些原因退出后,Candidate节点则通过领导者选举机制参与竞选,成为Leader节点后接替kube-controller-manager的工作。

5. kube-scheduler

kube-scheduler组件,也被称为调度器,目前是Kubernetes集群的默认调度器。它负责在Kubernetes集群中为一个Pod资源对象找到合适的节点并在该节点上运行。调度器每次只调度一个Pod资源对象,为每一个Pod资源对象寻找合适节点的过程是一个调度周期。

kube-scheduler组件监控整个集群的Pod资源对象和Node资源对象,当监控到新的Pod资源对象时,会通过调度算法为其选择最优节点。调度算法分为两种,分别为预选调度算法和优选调度算法。除调度策略外,Kubernetes还支持优先级调度、抢占机制及亲和性调度等功能。

kube-scheduler组件支持高可用性(即多实例同时运行),即基于Etcd集群上的分布式锁实现领导者选举机制,多实例同时运行,通过kube-apiserver提供的资源锁进行选举竞争。抢先获取锁的实例被称为Leader节点(即领导者节点),并运行kube-scheduler组件的主逻辑;而未获取锁的实例被称为Candidate节点(即候选节点),运行时处于阻塞状态。在Leader节点因某些原因退出后,Candidate节点则通过领导者选举机制参与竞选,成为Leader节点后接替kube-scheduler的工作。

6. kubelet

kubelet组件,用于管理节点,运行在每个Kubernetes节点上。kubelet组件用来接收、处理、上报kube-apiserver组件下发的任务。kubelet进程启动时会向kube-apiserver注册节点自身信息。它主要负责所在节点(Node)上的Pod资源对象的管理,例如Pod资源对象的创建、修改、监控、删除、驱逐及Pod生命周期管理等。

kubelet组件会定期监控所在节点的资源使用状态并上报给kube-apiserver组件,这些资源数据可以帮助kube-scheduler调度器为Pod资源对象预选节点。kubelet也会对所在节点的镜像和容器做清理工作,保证节点上的镜像不会占满磁盘空间、删除的容器释放相关资源。

kubelet组件实现了3种开放接口,如图所示。

图片

  • • Container Runtime Interface:简称CRI(容器运行时接口),提供容器运行时通用插件接口服务。CRI定义了容器和镜像服务的接口。CRI将kubelet组件与容器运行时进行解耦,将原来完全面向Pod级别的内部接口拆分成面向Sandbox和Container的gRPC接口,并将镜像管理和容器管理分离给不同的服务。
  • • Container Network Interface:简称CNI(容器网络接口),提供网络通用插件接口服务。CNI定义了Kubernetes网络插件的基础,容器创建时通过CNI插件配置网络。
  • • Container Storage Interface:简称CSI(容器存储接口),提供存储通用插件接口服务。CSI定义了容器存储卷标准规范,容器创建时通过CSI插件配置存储卷。

7. kube-proxy

kube-proxy组件,作为节点上的网络代理,运行在每个Kubernetes节点上。它监控kube-apiserver的服务和端点资源变化,并通过iptables/ipvs等配置负载均衡器,为一组Pod提供统一的TCP/UDP流量转发和负载均衡功能。

行在每个Kubernetes节点上。它监控kube-apiserver的服务和端点资源变化,并通过iptables/ipvs等配置负载均衡器,为一组Pod提供统一的TCP/UDP流量转发和负载均衡功能。

kube-proxy组件是参与管理Pod-to-Service和External-to-Service网络的最重要的节点组件之一。kube-proxy组件相当于代理模型,对于某个IP:Port的请求,负责将其转发给专用网络上的相应服务或应用程序。但是,kube-proxy组件与其他负载均衡服务的区别在于,kube-proxy代理只向Kubernetes服务及其后端Pod发出请求。

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

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

相关文章

模糊数学在处理激光雷达的不确定性和模糊性问题中的应用

模糊数学是一种用于处理不确定性和模糊性问题的数学工具,它可以帮助我们更好地处理激光雷达数据中的不确定性和模糊性。激光雷达是一种常用的传感器,用于测量目标物体的距离、速度和方向等信息。然而,在实际应用中,激光雷达所获取…

ITK + ANT,无法显示三维

背景:之前用ANT保存ima格式的数据,选择的是保存所有的序列 用python将dicom转为nii的格式, import nibabel as nib import torch"""不管是nii还是nii.gz都是二维的,为啥呢"""fobj nib.load("…

Linux编辑器---vim

目录 1、vim的基本概念 2正常/普通/命令模式(Normal mode) 2、1命令模式下一些命令(不用进入插入模式) 3插入模式(Insert mode) 4末行/底行模式(last line mode) 4、1底行模式下的一些命令 5、普通用户无法进行sudo提权的解决方案 6、vim配置问题 6、1配…

使用 Node 创建 Web 服务器

Node.js 提供了 http 模块,http 模块主要用于搭建 HTTP 服务端和客户端,使用 HTTP 服务器或客户端功能必须调用 http 模块,代码如下: var http require(http); 以下是演示一个最基本的 HTTP 服务器架构(使用 8080 端口)&#x…

100天精通鸿蒙从入门到跳槽——第8天:TypeScript 知识储备:泛型

博主猫头虎的技术世界 🌟 欢迎来到猫头虎的博客 — 探索技术的无限可能! 专栏链接: 🔗 精选专栏: 《面试题大全》 — 面试准备的宝典!《IDEA开发秘籍》 — 提升你的IDEA技能!《100天精通Golang》…

学好UEFI,实现从工程师到架构师的跨越

学好UEFI, 实现从工程师到架构师的跨越 2024 / 01 / 19 统一可扩展固件接口 UEFI,是由英特尔、微软等众多全球知名 IT企业共同开发、管理与推进的全新一代 BIOS 体系规范,目前作为最先进最完善的固件架构,已占据绝大部分计算机市…

基于Redisson的RAtomicLong实现全局唯一工单号生成器

最近几年,我一直从事的是运营平台业务开发。每天,我们都需要处理大量的工单配置工作。为了生成工单号,我们建立了一张专用的数据库表,用于记录和生成工单号。每次创建工单时,我们会查询这张表,根据年份字段…

梁山泊国潮风礼盒,传承经典,贺礼新春

在春节来临之际,梁山泊隆重推出新年中国红礼盒酒,为您传递新年的祝福与关爱。这款酒以其独特的魅力,为您带来美好的祝愿和愉悦的享受。中国风国潮礼盒采用中国传统红色为主色调,象征着吉祥、喜庆和繁荣。红色的背景上,…

appium连接手机进行启动失败 ,怎么办 ?检查下这几个地方 。

在使用appium做app自动化,首先需要启动appium连接到手机,然后进行后续操作。 但是往往在启动的时候就会卡住,在点击start session后就会出现报错,具体如下图 : 那么,出现如上的情况该如何解决呢 &#xff1…

(蓝桥杯每日一题)love

问题描述 马上就要到七夕情人节了,小蓝在这天想要心爱得男神表白,于是她写下了一个长度为n仅由小写字母组成的字符串。 她想要使这个字符串有 1314个 love 子序列但是马虎的小蓝却忘记了当前已经有多少个子序列为 love。 请你帮小蓝计算出当前字符串有多…

挑战杯参赛总结-时间序列预测

参赛任务: 目标:针对中国各个市区的不同年份二氧化碳排放量,预测未来年份的二氧化碳排放量。 不同与之前我学习过的波士顿房价预测机器学习-波士顿房价预测-CSDN博客 房价预测是通过学习与房价有关的很多特征,训练出一个模型来预…

RabbitMQ-生产者可靠性

一、生产者重连 1、概念 由于网络波动导致客户端无法连接上MQ,这是可以开启MQ的失败后重连机制。 注意: 是连接失败的重试,而不是消息发送失败后的重试。 2、开启配置 spring:rabbitmq:template:retry:enabled: true # 是否启用重试机制ma…

[python语言]数据类型

目录 知识结构​编辑 复数类型 整数类型、浮点数类型 1、整型 2、浮点型 字符与字符串 1、转义字符 2、字符串的截取 3、字符串的拼接级连 4、字符串的格式化 1、format格式化 2、字符格式化 3、f标志位格式化--(推荐) 5、字符串的常用属性 1、对字符串做出判断…

Mat - 基本映像容器

目标 我们有多种方法可以从现实世界中获取数字图像:数码相机、扫描仪、计算机断层扫描和磁共振成像等等。在每种情况下,我们(人类)看到的都是图像。但是,当将其转换为我们的数字设备时,我们记录的是图像每…

设计模式篇章(4)——十一种行为型模式

这个设计模式主要思考的是如何分配对象的职责和将对象之间相互协作完成单个对象无法完成的任务,这个与结构型模式有点像,结构型可以理解为静态的组合,例如将不同的组件拼起来成为一个更大的组件;而行为型更是一种动态或者具有某个…

高级编程。JavaScript中有哪些类型转换机制?

一、概述 前面我们讲到,JS中有六种简单数据类型:undefined、null、boolean、string、number、symbol,以及引用类型:object 但是我们在声明的时候只有一种数据类型,只有到运行期间才会确定当前类型 let x y ? 1 : …

MCM备赛笔记——蒙特卡罗方法

Key Concept 蒙特卡罗方法(Monte Carlo Method),也称为统计模拟方法,是一种基于概率和统计的数值计算方法。该方法使用随机数(或更常见的伪随机数)来解决可能非常复杂的数学或物理问题。蒙特卡罗方法广泛应…

用git bash调用md5sum进行批量MD5计算

对于非常大的文件或者很重要的文件,在不稳定的网络环境下,可能文件的某些字节会损坏。此时,对文件计算MD5即可以校验其完整性。比如本次的 OpenStreetMap 导出包,我的学弟反馈通过网盘下载无法解压,并建议我增加每个文…

web学习笔记(十六)

目录 HTML5新增标记汇总 1.新增语义化标签 2.新增音频和视频标签 2.1音频标签 audio 2.1视频标签 video 3.新增图像标签 4.新增表单元素和表单控件 5.新增应用程序标签(使用率较低) HTML5新增标记汇总 1.新增语义化标签 新增语义化标签能够便于…

BossCMS RCE

简介 BossCMS是一款基于自主研发PHP框架MySQL架构的内容管理系统,能够满足各类网站开发建设的需求。系统开源、安全、稳定、简洁、易开发、专注为中小型企业及政企单位、个人站长、广大开发者、建站公司提供一套简单好用的网站内容管理系统解决方案。官网提供了大量…