K8S | 核心原理分析

news2024/11/23 21:11:34

整体上理解流程和原理;

一、背景

基于分布式的架构中,需要管理的服务是非常多的,无论是服务的数量还是体系划分;

从服务的能力上看,可以进行分层管控,只是其中有相当一部分服务层,改动更新的频率很低,所以感知也不明显;

就以自己当下参与研发的系统来说;

通过K8S进行管理的服务近百个,这中间有部分服务采用集群模式,即便是这个规模的系统,也几乎不可能依赖纯人工运维的形式,自动化流程必不可少;

二、持续集成

此前围绕该主题写过一个完整的实践案例,主要围绕Jenkins、Docker、K8S等组件的使用层面,总结源码编译、打包、镜像构建、部署等自动化管理的流程;

Jenkins:是一个扩展性非常强的软件,用于自动化各种任务,包括构建、测试和部署等;

Docker:作为开源的应用容器引擎,可以把应用程序和其相关依赖打包生成一个Image镜像文件,是一个标准的运行环境,提供可持续交付的能力;

Kubernetes:作为开源的容器编排引擎,用来对容器化应用进行自动化部署、 扩缩和管理;

三、K8S架构

1、核心组件

Control-Plane-Components:控制平面组件

对集群做出全局决策,例如:资源调度、检测、事件响应,可以在集群中的任何节点上运行;

  • api:开放K8S的API,组件之间通过API交互,相当于控制面的前端;
  • controllermanager:运行控制器进程,逻辑上是一个单独的进程;
  • scheduler:监听新建未指定运行节点的Pods,并为Pod选择运行节点;
  • etcd:兼具一致性和高可用性的键值数据库,作为保存K8S数据的后台库;

Node:节点组件

该组件会在每个节点上运行,负责维护运行的Pod并提供Kubernetes运行环境;

  • kubelet:在每个节点上运行的代理,保证容器都运行在Pod中;
  • kube-proxy:每个节点上运行的网络代理, 维护节点上的网络规则;

Container-Runtime:容器运行时

负责运行容器的软件,支持Docker、containerd、CRI-O等多个容器运行环境,以及任何实现Kubernetes-CRI容器运行环境接口;

2、分层结构

从整体的功能上来考虑,K8S集群可以分为:用户、控制平面、节点三个模块;

用户侧:不论是CLI命令行还是UI界面,会与控制面板的APIserver进行交互,APIserver再与其他组件交互,最终执行相应的操作命令;

控制平面:以前也称为Master,核心组件包括APIserver、controller、scheduler、etcd,主要用来调度整个集群,以及做出全局决策;

节点:通过将容器放入在节点上运行的Pod中来执行工作负载,简单的理解工作负载就是各种应用程序等,节点上的核心组件包括Pod、kubelet、Container-Runtime、kube-proxy等;

3、核心能力

站在研发的视角来看,K8S提供极其强大的应用服务管理能力;

3.1 发现与负载

服务Service可以将运行在一个或一组Pod上的网络应用程序公开为网络服务的方法,通常使用标签对资源对象进行筛选过滤;

3.2 调度

调度器通过监测机制来发现集群中新创建且尚未被调度到节点上的Pod,由于Pod中的容器和Pod本身可能有不同的资源要求,调度会将Pod放置到合适的节点上;

3.3 自动伸缩

K8S可以通过指标检查工作负载的资源需求,例如CPU利用率、响应时长、内存利用率、或者其他,从而判断是否需要执行伸缩,垂直维度可以是更多的资源分配,水平维度可以是更多的集群部署;

K8S可以自动伸缩,也具备自动修复的能力,当节点故障或者应用服务异常时,会被检查到,可能会进行节点迁移或者重启;

四、应用案例

1、服务部署

在此前的实践案例中,用CLI命令行和脚本文件的方式,完成的部署动作,而在整个流程中涉及集群的多个组件协作,多次的通信和调度;

kubectl create -f pod.yaml

2、交互流程

【1】CLI命令行和UI界面,都是通过APIserver接口,与集群内部组件交互,比如上述的Pod部署操作;

【2】在APIserver收到请求之后,会将序列化状态的对象写入到etcd中完成存储操作;

【3】Scheduler调度器通过监测(Watch)机制来发现集群中新创建且尚未被调度到节点上的Pod;

【4】在集群中找到一个Pod的所有可调度节点,对这些可调度节点打分,选出其中得分最高的节点来运行Pod,然后调度器将这个调度决定通知给APIserver;

【5】APIserver完成信息存储后,然后通知相应节点的Kubelet;

【6】Kubelet是基于PodSpec来工作的,确保这些PodSpec中描述的容器处于运行状态且运行状况良好,每个PodSpec是一个描述Pod的YAML或JSON对象;

【7】Pod是可以在Kubernetes中创建和管理的、最小的可部署的计算单元,包括一个或多个容器;

E N D END END

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

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

相关文章

【Python黑科技】自动答题项目代码分析(保姆级图文+实现代码)

目录 实现效果图片素材和源码 实现思路1. 打开对应网页,做好准备工作2. 获取正确答案3. 答题4. 提交试卷实现代码总结 欢迎关注 『Python黑科技』 系列,持续更新中 欢迎关注 『Python黑科技』 系列,持续更新中 实现效果 图片素材和源码 已经…

chatgpt赋能python:Python如何在图像上标注

Python如何在图像上标注 对于图像标注,Python提供了许多工具和库,其中最常用的是OpenCV和Pillow。这篇文章将介绍如何使用Pillow在图像上进行标注。 安装Pillow库 在使用Pillow库之前,需要先安装它。在命令行中输入以下命令: …

2023-06-02 stonedb-修改包含内连接的嵌套外连接-问题反思

摘要: 最近在搞一个列存储引擎的包含内连接的嵌套外连接过慢的问题, 连接执行过慢的原因分析见此前的博客分析, 虽然逻辑很绕, 但是也不是无法分析. 更麻烦的问题在于修改查询计划, 让其能按照代价更小的方式正确的执行. 遇到的问题比我在修改查询计划前设想的更为棘手, 本文…

chatgpt赋能python:Python循环次数:实现高效编程的关键

Python循环次数:实现高效编程的关键 在编写Python程序时,循环次数是一个经常需要关注的问题。循环次数过多会导致程序执行效率低下,甚至可能引起性能问题。因此,如何控制循环次数成为实现高效编程的关键。本文将介绍Python中循环…

chatgpt赋能python:Python如何实现将数据结果导出

Python如何实现将数据结果导出 在Python编程中,我们经常需要将代码运行的结果导出保存在文件中,或在其他程序中使用。下面我们将介绍Python中几种将数据结果导出的方法。 方法一:使用文件输出 使用Python内置的open方法来打印输出的结果到…

【C++】类和对象 - 对象特性 - 构造函数和析构函数,函数分类及调用,拷贝构造函数调用时机,构造函数调用规则,深浅拷贝,初始化列表,类对象作为类成员

No.Contents1【C】基础知识 - HelloWorld,注释,变量,常量,关键字,标识符2【C】数据类型 - 整型,sizeof,实型,字符型,转义字符,字符串类型,布尔类型…

chatgpt赋能python:Python版本更新:为什么你应该及时升级

Python版本更新:为什么你应该及时升级 作为一名有10年Python编程经验的工程师,我深刻理解Python版本更新的重要性。在这篇文章中,我将向你介绍Python版本更新的背景和原因,并告诉你如何及时升级Python的版本以保持你的代码的安全…

由 Direct buffer memory 引发的附件下载优化方案

文章目录 前言一、Direct buffer memory1.1 原因分析1.2 解决方案 二、附件下载2.1 问题分析2.2 解决方案2.2.1 本地下载2.2.1 minio下载 前言 本地上传大文件内存溢出 Direct buffer memory附件下载服务端传流给前端需要将流缓存完毕才可以下载,导致大文件下载系统…

浏览器的渲染原理

网页的解析过程 ◼ 常见的浏览器内核有  Trident ( 三叉戟):IE、360安全浏览器、搜狗高速浏览器、百度浏览器、UC浏览器;  Gecko( 壁虎) :Mozilla Firefox;  Presto&#xff…

chatgpt赋能python:Python散点图连接成光滑曲线的技巧

Python散点图连接成光滑曲线的技巧 Python是一种功能强大的编程语言,广泛用于数据科学、机器学习、Web开发和自动化等领域。在数据可视化中,散点图是一种非常重要的图表类型,用于显示两个变量之间的关系。然而,有时散点图可能过于…

Linux 可视化管理-webmin 和 bt 运维工具

Linux 可视化管理-webmin 和bt 运维工具 webmin 基本介绍 Webmin 是功能强大的基于Web 的Unix/linux 系统管理工具。管理员通过浏览器访问Webmin 的各种管理功能并完成相应的管理操作。除了各版本的linux 以外还可用于:AIX、HPUX、Solaris、Unixware、Irix 和Fre…

freeRTOS学习(四)

队列管理 队列提供了任务到任务、任务到中断和中断到任务的通信机制。 队列的特征 数据存储 队列可以保存有限数量的固定大小的数据项。一个队列所能容纳的最大条目数称为它的长度。每个数据项的长度和大小都在创建队列时设置。 队列通常用作先进先出(FIFO&…

【利用AI让知识体系化】常见的移动端适配知识

I. 引言 A. 移动设备的普及度 移动设备的普及度近年来持续攀升,据统计,截至2021年,全球手机用户数量已达51.98亿,而智能手机的普及率则已经超过了70%,成为人们生活中最为重要和常用的工具之一。 同时,平…

chatgpt赋能python:Python如何更改?

Python如何更改? 如果您想成为一名成功的Python程序员,那么您需要知道如何更改Python代码。在这篇文章中,我们将介绍Python如何更改,并提供一些实用的技巧和建议来使您的编码更加高效和有用。 什么是Python? Python…

chatgpt赋能python:Python如何填充颜色

Python如何填充颜色 Python是一种简单易学但功能丰富的编程语言,被广泛用于各种开发领域。其中填充颜色是Python中的一个非常重要的功能,在很多项目中都会经常用到。本文将介绍Python如何填充颜色,让你快速上手。 什么是填充颜色 填充颜色…

Python matplotlib库的使用

目录 画图的两种基本方式: 隐藏边框: 隐藏坐标系 设置网格线 共享坐标轴 双坐标轴 设置坐标轴标签及刻度字体大小 设置坐标轴标签据离坐标轴距离 画点与线 标注文字 画不同大小的多个坐标系 调节子图间距 导入库: import matplotl…

【JavaSE】Java(五十):核心要点

文章目录 1. JDK 和 JRE 有什么区别2. \和 equals 的区别3. final 在java中有什么作用4. Java中的Math() 类有哪些常用方法5. String 属于基础数据类型吗? 1. JDK 和 JRE 有什么区别 JDK(Java Development Kit)和 JRE(Java Runtime Environ…

FusionCharts Suite XT 3.20.X Crack

3.20版# 2023年3月24日 新功能 FusionCharts 3.20版本引入了一种新方法_changeXAxisCordinates,它允许用户自动更改x轴,使其在图例或数据交互时居中对齐。 FusionCharts 3.20版本更新了Angular集成,支持Angular版本14和15。 FusionChart…

HTML (Hyper Text Markup Language)

目录 网页(html文件) 什么是HTML? web标准 为啥需要web标准 web标准的构成 VScode的使用 HTML标签 基本语法 标签关系 结构标签 课间拓展: 了解骨架代码 HTML中常见的标签 标题标签 注释标签 段落标签 换行标签 文本格式化标签 div 和span 标签 图像标签 …

【vulnhub靶场】MATRIX-BREAKOUT: 2 MORPHEUS

文章目录 描述:一、开启靶机信息收集二层发现三层探测信息整理:初步攻击basic爆破:已知漏洞利用文件上传 后渗透测试后渗透测试 描述: 这是《黑客帝国》系列的第二部,副标题是《沉睡魔咒:1》。它的主题是回到第一部《…