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即可
流程如下:
-
在master节点写yaml描述你对容器的运行要求,创建pod的要求。install-pod.yaml
-
使用kubectl命令去创建,应用这个资源描述文件,因此k8s组件交互发出请求,我要创建一个pod去运行nginx了,那么请求应该发给谁呢?
kubectl create -f install-nginx.yaml这个请求发给api-server。
-
api-server此时会验证kubectl命令发来的请求是否被允许。利用本地https证书,这个证书是直接写入Kubectl配置文件里面的,该请求被允许之后才会执行。
-
api-server将nginx-pod创建的信息记录到etcd数据库中(数据库记录了一些信息,例如nginx镜像版本,容器名,是否要端口暴露)。
-
api-server会通知下一个组件,调度器组件,scheduler准备pod调度。
-
scheduler调度,会去etcd里面查询,部署的pod信息到底是如何,然后判定出一个合适的node节点去部署pod(选择了好了具体的机器,但是还没有执行)
-
scheduler调度器,会告诉api-server自己决定pod要部署到哪台node节点上。
-
api-server会把这个信息再次写入到etcd中,数据更新了(nginx本身的容器信息+绑定关系,部署到哪个机器上面)
-
此时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语言在许多操作系统、编译器和应用程序开发中广泛使用ÿ…...
变量 varablie 声明- Rust 变量 let mut 声明与 C/C++ 变量声明对比分析
一、变量声明设计:let 与 mut 的哲学解析 Rust 采用 let 声明变量并通过 mut 显式标记可变性,这种设计体现了语言的核心哲学。以下是深度解析: 1.1 设计理念剖析 安全优先原则:默认不可变强制开发者明确声明意图 let x 5; …...
业务系统对接大模型的基础方案:架构设计与关键步骤
业务系统对接大模型:架构设计与关键步骤 在当今数字化转型的浪潮中,大语言模型(LLM)已成为企业提升业务效率和创新能力的关键技术之一。将大模型集成到业务系统中,不仅可以优化用户体验,还能为业务决策提供…...
RocketMQ延迟消息机制
两种延迟消息 RocketMQ中提供了两种延迟消息机制 指定固定的延迟级别 通过在Message中设定一个MessageDelayLevel参数,对应18个预设的延迟级别指定时间点的延迟级别 通过在Message中设定一个DeliverTimeMS指定一个Long类型表示的具体时间点。到了时间点后…...
<6>-MySQL表的增删查改
目录 一,create(创建表) 二,retrieve(查询表) 1,select列 2,where条件 三,update(更新表) 四,delete(删除表…...
k8s从入门到放弃之Ingress七层负载
k8s从入门到放弃之Ingress七层负载 在Kubernetes(简称K8s)中,Ingress是一个API对象,它允许你定义如何从集群外部访问集群内部的服务。Ingress可以提供负载均衡、SSL终结和基于名称的虚拟主机等功能。通过Ingress,你可…...
【解密LSTM、GRU如何解决传统RNN梯度消失问题】
解密LSTM与GRU:如何让RNN变得更聪明? 在深度学习的世界里,循环神经网络(RNN)以其卓越的序列数据处理能力广泛应用于自然语言处理、时间序列预测等领域。然而,传统RNN存在的一个严重问题——梯度消失&#…...
剑指offer20_链表中环的入口节点
链表中环的入口节点 给定一个链表,若其中包含环,则输出环的入口节点。 若其中不包含环,则输出null。 数据范围 节点 val 值取值范围 [ 1 , 1000 ] [1,1000] [1,1000]。 节点 val 值各不相同。 链表长度 [ 0 , 500 ] [0,500] [0,500]。 …...
srs linux
下载编译运行 git clone https:///ossrs/srs.git ./configure --h265on make 编译完成后即可启动SRS # 启动 ./objs/srs -c conf/srs.conf # 查看日志 tail -n 30 -f ./objs/srs.log 开放端口 默认RTMP接收推流端口是1935,SRS管理页面端口是8080,可…...
Unit 1 深度强化学习简介
Deep RL Course ——Unit 1 Introduction 从理论和实践层面深入学习深度强化学习。学会使用知名的深度强化学习库,例如 Stable Baselines3、RL Baselines3 Zoo、Sample Factory 和 CleanRL。在独特的环境中训练智能体,比如 SnowballFight、Huggy the Do…...
OpenLayers 分屏对比(地图联动)
注:当前使用的是 ol 5.3.0 版本,天地图使用的key请到天地图官网申请,并替换为自己的key 地图分屏对比在WebGIS开发中是很常见的功能,和卷帘图层不一样的是,分屏对比是在各个地图中添加相同或者不同的图层进行对比查看。…...
