【K8S】Kubernetes 基本架构、节点类型及运行流程详解(附架构图及流程图)

Kubernetes 架构

  1. k8s 集群 = 多个 master node + 多个 work node
  2. Master 节点(主节点):负责集群的管理任务,包括调度容器、维护集群状态、监控集群、管理服务发现等。
  3. Worker 节点(工作节点):实际运行应用程序的容器。每个工作节点上都运行着容器运行时(如 containerd),并接受来自主节点的调度指令。

节点:(Node)通常指一个物理服务器或虚拟机,承载运行容器的实际工作负载,节点可以看作是 Kubernetes 集群中的计算单元


组成结构

节点(Node)

  1. 定义:运行容器的物理服务器或虚拟机(在云环境中,节点通常是虚拟机;在本地环境或裸机环境中,节点可以是物理服务器)
  2. 节点的类型
    1. 主节点(Master Node 或 Control Plane)
    2. 工作节点(Worker Node)

主节点(Master Node)

  1. 定义:调度和管理整个集群的状态的地方

  2. 功能:负责管理整个 Kubernetes 集群的控制平面,处理集群的调度、API 调用、集群状态维护等任务。主节点通常不运行应用工作负载

  3. 组成

    组件功能描述
    Kube API Server集群的前端(类似集群的网关),负责接收和处理所有API请求,提供认证授权和访问控制功能
    Scheduler监控集群节点资源使用情况,根据调度策略将 Pod 分配到合适的工作节点
    Controller Manager管理集群中各种资源对象(如 Node、Pod、Service) 的状态,确保实际状态与期望状态一致
    etcd高可用键值存储系统,保存集群的配置信息和元数据
    Cloud Controller Manager云平台控制器,负责与云平台的API交互

工作节点(Worker Node)

  1. 定义:真正运行应用负载的地方,提供实际的计算资源和服务,所有应用服务都以 Pod 的形式运行在工作节点上,每个工作节点运行多个 Pod

  2. 功能:实际运行应用容器的节点。所有的应用 Pod 都部署在这些工作节点上

  3. 组成

    组件名称功能描述
    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 (容器)           || (运行在工作节点上,提供服务)   |+----------------------------+

工作流程


端口类型

  1. 外部访问的端口 (nodePort)
    • 定义:一个开放在每个 节点(Node)上的固定端口,是为每个 Service 分配的固定端口,一个向外暴露的 Service 对应一个 nodePort(端口范围通常在 30000-32767)
    • 功能:NodePort 类型的 Service 暴露一个端口给外部用户,使得外部请求可以通过固定的端口访问集群中的应用(接收到的外部请求会转发到 Service 暴露的端口(如 80))
  2. 服务暴露的端口 (port)
    • 定义:Kubernetes 使用 Service 来暴露和管理 Pod 的访问,port 端口是集群内的其他服务或容器通过该 Service 访问 Pod 的端口
    • 功能:Service 暴露多个端口(例如 80 端口),并将流量转发到端口对应的 Pods 中
  3. 服务设置的端口(targetPort
    1. 定义:targetPort 定义了 Service 转发到容器内部的具体端口(通常为 containerPort)
    2. 功能:Service 通过 targetPort 决定如何调用 Pod,通常不需要手动设置
  4. 容器内部的端口 (containerPort)
    1. 定义:Pod 内的 Container 向外暴露的端口,通过 containerPort 可以找到 port 中的一个容器
    • 功能:container 监听 containerPort 并处理请求,Service 会将请求从自己的端口转发到对应的 Pod 的 ContainerPort 上

工作流程

  1. 发起请求:客户端请求(外部请求)通过 NodeIP:NodePort 向 k8s 发起请求(NodeIP 决定请求的 Node,NodePort 决定请求的 Service)
  2. 监听与转发:每个 Node 上的 kube-proxy 监听多个到达 NodePort 端口的请求,并由 kube-proxy 将请求转发到 NodePort 对应的 Service
  3. 监听与转发:每个 Service 监听一个到达 NodePort 端口的请求,接收到请求后通过 selector 找到符合条件的 Pod,并通过负载均衡策略选择一个 pod 并将请求发送给这个 pod 对应的 targetPort 端口
  4. 监听请求:每个 pod 监听一个 targetPort 端口发来的请求,由 pod 中的主容器监听 containerPort(containerPort 和 targetPort 通常相同)
  5. 处理请求:主容器监听一个 ContainerPort 端口发来的请求,主容器接收请求并处理请求(或转发给其他容器处理请求)
  6. 处理请求:主容器接收并最终处理请求,处理过程中可能会通过 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

  • 工作流程

      1. 接收请求:Ingress 接收来自外部的 HTTP/HTTPS 请求
      1. 路由匹配:Ingress Controller 根据配置的路由规则(域名、路径等)匹配请求
      1. 转发请求:将请求转发到对应的后端服务(Service)
      • 支持基于路径的转发(如 /api -> api-service)
      • 支持基于域名的转发(如 api.example.com -> api-service)
      1. 负载均衡:Ingress Controller 可以实现请求的负载均衡
      1. 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 访问方式,适合基于域名或路径规则管理外部流量

示例

  1. 目标:通过 NodePort 服务将一个应用程序(MyApp)暴露给外部访问,使外部用户可以通过节点的 IP 地址和端口号(30080)访问该应用

  2. 工作流程

    1. 将 myApp-service 服务通过 30080 端口暴露给外部,供外部访问
    2. Kube Proxy 监听 30080 端口请求,并将请求转发到 myApp-service 对应的端口 80
    3. Service 根据 selector 选择 app=MyApp 的 Pod ,并通过负载均衡策略选择一个 Pod 处理请求
    4. Service 将请求转发到后端 Pod 的端口(targetPort: 8080)
    5. Pod 处理请求并返回响应给 Service
    6. Service 将响应返回给 Kube Proxy
    7. Kube Proxy 将响应返回给用户
  3. 代码实现

    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之间
    

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

千峰React:案例二

完成对html文档还有css的引入&#xff0c;引入一下数据&#xff1a; import { func } from prop-types import ./购物车样式.css import axios from axios import { useImmer } from use-immer import { useEffect } from reactfunction Item() {return (<li classNameacti…

C语言【指针篇】(四)

前言&#xff1a;正文1. 字符指针变量2. 数组指针变量2.1 数组指针变量是什么?2.2 数组指针变量怎么初始化 3. 二维数组传参的本质4. 函数指针变量4.1 函数指针变量的创建4.2 函数指针变量的使用4.3 两段有趣的代码4.3.1 typedef关键字 5. 函数指针数组6. 转移表 总结 前言&am…

GitCode 助力 python-office:开启 Python 自动化办公新生态

项目仓库&#xff1a;https://gitcode.com/CoderWanFeng1/python-office 源于需求洞察&#xff0c;打造 Python 办公神器 项目作者程序员晚枫在运营拥有 14w 粉丝的 B 站账号 “Python 自动化办公社区” 时&#xff0c;敏锐察觉到非程序员群体对 Python 学习的强烈需求。在数字…

对话Stack Overflow,OceanBase CTO 杨传辉谈分布式数据库的“前世今生”

近日&#xff0c; OceanBase CTO 杨传辉受邀出席全球知名开发者论坛 Stack Overflow 的最新一期播客节目&#xff0c;与 Stack Overflow 高级内容创作官 Ryan Donovan 展开对话。双方围绕分布式数据库的可靠性、一致性保障、HTAP 架构以及 AI 时代分布式数据库的发展趋势等热点…

小结:计算机网路中的性能指标小结

发现B站的这套课程不错&#xff0c;开始学习并笔记之&#xff1a;计算机网络微课堂&#xff08;有字幕无背景音乐版&#xff09;_哔哩哔哩_bilibili 1) 速率 2) 带宽 3) 吞吐量 带宽1 Gb/s的以太网&#xff0c;代表其额定速率是1 Gb/s&#xff0c;这个数值也…

seasms v9 注入漏洞 + order by注入+​information_schema​解决方法

目录 一、当注入时&#xff0c;information_schema被禁用的解决方法 1.通过sys库可以获取到表名和库名 2.通过无列名注入join获取列名 二、seasms v9 注入漏洞 三、order by注入 一、当注入时&#xff0c;information_schema被禁用的解决方法 information_schema数据库是My…

FFmpeg-chapter2-C++中的线程

1 常规的线程 一般常规的线程如下所示 // CMakeProject1.cpp: 定义应用程序的入口点。 //#include "CMakeProject1.h" #include <thread> using namespace std;void threadFunction(int index) {for (int i 0; i < 1000; i){std::cout << "Th…

【华三】从零开始掌握SR技术:原理、架构与应用全解析

【华三】从零开始掌握SR技术&#xff1a;原理、架构与应用全解析 一、初识SR&#xff1a;路由技术的新革命1.1 传统网络的困扰&#xff1a;从真实案例看技术瓶颈1.1.1 企业网络运维之痛问题2&#xff1a;流量工程实现困难问题3&#xff1a;网络智能化缺失 1.2 SR的诞生意义&…

CogBlobTool工具

CogBlobTool是一款专用于图像斑点检测于分析的 工具&#xff0c;通过灰度值阈值分割和特征过滤&#xff0c;帮助在复杂背景中提取目标区域&#xff0c;并计算几何属性。 效果图 注意&#xff1a;在这里只有一张图像可以不使用模板匹配工具 CogBlobTool工具的功能 斑点检测于…

大模型应用案例 | 大模型+金融运维,擎创携手某证券创新运维能力新范式

一、当大模型遇上金融运维&#xff1a;一场让告警处理“脱胎换骨”的变革 2022年底&#xff0c;ChatGPT的横空出世让AI技术彻底出圈&#xff1b;短短两年后&#xff0c;大模型已悄然潜入金融行业的“心脏地带”——运维系统。面对指数级暴增的告警信息、碎片化的处理流程&#…

Linux三种网络方式

前言 发现运维啥都得会&#xff0c;这周就遇到了网络问题自己无法解决&#xff0c;因此痛定思痛学一下。 参考文献 你管这破玩意叫网络&#xff1f; 桥接模式、NAT模式、仅主机模式&#xff0c;原来是这样工作的 交换机 构成局域网&#xff0c;实现所有设备之间的通信。 …

基于PHP和MySQL的用户登录注册系统实现

系统架构 系统采用前后端分离的架构&#xff0c;使用PHP作为后端语言&#xff0c;MySQL作为数据库。以下是系统的整体架构图&#xff1a; 这个架构图展示了系统的三个主要层次&#xff1a; 前端界面层&#xff1a;包含用户交互的三个页面&#xff08;注册、登录和欢迎页面&am…

脚本无法获取响应主体(原因:CORS Missing Allow Credentials)

背景&#xff1a; 前端的端口号8080&#xff0c;后端8000。需在前端向后端传一个参数&#xff0c;让后端访问数据库去检测此参数是否出现过。涉及跨域请求&#xff0c;一直有这个bug是404文件找不到。 在修改过程当中不小心删除了一段代码&#xff0c;出现了这个bug&#xff0…

【计网】计算机网络概述

第一章 计算机网络概述 1.2 因特网概述1.2.1 网络、互联网和因特网1.2.2 因特网发展的三个阶段1.2.3 因特网的标准化工作1.2.4 因特网的组成 1.3 三种交换方式1.3.1 电路交换1.3.2 分组交换1.3.3 报文交换1.3.4 三种交换的对比 1.4 计网的定义与分类1.4.1 定义1.4.2 分类 1.5 计…

前端依赖nrm镜像管理工具

npm 默认镜像 &#xff1a;https://registry.npmjs.org/ 1、安装 nrm npm install nrm --global2、查看镜像源列表 nrm ls3、测试当前环境下&#xff0c;哪个镜像源速度最快。 nrm test4、 切换镜像源 npm config get registry # 查看当前镜像源 nrm use taobao # 等价于 npm…

LinkedList与链表

目录 1、链表 2、实现自己的链表 (不带头结点) 2.1、遍历链表 2.2、求链表长度 2.3、判断链表是否包含关键字 2.4、插入节点 2.5、任意位置插入一个节点 2.6、删除一个节点 2.7、删除所有值为key的节点 2.8、清空所有节点 1、链表 链表是一种物理结构上不连续的存储结…

StableDiffusion打包 项目迁移 项目分发 1

文章目录 SD项目迁移前置知识webui-user.batwebui.batlaunch_utils.py 下一篇开始实践 SD项目迁移 显卡驱动更新&#xff1a;https://www.nvidia.cn/geforce/drivers/ 下载安装三个程序&#xff1a; python3.10.6: https://www.python.org/downloads/release/python-3106/gi…

架构案例:从初创互联网公司到分布式存储与反应式编程框架的架构设计

文章目录 引言一、初创互联网公司架构演化案例1. 万级日订单级别架构2. 十万级日订单级别架构3. 百万级日订单级别架构 二、分布式存储系统 Doris 架构案例三、反应式编程框架架构案例总结 引言 分布式架构 今天我们将探讨三种不同类型的架构案例&#xff0c;分别探讨 一个初…

Xshell客户端免费版无需注册Linux连接客户端8.0详细安装教程(2025年最全最详细的图文教程)附安装包

目录 关联链接 前言 一、下载安装程序 二、安装Xshell客户端 1.启动安装 2.下一步 3.许可协议 4.安装目录 5.开始安装 6.安装完成 7.免费许可 8.大功告成&#xff01; 关联链接 Xftp免费客户端安装教程&#xff1a;https://blog.csdn.net/xiaoguo1001/article/detai…

electron多进程通信

进程间通信 | Electron 进程间通信 (IPC) 是在 Electron 中构建功能丰富的桌面应用程序的关键部分之一。 由于主进程和渲染器进程在 Electron 的进程模型具有不同的职责&#xff0c;因此 IPC 是执行许多常见任务的唯一方法&#xff0c;例如从 UI 调用原生 API 或从原生菜单触发…