当前位置: 首页 > news >正文

kubernetes -- 核心组件介绍以及组件的运行流程

常用组件大白话说

如果想要官方的,详细的信息,请看官方文档。

https://kubernetes.io/zh-cn/docs/concepts/overview/components/

在这里插入图片描述

现在介绍一些核心的概念:

  • etcd:存储所有节点的信息,节点上部署的容器信息等都存在数据库,这是一个key-value的数据库,和redis差不多。
  • api-server:k8s作为一个高级的容器管理平台,对每一个发来的请求都要进行校验,该请求是否被集群允许。删除集群中的一个容器组,是否被允许。k8s默认运行后,6个组件每一个组件的请求,都要经过api-server进行校验。
  • controller manager:具体部署容器到目标节点,使用的控制器。容器负载均衡部署,Deployment控制器就是其中之一。
  • scheduler:运维写nginx.yaml(描述信息),预期部署3个nginx容器到k8s-node2节点上。将Pod调度到相应的Node机器上。
  • kubelet:管理目标节点中Pod的进程。
  • kubectl:在master节点上敲打的命令。
  • kube-proxy:在node节点中我们可以看到有kubectl和kube-proxy。kubectl用于和master的api-server通信决定容器创建时的信息获取,信息更新。而kube-proxy则是pod要对外提供网络访问,底层基于iptables的规则转发数据包,修改数据包。

我们来用一个例子来理解生动的理解这些东西。

Kubernetes cluster成为硅谷集团,类似于腾讯集团,阿里集团。

而Master集群就是硅谷集团的总部(Controller Plane),负责决策的。节点集群就是硅谷集团用来专门做事情的工厂(Node)。

每一个Node节点所擅长的不一样,比如有的Node内存大,有的Node存储空间大,有的Node在当前的情况下网络环境比较好等等。

加入说有一天,我准备完成一个飞机项目,那么我的硅谷总部需要做一些决策,计划的实施等,而飞机项目的具体实现就交给Node节点来做。我们首先需要一个决策者。决策者(c-m)负责这个项目的具体操作步骤,例如撰写相关的实施方案和资料。当然,我们撰写了相关的实施方案和资料之后,需要交给一个人去管理这些资料,把这些资料存放在一个地方整理起来,因此我们需要一个资料库,etcd(这个就是键值对的数据库而已)。而我的决策者可不能直接把资料给资料库,我们需要一个中间人,你看到过哪个领导没有秘书的吗,这也算是一种任务分工,一种解耦合。我们c-m需要把资料先给秘书部(API Server)。这个时候我的Controller Plane硅谷总部准备过去看一下工厂的项目执行进度,或者做一些指导,所以我们需要一个调度者(scheduler),当然调度者做这一间事情也是通过秘书去做的。当我要查看东厂的时候,一个厂(Node)里面一定是有一个门卫(kube-proxy)的,一些非法人士是无法进入我的工厂的,并且如果你假如要去西厂,但是你走错厂了,去了东厂,那么东厂的门卫大爷就会对你进行一些指导,引导你去相应的位置,引导你的网络访问。当我去一个工厂视察的时候,我不可能逐一的询问工厂里面的每一个员工,所以我们一定要有一个厂长(kubulet),厂长可以有决策权把这个厂停了,或者进行只会,Master里面也会有一个厂长。厂长对本工厂的健康情况等进行一个汇总和汇报。我们知道,一个公司,例如阿里云,它不可能是孤身一人的,它一定是会有合作伙伴,或者是一些其他帮手的,也就是Master里面的c-c-m,我们可以理解成外联部,外联部提供一些其他的支持以及合作。外联部就Cloud provider API了,为什么叫做云,云其实就是不是你自己的东西,你用的别人的东西,其实就是云。

了解了kubernetes的基本组件之后,我们来讲述一下k8s组件的工作流程。

kubernetes组件的工作流程

我们先自定义一个需求背景:

创建一个无状态的nginx引用,部署一个pod即可

流程如下:

  1. 在master节点写yaml描述你对容器的运行要求,创建pod的要求。install-pod.yaml

  2. 使用kubectl命令去创建,应用这个资源描述文件,因此k8s组件交互发出请求,我要创建一个pod去运行nginx了,那么请求应该发给谁呢?

    kubectl create -f install-nginx.yaml
    

    这个请求发给api-server。

  3. api-server此时会验证kubectl命令发来的请求是否被允许。利用本地https证书,这个证书是直接写入Kubectl配置文件里面的,该请求被允许之后才会执行。

  4. api-server将nginx-pod创建的信息记录到etcd数据库中(数据库记录了一些信息,例如nginx镜像版本,容器名,是否要端口暴露)。

  5. api-server会通知下一个组件,调度器组件,scheduler准备pod调度。

  6. scheduler调度,会去etcd里面查询,部署的pod信息到底是如何,然后判定出一个合适的node节点去部署pod(选择了好了具体的机器,但是还没有执行)

  7. scheduler调度器,会告诉api-server自己决定pod要部署到哪台node节点上。

  8. api-server会把这个信息再次写入到etcd中,数据更新了(nginx本身的容器信息+绑定关系,部署到哪个机器上面)

  9. 此时api-server会通知远程的具体机器,比如k8s-node2上的工作进程kubelet,去读取etcd里面的信息,根据这些信息创建nginx镜像,以及创建Pod(nginx容器)。

首先我们的运行环境必须是容器运行时的环境,例如Docker,因为容器具有隔离性。

我们的Master和Node之间的交互必须要通过api-server来进行转发,包括Master内部。kube-proxy是实现网络转发的,是实现负载均衡的一个重要器具。kubelet有权利让Node里面如何做事情。

现在我们来进行一些过程的描述。

假如我的的一个Node里面的应用2直接崩了,那么我的kubelet厂长会定时对Node里面的应用进行探测,kubelet会随时对工厂里面的流水线进行探测。当kubelet发现应用二崩了,那么它就有权利直接把应用2停了。如果我们的kubelet发现我们的当前的Node已经无法完成这个任务了的话,那么kubelet就会把这个情况直接发给api-server,api-server会转发给决策者controller-manager,然后决策者就可以进行决策了,决策者可以指定,那么这个任务我不搞了,或者给其他的厂去搞。然后把这个决策给api-server,api-server会把这个决策转发到ETCD数据库进行保存。如果是交给其他的厂来搞的话,那么如何知道那些厂可以完成这个任务呢?这个时候api-server就会把这个任务发送给scheduler,scheduler得知这个任务之后,我们的scheduler决策者就会去轮询的查找符合条件的节点,然后选择一个最佳的节点,scheduler把它选择的节点给api-server,然后api-server就把这一条记录存放到ETCD数据库里面了。

这次决策完成之后,kubelet和api-server会经常“通电话”进行联系,如果要换厂的话,那么他们是可以知道这个信息的。知道了这个信息之后对应的kubelet就会启动相应的应用。并且kubelet每过一段时间就要向api-server进行汇报。就跟厂长跟老板汇报工作一样。

如果这个项目跑起来了,需要别人访问怎么办?

kube-proxy是门卫大爷,而且门卫大爷都很喜欢相互打电话联系,所以知道其他的情况。例如我的应用1想要访问应用3的话,那么kube-proxy会告诉你所有的应用三的地址。

在这里插入图片描述

门卫大爷互相同步

所以kube-proxy是用来决定我的应用去哪里访问的,是负载均衡实现的源头。

相关文章:

kubernetes -- 核心组件介绍以及组件的运行流程

常用组件大白话说 如果想要官方的,详细的信息,请看官方文档。 https://kubernetes.io/zh-cn/docs/concepts/overview/components/ 现在介绍一些核心的概念: etcd:存储所有节点的信息,节点上部署的容器信息等都存在数…...

微信小程序Springboot短视频分享系统

3.1小程序端 用户注册页面,输入用户的个人信息点击注册即可。 注册完成后会返回到登录页面,用户输入自己注册的账号密码即可登录成功 登录成功后我们可以看到有相关的视频还有视频信息,我的信息等。 视频信息推荐是按照点击次数进行推荐的&am…...

排序算法学习

文章目录前言一、直接插入排序算法二、折半插入排序算法三、2路插入排序算法四、快速排序算法学习前言 算法是道路生涯的一个巨大阻碍。今日前来解决这其中之一:有关的排序算法,进行实现以及性能分析。 一、直接插入排序算法 插入排序算法实现主要思想…...

常见漏洞之 struts2+ jboss

数据来源 本文仅用于信息安全的学习,请遵守相关法律法规,严禁用于非法途径。若观众因此作出任何危害网络安全的行为,后果自负,与本人无关。 01 Struts2相关介绍 》Struts2概述 》Struts2历史漏洞(1) 》…...

leetcode470 用Rand7()实现Rand10()

力扣470 第一步:根据Rand7()函数制作一个可以随机等概率生成0和1的函数rand_0and1 调用Rand7()函数,随机等概率生成1,2,3,4,5,6,7 这时我们设置:生成1,2&a…...

JSON数据解析商品详情API

大家有探讨稳定获取商品主图、jiage、标题,及sku的完整解决方案。这个引起了我技术挑战的兴趣,然后各种网上资料查询,最终还是不负努力,找到更好的解决方案,不再出现任何滑块验证码,完全绕过,实…...

服务端开发Java面试复盘篇1

上周投了一些简历,约了8-9家面试,其中完成了3家的第一轮面试,由于面试的是Java 的实习生,感觉问的题目都比较基础,不过有些问题回答的不是很好,在这里对回答的不太好的题目做一下总结和复盘。 目录 一、后…...

Android框架WiFi架构

同学,别退出呀,我可是全网最牛逼的 WIFI/BT/GPS/NFC分析博主,我写了上百篇文章,请点击下面了解本专栏,进入本博主主页看看再走呗,一定不会让你后悔的,记得一定要去看主页置顶文章哦。 一、wpa_supplicant:wpa_supplicant本身开源项目源码,被谷歌收购之后加入Android移…...

rt-thread 移植调试记录

rt-thread 移植调试记录 记录rt-thread移植的过程。这里移植仅仅是利用rt-thread源码目录已经移植好的文件,组建自己的工程,不需要自己编写汇编完成底层移植。 1. 搭建基础工程 这里使用的是正点原子的潘多拉开发板,MCU为stm32l475。需要先…...

红外线额温枪与红外线温度传感器的原理分析

额温枪主要针对测量人体额温基准而设计,使用也非常简单方便。测体温可以达到一秒即可准确测量。并且不需要接触人体,隔着空气即可一键测温。非常适合家庭、学校、企业等场所。 但是由于其精度原因(一般为 0.2 ℃,也有更低的&#…...

2023牛客寒假算法集训营4

目录A. [清楚姐姐学信息论](https://ac.nowcoder.com/acm/contest/46812/A)(数学)B. [清楚姐姐学构造](https://ac.nowcoder.com/acm/contest/46812/B)(数学 构造)C. [清楚姐姐学01背包(Easy Version)](https://ac.nowcoder.com/…...

vue组合式API及生命周期钩子函数

一、组合式API 什么是组合式API? vue3中支持vue2的选项式、支持新的编程模式–函数式编程(没有this指针)做了一个兼容,可以在一个组件中使用函数式编程和OOP编程(选项式) setup()函数 可以使用setup属性…...

Python|每日一练|数组|回溯|二分查找|排序和顺序统计量|.update方法 |单选记录:组合总和|寻找峰值|编程通过键盘输入每一位运动员

1、组合总和(数组、回溯) 给定一个无重复元素的数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。 candidates 中的数字可以无限制重复被选取。 说明: 所有数字(包括 t…...

minio下载文件速度很慢的原因分析与说明

文章目录1.实战背景2.问题描述3.问题分析4.问题解决1.实战背景 最近在做一个项目,需要用到minio来搭建文件系统,先简单说一下我在项目中设置的上传文件流程: 前端将分块文件逐一传给后端,后端再存储到 linux服务器的minio 当中。…...

基于comsol软件弯曲单模光纤模拟仿真

在本节中,主要基于实验室实际光纤单模圆柱光纤进行模拟,与comsol案例库文件在分析过程和建模有些差异: 模拟主要通过以下三个步骤进行:模型的几何构建、物理场的添加研究、结构处理分析来进行。 下面是第一步骤:几何…...

如何开启多个独立Chrome浏览器

一、简介 作为测试或者开发人员,有些情况下会用到 Chrome 浏览器,但有时是同一个 Chrome 浏览器无法为我们提供隔离开的不同环境。这样 我们就需要清理 cache 、切换账号等,降低了我们的工作效率。今天的主题是如何开启多个独立的 Chrome 浏…...

erp5开源制造业erp主要业务会计分录处理

erp5开源制造业erp主要业务会计分录处理 采购业务的会计分录 收到发票时 借:材料采购 (1201) 应交税费-应交增值税(进项税)(21710101) 贷:应付账款 (2121) 付款时 借:应付账款 (2121) 贷:银行存款 (1002) 入…...

技能树基础——17四平方和(拉格朗日定理,嵌套循环)

题目:四平方和定理,又称为拉格朗日定理:每个正整数都可以表示为至多4个正整数的平方和。如果把0包括进去,就正好可以表示为4个数的平方和。比如:5 0^ 2 0^ 2 1^ 2 2^27 1^ 2 1^ 2 1^ 2 2^2 (^符号表…...

JPA、EJB、事物管理---相关内容整理

目录 ■前言 ■实现原理:容器管理事务 ■代码实现简单描述: 1.JPA ■定义 ■1.1.配置文件 ■1.2.OSS jar ■1.3.一些OPA的类(举例) ■1.4. jpa 框架在实体类(Entity)中添加非数据库字段的属性--…...

C语言学习笔记(一):了解C语言

什么是C语言 C语言是一种高级编程语言,最早由丹尼斯里奇在1972年开发。它是一种通用编程语言,提供了高级编程语言的方便和易用性,同时又有较低级别的编程语言的灵活性和效率。C语言在许多操作系统、编译器和应用程序开发中广泛使用&#xff…...

Java多线程实现之Callable接口深度解析

Java多线程实现之Callable接口深度解析 一、Callable接口概述1.1 接口定义1.2 与Runnable接口的对比1.3 Future接口与FutureTask类 二、Callable接口的基本使用方法2.1 传统方式实现Callable接口2.2 使用Lambda表达式简化Callable实现2.3 使用FutureTask类执行Callable任务 三、…...

苍穹外卖--缓存菜品

1.问题说明 用户端小程序展示的菜品数据都是通过查询数据库获得,如果用户端访问量比较大,数据库访问压力随之增大 2.实现思路 通过Redis来缓存菜品数据,减少数据库查询操作。 缓存逻辑分析: ①每个分类下的菜品保持一份缓存数据…...

HashMap中的put方法执行流程(流程图)

1 put操作整体流程 HashMap 的 put 操作是其最核心的功能之一。在 JDK 1.8 及以后版本中,其主要逻辑封装在 putVal 这个内部方法中。整个过程大致如下: 初始判断与哈希计算: 首先,putVal 方法会检查当前的 table(也就…...

C++:多态机制详解

目录 一. 多态的概念 1.静态多态(编译时多态) 二.动态多态的定义及实现 1.多态的构成条件 2.虚函数 3.虚函数的重写/覆盖 4.虚函数重写的一些其他问题 1).协变 2).析构函数的重写 5.override 和 final关键字 1&#…...

处理vxe-table 表尾数据是单独一个接口,表格tableData数据更新后,需要点击两下,表尾才是正确的

修改bug思路: 分别把 tabledata 和 表尾相关数据 console.log() 发现 更新数据先后顺序不对 settimeout延迟查询表格接口 ——测试可行 升级↑:async await 等接口返回后再开始下一个接口查询 ________________________________________________________…...

纯 Java 项目(非 SpringBoot)集成 Mybatis-Plus 和 Mybatis-Plus-Join

纯 Java 项目(非 SpringBoot)集成 Mybatis-Plus 和 Mybatis-Plus-Join 1、依赖1.1、依赖版本1.2、pom.xml 2、代码2.1、SqlSession 构造器2.2、MybatisPlus代码生成器2.3、获取 config.yml 配置2.3.1、config.yml2.3.2、项目配置类 2.4、ftl 模板2.4.1、…...

RabbitMQ入门4.1.0版本(基于java、SpringBoot操作)

RabbitMQ 一、RabbitMQ概述 RabbitMQ RabbitMQ最初由LShift和CohesiveFT于2007年开发,后来由Pivotal Software Inc.(现为VMware子公司)接管。RabbitMQ 是一个开源的消息代理和队列服务器,用 Erlang 语言编写。广泛应用于各种分布…...

Python Einops库:深度学习中的张量操作革命

Einops(爱因斯坦操作库)就像给张量操作戴上了一副"语义眼镜"——让你用人类能理解的方式告诉计算机如何操作多维数组。这个基于爱因斯坦求和约定的库,用类似自然语言的表达式替代了晦涩的API调用,彻底改变了深度学习工程…...

第7篇:中间件全链路监控与 SQL 性能分析实践

7.1 章节导读 在构建数据库中间件的过程中,可观测性 和 性能分析 是保障系统稳定性与可维护性的核心能力。 特别是在复杂分布式场景中,必须做到: 🔍 追踪每一条 SQL 的生命周期(从入口到数据库执行)&#…...

为什么要创建 Vue 实例

核心原因:Vue 需要一个「控制中心」来驱动整个应用 你可以把 Vue 实例想象成你应用的**「大脑」或「引擎」。它负责协调模板、数据、逻辑和行为,将它们变成一个活的、可交互的应用**。没有这个实例,你的代码只是一堆静态的 HTML、JavaScript 变量和函数,无法「活」起来。 …...