01.Kubernetes 概述
Kubernetes 概述
- Kubernetes 概述
- 1. Kubernetes系统组件、集群及工作机制
- 1.1 Kubernetes 集群的节点类型
- 1.2 Kubernetes 集群架构
- 1.2.1 API Server
- 1.2.2 Cluster Store (etcd)
- 1.2.3 Controller Manager
- 1.2.4 Scheduler
- 1.2.5 Kubelet
- 1.2.6 Kube Proxy
- 1.3 Kubernetes Add-ons
- 1.4 Pod 和应用
- 1.4.1 为什么要设计 Service 资源?
- 1.4.2 Pod 和工作负载型控制器
- 1.4.3 部署并访问应用
- 1.5 Kubernetes 网络基础
- 1.5.1 Kubernetes 网络模型
- 1.5.2 Kubernetes 集群中的通信流量
Kubernetes 概述
Kubernetes 适用于所有编排语言,且解决更广泛的 MSA 的问题
Kubernetes 还支持配置环境、设置资源约束、RBAC、管理应用程序生命周期、启用自动扩展和自我修复等, 自带反脆弱能力
1. Kubernetes系统组件、集群及工作机制
1.1 Kubernetes 集群的节点类型
由 Master 和 Worker 两类节点组成:
- Master:控制节点
- Worker:工作节点
运行逻辑
- Kubernetes 将所有工作节点的资源集结在一起形成一台更加强大的“服务器”,称为 Kuernetes 集群
- 计算和存储接口通过 Master 之上的 API Server 暴露
- 客户端通过 API 提交应用程序的运行请求,而后由 Master 通过调度算法将其自动指派至某特定的工作节点以 Pod 对象的形式运行
- Master 会自动处理因工作节点的添加、故障或移除等变动对 Pod 的影响
1.2 Kubernetes 集群架构
Kubernetes 属于典型的 Server-Client 形式的二层架构
- Master 主要由 API Server、Controller-Manager 和 Scheduler 三个组件,以及一个用于集群状态存储的 Etcd 存储服务组成,它们构成整个集群的控制平面
- 而每个 Node 节点则主要包含 Kubelet、Kube Proxy 及容器运行时(docker是最为常用的实现)三个组件,它们承载运行各类应用容器
1.2.1 API Server
- 整个集群的 API 网关,相关应用程序为 kube-apiserver
- 基于 http/https 协议以 REST 风格提供,几乎所有功能全部抽象为“资源”及相关的“对象”
- 声明式 API,用于只需要声明对象的“终态”,具体的业务逻辑由各资源相关的 Controller 负责完成
- 无状态,数据存储于 etcd 中
1.2.2 Cluster Store (etcd)
- 集群状态数据存储系统,通常指的就是 etcd
- 仅会同 API Server 交互
1.2.3 Controller Manager
- 负责实现客户端通过 API 提交的终态声明,相应应用程序为 kube-controller-manager
- 由相关代码通过一系列步骤驱动 API 对象的“实际状态”接近或等同“期望状态”
1.2.4 Scheduler
- 调度器,负责为 Pod 挑选出(评估这一刻)最合适的运行节点
- 相关程序为 kube-scheduler
1.2.5 Kubelet
- Kubernetes 集群于每个 Worker 节点上的代理,相应程序为 kubelet
- 接收并执行 Master 发来的指令,管理由 Scheduler 绑定至当前节点上的 Pod 对象的容器
- 通过 API Server 接收 Pod 资源定义,或从节点本地目录中加载静态 Pod 配置
- 借助于兼容 CRI 的容器运行时管理和监控 Pod 相关的容器
1.2.6 Kube Proxy
- 运行于每个 Worker 节点上,专用于负责将 Service 资源的定义转为节点本地的实现
- iptables 模式:将 Service 资源的定义转为适配当前节点视角的 iptables 规则
- ipvs 模式:将 Service 资源的定义转为适配当前节点视角的 ipvs 和少量 iptables 规则
- 是打通 Pod 网络在 Service 网络的关键所在
1.3 Kubernetes Add-ons
负责扩展 Kubernetes 集群的功能的应用程序,通常以 Pod 形式托管运行于 Kubernetes 集群之上
必选插件
- Network Plugin:网络插件,经由 CNI 接口,负责为 Pod 提供专用的通信网络,有多种实现
- CoreOS Flannel
- ProjectCalico
- Cluster DNS:集群 DNS 服务器,负责服务注册、发现和名称解析,当下的实现是 CoreDNS
重要插件
- Ingress Controller:Ingress 控制器,负责为 Ingress 资源提供具体的实现,实现 http/https 协议的七层路由和流量调度,有多种实现,例如 Ingress-Nginx、Contour 等
- Metrics Server:Node 和 Pod 等相关组件的核心指标数据收集器,它接受实时查询,但不存储指标数据
- Kubernetes Dashboard/Kuboard/Rainbond:基于 Web 的UI
- Prometheus:指标监控系统
- ELK/PLG:集中式日志系统
- OpenELB:适用于非云端部署的 Kubernetes 环境的负载均衡器,可利用 BGP 和 ECMP 协议达到性能最优和高可用性
1.4 Pod 和应用
Kubernetes 本质上是“以应用为中心”的现代应用基础设施,Pod 是其运行应用及应用调度的最小逻辑 单元
在设计上,仅应该将具有“超亲密”关系的应用分别以不同容器的形式运行于同一 Pod 内部
- 本质上是共享 Network、IPC 和 UTS 名称空间以及存储资源的容器集
- 可将其想象成一台物理机或虚拟机,各容器就是该主机上的进程
- 各容器共享网络协议栈、网络设备、路由、IP地址和端口等,但 Mount、PID和 USER 仍隔离
- 每个 Pod 上还可附加一个“存储卷(Volume)”作为该“主机”的外部存储,独立于 Pod 的生命周期,可由 Pod 内的各容器共享
- 模拟“不可变基础设施”,删除后可通过资源清单重建
- 具有动态性,可容忍误删除或主机故障等异常
- 存储卷可以确保数据能超越 Pod 的生命周期
1.4.1 为什么要设计 Service 资源?
Pod 具有动态性,其 IP 地址也会在基于配置清单重构后重新进行分配,因而需要服务发现机制的支撑
Kubernetes 使用 Service 资源和 DNS 服务(CoreDNS)进行服务发现
- Service 能够为一组提供了相同服务的 Pod 提供负载均衡机制,其 IP 地址(Service IP,也称为 Cluster IP)即为客 户端流量入口
- 一个 Service 对象存在于集群中的各节点之上,不会因个别节点故障而丢失,可为 Pod 提供固定的前端入口
- Service 使用标签选择器(Label Selector)筛选并匹配 Pod 对象上的标签(Label),从而发现Pod
- 仅具有符合其标签选择器筛选条件的标签的 Pod 才可由 Service 对象作为后端端点使用
1.4.2 Pod 和工作负载型控制器
Pod 是运行应用的原子单元,其生命周期管理和健康状态监测由 kubelet 负责完成,而诸如更新、扩缩 容和重建等应用编排功能需要由专用的控制器实现,这类控制器即工作负载型控制器
- ReplicaSet和 Deployment
- DaemonSet
- StatefulSet
- Job和CronJob
工作负载型控制器也通过标签选择器筛选 Pod 标签从而完成关联
工作负载型控制器的工作重心
- 确保选定的 Pod 精确符合期望的数量
- 数量不足时依据 Pod 模板创建,超出时销毁多余的对象
- 按配置定义进行扩容和缩容
- 依照策略和配置进行应用更新
1.4.3 部署并访问应用
部署应用
- 依照编排需求,选定合适类型的工作负载型控制器
- 创建工作负载型控制器对象,由其确保运行合适数量的 Pod 对象
- 创建 Service 对象,为该组 Pod 对象提供固定的访问入口
请求访问 Service 对象上的服务
- 集群内部的通信流量也称为东西向流量,客户端也是集群上的 Pod 对象;
- Service 同集群外部的客户端之间的通信流量称为南北向流量,客户端是集群外部的进程;
- 另外,集群上的 Pod 也可能会与集群外部的服务进程通信
1.5 Kubernetes 网络基础
1.5.1 Kubernetes 网络模型
Kubernetes 集群上会存在三个分别用于节点、Pod 和 Service 的网络
- 于 worker 上完成交汇
- 由节点内核中的路由模块,以及 iptables/netfilter 和 ipvs 等完成网络间的流量转发
节点网络
- 集群节点间的通信网络,并负责打通与集群外部端点间的通信
- 网络及各节点地址需要于 Kubernetes 部署前完成配置,非由 Kubernetes 管理,因而,需要由管理员手动进行, 或借助于主机虚拟化管理程序进行
Pod 网络
为集群上的 Pod 对象提供的网络
虚拟网络,需要经由 CNI 网络插件实现,例如 Flannel、Calico、Cilium 等
Service网络
- 在部署 Kubernetes 集群时指定,各 Service 对象使用的地址将从该网络中分配
- Service 对象的 IP 地址存在于其相关的 iptables 或 ipvs 规则中
- 由 Kubernetes 集群自行管理
1.5.2 Kubernetes 集群中的通信流量
Kubernetes 网络中主要存在 4 种类型的通信流量
- 同一 Pod 内的容器间通信
- Pod 间的通信
- Pod 与 Service 间的通信
- 集群外部流量与 Service 间的通信
Pod 网络需要借助于第三方兼容 CNI 规范的网络插件完成,这些插件需要满足以下功能要求
- 所有 Pod 间均可不经 NAT 机制而直接通信
- 所有节点均可不经 NAT 机制直接与所有 Pod 通信
- 所有 Pod 对象都位于同一平面网络中
相关文章:
01.Kubernetes 概述
Kubernetes 概述 Kubernetes 概述1. Kubernetes系统组件、集群及工作机制1.1 Kubernetes 集群的节点类型1.2 Kubernetes 集群架构1.2.1 API Server1.2.2 Cluster Store (etcd)1.2.3 Controller Manager1.2.4 Scheduler1.2.5 Kubelet1.2.6 Kube Proxy 1.3…...
十种处理权重矩阵的方法及数学公式
1. 权重归一化(Weight Normalization) 目的:通过分离权重向量的范数和方向来加速训练。公式:对于权重向量 w \mathbf{w} w,归一化后的权重 w ′ \mathbf{w} w′ 为: w ′ w ∥ w ∥ \mathbf{w} \frac{…...
JVM垃圾回收面试题及原理
1. 对象什么时候可以被垃圾器回收 如果一个或多个对象没有任何的引用指向它了,那么这个对象现在就是垃圾,如果定位了垃圾,则有可能会被垃圾回收器回收 如果要定位什么是垃圾,有两种方式来确定 引用计数法可达性分析算法 1.1 …...
Flutter 小技巧之通过 MediaQuery 优化 App 性能
许久没更新小技巧系列,温故知新,在两年半前的《 MediaQuery 和 build 优化你不知道的秘密》 我们聊过了在 Flutter 内 MediaQuery 对应 rebuild 机制,由于 MediaQuery 在 MaterialApp 内,并且还是一个 InheritedWidget ࿰…...
操作系统知识点23
1.实时操作系统的主要设计目标:在严格时间氛围内对外部请求做出反应。 2.当用户程序正在处理器上运行时,若此刻取到了一条特权指令,则处理器将停止执行该指令,并产生一个“非法操作”的事件 3.某网络监控系统中。多个被授权的用…...
【解决报错】:detected dubious ownership in repository at ‘D:/idea_code/xxx‘问题
解决报错:detected dubious ownership in repository at D:/idea_code/xxx‘问题 git config --global --add safe.directory *原因 这个错误提示表明 Git 检测到仓库的所有权存在问题,仓库的所有者与当前用户不匹配。Git 在 2.35.2 版本之后引入了一个…...
三角函数:从宇宙法则到AI革命的数学密钥
——跨越三千年的数学语言与现代科技全景透视 一、数学本质:宇宙的波动密码 1.1 拓扑学视角下的三角函数 三角函数本质是单位圆上点的坐标参数化,其数学表达可抽象为: { x cos θ ℜ ( e i θ ) y sin θ ℑ ( e i θ ) \begin…...
SpringBoot基础Kafka示例
这里将生产者和消费者放在一个应用中 使用的Boot3.4.3 引入Kafka依赖 <dependency><groupId>org.springframework.kafka</groupId><artifactId>spring-kafka</artifactId> </dependency>yml配置 spring:application:name: kafka-1#kafka…...
Spring 的三种注入方式?
1. 实例的注入方式 首先来看看 Spring 中的实例该如何注入,总结起来,无非三种: 属性注入 set 方法注入 构造方法注入 我们分别来看下。 1.1 属性注入 属性注入是大家最为常见也是使用最多的一种注入方式了,代码如下&#x…...
STM32第一天建立工程
新建一个工程 1:新建一个文件,添加文件 a:DOC工程说明 》doc说明文档 b:Libraries固件库 》cmsis内核文件 (一般这就是stm32内核文件) 》FWLIB外设文件 (这种就是stm32外设文件不全) 》start…...
记录一下返修
1.对复杂度的分析还不够; 2.融合两种指标的解释还不够,审稿人认为这两种指标存在冲突,不能同时优化,但其实我们考虑的是公平性保证整个调度周期内用户分配到了更加平均的sum-rate,而se是为了追求每个调度时刻都尽可能找到信道条件…...
搭建本地化笔记AI:用Copilot+deepseek+nomic-embed-text构建本地智能知识系统
安装Ollama https://ollama.com/ 下载模型 下载大语言模型 根据自己电脑的配置选择模型的大小 ollama run deepseek-r1:8b 下载向量处理模型 创建向量数据库时需要使用Embedding模型对文本进行向量化处理 ollama pull nomic-embed-text 查看安装的模型 ollama listNAME …...
【C语言】指针篇
目录 C 语言指针概述指针的声明和初始化声明指针初始化指针 指针的操作解引用操作指针算术运算 指针的用途动态内存分配作为函数参数 指针与数组数组名作为指针通过指针访问数组元素指针算术和数组数组作为函数参数指针数组和数组指针指针数组数组指针 函数指针函数指针的定义和…...
【蓝桥杯单片机】第十一届省赛
一、真题 二、创建工程 1.在C盘以外的盘新建文件夹,并在文件夹里面创建两个文件夹Driver 和Project 2.打开keil软件,在新建工程并选择刚刚建好的project文件夹,以准考证号命名 3.选择对应的芯片型号 4.选择否,即不创建启动文件 …...
【存储中间件】Neo4J图数据库超详细教程(一):相关介绍、特点及优势、数据模型、软件安装
文章目录 Neo4J超详细教程一、Neo4J相关介绍1.为什么需要图数据库方案1:Google方案2:Facebook 2.特点和优势3.什么是Neo4j4.Neo4j数据模型图论基础属性图模型Neo4j的构建元素 5.软件安装 个人主页:道友老李 欢迎加入社区:道友老李…...
xxl-job部署在docker-destop,实现定时发送预警信息给指定邮箱
XXL-JOB XXL-JOB是一个分布式任务调度平台(XXL是作者徐雪里姓名拼音的首字母),其核心设计目标是开发迅速、学习简单、轻量级、易扩展。 源码仓库地址:https://github.com/xuxueli/xxl-job 源码结构: 系统架构 在xxl-j…...
【QT】QScrollBar设置样式:圆角、隐藏箭头、上边距等
目录 0.简介 1.原理 2.具体代码 0.简介 环境:Ubuntu22.04、qtDesigner绘制UI 项目需要,按照UI修改滚动条样式,滚动条我使用的是QScrollBar,默认样式和修改之后的样式如下: 1.原理 2.具体代码 我是用qtDesigner绘制…...
trae中文版AI搭建完整可用的项目框架
Trae 是由字节跳动推出的 AI 原生集成开发环境(AI IDE),号称可以搭建完整项目,个人试用后体验确实比Cursor或cline更便捷,因为他多个文件关联准确率更高。 正式版的trae不支持大陆使用,不过目前已经推出了…...
多数元素——面试经典150题(力扣)
题目 给定一个大小为 n 的数组 nums ,返回其中的多数元素。多数元素是指在数组中出现次数 大于 ⌊ n/2 ⌋ 的元素。 你可以假设数组是非空的,并且给定的数组总是存在多数元素。 示例 1: 输入:nums [3,2,3] 输出:3 …...
cfi网络安全 网络安全hcip
目录 RIP (路由信息协议) 算法 开销 版本 开销值的计算方式 RIPV1和RIPV2的区别 RIP的数据包 Request(请求)包 Reponse(应答)包 RIP的特征 周期更新 RIP的计时器 1,周期更新计时器 2,失效计时器 3,垃圾回收计时器 RIP的核心思…...
Banana Pi 与瑞萨电子携手共同推动开源创新:BPI-AI2N
2025年3月11日, Banana Pi 开源硬件平台很高兴宣布,与全球知名半导体解决方案供应商瑞萨电子(Renesas Electronics)正式达成技术合作关系。此次合作标志着双方将在开源技术、嵌入式系统和物联网等领域展开深度合作,为全…...
linux 命令 ls
ls 是 Linux 系统中用于列出目录内容的核心命令,几乎所有日常操作都会用到。以下是其详细用法和常见场景说明 1. 基础语法 ls [选项] [目录/文件] 不指定目录时,默认列出当前目录的内容。 可以指定文件或目录路径,支持通配符(如…...
论数组去重之高效方法
论数组去重之高效方法 数组去重的高效方法主要有 利用 Set 数据结构、利用对象/Map哈希表、排序后遍历去重 三种核心方案。其中 Set 是ES6最简单高效的方式,时间复杂度为 O(n);若需兼容性优化或处理特殊数据类型,可结合哈希表或排序实现。 分点论述: 1. 使用 Set 数据结构…...
C#-扩展方法-Linq
密封类 sealed,无法被继承 var 可以定义匿名对象 static void test1() {var t 1;t "jack";//报错,类型已经确定好了var s new{id 1,name "tom"};Console.WriteLine(s.id s.name); } 扩展方法 对现有类型做方法的扩展&am…...
【C++ STL】 容器详解:pair 学习
在 C STL(标准模板库)中,pair 是一个 简单的键值对数据结构,用于存储 两个相关联的值,将两个值组合成一个单元,可以是相同或不同类型。它常用于 返回多个值、存储映射关系、排序 等场景。 1. pair 的基本特…...
Go红队开发—web网络编程
文章目录 web网络编程Req快速请求 调试DevModeDebugLogTraceInfo瓶颈分析 控制请求与响应控制请求的字段内容控制调试打印的内容分开dump请求与响应部分请求体设置 作用范围级别设置参数查询URL 路径参数表单请求设置请求头设置 判断响应状态码解析数据SetSuccessResultgjson响…...
libwebsockets实现异步websocket客户端,服务端异常断开可重连
libwebsockets websocket客户端基本流程网上都有,我只额外优化了重连机制。 在服务器异常断开时不触发LWS_CALLBACK_CLOSED或LWS_CALLBACK_CLIENT_CONNECTION_ERROR,导致无法自动重连 通过定时检查链接是否可写入判断链接是否有效 // 判断wsi是否可用if …...
轻量级模块化前端框架:快速构建强大的Web界面
轻量级模块化前端框架:快速构建强大的Web界面 在当今快节奏的Web开发环境中,选择一个高效且灵活的前端框架至关重要。UIkit 是一个轻量级的模块化前端框架,旨在帮助开发者快速构建功能强大且响应迅速的Web界面。 UIkit提供了丰富的组件和工…...
qt+opengl 播放yuv视频
一、实现效果 二、pro文件 Qt widgets opengl 三、主要代码 #include "glwidget.h"GLWidget::GLWidget(QWidget *parent) : QOpenGLWidget(parent) {connect(&m_timer, &QTimer::timeout, this,[&](){this->update();});m_timer.start(1000/33); }v…...
UI自动化:poium测试库
以下是关于 poium 测试库 的详细介绍,涵盖其核心功能、使用方法及与原生 Selenium 的对比,帮助快速掌握这一工具: 1. poium 简介 定位:基于 Selenium 的 Page Object 模式增强库,专注于简化元素定位和页面操作。 核心…...
