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

Kubernetes集群超配节点容量

目录:

    • 1、节点超配简介
    • 2、创建 PriorityClass
    • 3、运行请求节点容量的 Pod
    • 4、调整占位资源请求
    • 5、设置所需的副本数量
    • 6、自动扩缩容组件
      • 6.1、手动方式
      • 6.2、自动方式

1、节点超配简介

节点超配是一种主动预留部分集群计算资源的策略。这种预留有助于减少在扩缩容事件期间调度新 Pod 所需的时间, 从而增强集群对突发流量或突发工作负载需求的响应能力。

通过保持一些未使用的容量,确保在新 Pod 被创建时资源可以立即可用,防止 Pod 在集群扩缩容时进入 Pending 状态。

2、创建 PriorityClass

首先为占位 Pod 定义一个 PriorityClass。 先创建一个优先级值为负数的 PriorityClass,稍后将其分配给占位 Pod。 接下来,你将部署使用此 PriorityClass 的 Deployment。

apiVersion: scheduling.k8s.io/v1
kind: PriorityClass
metadata:name: placeholder # 这些 Pod 表示占位容量
value: -1000
globalDefault: false
description: "Negative priority for placeholder pods to enable overprovisioning."

然后创建 PriorityClass:

kubectl apply -f https://k8s.io/examples/priorityclass/low-priority-class.yaml

接下来,你将定义一个 Deployment,使用优先级值为负数的 PriorityClass 并运行最小的容器。 当你将此 Deployment 添加到集群中时,Kubernetes 会运行这些占位 Pod 以预留容量。 每当出现容量短缺时,控制面将选择这些占位 Pod 中的一个作为第一个候选者进行抢占。

3、运行请求节点容量的 Pod

apiVersion: apps/v1
kind: Deployment
metadata:name: capacity-reservation# 你应决定要将此 Deployment 部署到哪个命名空间
spec:replicas: 1selector:matchLabels:app.kubernetes.io/name: capacity-placeholdertemplate:metadata:labels:app.kubernetes.io/name: capacity-placeholderannotations:kubernetes.io/description: "Capacity reservation"spec:#当超配了使用上述节点资源配置priorityClassName: placeholderaffinity: # 有可能的话,将这些 Pod 开销放到不同的节点podAntiAffinity:preferredDuringSchedulingIgnoredDuringExecution:- labelSelector:matchLabels:app: placeholdertopologyKey: "kubernetes.io/hostname"containers:- name: pauseimage: registry.k8s.io/pause:3.6resources:requests:cpu: "50m"memory: "512Mi"limits:memory: "512Mi"

基于该清单创建 Deployment:

kubectl --namespace example apply -f https://k8s.io/examples/deployments/deployment-with-capacity-reservation.yaml

4、调整占位资源请求

为占位 Pod 配置资源请求和限制,以定义你希望保持的超配资源量。 这种预留确保为新 Pod 保留可以使用的、特定量的 CPU 和内存。

要编辑 Deployment,可以修改 Deployment 清单文件中的 resources 一节, 设置合适的 requests 和 limits。 你可以将该文件下载到本地,然后用自己喜欢的文本编辑器进行编辑。

你也可以使用 kubectl 来编辑 Deployment:

kubectl edit deployment capacity-reservation

例如,要为 5 个占位 Pod 预留 500m CPU 和 1Gi 内存,请为单个占位 Pod 定义以下资源请求和限制:

  resources:requests:cpu: "100m"memory: "200Mi"limits:cpu: "100m"

5、设置所需的副本数量

例如,有 5 个副本,每个预留 0.1 CPU 和 200MiB 内存:
CPU 预留总量:5 × 0.1 = 0.5(在 Pod 规约中,你将写入数量 500m)
内存预留总量:5 × 200MiB = 1GiB(在 Pod 规约中,你将写入 1 Gi)

要扩缩容 Deployment,请基于集群的大小和预期的工作负载调整副本数:

kubectl scale deployment capacity-reservation --replicas=5

验证扩缩容效果:

kubectl get deployment capacity-reservation

输出应反映出更新后的副本数:

NAME                   READY   UP-TO-DATE   AVAILABLE   AGE
capacity-reservation   5/5     5            5           2m

说明:
一些自动扩缩组件,特别是 Karpenter, 在考虑节点扩缩容时将偏好的亲和性规则视为硬性规则。如果你使用 Karpenter 或其他使用同样启发式的节点扩缩容组件,你在此处设置的副本数也就是你的集群的最少节点数。

总结:
当请求节点容量超配时,会触发 PodpriorityClassName: placeholder配置,设置分片数为5, cpu: "100m"和memory: "200Mi"乘以5,刚好是为运行的Pod 预留 500m CPU 和 1Gi 内存。从而触发扩缩容时有更多的资源能迅速的投入使用。

6、自动扩缩容组件

6.1、手动方式

在这里插入图片描述

6.2、自动方式

在这里插入图片描述

http://www.xdnf.cn/news/72757.html

相关文章:

  • MCP的发展历程
  • 批量创建同名文件夹并整理文件至对应文件夹
  • Day5-UFS总结
  • 基于vue框架的电脑配件网上商城18xsv(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
  • aws文件存储服务——S3介绍使用代码集成
  • 第5章:MCP框架详解
  • Python 之 __file__ 变量导致打包 exe 后路径输出不一致的问题
  • skyreels
  • 【Python网络爬虫开发】从基础到实战的完整指南
  • 婴幼儿托育服务与管理实训室的设备配置与功能优化
  • Kubernetes相关的名词解释Service(15)
  • 怎么安装python3.5-以及怎么在这个环境下安装包
  • 【机器学习-线性回归-1】深入理解线性回归:机器学习中的经典算法
  • 日语学习-日语知识点小记-构建基础-JLPT-N4阶段(8): - (1)复习一些语法(2)「~ています」
  • SpringCloud和SpringCloudAlibaba技术栈全面对比
  • js添加点击监控事件的方式
  • CCF CSP 第37次(2025.03)(1_数值积分_C++)
  • 网工实验——按照接口划分VLAN
  • 影楼精修-中性灰磨皮算法解析
  • redhat秘钥登入
  • 基础知识查缺补漏:RMSE和MSE
  • TOGAF 敏捷冲刺:15 天 Scrum 冲刺实践
  • CentOS7安装MySQL教程
  • 01-初识前端
  • 9.策略模式:思考与解读
  • [FPGA基础] FIFO篇
  • 上位机软件开发的关键技术与应用解析​
  • uCOS3实时操作系统(系统初始化和任务启动)
  • close和shutdown
  • el-select+vue-virtual-scroller解决数据量大卡顿问题