【K8S】Kubernetes 基本架构、节点类型及运行流程详解(附架构图及流程图)
Kubernetes 架构
- k8s 集群 = 多个 master node + 多个 work node
- Master 节点(主节点):负责集群的管理任务,包括调度容器、维护集群状态、监控集群、管理服务发现等。
- Worker 节点(工作节点):实际运行应用程序的容器。每个工作节点上都运行着容器运行时(如
containerd),并接受来自主节点的调度指令。
节点:(Node)通常指一个物理服务器或虚拟机,承载运行容器的实际工作负载,节点可以看作是 Kubernetes 集群中的计算单元

组成结构
节点(Node)
- 定义:运行容器的物理服务器或虚拟机(在云环境中,节点通常是虚拟机;在本地环境或裸机环境中,节点可以是物理服务器)
- 节点的类型
- 主节点(Master Node 或 Control Plane)
- 工作节点(Worker Node)
主节点(Master Node)
-
定义:调度和管理整个集群的状态的地方
-
功能:负责管理整个 Kubernetes 集群的控制平面,处理集群的调度、API 调用、集群状态维护等任务。主节点通常不运行应用工作负载
-
组成
组件 功能描述 Kube API Server集群的前端(类似集群的网关),负责接收和处理所有API请求,提供认证授权和访问控制功能 Scheduler监控集群节点资源使用情况,根据调度策略将 Pod 分配到合适的工作节点 Controller Manager管理集群中各种资源对象(如 Node、Pod、Service) 的状态,确保实际状态与期望状态一致 etcd高可用键值存储系统,保存集群的配置信息和元数据 Cloud Controller Manager云平台控制器,负责与云平台的API交互
工作节点(Worker Node)
-
定义:真正运行应用负载的地方,提供实际的计算资源和服务,所有应用服务都以 Pod 的形式运行在工作节点上,每个工作节点运行多个 Pod
-
功能:实际运行应用容器的节点。所有的应用 Pod 都部署在这些工作节点上
-
组成
组件名称 功能描述 kubelet 负责管理和维护 Pod 对象,保证 Pod 按预期运行,并定期与 Kubernetes API Server 进行通信获取新的 pod 规范,汇报 pod 的运行情况 kube-proxy 负责为 pod 对象提供网络代理和负载均衡,确保网络流量正确转发到相应的 Pod container runtime 负责拉取容器镜像、创建容器、启动或者停止容器等等(如 Docker-Engine 或 containerd) 
架构图
+---------------------------------------+
| kubectl |
| (用户接口:CLI工具,与API Server交互) |
+---------------------------------------+|
+---------------------------------------+
| API Server (控制平面) |
| (接收和处理请求,管理集群状态) |
+---------------------------------------+| | | |
+--------+ +--------+ +----------+ +---------------------+
| etcd | |Scheduler| |Controller| | Kubelet (每个节点) |
| (存储) | | (调度器) | | Manager | | (工作节点上运行Pod) |
+--------+ +--------+ +----------+ +----------------0----+|+----------------------------+| Pod (容器) || (运行在工作节点上,提供服务) |+----------------------------+
工作流程

端口类型
- 外部访问的端口 (
nodePort)- 定义:一个开放在每个 节点(Node)上的固定端口,是为每个 Service 分配的固定端口,一个向外暴露的 Service 对应一个 nodePort(端口范围通常在 30000-32767)
- 功能:NodePort 类型的 Service 暴露一个端口给外部用户,使得外部请求可以通过固定的端口访问集群中的应用(接收到的外部请求会转发到 Service 暴露的端口(如 80))
- 服务暴露的端口 (
port)- 定义:Kubernetes 使用 Service 来暴露和管理 Pod 的访问,port 端口是集群内的其他服务或容器通过该 Service 访问 Pod 的端口
- 功能:Service 暴露多个端口(例如 80 端口),并将流量转发到端口对应的 Pods 中
- 服务设置的端口(
targetPort)- 定义:targetPort 定义了 Service 转发到容器内部的具体端口(通常为 containerPort)
- 功能:Service 通过 targetPort 决定如何调用 Pod,通常不需要手动设置
- 容器内部的端口 (
containerPort)- 定义:Pod 内的 Container 向外暴露的端口,通过 containerPort 可以找到 port 中的一个容器
- 功能:container 监听 containerPort 并处理请求,Service 会将请求从自己的端口转发到对应的 Pod 的 ContainerPort 上
工作流程
- 发起请求:客户端请求(外部请求)通过
NodeIP:NodePort向 k8s 发起请求(NodeIP 决定请求的 Node,NodePort 决定请求的 Service) - 监听与转发:每个 Node 上的 kube-proxy 监听多个到达 NodePort 端口的请求,并由 kube-proxy 将请求转发到 NodePort 对应的 Service
- 监听与转发:每个 Service 监听一个到达 NodePort 端口的请求,接收到请求后通过 selector 找到符合条件的 Pod,并通过负载均衡策略选择一个 pod 并将请求发送给这个 pod 对应的 targetPort 端口
- 监听请求:每个 pod 监听一个 targetPort 端口发来的请求,由 pod 中的主容器监听 containerPort(containerPort 和 targetPort 通常相同)
- 处理请求:主容器监听一个 ContainerPort 端口发来的请求,主容器接收请求并处理请求(或转发给其他容器处理请求)
- 处理请求:主容器接收并最终处理请求,处理过程中可能会通过 containerPort 调用其他容器的功能

服务分类
ClusterIP 服务
- 定义:仅在 Kubernetes 集群内部可访问,服务的 IP 地址只在集群内部网络中有效,无法从集群外部通过 ClusterIP 直接访问服务
- 适用场景:内部服务之间的通信,如微服务架构中服务间的 RPC 调用
NodePort 服务
-
定义:Node 中的 Service 的端口号,集群通过 NodeIP:NodePort 将服务暴露给外部用户 -
功能:用于将服务暴露在每个 Node(包括 Worker 和 Master)上的特定端口 -
缺点:多个服务有多个 IP,用户访问哪个 IP 就会访问对应的 Node,没有统一的负载均衡策略 -
工作流程- 创建服务:用户创建一个 NodePort 类型的服务
- 分配端口号:Kubernetes 会在集群中所有节点(包括 Worker Node 和 Master Node)上分配一个特定的端口(通常在 30000-32767 之间)
- 访问服务:外部请求可以通过 任何节点(Master 或 Worker)的IP地址 + NodePort 来访问服务(不仅限于 Master Node)
-
示例如果在集群中定义了一个 NodePort 服务,分配了端口号 30001,并且集群有三个节点:
- Master Node IP: 192.168.1.10
- Worker Node 1 IP: 192.168.1.20
- Worker Node 2 IP: 192.168.1.30
那么可以从集群外通过以下任意地址访问该服务:
- http://192.168.1.10:30001 (Master Node)
- http://192.168.1.20:30001 (Worker Node 1)
- http://192.168.1.30:30001 (Worker Node 2)
LoadBalancer 服务
定义:服务商提供的外部 IP,让用户通过统一的 IP 地址(External IP)访问服务- **ExternalIP:**使外部访问可以通过集群节点的 IP 地址访问指定服务(很少用,更常见的是通过 NodePort 或 Ingress 暴露服务)
功能- 自动创建一个外部负载均衡器,并将流量路由到 Kubernetes 集群中的服务
- 提供了更简便的方式访问服务(通过一个外部 IP) ,通常用于云环境(如 AWS、GCP、Azure)
缺点:用户需要知道具体的 IP 地址,可读性不好,不便于用户记忆工作流程- 创建服务:用户创建一个 LoadBalancer 类型的服务
- 分配 IP:服务商分配一个外部 IP 地址给这个服务
- 访问服务:用户可以通过这个外部 IP 地址直接访问该服务,而不需要知道任何节点的 IP
⭐ Ingress 服务
-
定义:Kubernetes 用于 HTTP/HTTPS 路由的组件,通常配合 Ingress Controller(如 Nginx Ingress Controller)来工作 -
功能:将外部流量转发到内部服务,使外部访问可以通过配置域名、路径等规则访问服务,而不需要知道具体的 IP -
工作流程-
- 接收请求:Ingress 接收来自外部的 HTTP/HTTPS 请求
-
- 路由匹配:Ingress Controller 根据配置的路由规则(域名、路径等)匹配请求
-
- 转发请求:将请求转发到对应的后端服务(Service)
- 支持基于路径的转发(如 /api -> api-service)
- 支持基于域名的转发(如 api.example.com -> api-service)
-
- 负载均衡:Ingress Controller 可以实现请求的负载均衡
-
- SSL/TLS 终止:处理 HTTPS 请求的 SSL/TLS 终止(如果配置了证书)
-
-
组成部分组件 功能 Ingress 资源 定义路由规则,指定如何将外部请求转发到内部服务 Ingress Controller 实现 Ingress 资源定义的规则,通常使用 Nginx、Traefik 等 后端服务 处理实际请求的 Kubernetes Service,可以是 ClusterIP、NodePort 等类型
总结
- ClusterIP 类型的服务 :内部访问使用的 IP,无法从集群外部访问
- ⭐NodePort 类型的服务:外部可以访问的服务,使用 ”任意节点(Master 或 Worker)的 IP 地址” + “NodePort” 进行访问
- LoadBalancer 类型的服务:在云环境中,可以使用 LoadBalancer 类型的服务来获得一个外部 IP 地址,直接从外部访问
- ⭐Ingress 类型的服务:提供了一种更加灵活的 HTTP/HTTPS 访问方式,适合基于域名或路径规则管理外部流量
示例
-
目标:通过 NodePort 服务将一个应用程序(MyApp)暴露给外部访问,使外部用户可以通过节点的 IP 地址和端口号(30080)访问该应用
-
工作流程
- 将 myApp-service 服务通过 30080 端口暴露给外部,供外部访问
- Kube Proxy 监听 30080 端口请求,并将请求转发到 myApp-service 对应的端口 80
- Service 根据 selector 选择 app=MyApp 的 Pod ,并通过负载均衡策略选择一个 Pod 处理请求
- Service 将请求转发到后端 Pod 的端口(targetPort: 8080)
- Pod 处理请求并返回响应给 Service
- Service 将响应返回给 Kube Proxy
- Kube Proxy 将响应返回给用户
-
代码实现
apiVersion: v1 # 声明 API 版本(如何同 API Server 进行交互),v1 最常用 kind: Service # 声明资源类型为 Service metadata: # 声明服务的元数据name: myApp-service # 声明服务的名字,Kubernetes 内部和外部引用该服务时将使用这个名字 spec: # specification: 声明资源对象的配置信息type: NodePort # 声明该服务为节点端口类型的 (向外暴露的服务)selector: # 选择器,用来选择对应的 Pod,服务会将流量转发到符合条件的 Podapp: MyApp # 选择 pod 的 Label 中 app=nginx 的资源ports:- protocol: TCP # 指定服务使用的协议是 TCPport: 80 # 服务对集群内部公开的端口targetPort: 8080 # 服务后方 pod 的端口nodePort: 30080 # 声明向外提供服务的端口号, 必须在30000~32767之间
相关文章:
【K8S】Kubernetes 基本架构、节点类型及运行流程详解(附架构图及流程图)
Kubernetes 架构 k8s 集群 多个 master node 多个 work nodeMaster 节点(主节点):负责集群的管理任务,包括调度容器、维护集群状态、监控集群、管理服务发现等。Worker 节点(工作节点):实际运…...
Windows版FFmpeg使用及B站视频下载示例python源码
Windows版FFmpeg使用及B站视频下载示例python源码 FFmpeg介绍和下载 FFmpeg 是一个功能强大、灵活且广泛使用的多媒体处理工具,无论是在专业领域还是日常使用中,都能满足各种多媒体处理需求。FFmpeg 是一个开源项目,遵循 LGPL 或 GPL 许可。…...
飞书考勤Excel导入到自己系统
此篇主要用于记录Excel一行中,单条数据的日期拿取,并判断上下班打卡情况。代码可能满足不了大部分需求,目前只够本公司用,如果需要,可以参考。 需要把飞书月度汇总的考勤表导入系统中可以参考下。 下图为需要获取的年…...
【leetcode hot 100 560】和为K的子数组
解法一:用左右指针寻找字串,如果和>k,则减少一个数(left);如果和<k,则加上一个数(right)。 class Solution {public int subarraySum(int[] nums, int k) {int nu…...
EGO-Planner的无人机视觉选择(yolov5和yolov8)
EGO-Planner的无人机视觉选择(yolov5和yolov8) 效果 yolov5检测效果 yolov8检测效果 一、YOLOv8 vs YOLOv5:关键差异解析 1. 训练效率:为何YOLOv8更快? 架构轻量化 YOLOv8采用C2f模块(Cross Stage Partia…...
C++ | 面向对象 | 类
👻类 👾语法格式 class className{Access specifiers: // 访问权限DataType variable; // 变量returnType functions() { } // 方法 };👾访问权限 class className {public:// 公有成员protected:// 受保护成员private:// 私有成员 }…...
性能测试分析和调优
步骤 性能调优的步骤 性能调优的步骤: 1.确定问题:根据性能测试的结果来分析确定bug。–测试人员职责 2.分析原因:分析问题产生的原因。----开发人员职责 3.给出解决方案:可以是修改软件配置、增加硬件资源配置、修改代码等----…...
阿里云oss文件上传springboot若依java
一、第一步 引入依赖 <!-- 阿里云OSS --> <dependency><groupId>com.aliyun.oss</groupId><artifactId>aliyun-sdk-oss</artifactId> </dependency> 二、第二步 application.yml #阿里云oss服务配置 aliyun:oss:endpoint: …...
【自学笔记】Oracle基础知识点总览-持续更新
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 Oracle 数据库基础知识点总览1. 数据库安装与配置2. SQL基础3. PL/SQL基础4. 数据库管理5. 高级主题 总结 Oracle 数据库基础知识点总览 1. 数据库安装与配置 安装…...
使用create_sql_query_chain工具根据自然语言问题生成SQL查询,踩坑版
1. 开启调试模式 from langchain import debugdebug True # 启用调试模式说明: 这里从 langchain 库中导入了一个名为 debug 的变量(或模块),然后将它设置为 True。这通常用来启用调试模式,方便开发者在程序运行时看…...
PyInstaller 打包python 程序 成 可执行文件
pyinstaller --onefile --name my_project --add-data "config/config.json:config" main.py 要将整个 Python 项目打包成一个可执行文件,可以使用 PyInstaller 来完成这个任务。以下是如何将整个项目打包成可执行文件的步骤: 1. 安装 PyIns…...
生鲜行业智能化供应链解决方案技术白皮书
行业痛点与技术挑战 损耗控制难题 行业平均损耗率达18%-25%,需构建动态定价模型与智能分拣系统 冷链管理复杂度 全程温控数据采集点超过23个/车次,异常响应延迟需压缩至90秒内 供需预测偏差 传统模式预测准确率不足65%,亟需AI驱动需求预测体…...
preg_replace 与 str_replace 的比较与选择
preg_replace 与 str_replace 的比较与选择 ——PHP字符串处理的核心工具深度解析 一、核心功能定位 在PHP的字符串处理中,str_replace和preg_replace是两种最常用的替换函数,但其设计目标和应用场景存在本质差异: str_replace 简单字符串替…...
无人机自主导航与避障技术!
自主导航的实现 环境感知:通过传感器(如摄像头、激光雷达、超声波传感器等)获取周围环境信息。 地图构建:利用SLAM(同步定位与地图构建)技术,实时生成环境地图并确定无人机的位置。 路径规划…...
密码学(哈希函数)
4.1 Hash函数与数据完整性 数据完整性: 检测传输消息(加密或未加密)的修改。 密码学Hash函数: 构建某些数据的简短“指纹”;如果数据被篡改,则该指纹(以高概率)不再有效。Hash函数…...
深入探索 STM32 微控制器:从基础到实践
一、引言 在当今的嵌入式系统领域,STM32 系列微控制器凭借其高性能、低功耗、丰富的外设以及广泛的应用场景,成为了众多开发者的首选。无论是在工业控制、智能家居、医疗设备,还是在消费电子等领域,STM32 都展现出了强大的生命力…...
React 常见面试题及答案
记录面试过程 常见问题,如有错误,欢迎批评指正 1. 什么是虚拟DOM?为什么它提高了性能? 虚拟DOM是React创建的一个轻量级JavaScript对象,表示真实DOM的结构。当状态变化时,React会生成新的虚拟DOM…...
SpringSecurity 实现token 认证
配置类 Configuration EnableWebSecurity EnableGlobalMethodSecurity(prePostEnabledtrue) public class SpringSecurityConfig extends WebSecurityConfigurerAdapter { Bean Override public AuthenticationManager authenticationManagerBean() throws Exception {return s…...
【详解 | 辨析】“单跳多跳,单天线多天线,单信道多信道” 之间的对比
文章目录 1. 单跳 & 多跳2. 单天线 & 多天线3. 单信道 & 多信道4. 小区内通信 & 小区间通信5. 更多辨析5.1 无线Mesh网络,Ad Hoc网络,无线传感器网络(MSN)5.2 “单天线/多天线”与“单信道/多信道”的区别 6. 工业…...
嵌入式开发工程师笔试面试指南-HR面试常见问题汇总
在嵌入式领域的招聘面试中,HR 通过一系列精心设计的问题,全面考察候选人的综合素质、专业能力以及与岗位的匹配度。以下从多个关键方面汇总了 HR 在嵌入式面试中常见的问题。 ** 一、语言表达方面 请简单介绍一下你自己这是面试开场常见问题,旨在让候选人做一个自我展示,…...
Docker 搭建 Gitlab 服务器 (完整详细版)
参考 Docker 搭建 Gitlab 服务器 (完整详细版)_docker gitlab-CSDN博客 Docker 安装 (完整详细版)_docker安装-CSDN博客 Docker 日常命令大全(完整详细版)_docker命令-CSDN博客 1、Gitlab镜像 # 查找Gitlab镜像 docker search gitlab # 拉取Gitlab镜像 docker pull gitlab/g…...
MongoDB安全管理
MongoDB如何鉴权 保证数据的安全性是数据库的重大职责之一。与大多数数据库一样,MongoDB内部提供了一套完整的权限防护机制。如下例所示: mongo --host 127.0.0.1 --port 27017 --username someone --password errorpass --authenticationDatabasestor…...
架构案例:从初创互联网公司到分布式存储与反应式编程框架的架构设计
文章目录 引言一、初创互联网公司架构演化案例1. 万级日订单级别架构2. 十万级日订单级别架构3. 百万级日订单级别架构 二、分布式存储系统 Doris 架构案例三、反应式编程框架架构案例总结 引言 分布式架构 今天我们将探讨三种不同类型的架构案例,分别探讨 一个初…...
神经网络之CNN图像识别(torch api 调用)
1.简介 CNN 是受生物学上感受野机制启发而提出的。它通过卷积操作自动提取数据中的特征,避免了传统机器学习方法中复杂的特征工程过程,能够自动学习到数据中的有效特征,从而进行分类、识别等任务。 2.结构 2.1卷积: 假设你有一…...
使用Truffle、Ganache、MetaMask、Vue+Web3完成的一个简单区块链项目
文章目录 概要初始化Truffle项目创建编写合约编译合约配置Ganache修改truffle-config.js文件编写迁移文件部署合约使用Truffle 控制台使用MetaMask和VueWeb3与链交互 概要 使用Truffle、Ganache、MetaMask、VueWeb3完成的一个简单区块链项目。 初始化Truffle项目 安装好truf…...
学生管理前端
文章目录 首页student.html查询功能 首页 SpringBoot前端html页面放在static文件夹下:/src/main/resources/static 默认首页为index.html,我们可以用两个超链接或者两个button跳转到对应的页面。这里只是单纯的跳转页面,不需要提交表单等其…...
DeepSeek 助力 Vue3 开发:打造丝滑的网格布局(Grid Layout)
前言:哈喽,大家好,今天给大家分享一篇文章!并提供具体代码帮助大家深入理解,彻底掌握!创作不易,如果能帮助到大家或者给大家一些灵感和启发,欢迎收藏关注哦 💕 目录 Deep…...
lvgl运行机制分析
lv_timer_handler() 是 LVGL 的“心脏”:这个函数会依次做以下事情: 处理定时器(如动画、延迟回调)。 读取输入设备(如触摸屏、按键的状态)。 刷新脏区域(仅重绘屏幕上发生变化的区域…...
ffmpeg avformat_open_input的作用
1. avformat_open_input 的作用 avformat_open_input 是 FFmpeg 中用于打开输入文件或输入设备的函数。它的主要作用是初始化输入文件或设备的上下文(AVFormatContext),并准备好从输入源读取数据。 2. avformat_open_input 的功能 打开输入文…...
leaflet扩展插件esri-leaflet.js
esri-leaflet.js是一个开源的JavaScript库,它允许开发者在Leaflet地图上轻松地使用Esri的服务,如ArcGIS Online和ArcGIS Server的图层。以下是对esri-leaflet.js插件的详细介绍: 一、主要功能 esri-leaflet.js的主要功能是将Esri的地图服务…...
