当前位置: 首页 > news >正文

浅谈云计算22 | Kubernetes容器编排引擎

Kubernetes容器编排引擎

  • 一、Kubernetes管理对象
    • 1.1 Kubernetes组件和架构
    • 1.2 主要管理对象类型
  • 二、Kubernetes 服务
    • 2.1 服务的作用与原理
    • 2.2 服务类型
  • 三、Kubernetes网络管理
    • 3.1 网络模型与目标
    • 3.2 网络组件
      • 3.2.1 kube-proxy
      • 3.2.2 网络插件
    • 3.3 网络通信流程
  • 四、Kubernetes 存储管理
    • 4.1 存储类型
      • 4.1.1 本地存储
      • 4.1.2 网络存储
      • 4.1.3 持久化存储卷
    • 4.2 存储资源管理
  • 五、Kubernetes服务质量
    • 5.1 服务质量分级
    • 5.2 服务质量保障措施
      • 5.2.1 资源调度策略
      • 5.2.2 弹性伸缩机制
  • 六、Kubernetes 资源管理
    • 6.1 K8S资源模型
      • 6.1.1 Node资源
      • 6.1.2 Pod资源
      • 6.1.3 Namespace资源
    • 6.2 资源请求和限制
      • 6.2.1 资源请求(Requests)
      • 6.1.2 资源限制

在这里插入图片描述

在当今数字化时代,企业的应用架构正经历着深刻变革,从传统的单体架构逐渐向微服务架构转型。这种转型带来了诸多优势,如更高的灵活性、可扩展性和可维护性。然而,随着微服务数量的不断增加,应用的部署、管理和运维变得愈发复杂,面临着诸如资源分配、服务发现、负载均衡、故障恢复等一系列挑战。

容器技术的出现为解决这些问题提供了新的思路。容器能够将应用及其依赖项打包成一个独立的、可移植的单元,实现了环境的一致性和隔离性。而 Kubernetes(简称 K8S)作为容器编排领域的佼佼者,应运而生,成为了解决容器化应用管理难题的关键工具。Kubernetes是一款开源的容器编排引擎,在容器化应用的管理领域发挥着核心作用。其主要使命是实现容器化应用的自动化部署、精细扩展以及高效管理,旨在为应用的运行提供一个稳定、可靠且灵活的环境。

在这里插入图片描述

一、Kubernetes管理对象

1.1 Kubernetes组件和架构

Kubernetes作为容器编排领域的核心技术,其架构由多个关键组件构成,控制平面与数据平面各司其职,网络及存储组件提供支持,各组件紧密协作,共同构建了强大且可靠的Kubernetes系统。

在这里插入图片描述

架构分层组件组件功能在架构中的作用
控制平面(Master Node)APIServer提供RESTful接口,用于管理和操作Kubernetes资源,是整个集群的控制中心,负责接收和处理所有来自客户端和其他组件的请求作为集群的入口,统一管理和协调各组件对资源的操作,确保整个集群状态的一致性和准确性
ETCD分布式键值对存储,用于保存集群的所有状态信息,包括资源配置、Pod状态等为集群提供可靠的数据存储,保证数据的持久性、一致性和高可用性,是整个集群运行的基础支撑
scheduler负责将新创建的Pod调度到合适的工作节点上运行,根据资源需求、节点状态等因素进行调度决策实现资源的合理分配,确保每个Pod都能在满足其运行条件的节点上运行,提高集群整体资源利用率和应用性能
controller - managers包含多个控制器,如节点控制器、副本控制器等,负责维护集群中各种资源的状态,确保实际状态与期望状态一致自动管理和维护集群中资源的状态,通过不断监控和调整,保证集群的稳定性和可靠性
数据平面(Worker Node)kubelet每个工作节点上运行的代理,负责与控制平面通信,管理本节点上的Pod生命周期,包括创建、启动、停止等操作作为工作节点与控制平面的桥梁,负责将控制平面的指令在本地节点上执行,实现对Pod的具体管理
kube - proxy实现Kubernetes服务的网络代理和负载均衡功能,通过在节点上维护网络规则,将服务请求转发到后端的Pod实例确保服务能够被正确访问,通过负载均衡将请求均匀分配到后端Pod,提高服务的可用性和性能
容器运行时(如Docker、containerd等)负责运行容器,管理容器的镜像拉取、启动、停止等操作是容器化应用实际运行的基础,为应用提供隔离的运行环境
网络组件CNI(Container Network Interface)插件(如Flannel、Calico等)负责为Pod分配网络地址,实现Pod之间以及Pod与外部网络的通信构建集群的网络拓扑,确保各个Pod之间能够进行有效的通信,满足不同应用场景下的网络需求
存储组件CSI(Container Storage Interface)插件(如NFS、Ceph等)负责管理和提供存储资源,实现容器化应用的数据持久化存储为应用提供可靠的数据存储解决方案,确保数据在容器生命周期之外的持久性和可用性

1.2 主要管理对象类型

在这里插入图片描述

Kubernetes对象概念作用特点使用场景示例
PodKubernetes中最小的可部署和可管理的计算单元,是一个或多个紧密相关容器的集合,共享网络和存储资源承载容器化应用,实现容器间高效协作有唯一IP地址,生命周期短暂且动态各类应用场景,如Web应用等Web应用中,Nginx容器与基于Node.js或Python Flask的应用容器封装在同一Pod,共享网络命名空间,通过localhost通信,还可挂载共享存储卷
Service一种抽象层,用于定义一组Pod的访问策略实现服务发现和负载均衡通过标签选择器关联Pod,为其提供稳定访问入口解决Pod IP地址动态变化导致的访问不稳定问题电商系统中,订单处理服务的多个Pod实例通过Service关联,Service将用户请求分配到不同Pod处理
ClusterIP ServiceService的一种类型为服务分配仅在集群内部可访问的虚拟IP地址仅在集群内部可访问集群内部服务间通信集群内部服务A调用服务B时,通过ClusterIP Service进行通信
NodePort ServiceService的一种类型在每个节点上开放指定端口,可从集群外部通过节点IP加端口号访问服务可从集群外部访问需要从集群外部访问服务,但不想借助外部负载均衡器的场景开发测试环境,从本地通过NodePort访问集群内服务
LoadBalancer ServiceService的一种类型借助云提供商的负载均衡器,为服务分配外部可访问的IP地址外部可稳定访问需要将服务暴露给外部互联网的场景面向公众的Web应用,通过LoadBalancer Service让用户从互联网访问
Deployment用于管理Pod和ReplicaSet的重要对象,提供声明式方法定义和管理应用程序部署定义和管理应用程序部署,确保实际运行状态与期望状态一致可定义Pod副本数量、容器镜像版本、资源请求与限制等,支持滚动更新和回滚各种应用的部署和管理在线视频播放服务,通过Deployment设置Pod副本数为10,保障高峰时段服务可用性;版本升级时采用滚动更新
ReplicaSet负责确保指定数量的Pod副本始终处于运行状态简单管理Pod副本数量对比实际与期望副本数,自动创建或删除Pod对应用程序版本稳定性要求高,且不需要频繁版本更新的场景一些稳定运行的后台服务,用ReplicaSet维持固定数量的Pod副本
StatefulSet适用于管理有状态的应用程序管理有状态应用,保证Pod标识符、存储状态一致性和特定启动顺序为每个Pod分配唯一、稳定标识符有状态应用,如数据库、消息队列等分布式数据库集群,StatefulSet确保每个数据库实例Pod重启后仍能正确访问存储数据,按预定顺序启动和停止
DaemonSet确保每个节点上都运行一个特定Pod的副本在每个节点部署和管理系统级服务或守护进程每个节点运行一个Pod副本需要在每个节点运行系统级服务的场景大规模生产集群中,用DaemonSet部署Prometheus Node Exporter监控代理Pod,实时监控每个节点资源使用情况

二、Kubernetes 服务

2.1 服务的作用与原理

在 K8S的生态体系中,服务扮演着极为关键的角色,是实现容器化应用高效管理与稳定运行的核心组件。其核心作用主要体现在为 Pod 提供稳定的网络身份,以及实现精准的服务发现和高效的负载均衡。

在K8S集群中,Pod的IP地址动态分配且生命周期短暂,因节点故障或资源调整被销毁重建时,IP会改变。好比城市中商店位置不断变动,若无稳定标识,客户(其他服务或外部请求)难持续准确找到对应Pod。而服务为一组相同功能的 Pod 提供一个固定的、稳定的网络入口,很好地解决了这一问题。它就像是为这些商店设置了一个统一的、不会变动的招牌地址,无论商店内部如何调整,客户都可以通过这个固定地址找到对应的服务。

服务发现是K8S服务重要功能。复杂K8S集群中,众多服务需相互通信协作,如电商系统里订单处理服务与用户信息、库存管理等服务交互。服务发现机制让服务自动找到彼此,无需手动配置通信地址。新服务实例(Pod)加入集群自动注册到服务目录,下线则自动移除,类似商业中心新店铺自动纳入导航,关闭店铺及时从导航移除。

负载均衡是保障服务高可用和高性能的关键。大量请求发至服务时,它能将请求均匀分发给后端多个Pod实例。如热门在线视频平台黄金时段,海量请求若集中少数Pod易致其响应缓慢或崩溃。通过负载均衡,请求均衡分配到多个视频播放Pod,避免单个Pod过载,确保用户流畅观看。常见负载均衡算法有轮询(按顺序分配请求)、随机(随机选Pod处理请求)、加权轮询(依Pod性能和资源配置设权重,性能好的Pod获更多请求)。

2.2 服务类型

在这里插入图片描述

服务类型描述应用场景实现方式示例
ClusterIP提供稳定唯一虚拟IP,用于集群内服务通信,此IP仅在集群内可见适用于集群内服务间调用,如订单管理服务调用用户管理服务验证用户身份创建Service资源,指定typeClusterIP,Kubernetes自动分配内部虚拟IP,通过selector连接Pod实例订单管理服务通过ClusterIP访问用户管理服务,假设用户管理服务的ClusterIP为10.96.0.10,订单管理服务Pod可借此IP通信
NodePort将集群服务暴露到节点特定端口,供外部访问适合企业向外部伙伴提供内部服务,如给合作伙伴的API服务配置Service,指定typeNodePort(可设nodePort,不设则自动分配),在节点开放端口(30000 - 32767 ),映射到集群内Service的porttargetPort节点IP为192.168.1.100,开放30080端口,外部通过http://192.168.1.100:30080访问,内部请求从30080端口转至port8080,再到Pod的targetPort80
LoadBalancer借助云提供商负载均衡器,将服务暴露给外部互联网,实现流量均衡与健康监测适用于电商平台前端、在线支付等需高可用、高并发的关键服务创建Service,指定typeLoadBalancer,Kubernetes向云提供商请求创建负载均衡器,分配公网IP,均衡分发流量至后端Pod在AWS上创建LoadBalancer型Service,自动生成ELB负载均衡器,分配公网IP,外部通过此IP访问,流量被分发给3个后端Pod
Ingress管理外部流量,为集群服务提供统一入口,可按URL等规则转发流量适用于大型电商等复杂系统,需按URL路径将流量导向不同微服务部署Ingress Controller,创建Ingress资源定义规则,如hostpath及对应的backend,后端常为其他类型Service通过配置 Ingress 的 TLS 字段,为域名配置 SSL 证书,实现 HTTPS 访问。

三、Kubernetes网络管理

3.1 网络模型与目标

Kubernetes 的容器网络模型,为构建高效、可靠的容器网络提供了明确的准则和方向,可归结为“约法三章“和“四大目标“”。

约法三章内容具体描述类比说明
任意两个Pod之间应能直接通信,无需借助显式的NAT进行数据和地址的转换在Kubernetes集群中,每个Pod都应有独立且可直接访问的IP地址如同在局域网中,每台设备都有自己的IP,设备之间可直接通信,无需经过额外的地址转换网关
Node与Pod之间同样要实现直接通信,避免使用明显的地址转换保证节点与Pod之间的通信效率和便捷性,使节点能直接与所承载的Pod交互像服务器与直接连接的本地设备进行通信一样顺畅
Pod看到自身的IP应与外界看到它的IP保持一致,中间不得进行转换确保Pod网络地址的一致性和可预测性,避免因地址转换带来网络复杂性和潜在问题-

网络设计目标具体描述示例或类比说明实现方式
外部世界与Service之间的通信Service作为Kubernetes中一组Pod的抽象访问入口,外部流量需通过Service连接到容器内部应用在大型商业综合体中,顾客(外部世界)需通过特定入口(Service)进入各个店铺(Pod)通过Service连接到容器内部应用
Service与后端Pod的通信Service需与后端Pod实现高效通信当用户请求发送到Service,Service依DNS解析找对应Pod,通过负载均衡算法将请求合理分配到后端各Pod,确保服务高可用和高性能通过Kubernetes的内部DNS解析和负载均衡机制
Pod与Pod之间的通信每个Pod有独立IP地址,可直接用对方IP地址通信像局域网中的设备之间通过IP直接通信直接用对方IP地址通信
Pod内部容器与容器之间的通信Pod内部容器间通信通常通过localhost进行如同在同一台主机上的多个进程之间进行通信利用容器共享网络命名空间的特性

这些约法三章和四大目标对 Kubernetes 网络的设计和实现提出了明确要求,深刻影响着网络插件的选择和配置。例如,在选择网络插件时,需要确保插件能够满足 Pod 之间直接通信的要求,如 Flannel、Calico 等网络插件,它们通过不同的技术手段实现了 Pod 之间的直接通信。Flannel 通过创建一个覆盖网络(Overlay Network),为每个节点分配一个子网,使得不同节点上的 Pod 可以通过这个覆盖网络进行通信;Calico 则基于 BGP(边界网关协议)实现了三层网络的直接通信,为每个容器分配一个唯一的 IP 地址,并通过 BGP 协议进行路由选择,确保 Pod 之间能够直接通信。同时,网络插件还需要满足 Node 与 Pod 之间直接通信以及 Pod IP 地址一致性的要求,以保障整个 Kubernetes 网络的高效、稳定运行。

3.2 网络组件

3.2.1 kube-proxy

kube-proxy是K8S集群关键网络组件,在节点运行,负责实现服务抽象。服务是将一组Pod暴露给其他服务或外部客户端的抽象概念,kube-proxy将其转为具体网络规则,让其他组件能与之通信。

在这里插入图片描述

创建Service时,kube-proxy按其配置在节点创建网络规则。如ClusterIP类型的Service,kube-proxy会设置iptables或ipvs规则,将发往服务虚拟IP的流量转至后端Pod实例。Pod与服务通信时,kube-proxy拦截请求,按负载均衡算法选合适Pod处理,实现负载均衡。早期kube-proxy用用户空间模式,有性能低和复杂度高的问题。后iptables模式成主流,kube-proxy监控K8S API服务器变化,动态更新节点的iptables规则,新Service创建、删除或更新时,会相应调整规则。如添加新Pod到服务后端,会在iptables规则添加条目以正确路由流量。

为提升性能和灵活性,K8S引入IPVS模式。IPVS是Linux内核高性能负载均衡模块,基于内核态,性能更高,负载均衡算法更丰富。kube-proxy在IPVS模式下将服务配置转为IPVS规则,将流量快速转发至后端Pod,支持多种算法,用户可按需选择,如在线购物系统用户会话管理,可使用会话亲和性算法保证用户体验一致性。

3.2.2 网络插件

在 Kubernetes 的生态系统中,网络插件是实现其网络模型的关键组件,不同的网络插件通过各自独特的方式,满足了 Kubernetes 对容器网络的严格要求,确保了集群内 Pod 之间的高效通信。Flannel 和 Calico 作为其中的典型代表,具有各自鲜明的特点和适用场景。

网络插件开发者设计初衷网络实现方式后端实现方式及特点
FlannelCoreOS实现容器与主机之间更优的网络连接创建覆盖网络(Overlay Network),为每个节点分配子网,用于为节点上容器分配IP地址,跨主机Pod通信时,将数据包封装在UDP协议中通过Overlay网络传输,在目标节点解封装后转发到目标Pod1. UDP:最早实现方式,在用户空间进行数据包封装和解封装,实现基本网络通信功能,但性能有局限
2. VXLAN:利用Linux内核的VXLAN隧道技术,将数据包封装在VXLAN帧中传输,提高网络性能和稳定性
3. host - gateway:适用于对网络性能要求高且所有节点在同一二层网络的场景,通过在节点配置路由规则,直接转发数据包到目标节点,减少封装和解封装开销,提升网络性能
CalicoTigera(原由Metaswitch开发)为Kubernetes集群提供高效、灵活且安全的网络解决方案基于BGP(边界网关协议),提供纯三层网络解决方案,不创建额外Overlay网络,直接利用底层网络IP路由功能,为每个容器分配唯一且在整个集群可路由的IP地址,根据BGP协议计算最佳路由路径,将数据包直接发送到目标Pod的IP地址无额外特定后端实现方式表述(因其核心基于BGP路由,网络策略是其重要特色功能),特点是基于BGP实现高效路由,结合丰富的网络安全策略,实现细粒度流量控制,保障网络安全

Calico 的优势不仅在于其高效的路由能力,还在于它提供了丰富的网络安全功能。通过网络策略(Network Policy),Calico 可以对 Pod 之间的网络流量进行细粒度的控制。例如,在一个包含多个微服务的 Kubernetes 集群中,可以使用 Calico 的网络策略来限制用户管理服务的 Pod 只能与订单管理服务的特定端口进行通信,从而提高了整个集群的网络安全性。Calico 的网络策略支持基于标签、IP 地址、端口等多种条件进行流量控制,用户可以根据实际需求灵活配置,满足不同场景下的网络安全需求。

3.3 网络通信流程

以一个典型的 Kubernetes 集群为例,详细剖析从外部请求到容器内部应用的网络通信流程。
在这里插入图片描述

解释

  • 首先,用户或客户端向节点 192.168.1.1030008 端口发起请求,该请求会到达该节点的物理网络接口。
  • 然后,Kubernetes 通过 iptables 等机制将该请求转发到服务的内部机制。
  • 接着,在每个节点上运行的 kube-proxy 收到请求,并根据服务的负载均衡策略(如果配置)将请求转发到后端的 Pod 实例(如 10.244.0.1010.244.0.11)。
  • Pod 处理请求后,将响应发送回 kube-proxy,然后 kube-proxy 把响应发回接收请求的节点,最终节点将响应发回客户端。
  • 如果集群配置了 Ingress 资源,外部请求会先到达 Ingress Controller,它会根据路由规则将请求转发到对应的服务,服务再根据 selector 转发到相应的 Pod,后续流程与 NodePort 服务的流程类似。

四、Kubernetes 存储管理

4.1 存储类型

4.1.1 本地存储

在 Kubernetes 存储体系中,本地存储至关重要,它将存储卷直接挂载到承载 Pod 的物理节点。

本地存储性能优势独特,在对存储性能要求极高的场景作用关键。如 MySQL、PostgreSQL 等关系型数据库,因数据读写频繁且对响应速度要求高,使用本地存储可减少读写延迟,提升性能。但本地存储在数据持久性上有局限,若节点硬件故障,数据可能丢失。不过在临时数据存储场景,如缓存、日志数据存储中,其性能优势能弥补不足。例如缓存数据,即便丢失也不严重影响系统运行。

Kubernetes 实现本地存储常见方式有emptyDir和hostPath。emptyDir简单,Pod 分配到节点时自动创建空目录存临时数据,Pod 移除,数据永久删除,适用于数据处理任务存中间结果。hostPath将节点文件系统的文件或目录挂载到 Pod,供 Pod 访问本地存储资源,如应用访问节点特定配置文件。但使用hostPath要注意不同节点文件系统差异,确保路径存在且权限正确,同时它可能导致 Pod 与特定节点绑定,影响可移植性和弹性。

4.1.2 网络存储

网络存储在 Kubernetes 的生态系统中扮演着至关重要的角色,它能够为容器化应用提供高效、可靠且可扩展的存储解决方案。NFS(Network File System)和 Ceph 作为两种常见的网络存储技术,各自具有独特的原理和显著的优势。

存储类型简介工作原理在Kubernetes集群中的应用示例优势适用场景支持的存储接口
NFS成熟的网络文件系统服务器端共享文件系统,客户端通过网络远程挂载共享目录实现文件访问操作在Web应用集群中,将静态资源文件存于NFS服务器,挂载其共享目录到各节点,确保应用一致性和稳定性简单易用,配置相对简单,对网络要求低对存储性能要求不高但需简单共享文件的场景,如开发和测试环境文件系统存储
Ceph分布式存储系统采用分布式架构,将数据分布在多个存储节点,通过数据冗余和纠删码技术确保数据可靠性在大数据分析平台中,存储海量原始数据和分析结果,可扩展存储容量,提高读写性能高性能、高可靠性、高扩展性,支持多种存储接口大规模数据存储场景,对数据读写性能要求较高的数据库应用场景,需存储大量非结构化数据的应用场景块存储、对象存储、文件系统存储

4.1.3 持久化存储卷

持久化存储卷(PersistentVolume,简称 PV)是 Kubernetes 中用于实现数据持久化存储和管理的关键资源对象,它为容器化应用提供了一种独立于 Pod 生命周期的存储解决方案。在 Kubernetes 的存储体系中,PV 充当着底层存储资源的抽象层,它可以代表各种不同类型的存储介质,如本地磁盘、网络存储(NFS、Ceph 等),甚至是云存储服务(如 AWS EBS、Google Cloud Persistent Disk 等)。通过 PV,用户可以将存储资源的配置和管理与应用程序的部署和管理分离开来,实现了存储资源的集中化管理和高效利用。

4.2 存储资源管理

在 Kubernetes 的生态系统中,存储编排与管理是确保应用程序数据安全、可靠存储和高效访问的核心环节。在存储管理方面,Kubernetes 提供了丰富的功能。

管理员可以通过配置存储类(StorageClass)来定义不同的存储策略,如存储的性能级别、回收策略等。对于一些对性能要求较高的应用场景,可以创建高性能的存储类,使用高速的存储介质;而对于一些临时数据或不重要的数据,可以创建具有较低性能但成本也较低的存储类。

同时,Kubernetes 还支持对存储资源的动态供应,当 PVC 请求存储资源时,系统可以根据存储类的定义,自动创建相应的 PV,极大地提高了存储资源的管理效率和灵活性。例如,在电商业务快速发展的过程中,可能会突然增加大量的商品数据,需要扩展存储容量。通过配置好的存储类和动态供应机制,Kubernetes 可以自动创建新的 PV 来满足 PVC 对存储容量的需求,确保电商应用的正常运行,而无需管理员手动进行复杂的存储配置和管理操作。

五、Kubernetes服务质量

5.1 服务质量分级

在 K8S的生态体系中,服务质量(Quality of Service,QoS)分级机制对于确保不同类型的应用在共享集群资源时能够获得恰当的资源分配和保障,具有至关重要的意义。通过精细的 QoS 分级,K8S 能够根据应用的特性和需求,实现资源的合理调度与管理,从而提升整个集群的运行效率和稳定性。

K8S 的服务质量分级主要包括 BestEffort、Burstable 和 Guaranteed 三个级别 ,每个级别都有其独特的定义和特性,适用于不同类型的应用场景。

服务质量等级特点判定条件资源分配情况示例
BestEffort服务质量等级中最低的一级,Pod中的容器既未设置CPU和内存的请求(requests),也未设置限制(limits)Pod中的容器无CPU和内存的requests与limits设置容器在资源分配上处于底层,仅在集群有大量空闲资源时可能获取资源,资源紧张时最先被驱逐日志分析系统中用于临时处理和分析日志数据的容器,处理具有时效性,部分数据处理中断不影响核心业务
Burstable服务质量等级处于中间位置Pod中至少有一个容器设置了CPU或内存的请求(requests),且请求值小于限制(limits)正常情况下,容器按请求资源量获取资源;资源紧张时,若实际使用量超请求量但未达限制量,仍可能继续运行,但可能受资源限制在线游戏后台服务器的核心业务逻辑容器,平时资源需求稳定,特殊活动期间可能有短暂资源使用高峰
Guaranteed服务质量等级中最高的一级Pod中的每个容器都必须设置CPU和内存的请求(requests),且请求值与限制(limits)相等为容器提供最强资源保障,Pod调度到节点后,所请求资源完全保证,除非节点故障,否则Pod稳定运行电商系统订单数据库这类关键数据库服务的容器,保障数据完整性和一致性,避免业务损失

这些服务质量分级的实现原理基于 K8S 的资源调度和管理机制。当一个 Pod 被创建时,K8S 会根据其容器的资源请求和限制设置,为其分配相应的 QoS 等级。在资源调度过程中,K8S 的调度器会优先考虑 Guaranteed 级别的 Pod,确保它们能够获得所需的资源。对于 Burstable 级别的 Pod,调度器会根据节点的资源剩余情况进行合理分配。而 BestEffort 级别的 Pod 则只能在资源有剩余的情况下获取资源。在资源紧张时,K8S 会根据 QoS 等级的优先级,优先驱逐 BestEffort 级别的 Pod,然后是 Burstable 级别的 Pod,以保障 Guaranteed 级别的 Pod 能够持续稳定运行。

5.2 服务质量保障措施

5.2.1 资源调度策略

在 Kubernetes(K8S)的服务质量保障体系中,资源调度策略扮演着核心角色,其关键在于根据服务质量等级,精准且高效地分配集群资源,以确保各类应用的稳定运行。

服务质量级别资源调度策略具体调度过程示例资源调度特点
Guaranteed优先保障资源需求新Pod调度时,调度器先检查集群资源能否满足Guaranteed级Pod需求,遍历节点找可用CPU核心数≥Pod请求数且可用内存≥Pod请求数的节点,满足条件才调度关键数据库服务设为Guaranteed级别,每个容器请求并限制使用2个CPU核心和4GB内存,调度器找相应资源满足的节点调度优先满足资源需求,确保核心业务稳定,不受其他应用资源竞争影响
Burstable相对灵活调度正常时按Pod资源请求量分配资源;资源紧张时,调度器依节点资源剩余和其他Pod需求,动态调整Burstable级Pod资源分配,只要其使用不超限制仍能运行在线视频转码服务设为Burstable级别,容器请求1个CPU核心和2GB内存,资源充足按请求分配,如节点CPU使用率80%且有新Guaranteed级Pod需调度,可能限制其CPU使用量兼顾高优先级应用需求,同时利用剩余资源,提高资源整体利用率
BestEffort资源剩余时分配在Guaranteed和Burstable级Pod满足资源需求后,若还有剩余资源才分配给BestEffort级Pod,资源紧张时可能被优先驱逐用于数据分析的临时任务,计算结果非实时关键,任务因资源不足中断可在资源充足时重启对资源需求弹性大,资源紧张时可牺牲,保障高优先级应用资源

5.2.2 弹性伸缩机制

在Kubernetes(K8S)服务质量保障中,弹性伸缩机制至关重要。它能依据应用负载变化,智能自动调整应用实例数量,确保应用在不同业务场景维持良好服务质量。

K8S里弹性伸缩主要靠Horizontal Pod Autoscaler(HPA)。HPA实时监控应用负载,按预设规则增减Pod副本数。如电商平台商品展示服务,促销时负载剧增,HPA按设定的CPU利用率阈值(如80%)判断,当Pod平均CPU利用率持续超80%,触发扩容,可能从3个副本增至10个甚至更多,保证用户体验。促销结束,负载降低,当Pod平均CPU利用率持续低于某阈值(如30%),触发缩容,如从10个减到5个或更少,避免资源浪费。借此动态机制,商品展示服务能在不同负载下保持稳定服务质量并优化资源利用。

此外,K8S不仅支持基于CPU利用率伸缩,还支持内存使用率、请求并发数等指标。像实时消息处理系统,可依消息队列积压量或每秒处理消息数配置HPA伸缩。积压消息超阈值,增加Pod副本加快处理;积压量减少,相应减少副本。基于多样指标的伸缩机制,让K8S更适配不同应用的负载变化,精准高效保障服务质量。

六、Kubernetes 资源管理

6.1 K8S资源模型

6.1.1 Node资源

在K8S的大家庭里,每个Node就好比是一台实实在在的物理电脑或者虚拟主机。它们都带着自己的“资源宝藏”,像CPU、内存、存储还有网络资源等。不过,这些资源可不是全部都能给咱们的应用程序用哦。就像家里的房子,一部分得留给自己住,Node的资源也有一部分要被操作系统和系统级别的服务占用。剩下的那些,才是能分给运行在这个节点上的Pods的“可分配资源”。K8S就像个精打细算的管家,会根据每个Node的可分配资源,来决定能在这个节点上安排多少个Pod,以及给每个Pod分配多少资源。

6.1.2 Pod资源

Pod是K8S里最小的“建筑单元”,能部署也能管理,更是资源分配的基础。一个Pod可以想象成一个小房子,里面能住一个或好几个关系紧密的“容器小伙伴”。当我们给Pod分配资源的时候,其实就是给房子里所有的小伙伴一起分配资源。这些住在同一个Pod里的容器小伙伴们,它们共用Pod的网络和存储资源,而且都在Pod设定好的资源约束范围内活动。这就好比大家住在同一个宿舍,资源大家一起用,但也不能想用多少就用多少,这样既保证了它们能高效地交流合作,又能让它们的资源使用规规矩矩。

6.1.3 Namespace资源

Namespace就像是给K8S集群画了一个个虚拟的“小格子”,每个“小格子”里的资源都是相互隔开的。不同“小格子”里的东西可以叫一样的名字,但不会互相干扰。比如说,不同的团队、项目或者环境,都可以有自己独立的Namespace“小天地”。每个“小天地”都能按照自己的需求去申请和限制资源。而且,K8S还能给每个Namespace设定一个“资源口袋”,规定好里面能装多少CPU、内存、存储卷等资源。这样一来,每个Namespace里的Pods就没办法无节制地消耗集群的资源啦,保证了整个集群资源的合理分配和有序管理。

6.2 资源请求和限制

6.2.1 资源请求(Requests)

资源请求就是Pod告诉K8S集群:“我运行的时候至少得要这么多资源哦!”这里面主要说的就是CPU和内存。就好像你要出门旅行,得先准备好至少够你维持基本生活的钱一样。Pod明确了自己需要的资源量,K8S的调度器就能像个聪明的导航,准确地把Pod送到有足够资源的节点上。比如说,有个Pod说它要0.5个CPU核心和1GB内存,调度器就会去找那些CPU可用量大于等于0.5个核心,内存可用量大于等于1GB的节点,把这个Pod稳稳当当地放上去。

资源请求可是调度器安排Pod的重要参考呢。要是集群里的资源有限,调度器就会优先照顾那些资源请求能得到满足的Pod。要是剩下的资源不够所有Pod的请求,调度器就得挑挑拣拣,先把资源分给更需要的Pod,那些资源请求没被满足的Pod,就只能先等着,等有资源空出来了再安排。

6.1.2 资源限制

资源限制就是给Pod或者容器能使用的资源量“封顶”,同样也是针对CPU和内存这些。为啥要这么做呢?想象一下,如果有个容器像个调皮的孩子,因为程序出了问题,比如内存泄漏或者CPU任务疯长,就开始无节制地占用资源,那其他的Pod可就遭殃了。所以,给容器设置资源限制,就像给它戴上了“紧箍咒”,比如限制它只能用1个CPU核心和2GB内存,就算它再调皮,也不能超过这个范围。

资源限制就像是给不同的Pod之间砌了一堵墙,保证每个Pod都不会去抢别人的资源,大家都能在自己的小空间里好好运行。这对那些对资源要求很严格的应用,像数据库服务,就特别重要。给它们设置好合理的资源限制,就能让它们在一个稳定的资源环境里工作,不会因为资源竞争而闹脾气。

K8S还通过一种叫cgroups的技术来实现这个资源限制。同时,它还配了一些监控工具,就像一双眼睛,能随时盯着Pod和容器的资源使用情况。要是发现哪个容器快把资源用光了,或者已经超过限制了,管理员就可以赶紧想想办法,比如调整一下资源限制,或者看看是不是应用程序哪里出问题了,得优化优化。

通过这么一套清晰的资源模型,再加上严格的资源请求和限制机制,K8S就把集群资源管理得井井有条,不管有多少应用程序,都能在这个大舞台上稳定、可靠地展示自己的风采。

通过清晰的资源模型定义和严格的资源请求与限制机制,K8S实现了对集群资源的高效管理和合理分配,确保了在多租户、多应用场景下,各个应用都能稳定、可靠地运行。

相关文章:

浅谈云计算22 | Kubernetes容器编排引擎

Kubernetes容器编排引擎 一、Kubernetes管理对象1.1 Kubernetes组件和架构1.2 主要管理对象类型 二、Kubernetes 服务2.1 服务的作用与原理2.2 服务类型 三、Kubernetes网络管理3.1 网络模型与目标3.2 网络组件3.2.1 kube-proxy3.2.2 网络插件 3.3 网络通信流程 四、Kubernetes…...

C 语言的void*到底是什么?

一、void* 的类型任意性 void* 是一种通用指针类型。它可以指向任意类型的数据。例如,它可以指向一个整数(int)、一个浮点数(float)、一个字符(char)或者一个结构体等。在C语言中,当…...

前端【3】--CSS布局,CSS实现横向布局,盒子模型

盒子分类 1、块级盒子 2、内联级盒子 3、内联块级盒子 4、弹性盒子 5、盒子内部分区 方法一:使用 float 普通盒子实现横向布局 方法二:使用 display: inline-block 内联块级元素实现横向布局 方法三:使用弹性盒子 flexbox&#xff0…...

JavaEE

一.web开发概述 1.服务器 解释1:服务器是一款软件,可以向其他发送请求,服务器会做出一个响应。可以在服务器中部署文件,让其他人访问。 解释2:也可以把运行服务器软件的计算机称为服务器 2.安装服务器 Tomcat官方…...

C语言之文本加密程序设计

🌟 嗨,我是LucianaiB! 🌍 总有人间一两风,填我十万八千梦。 🚀 路漫漫其修远兮,吾将上下而求索。 文本加密程序设计 摘要:本文设计了一种文本加密程序,旨在提高信息安…...

Spring-Data-Redis连接模式

Redis可以在各种设置中操作。每个操作模式都需要特定的配置,这些配置将在以下部分中进行解释。 一、Redis 单机模式 最简单的入门方法是将Redis Standalone与单个Redis服务器一起使用, 配置LettuceConnectionFactory或JedisConnectionFactor&#xff0…...

详细介绍下linux内核的高端地址

在32位系统中,内核空间通常占据1GB,用户空间占3GB,这主要是基于历史原因、内存管理需求和系统安全性考虑。 历史原因:早期的UNIX系统就采用了将内核空间和用户空间分离的设计,在32位系统设计时,延续了这种…...

ThinkPhp项目解决静态资源请求的跨域问题的解决思路

背景&#xff1a;我在前端使用vue语言开发的&#xff0c;请求的后端是用ThinkPhp项目开发的。我vue项目里的请求php接口&#xff0c;自带header参数的跨域问题通过网上查询到的server端配置方法已经解决了。我使用的 是中间件的配置方法&#xff1a; <?php//admin 项目 配…...

通过图形界面展现基于本地知识库构建RAG应用

1. 客户需求 快速完成概念验证(PoC)通过图形界面快速完成演示本地私有数据对比不同模型和成本&#xff0c;决定如何部署 2. 阿里云基于本地知识库构建RAG应用 参考方案&#xff1a; 百炼本地知识库方案 解决方案&#xff1a; FastAPI Gradio Llamaindex qwen-plus 主要三大…...

GCPAAS/DashBoard:完全免费的仪表盘设计,基于Vue+ElementUI+G2Plot+Echarts,开源代码,简单易用!还在等什么呢

嗨&#xff0c;大家好&#xff0c;我是小华同学&#xff0c;关注我们获得“最新、最全、最优质”开源项目和高效工作学习方法 GCPAAS/DashBoard&#xff0c;一款基于SpringBoot、MyBatisPlus、ElementUI、G2Plot、Echarts等技术栈的仪表盘设计器&#xff0c;具备仪表盘目录管理…...

深度学习笔记——循环神经网络RNN

大家好&#xff0c;这里是好评笔记&#xff0c;公主号&#xff1a;Goodnote&#xff0c;专栏文章私信限时Free。本文详细介绍面试过程中可能遇到的循环神经网络RNN知识点。 文章目录 文本特征提取的方法1. 基础方法1.1 词袋模型&#xff08;Bag of Words, BOW&#xff09;工作原…...

【Linux系统编程】—— 深度解析进程等待与终止:系统高效运行的关键

文章目录 进程创建再次认识fork()函数fork()函数返回值 写时拷贝fork常规⽤法以及调用失败的原因 进程终⽌进程终止对应的三种情况进程常⻅退出⽅法_exit函数exit函数return退出 进程等待进程等待的必要性进程等待的⽅法 进程创建 再次认识fork()函数 fork函数初识&#xff1…...

EPSANet2021笔记

来源&#xff1a; EPSANet: An Efficient Pyramid Squeeze Attention Block on Convolutional Neural Network 相关工作&#xff1a; #注意力机制 #多尺度特征表示 创新点&#xff1a; 贡献&#xff1a; 建立了长距离通道依赖关系有效获取利用不同尺度特征图的空间信息 问…...

CTTSHOW-WEB入门-信息搜集11-20

web11 1. 题目&#xff1a; 2. 解题步骤及思路&#xff1a;本题的flag已经给出&#xff0c;主要考点是考察域名的查询&#xff0c;通过查询有时候也可以得到一些有用的信息。 3. 相关知识点&#xff1a;查询域名可以使用nslookup命令使用方法如下&#xff1a;&#xff08;windo…...

2025年1月19日(理论力学动静法)

动静法&#xff08;Dynamic-Static Method&#xff09;是理论力学中常用的一种分析方法&#xff0c;用来求解多自由度系统的平衡问题&#xff0c;尤其适用于静力学分析和动力学分析之间的转化。动静法通过引入虚拟的动力学效应&#xff0c;将静力学问题转化为一个动力学问题&am…...

iOS 性能优化:实战案例分享

摘要&#xff1a; 本文将深入探讨 iOS 性能优化的重要性&#xff0c;并通过一系列实际开发案例&#xff0c;展示如何解决常见的性能问题&#xff0c;包括内存管理、CPU 性能、网络性能、UI 性能和启动性能等方面的优化&#xff0c;帮助 iOS 开发者打造更流畅、高效的应用程序。…...

基于本地消息表实现分布式事务

假设我们有一个电商系统,包含订单服务和库存服务。当用户下单时,需要在订单服务中创建订单,同时在库存服务中扣减库存。这是一个典型的分布式事务场景,我们需要保证这两个操作要么都成功,要么都失败,以保证数据的最终一致性。 项目结构: 订单服务(Order Service)库存服务(Inv…...

select函数

系统调用 select()可用于执行 I/O 多路复用操作&#xff0c;调用 select()会一直阻塞&#xff0c;直到某一个或多个文件描述符成为就绪态&#xff08;可以读或写&#xff09;。其函数原型如下所示&#xff1a; #include <sys/select.h> int select(int nfds, fd_set *re…...

自然语言处理——自注意力机制

一、文字表示方法 在自然语言处理中&#xff0c;如何用数据表示文字是基础问题。独热编码&#xff08;One-hot Encoding &#xff09;是一种简单的方法&#xff0c;例如对于 “我”“你”“他”“猫”“狗” 等字&#xff0c;会将其编码为如 “我 [1 0 0 0 0 ……]”“你 [0 …...

C语言初阶--函数

目录 1. 函数是什么&#xff1f; 2. C语言中函数的分类 2.1 库函数 2.2 自定义函数 3. 函数的参数 3.1 实际参数&#xff08;实参&#xff09; 3.2 形式参数&#xff08;形参&#xff09; 4. 函数调用 4.1 传值调用 4.2 传址调用 练习&#xff1a;写一个函数判断一个…...

探索基于机器学习的信用评分:从数据到洞察

友友们好! 我的新专栏《Python进阶》正式启动啦!这是一个专为那些渴望提升Python技能的朋友们量身打造的专栏,无论你是已经有一定基础的开发者,还是希望深入挖掘Python潜力的爱好者,这里都将是你不可错过的宝藏。 在这个专栏中,你将会找到: ● 深入解析:每一篇文章都将…...

Ubuntu 24.04 LTS 通过 docker desktop 安装 seafile 搭建个人网盘

准备 Ubuntu 24.04 LTSUbuntu 空闲硬盘挂载Ubuntu 安装 Docker Desktop [我的Ubuntu服务器折腾集](https://blog.csdn.net/jh1513/article/details/145222679。 安装 seafile 参考资料 Docker安装 Seafile OnlyOffice 并配置OnlyOffice到Seafile&#xff0c;实现在线编辑…...

【Golang 面试题】每日 3 题(三十六)

✍个人博客&#xff1a;Pandaconda-CSDN博客 &#x1f4e3;专栏地址&#xff1a;http://t.csdnimg.cn/UWz06 &#x1f4da;专栏简介&#xff1a;在这个专栏中&#xff0c;我将会分享 Golang 面试中常见的面试题给大家~ ❤️如果有收获的话&#xff0c;欢迎点赞&#x1f44d;收藏…...

Linux虚拟机安装与FinalShell使用:探索Linux世界的便捷之旅

文章目录 软件准备安装 VMware 虚拟机下载CentOS 光盘镜像文件选择适合的 CentOS 版本选择合适的镜像文件 本教程工具版本 第一部分&#xff1a;安装 Linux 虚拟机1. 启动 VMware 并创建新虚拟机2. 默认硬件兼容性设置3. 安装操作系统的设置4. 选择操作系统类型与版本5. 为虚拟…...

leetcode19-删除链表的第n结点

leetcode 19 思路 要删除倒数第n个元素&#xff0c;那么就要找到倒数第n1个元素&#xff0c;那么我们需要两个指针来记录&#xff0c;首先快指针需要先走n1步&#xff0c;然后快慢指针一起进行移动&#xff0c;直到快指针为null的时候&#xff0c;此时慢指针恰好走到倒数第n…...

多学科视角下探索开源Github、Git初步学习

​ Think 1.Github 作为现今最主流的代码托管平台、协作平台甚至是“社交平台”&#xff0c;本身是闭源的。一方面&#xff0c;它是和大多数开发者连接最紧密的开源阵地&#xff0c;另一方面&#xff0c;拥有传统“黑客精神”的人认为将用户身份绑定这样一个闭源平台上恰恰与…...

新星杯-ESP32智能硬件开发--ESP32的I/O组成-系统中断矩阵

本博文内容导读&#x1f4d5;&#x1f389;&#x1f525; ESP32开发板的中断矩阵、功能描述与实现、相关API和示例程序进行介绍 ESP32中断矩阵将任一外部中断源单独分配到每个CPU的任一外部中断上&#xff0c;提供了强大的灵活性&#xff0c;能适应不同的应用需求。 ESP32中断主…...

Android 右键后无Java class创建

Android studio 创建java class &#xff1a; 最近几个月用Android studio 开发&#xff0c;因为电脑设置了一个新的用户使用&#xff0c;原来的android studio,打开之前的正常的项目总是报一些奇奇怪怪的错误&#xff0c;就重新安装了最新的版本 问题描述 但是新的android s…...

leetcode-买卖股票问题

309. 买卖股票的最佳时机含冷冻期 - 力扣&#xff08;LeetCode&#xff09; 动态规划解题思路&#xff1a; 1、暴力递归&#xff08;难点如何定义递归函数&#xff09; 2、记忆化搜索-傻缓存法&#xff08;根据暴力递归可变参数确定缓存数组维度&#xff09; 3、严格表结构依…...

如何通过 Apache Airflow 将数据导入 Elasticsearch

作者&#xff1a;来自 Elastic Andre Luiz 了解如何通过 Apache Airflow 将数据导入 Elasticsearch。 Apache Airflow Apache Airflow 是一个旨在创建、安排&#xff08;schedule&#xff09;和监控工作流的平台。它用于编排 ETL&#xff08;Extract-Transform-Load&#xff0…...

LDPC (Low-Density Parity-Check) 码min_sum、n_0、block_length 和 rate参数

1. min_sum 1; min_sum 是与 最小和解码算法&#xff08;Min-Sum Decoding Algorithm&#xff09;相关的参数。最小和解码算法是 LDPC 码的一种常用解码方法&#xff0c;主要通过传递信号的信息在接收端进行解码。此参数表示最小和算法中的缩放因子。 在 LDPC 解码过程中&am…...

基于javaweb的SpringBoot景区旅游管理系统设计和实现(源码+文档+部署讲解)

个人名片 &#x1f525; 源码获取 | 毕设定制| 商务合作&#xff1a;《个人名片》 ⛺️心若有所向往,何惧道阻且长 文章目录 个人名片运行环境技术栈适用功能说明使用说明 运行环境 Java≥8、MySQL≥5.7 1.运行环境&#xff1a;最好是java jdk 1.8&#xff0c;我们在这个平台…...

(二)afsim第三方库编译(qt编译)

注意&#xff1a;源码编译的路径不能有中文否则报错&#xff0c;压缩包必须用官网下载的xz格式解压的才可以&#xff0c;否则sudo ./configure命令找不到 先编译openssl3.1.1软件包&#xff0c;否则编译的qt库将不支持network&#xff0c;相关库的编译(上文&#xff08;一&…...

重学SpringBoot3-Spring Retry实践

更多SpringBoot3内容请关注我的专栏&#xff1a;《SpringBoot3》 期待您的点赞??收藏评论 重学SpringBoot3-Spring Retry实践 1. 简介2. 环境准备3. 使用方式 3.1 注解方式 基础使用自定义重试策略失败恢复机制重试和失败恢复效果注意事项 3.2 编程式使用3.3 监听重试过程 监…...

极域电子教室破解(JiyuTrainer)

JiyuTrainer下载 byebye极域电脑安装包也可以使用 如果只玩单机游戏最简单的办法就是拔网线 另一种办法安装360卫士通过360卫安全卫士上网设置来进行禁用JiyuTrainer网络跟拔网线一样...

Oracle数据库传统审计怎么用

Oracle数据库传统审计怎么用 审计功能开启与关闭By Session还是By AccessWhenever Successful数据库语句审计数据库对象审计查看审计策略和记录Oracle数据库审计功能分为传统审计(Traditional Auditing)和统一审计(Unified Auditing)。统一审计是从Oracle 12c版本开始引入的…...

windows 搭建flutter环境,开发windows程序

环境安装配置&#xff1a; 下载flutter sdk https://docs.flutter.dev/get-started/install/windows 下载到本地后&#xff0c;随便找个地方解压&#xff0c;然后配置下系统环境变量 编译windows程序本地需要安装vs2019或更新的开发环境 主要就这2步安装后就可以了&#xff0…...

基于SpringBoot的健身房管理系统【源码+文档+部署讲解】

系统介绍 基于SpringBootVue实现的健身房管理系统采用前后端分离架构方式&#xff0c;系统设计了管理员、会员、员工三种角色&#xff0c;系统实现了用户登录与注册、个人中心、会员管理、员工管理、会员卡管理、会员卡类型管理、教练信息管理、解聘管理、健身项目管理、指导项…...

2.slf4j入口

文章目录 一、故事引入二、原理探究三、SLF4JServiceProvider四、总结 一、故事引入 故事要从下面这段代码说起 public class App {private static final Logger logger LoggerFactory.getLogger(App.class);public static void main( String[] args ) throws Exception {lo…...

sql_实用查询语句模版

1. 查询某个字段是否为必填项 SQL 查询模板 SELECT COLUMN_NAME,IS_NULLABLE FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME YourTableNameAND COLUMN_NAME YourColumnName;说明&#xff1a; INFORMATION_SCHEMA.COLUMNS 表包含了所有数据库中表的列信息。IS_NULLABL…...

Nginx反向代理架构介绍

Nginx反向代理架构是一种强大的服务器架构模式&#xff0c;它位于用户和原始服务器之间&#xff0c;接收用户的请求并将其转发到一个或多个后端服务器&#xff0c;然后将从后端服务器获取的响应返回给用户&#xff0c;就好像这些内容都是由代理服务器本身直接提供的一样。以下是…...

Mysql MVCC

MVCC 什么是MVCC MVCC&#xff08;多版本并发控制&#xff0c;Multi-Version Concurrency Control&#xff09; 是一种用于数据库管理系统&#xff08;DBMS&#xff09;中的并发控制机制&#xff0c;它允许多个事务同时执行而不互相阻塞&#xff0c;并通过创建数据的多个版本…...

JavaEE之CAS

上文我们认识了许许多多的锁&#xff0c;此篇我们的CAS就是从上文的锁策略开展的新概念&#xff0c;我们来一探究竟吧 1. 什么是CAS&#xff1f; CAS: 全称Compare and swap&#xff0c;字⾯意思:“比较并交换”&#xff0c;⼀个CAS涉及到以下操作&#xff1a; 我们假设内存中…...

Flink CDC 使用实践以及遇到的问题

背景 最近公司在做一些业务上的架构调整&#xff0c;有一部分是数据从mysql采集到Starrocks&#xff0c;之前的一套方法是走 debezium 到 puslar 到 starrocks,这一套下来比较需要配置很多东西&#xff0c;而且出现问题以后&#xff0c;需要修改很多配置&#xff0c;而且现阶段…...

idea上git log面板的使用

文章目录 各种颜色含义具体的文件的颜色标签颜色&#x1f3f7;️ 节点和路线 各种颜色含义 具体的文件的颜色 红色&#xff1a;表示还没有 git add 提交到暂存区绿色&#xff1a;表示已经 git add 过&#xff0c;但是从来没有 commit 过蓝色&#xff1a;表示文件有过改动 标…...

03.选择排序

一、题目思路 选择排序是一种简单直观的排序算法。它的工作原理是&#xff1a;首先在未排序序列中找到最小&#xff08;或最大&#xff09;元素&#xff0c;存放到排序序列的起始位置&#xff0c;然后&#xff0c;再从剩余未排序元素中继续寻找最小&#xff08;或最大&#xff…...

麒麟V10系统上安装Oracle

以下是在麒麟V10系统上安装Oracle数据库的详细步骤&#xff1a; 安装前准备 检查系统版本&#xff1a;使用uname -a、cat /etc/os-release等命令检查服务器是麒麟V10系统。 配置固定IP和本地yum源&#xff1a; 挂载麒麟V10的iso文件到/mnt目录&#xff0c;如mount -o loop Ky…...

PyTorch 神经协同过滤 (NCF) 推荐系统教程

目录 教程概述1. 神经协同过滤模型概述NCF 模型的主要组成部分&#xff1a; 2. 数据加载与预处理3. 定义神经协同过滤模型4. 训练模型5. 模型评估6. 推荐物品7. 完整示例8. 总结 在本教程中&#xff0c;我们将使用 PyTorch 实现一个神经协同过滤&#xff08;Neural Collaborat…...

日志收集Day001

1.ElasticSearch 作用&#xff1a;日志存储和检索 2.单点部署Elasticsearch与基础配置 rpm -ivh elasticsearch-7.17.5-x86_64.rpm 查看配置文件yy /etc/elasticsearch/elasticsearch.yml&#xff08;这里yy做了别名&#xff0c;过滤掉空行和注释行&#xff09; yy /etc/el…...

【氮化镓】香港科技大学陈Kevin-单片集成GaN比较器

一、引言(Introduction) GaN HEMT的重要性 文章开篇便强调了氮化镓(GaN)高电子迁移率晶体管(HEMT)在下一代功率转换系统中的巨大潜力。GaN HEMT具备高开关频率、低导通电阻、高击穿电压以及宽工作温度范围等优势,使其成为功率电子领域的热门研究对象。这些特性使得GaN…...