Kubernetes: 从零开始理解K8s架构

目录

一、简介    

二、Kubernetes 架构原理

        2.1 控制平面 

         2.2 Node 组件

        2.3 Container Image

         2.4 kubelet

        2.5 Cluster

三、服务调用

四、总结


一、简介    

        Kubernetes 是一个开源的容器编排系统,用于自动化应用容器的部署、扩展和管理。它是Google基于Borg系统(Google的内部运行系统)的经验并贡献给 Cloud Native Computing Foundation(CNCF)的项目。Kubernetes 中间有8个字母,所以也被称为 K8s。

        K8s 有如下的特性

  1. 服务发现和负载均衡:K8s 可以使用 DNS 名称或自己的 IP 地址暴露容器,如果到一个容器的流量过大,K8s 能够负载均衡并分配网络流量,以保证服务稳定。
  2. 自动部署和回滚:你可以描述已部署的容器应有的状态,它可以改变实际状态到期望状态。
  3. 自我修复:当容器失败时,K8s 会重启它;当节点失败时,K8s 会重新调度在该节点上的应用到其他节点上;当容器没有响应健康检查时,K8s 会杀掉它并且把它标记为失败的。

        K8s 介于应用服务和服务器之间,能够通过策略,协调和管理多个应用服务,只需要一个 yaml 文件位置,定义应用的部署顺序等信息,就能自动部署应用到各个服务器上,还能让它们挂了自动重启,自动扩缩容。

二、Kubernetes 架构原理

        K8s 会将我们的服务器划分成两部分,一部分为控制平面,另一部分为工作节点,也就是 Node。控制平面控制和管理各个 Node,而 Node 则负责实际运行各个应用服务。

        2.1 控制平面 

        控制平面内部组件

  • 以前操作服务器时需要登录每台服务器,然后手动执行各种命令,现在有了 K8s 一切都变得简单了,K8s 提供了 API 接口,然后通过 API server 接口组件就能操作这些服务资源。
  • 以前部署服务时,需要查看哪台服务器的资源充足,然后才能将应用部署到相应的服务器上,现在 K8s 提供了调度器(Scheduler)来完成这些操作。在选择最合适节点时,Scheduler 会考虑多种因素,例如节点的资源剩余情况(CPU、内存等)、Pod的资源需求、数据亲和性、节点的标签等。选择完节点后,Scheduler 会将决定通知给 API server,然后 API server 会将 Pod 信息和节点信息记录下来。
  • 找到服务器后,以前我们会手动创建、关闭服务,K8s 提供了 Controller Manager 控制器来负责做这些事情。
  • K8s 在运行过程中会产生一些数据,这些数据需要存储起来,目前数据被存放到了 etcd 中。

        下图为控制平面组件组成图

         2.2 Node 组件

        Node 是实际的工作节点,他可以是一台物理机,也可以是虚拟机。Node 会实际去运行应用服务,多个应用服务可以共享一台 Node 上的 CPU、内存等资源。如果是非核心业务,部署到一起是没问题的,如果是核心服务最后进行隔离,分开部署。每个应用服务都会占用一定的 CPU 、内存、存储和网络资源,如果部署在一起会发生资源争抢,核心服务应该进行隔离步数。

        另一方面也会影响可用性,如果一个 Node 上部署很多重用的应用服务,那么这个节点如果出现故障,可能会影响很多服务。而且这种方式不利于管理,增加了复杂性。

        2.3 Container Image

        以前我们部署服务时,需要上传代码到服务器上,而用了 K8s 之后,只需要将服务代码打包成容器镜像(Container Image),就能将它部署。

        容器镜像是由文件系统和参数组成的轻量级、独立的、可执行的软件包,包含了运行某个软件所需的所有内容,包括代码、运行时环境、库、环境变量和配置文件等。容器镜像可以再不同的环境中重复的创建相同的容器,这使得打包、分发、部署和运行变得异常简单和快速。

        每个应用服务都可以被看做是一个容器,并且大多情况下,还会为应用服务添加一个日志收集器,多个容器组成一个个的 Pod,它们运行在 Node 上。

        K8s 可以将 pod 从某个 Node 调度到另外一个 Node,还能以 Pod 为单位去做重启和动态扩缩容操作,所以 Pod 是 k8s 中最小的调度单位。

         2.4 kubelet

        另外,前面提到控制平面会用 Controller Manager (通过 API Server)控制 Node 创建和关闭服务,那 Node 也得有个组件能接收到这个命令才能去做这些动作,这个组件叫 kubelet,它主要负责管理和监控 Pod。 最后,Node 中还有个 Kube Proxy ,它负责 Node 的网络通信功能,有了它,外部请求就能被转发到 Pod 内。        

        2.5 Cluster

        控制平面和 Node 共同组成一个 Cluster,也就是集群。同时,为了将集群内部的服务暴露给外部用户使用,我们一般还会部署一个入口控制器,比如 Ingress 控制器(比如 Nginx) ,它可以提供一个入口让外部用户访问集群内部服务。

三、服务调用

        外部请求会先进入 K8s 集群的 Ingress 控制器,然后请求会被转发到 K8s 内部的某个 Node 的 Kube Proxy 上,再找到对应的 Pod,然后才是转发到内部容器服务中,处理结果原路返回。

四、总结

         这篇文章只是简单的减少了 K8s 的工作原理,作为业务程序员,公司内部有封装好的服务管理平台,平时可能也没接触过这些东西,但是还是需要了解一下,这有助于大家了解整个服务的运作。

        由于是初学者,欢迎指教更正。

往期经典推荐

分布式事务-CSDN博客

Kafka VS RabbitMQ,架构师教你如何选择_消息中间件选型分析-CSDN博客

TiDB高手进阶:揭秘自增ID热点现象与高级调优技巧_tidb 分布式自增id-CSDN博客

如何熟悉一个陌生的业务系统-CSDN博客

揭开Spring Bean生命周期的神秘面纱-CSDN博客

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

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

相关文章

Yolov8目标检测——在Android上部署Yolov8 tflite模型

1. 简介 YOLOv8 是一种用于目标检测的深度学习模型,它是 YOLO(You Only Look Once)系列的最新版本之一。YOLO 系列因其高效和准确性而在计算机视觉领域非常受欢迎,特别是在需要实时目标检测的应用中,如视频监控、自动…

【Shell编程】3.Shell字符串、Shell数组

目录 Shell字符串 代码1 test3_1.sh 运行 结果 获取字符串长度 代码2 test3_2.sh 运行 结果 Shell字符串拼接 代码3 test3_3.sh 运行 结果 Shell字符串截取 从指定位置开始截取 从字符串左边开始计数 从字符串右边开始计数 从指定字符开始截取 使用#号截取…

煤矿防爆气象传感器

TH-WFB5随着工业技术的不断发展,煤矿作为我国能源领域的重要组成部分,其安全生产问题一直备受关注。在煤矿生产过程中,井下环境复杂多变,瓦斯、煤尘等易燃易爆物质的存在使得井下安全工作尤为重要。为了提高煤矿生产的安全性&…

Apache Flume概述

Apache Flume概述 1.Flume定义 ​ Flume是cloudera(CDH版本的hadoop) 开发的一个分布式、可靠、高可用的海量日志收集系统。 它将各个服务器中的数据收集起来并送到指定的地方去,比如说送到HDFS、Hbase,简单来说flume就是收集日志的。 2.Flume基础架构…

inBuilder 低代码平台新特性推荐 - 第十八期

今天来给大家带来的是inBuilder低代码平台特性推荐系列第十八期——表单设计器集成预约日历组件。 一、场景介绍 项目上希望用日历的形式展示某地点在一段时间内的预约记录,表单设计器新增支持创建日历预约视图,并配置预约属性。 二、运行效果 三、前…

成都一体化污水处理成套设备如何选型

一体化污水处理成套设备因其占地面积小、操作简便、处理效果稳定等优点,在小型污水处理项目中得到了广泛应用。在选型时,应考虑以下几个关键因素: 处理规模:根据需要处理的污水量(通常以每天处理的立方米数表示&#x…

滑动窗口篇: 长度最小子数组|无重复字符最长字串

目录 1、滑动窗口算法 1.1 核心概念 1.2 基本步骤 1.3 应用场景 1.4 优势 2. leetcode 209 长度最小子数组 暴力解题思路: 滑动窗口思路: 3、无重复字符的最长子串 暴力解题思路: 滑动窗口思路: 1、滑动窗口算法 滑动…

React 第二十九章 React 和 Vue 描述页面的区别

面试题:React 和 Vue 是如何描述 UI 界面的?有一些什么样的区别? 标准且浅显的回答: React 中使用的是 JSX,Vue 中使用的是模板来描述界面 前端领域经过长期的发展,目前有两种主流的描述 UI 的方案&#xf…

基于MWORKS 2024a的MIMO-OFDM 无线通信系统设计

一、引言 在终端设备和数据流量爆发式增长的今天,如何提升通信系统容量、能量效率和频谱利用率成为5G通信的关键问题之一。大规模天线阵列作为5G及B5G无线通信关键技术通过把原有发送端天线数量提升一个或多个数量级,实现波束聚集、控制波束转向&#x…

《架构风清扬-Java面试系列第29讲》聊聊DelayQueue的使用场景

DelayQueue是BlockingQueue接口的一个实现类之一 这个属于基础性问题,老规矩,我们将从使用场景和代码示例来进行讲解 来,思考片刻,给出你的答案 1,使用场景 实现:延迟队列,其中元素只有在其预定…

使用Flask-Admin创建强大的后台管理系统

文章目录 安装Flask-Admin创建Flask应用添加Flask-Admin添加模型扩展延伸自定义视图权限管理文件上传 结语 在Web应用开发中,后台管理系统是至关重要的组成部分,它能够让管理员轻松管理应用的各种数据和配置。Flask-Admin是一个功能强大的Flask扩展&…

常见排序算法——希尔排序

基本原理 希尔排序在插入排序的基础之上,将待排序序列分成组,分成 gap 个组,组的数量通过 length / 2 获得,比如6个元素的序列,那么就是 3 个组,每个组两个元素,然后将每个组的元素进行插入排…

【Web后端】servlet基本概念

1.ServletAPI架构 HttpServlet继承GenericServletGenericServlet实现了Servlet接口,ServletConfig接口,Serializable接口自定义Servlet继承HttpServlet 2.Servlet生命周期 第一步:容器加载Servlet第二步:调用Servlet的无参构造方法&#xf…

【程序设计和c语言-谭浩强配套】(适合专升本、考研)

一晃大半年没更新了,这一年一直在备考,想着这几天把前段时间学的c语言给大家分享一下,在此做了一个专栏,有需要的小伙伴可私信获取o。 简介:本专栏所有内容皆适合专升本、考研的复习资料,本人手上也有日常…

关于架构设计:什么是完美?

这篇不谈技术。 为什么写这篇文章?因为刚毕业时看一本关于软件架构设计的书,记得有一句关于完美的话,但后来无论如何都想不起来了。只记得和飞机有关。而今年在看“The Pragmatic Programmer: your journey to mastery”第2版(20…

##13 如何在Python中优雅地使用异常处理

文章目录 引言1. 异常处理基础2. 处理多种异常3. 捕捉所有异常4. finally 语句5. 自定义异常结语参考链接 引言 在编程中,错误是在所难免的。Python提供了异常处理机制,允许程序在遇到错误时优雅地恢复。本文将介绍Python中异常处理的基本概念&#xff…

Mac YOLO V9推理测试(基于ultralytics)

环境: Mac M1 (MacOS Sonoma 14.3.1) Python 3.11PyTorch 2.1.2 一、准备工作 使用YOLO一般都会接触ultralytics这个框架,今天来试试用该框架进行YOLO V9模型的推理。 YOLOv9目前提供了四种模型下载:yolov9-c.pt、yolov9-e.pt、gelan-c.p…

异常处理/__LINE__ 与 __FILE__ 宏在调试和异常处理中的高级使用

文章目录 概述痛点分析_LINE_ 代码所在行号_LINE_ 直接转为字符串_LINE_ 作为整型数据使用_LINE_标记宏函数的调用位置 _FILE_ 代码所在文件名简单实验不期望 _FILE_ 宏代表全路径 assert 使用了 _FILE_ 和 _LINE_借助TLS技术小结 概述 _LINE_和_FILE_是C/C中的预定义宏&#…

【Sql-02】 求每个省份最新登陆的三条数据

SQL 输出要求数据准备sql查询结果 输出要求 要求输出,userid_1,logtime_1,userid_2,logtime_2,userid_3,logtime_3 数据准备 CREATE TABLE sqltest (province varchar(32) NOT NULL,userid varchar(250) DEFAULT NULL,logtime datetime ) ENGINEInnoDB DEFAULT C…

Spring框架中常见注解

Spring: SpringMVC: RequestMapping用在类上表示所有该类下方法的父路径 RequestParam 做映射,前端请求的参数映射到控制器Controller的处理方法上的参数上。 【当参数需要设置默认值(前端没有发送这个参数)、参数名…