云原生 —— K8s 容器编排系统

一、  简介

Kubernetes,也称为K8s,是一个开源的容器编排系统,用于自动部署、扩展和管理容器化应用程序,帮助开发者更高效地跨集群管理应用。本文总结了 k8s 的基础概念和技术架构。

二、基础概念

1.  云原生(Cloud Native)

云原生是在云计算环境中构建、部署和管理现代应用程序的软件方法。云原生架构基于以下几个核心要素:

- 微服务:将应用分解为一组更小的轻量级服务,而这些服务可通过应用编程接口 (API) 轻松组合并相互连接。

容器和编排

- DevOps

- 持续集成和持续交付 (CI/CD)

2.  容器化Containerization

容器化是指将应用程序及其依赖项打包成一个容器,使其可以在任何支持容器的环境中运行方便部署和管理。

- 容器本身不需要运行一个完整的操作系统因此虚拟机轻量

- 容器可以共享同一个操作系统内核,减少资源浪费。

- 容器可以在任何支持容器的环境中运行,无论是本地、云端还是其他环境。

- 容器提供了应用程序之间的隔离,确保应用程序不会相互影响。

3.  编排(Orchestration)

容器编排指自动化和管理容器化应用程序的部署、扩展、管理和监控的过程。编排涉及到多个容器之间的协调和管理,以确保应用程序的正常运行和高可用性。

容器生命周期管理,包括创建、启动、停止和删除。

容器路由发现与网络管理,确保服务之间可以相互通信。

容器负载均衡与弹性伸缩,流量分发,自动增加或减少容器实例。

监控和日志:监控应用程序的性能和日志,确保应用程序的正常运行。

二、  集群架构

kubectl: 使用 Kubernetes API 与 Kubernetes 集群的控制面进行通信的命令行工具

API server公开 Kubernetes HTTP API 负责处理接受请求的工作是 Kubernetes 控制平面的前端

controller manager负责运行控制器进程

schedular: 节点调度器查找尚未绑定到节点的 Pod,并将每个 Pod 分配给合适的节点。

etcd: key-value 数据库负责 Kubernetes 所有集群数据的持久化存储

pod: 一个或多个应用容器的组合,并且包含共享的存储、IP 地址和有关如何运行它们的信息,只有容器紧耦合并且需要共享磁盘等资源时,才应将其编排在一个 Pod 中。

runtime: 运行容器的启动器负责解析容器镜像创建隔离的运行环境

kubelet节点管理器负责 Kubernetes 控制面和节点之间通信的进程确保 Pod 及其容器正常运行

kube-proxy: 每个节点上所运行的网络代理允许从集群内部或外部的网络会话与 Pod 进行网络通信

1.  集群节点

集群是指一组计算机或节点,共同工作以提供一种分布式计算环境。集群中的节点可以是物理机虚拟机,集群可以提供高可用性、可扩展性和负载均衡等特性。一个 Kubernetes 实例是一个集群,这些节点由控制面负责管理

2.  工作负载workload

一个工作负载运行 Kubernetes 一个应用通常你不需要直接创建 Pod,甚至单实例 Pod。相反,你会使用工作负载资源来创建管理一组 Pod 副本Kubernetes 提供了以下几种工作负载资源

- Deployments 通常适用于不保持状态的负载任何 Pod 都是可替换的

StatefulSets 用来管理有状态应用的工作负载每个 Pod 都有一个永久不变的 ID

DaemonSets 确保每个节点 node 上都运行有 pod,适用于需要在每个节点上部署的系统级任务:日志收集、节点监控(采集 CPU、内存、磁盘等指标),网络插件(确保每个节点运行网络组件,实现 Pod 间网络互通),安全扫描工具等。

Jobs 一次性任务,运行完成后就会停止CronJob 通过重复调度启动一次性的 Job

容器镜像一个随时可以运行的软件包, 包含运行应用程序所需的一切:代码和它需要的所有运行时、应用程序和系统库,以及一些基本设置的默认值。

引用依赖:一个工作负载依赖于另一个工作负载的运行状态或输出。

灰度发布同时维护新旧版本,是将新版本逐渐推广到生产环境中的一种发布策略。将一部分用户路由到新版本,一部分用户路由到旧版本,若新版本表现较好,则逐渐增加路由到新版本的用户流量,直到所有用户都使用新版本。

Scaling 扩缩容

Horizontal Scaling 垂直扩缩将更多资源(例如:内存或 CPU)分配给已经为工作负载运行的 Pod通过替换容器镜像实现的

Vertical Scaling 横向扩缩是通过改变工作负载中的副本数量来实现的。Pod 自动扩缩容实现为一个间歇运行的控制回路默认间隔 15 在每个时间段内,控制器管理器都会根据每个 HorizontalPodAutoscaler 定义中指定的指标查询资源利用率进而计算出目标副本数。

3.  存储

Volume 卷为 Pod 中的容器提供了一种通过文件系统访问和共享数据的方式数据共享可以发生在容器内不同本地进程之间,或在不同容器之间,或在多个 Pod 之间。容器中的文件在磁盘上是临时存放的可以提供持久化存储数据,这样即使 Pod 重启或被替换,存储的数据仍然可用当 Pod 被启动时,容器中的进程看到的文件系统视图是由它们的容器镜像 的初始内容以及挂载在容器中的卷所组成的。

Storage Class 存储类可以理解为存储系统配置文件定义了如何创建 PV,例如,使用哪种存储卷(块存储或文件系统)

Volume Snapshot 卷快照是数据卷在某个时间点的副本,可以用于创建新的数据卷或恢复数据卷到之前的状态卷快照是只读的,可以被用来创建新的 PVC。

Persistent Volume 持久卷是集群中的一块存储资源,可以由管理员事先制备, 或者使用存储类来动态制备。PVC 存储声明用户创建的用于请求一定量的存储空间,描述了所需的存储空间的大小、访问模式(例如,读写或只读)和新建方式耗用 PV 资源

4.  网络

Pod集群中的每个 Pod 都会获得自己的、独一无二的集群范围 IP 地址。Pod 有自己的私有网络命名空间,Pod 内的所有容器共享这个命名空间 运行在同一个 Pod 中的不同容器的进程彼此之间可以通过 localhost 进行通信。

集群网络 处理 Pod 之间的通信,所有 Pod 可以与所有其他 Pod 直接进行通信, 无论它们是在同一个节点还是在不同的节点上。

Service 为由一个或多个后端 Pod 实现的服务提供一个稳定长效的 IP 地址或主机名, 其中组成服务的各个 Pod 可以随时变化。Service 的暴露方式是四层,只关心 TCP/UDP 协议的流量转发, IP 端口暴露服务

● ClusterIP 通过集群的内部 IP 公开 Service,只能够在集群内部访问可以使用 Ingress 或者 Gateway API 向公共互联网公开服务。

● NodePort 通过每个节点上的 IP 和静态端口公开 Service作用域可以集群内集群外可以自由设置自己的负载均衡解决方案

● LoadBalancer 使用云平台的负载均衡器向外部公开 Service来自外部负载均衡器的流量将被直接重定向到后端各个 Pod 上,一种更简单但可配置性较低的 Ingress 机制。

Ingress 为集群外部到集群内部服务提供 HTTP(S) 流量路由,并将流量分发到各个关联的 service 上。Ingress 的暴露方式是七层,使用 URL 暴露服务可以权重/header/cookie 切分流量,从而将同一个 url 路由到多个服务中进行灰度发布

5.  调度

在 Kubernetes 中,调度是指将 Pod 放置到合适的节点上,以便对应节点上的 Kubelet 能够运行这些 Pod。调度器通过 Kubernetes 的监测机制来发现集群中新创建且尚未被调度到节点上的 Pod然后选择一个最佳节点来运行新创建的或尚未调度的 Pod。 

节点调度:pod 与节点间的调度策略

亲和调度:将 Pod 调度到具有特定标签或属性的节点上

反亲和调度:将 Pod 调度到不具有特定 CPU 架构/内存大小/存储类型的节点上

可用区打散:打散策略将工作负载的 Pod 平均打散部署在各个可用区,提高应用的高可用性,至少需要两个可用区

Pod 调度:pod 间的调度策略

亲和调度:将 Pod 调度到与其他 Pod 相同的节点上,以共享资源

反亲和调度:确保多个 Pod 被调度到不同的节点上,以提高可用性

容忍调度:容忍度是指 Pod 对节点上的污点(节点上的资源不足/网络不稳定/存储空间不足)的容忍程度,容忍度可以被设置为:

NoSchedule:Pod 将不会被调度到具有该污点的节点上

PreferNoSchedule:Pod 将尽量避免被调度到具有该污点的节点上,但如果没有其他选择,仍然可以被调度到该节点上

NoExecute:Pod 将不会被调度到具有该污点的节点上,并且如果已经被调度到该节点上,将被驱逐

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

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

相关文章

SQLite中SQL的解析执行:Lemon与VDBE的作用解析

(Owed by: 春夜喜雨 http://blog.csdn.net/chunyexiyu) 在 SQLite 的内部实现中,SQL 语句的解析与执行是一个精妙的过程,涉及词法分析、语法分析、中间代码生成与执行等多个环节。其中,Lemon 工具和 VDBE(Virtual Database Engine…

C++学习笔记(十:类与对象基础)

往篇内容: C学习笔记(一) 一、C编译阶段※ 二、入门案例解析 三、命名空间详解 四、C程序结构 C学习笔记(二) 五、函数基础 六、标识符 七、数据类型 补充:二进制相关的概念 sizeof 运算符简介 补…

图片查重从设计到实现(4)图片向量化存储-Milvus 单机版部署

Milvus 单机版部署 在 Docker 环境下安装、应用和配置 Milvus 向量数据库可以按照以下步骤进行,涵盖从安装到基础应用的完整流程: 1. 部署前准备 服务器:建议测试环境配置 2 核 CPU、8GB 内存;处理 100 万组向量数据,…

前端版本更新检测机制

📌 一、为什么需要前端版本更新检测机制?在现代 Web 项目中,我们通常会通过 CDN 或缓存策略来加快页面加载速度,但这也带来了一个问题:用户可能访问的是旧版本的页面或资源,而不会自动更新到最新版本。这在…

Python(09)正则表达式

特殊字符 1. 基本元字符 .:匹配除换行符以外的任意单个字符。 *:匹配前面的元素零次或多次。 :匹配前面的元素一次或多次。 ?:匹配前面的元素零次或一次。 2. 定量符 {n}:匹配前面的元素恰好 n 次。 {n,}:…

k8s容器放开锁内存限制

参考:https://access.redhat.com/solutions/1257953 问题 nccl-test容器docker.io/library/nccl-tests:24.12中跑mpirun,buff设置为NCCL_BUFFSIZE503316480 提示out of memory: pod-1:78:91 [0] include/alloc.h:114 NCCL WARN Cuda failure …

基于Zigee的温度数据采集系统

大家好,本文带来的是单片机课设-基于Zigee的温度数据采集系统。 一、设计内容和要求 基于Zigbee的数据采集系统 1.1设计内容 (1)分析对比Bluetooth、Zigbee、Lora方式组网的基本原理和性能差异,撰写分析报告; &#xf…

ATH12K 驱动框架分析

文章目录 Linux Wireless 驱动框架深入分析 **1. 核心框架层次结构** **1.1 cfg80211 子系统 (`net/wireless/`)** **1.2 mac80211 子系统 (`net/mac80211/`)** **2. ath12k 驱动架构分析** **2.1 核心管理文件** **2.2 数据路径文件** **2.3 平台接口文件** **2.4 功能模块文件…

OSPF路由协议单区域

RIP的不足 以跳数评估的路由并非最优路径 如果RTA选择S0/0传输,传输需时会大大缩短为3sRIP协议限制网络直径不能超过16跳 收敛速度慢 RIP定期路由更新 – 更新计时器:定期路由更新的时间间隔,默认30秒。 – 失效计时器:失效计时器…

Kubernetes部署与管理Scrapy爬虫:企业级分布式爬虫平台构建指南

引言:Kubernetes在爬虫领域的战略价值在大规模数据采集场景中,​​容器化爬虫管理​​已成为企业级解决方案的核心。根据2023年爬虫技术调查报告:采用Kubernetes的爬虫系统平均资源利用率提升​​65%​​故障恢复时间从小时级缩短至​​秒级​…

Web-Machine-N7靶机攻略

一.环境准备(VBox,kali虚拟机,靶机) 1.1Vbox下载地址: Downloads – Oracle VirtualBox 1.2将N7导入到这个虚拟机中 1.3将kali和Vbox都设置成桥接模式 1.4开启靶机 若鼠标出不来可以使用组合技,CtrlAltDelete强制退出 二.信息…

用毫秒级视频回传打造稳定操控闭环之远程平衡控制系统技术实践

在工业自动化、远程机器人、无人装备等复杂作业场景中,远程实时操控正逐步取代传统“监控指令”模式,成为提升效率与保障安全的关键能力。尤其在高风险、高精度的应用环境中,操作者不仅要“能控”,更要“看得准、反应快”。 真正…

瑞萨电子RA-T MCU系列新成员RA2T1——电机控制专家

RA2T1系列微控制器基于64MHz ArmCortex-M23内核设计,专为单电机控制应用而优化。RA2T1集成PWM定时器,以及配备3个采样保持电路的A/D转换器等先进的模拟功能,适用于电动工具,风扇和家用电器等高效的低端电机控制方案。RA2T1支持1.6…

Java排序算法之<选择排序>

目录 1、选择排序 1.1、介绍 1.2、稳定性 2、执行流程 3、java实现 4、优缺点 总结:Java 排序算法进阶路线 O(n) 算法(适合学习原理) 冒泡排序(最慢)→ 选择排序 → 插入排序(推荐先学) …

ESP8266 http收发数据

1.先修改基础配置 make menuconfig 打开配置菜单 选择component config 然后选择 修改波特率为115200 保存退出 2.修改彩色日志打印的 在component config目录下找到log output 选中点击空格关掉彩色日志输出,这样正常串口打印就没有乱码了 然后保存退出 3…

ZLMediaKit 源代码入门

ZLMediaKit 是一个基于 C11 开发的高性能流媒体服务器框架,支持 RTSP、RTMP、HLS、HTTP-FLV 等协议。以下是源代码入门的详细指南: 1. 源码结构概览 主要目录结构: text ZLMediaKit/ ├── cmake/ # CMake 构建配置 ├── …

智能Agent场景实战指南 Day 21:Agent自主学习与改进机制

【智能Agent场景实战指南 Day 21】Agent自主学习与改进机制 文章内容 开篇 欢迎来到"智能Agent场景实战指南"系列的第21天!今天我们将深入探讨智能Agent的自主学习与改进机制——这是使Agent能够持续提升性能、适应动态环境的核心能力。在真实业务场景…

微信小程序中英文切换miniprogram-i18n-plus

原生微信小程序使用 miniprogram-i18n-plus第一步:npm install miniprogram-i18n-plus -S安装完成后,会在项目文件文件夹 node_modules文件里生成 miniprogram-i18n-plus, 然后在工具栏-工具-构建npm,然后看到miniprogram_npm里面…

LeetCode 127:单词接龙

LeetCode 127:单词接龙问题本质:最短转换序列的长度 给定两个单词 beginWord 和 endWord,以及字典 wordList,要求找到从 beginWord 到 endWord 的最短转换序列(每次转换仅改变一个字母,且中间单词必须在 wo…

docker搭建ray集群

1. 安装docker 已安装过docker 没安装流程 启动 Docker 服务: sudo systemctl start docker sudo systemctl enable docker # 设置开机即启动docker验证 Docker 是否安装成功: docker --version2. 部署ray # 先停止docker服务 systemctl stop docker…