实现Kubernetes中的抢占式Pod与固定Pod的弹性伸缩:一项全面指南

news2024/11/26 1:25:50

个人名片
在这里插入图片描述
🎓作者简介:java领域优质创作者
🌐个人主页:码农阿豪
📞工作室:新空间代码工作室(提供各种软件服务)
💌个人邮箱:[2435024119@qq.com]
📱个人微信:15279484656
🌐个人导航网站:www.forff.top
💡座右铭:总有人要赢。为什么不能是我呢?

  • 专栏导航:

码农阿豪系列专栏导航
面试专栏:收集了java相关高频面试题,面试实战总结🍻🎉🖥️
Spring5系列专栏:整理了Spring5重要知识点与实战演练,有案例可直接使用🚀🔧💻
Redis专栏:Redis从零到一学习分享,经验总结,案例实战💐📝💡
全栈系列专栏:海纳百川有容乃大,可能你想要的东西里面都有🤸🌱🚀

目录

    • 实现Kubernetes中的抢占式Pod与固定Pod的弹性伸缩:一项全面指南
      • 背景介绍
      • 环境和需求概述
      • 步骤和配置
        • 1. 固定现有两个Deployment的Pod数量
        • 2. 新增使用抢占式Pod的Deployment
        • 3. 配置 HPA 来管理抢占式 Deployment
        • 4. 确保共享 CPU 指标
      • 总结

实现Kubernetes中的抢占式Pod与固定Pod的弹性伸缩:一项全面指南

在现代云计算环境中,优化资源使用和成本是关键。Kubernetes作为一个强大的容器编排平台,提供了丰富的功能来管理和扩展应用程序。尤其是,当我们希望在保证业务连续性的同时,降低成本并优化资源利用时,抢占式(或称竞价)Pod的使用就显得尤为重要。在本文中,我们将探讨如何在Kubernetes环境中实现抢占式Pod与固定Pod的弹性伸缩,并提供详细的步骤和配置示例。

背景介绍

Kubernetes通过部署(Deployment)和水平Pod自动扩展(HPA)等功能,允许我们根据实际的工作负载动态地调整Pod的数量。这对于处理不断变化的流量和业务需求至关重要。然而,在一些情况下,我们希望将业务流量分配到不同类型的节点上,以实现成本节约和资源优化。例如,腾讯云的抢占式(竞价)实例提供了显著的成本优势,但其特性是这些实例可能会被回收,这就要求我们对这些Pod进行特殊的处理和配置。

环境和需求概述

在本文中,我们的Kubernetes环境包含以下主要组件:

  1. 节点池:目前,环境中只有一个超级节点池,没有抢占式Pod的支持。
  2. 业务结构:有两个Deployment(一个主查日志,一个用于扩缩容),它们使用相同的Selector标签。
  3. 弹性伸缩:通过Horizontal Pod Autoscaler(HPA)来依据CPU指标对其中一个Deployment进行弹性伸缩。

我们的目标是:

  1. 将现有两个Deployment中的Pod数量固定。
  2. 新增一个Deployment,使用抢占式Pod来运行相同的业务。
  3. 共享所有Deployment的CPU指标。
  4. 对新增的Deployment使用抢占式Pod,并实现弹性伸缩。
  5. 确保原有的Deployment内Pod数量固定,并基于整体CPU使用情况调整抢占式Deployment的Pod数量。

步骤和配置

1. 固定现有两个Deployment的Pod数量

首先,我们需要确保两个现有的Deployment(主查日志和扩缩容)的Pod数量是固定的。这样做可以确保业务的稳定性,而不受弹性伸缩策略的影响。

主查日志 Deployment

apiVersion: apps/v1
kind: Deployment
metadata:
  name: test-deployment-main
spec:
  replicas: 10  # 固定为 10
  selector:
    matchLabels:
      app: test-deployment
  template:
    metadata:
      labels:
        app: test-deployment
    spec:
      containers:
      - name: main
        image: advertise.tencentcloudcr.com/advertise/api-test:latest
        resources:
          requests:
            cpu: "4"
            memory: 8Gi
          limits:
            cpu: "4"
            memory: 8Gi

扩缩容 Deployment

apiVersion: apps/v1
kind: Deployment
metadata:
  name: test-deployment-scale
spec:
  replicas: 10  # 固定为 10
  selector:
    matchLabels:
      app: test-deployment
  template:
    metadata:
      labels:
        app: test-deployment
    spec:
      containers:
      - name: main
        image: advertise.tencentcloudcr.com/advertise/api-index:latest
        resources:
          requests:
            cpu: "4"
            memory: 8Gi
          limits:
            cpu: "4"
            memory: 8Gi
2. 新增使用抢占式Pod的Deployment

接下来,我们创建一个新的Deployment,运行相同的业务代码,但配置它使用抢占式节点池。这可以通过在Pod模板中添加节点选择器(nodeSelector)来实现。

抢占式 Deployment

apiVersion: apps/v1
kind: Deployment
metadata:
  name: test-deployment-preemptible
spec:
  replicas: 0  # 初始时不创建任何 Pod
  selector:
    matchLabels:
      app: test-deployment
  template:
    metadata:
      labels:
        app: test-deployment
    spec:
      nodeSelector:
        type: preemptible  # 确保使用抢占式节点
      containers:
      - name: main
        image: advertise.tencentcloudcr.com/advertise/api-test:latest
        resources:
          requests:
            cpu: "4"
            memory: 8Gi
          limits:
            cpu: "4"
            memory: 8Gi
3. 配置 HPA 来管理抢占式 Deployment

为了实现弹性伸缩,我们需要配置水平Pod自动扩展(HPA)。HPA可以依据CPU使用率等指标动态调整Pod的数量。

HPA 配置

apiVersion: autoscaling/v2beta2
kind: HorizontalPodAutoscaler
metadata:
  name: test-deployment-preemptible-hpa
  namespace: default
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: test-deployment-preemptible
  minReplicas: 0
  maxReplicas: 10
  metrics:
  - type: Resource
    resource:
      name: cpu
      target:
        type: Utilization
        averageUtilization: 50  # 设置 CPU 使用率超过 50% 时扩容
4. 确保共享 CPU 指标

所有的Deployment共享相同的CPU指标,是通过相同的selector标签来实现的。由于selector标签一致,Kubernetes会将这些Pod视为同一组,从而可以使用相同的CPU指标。

总结

在本文中,我们探讨了如何在Kubernetes环境中实现抢占式Pod与固定Pod的弹性伸缩。通过固定现有两个Deployment的Pod数量,新建一个使用抢占式Pod的Deployment,并配置水平Pod自动扩展(HPA),我们可以在保证业务连续性的同时,利用抢占式节点池实现成本优化。

这种配置不仅能帮助我们降低成本,还能确保在业务需求变化时,能够动态调整资源使用,提高资源利用效率。在实际应用中,务必根据具体的业务需求和环境配置进行调整和优化,确保系统的稳定性和性能。

希望这篇指南对你在Kubernetes环境中管理和优化Pod的使用有所帮助。如果有任何问题或需要进一步的帮助,请随时联系我。

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

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

相关文章

c++STL中list介绍,模拟实现和list与vector对比

目录 前言 : 1. list的介绍及使用 1.1list的介绍 1.2 list的使用 1.2.1 list的构造 1.2.2 list iterator的使用 1.2.3 list capacity 1.2.4 list element access 1.2.5 list modifiers 1.2.6 list的迭代器失效 2. list的模拟实现 3. list与vector的对…

GuLi商城-商品服务-API-新增商品-调用远程服务保存优惠等信息

优惠券服务要开启服务注册和发现功能: 会员服务要开启远程调用功能: 可以写在消费端: 我还是习惯写在服务提供者一端: package com.nanjing.gulimall.coupon.feign;import com.nanjing.common.to.SpuBoundTo; import com.nanjing.common.utils.R; import org.springframewo…

Docker安装portainer汉化版

1、拉取汉化版Portainer镜像 docker pull 6053537/portainer-ce 2、创建数据卷 为了保存Portainer的数据和配置,应该创建一个Docker卷: docker volume create portainer_data 3、运行Portainer容器 docker run -d \--name portainer \-p 9000:9000…

企业社会责任(CSR)国际标准对企业的发展有什么好处?

企业社会责任(CSR)国际标准对企业的发展具有多方面的好处,包括但不限于以下几点: 提升企业声誉和形象 ​符合国际标准展示了企业对社会和环境的积极关注,有助于在消费者、投资者、合作伙伴和公众中树立良好的声誉&…

MyBatis快速学习

目录 前言 MyBatis的具体使用 一些小工具:MyBatisX 常见问题: 1.表中字段名和实体属性名不一致 2.按条件查询(单条件)时的,查询条件怎么编写 3.按条件查询(多条件) 4.多条件查询时&…

需要增重的小猫看过来!猫咪很瘦吃不胖是怎么回事?增重猫罐头推荐!

前几天医院来了只小母猫,7个月了,现在刚5斤。主人反映她平时干饭积极,能吃能睡,能喝能拉,就是不长肉。虽然大家都说母猫确实没有公猫容易胖,但是这只猫咪确实也长得也太慢了。其实我们医院接到过不少这样的…

对于springboot无法连接redis解决方案

对于springboot无法连接redis解决方案 一、测试是否能在本地应用上访问到你的redis(如果是部署在linux上的话)1. 开启telnet功能2. 开始测试端口是否能访问到(适用于所有,包括MQ)3. 开放6379端口4. 看spring的配置文件…

CANdela/Diva系列5--CANdela Studio的Data Types功能介绍

Data Types在CDD文件中是一个很重要的部分,它能够便捷地解析DID/RID的数据内容和0x19服务的相关子服务,同时能够能够全局定义一些变量,达到整个CDD文件公用的效果。 目录 1. Raw Value: 2. Text Table: 3. Linear: 4. Characteristic Cu…

生活需要BGM,悠律凝声环开放式耳机全场景通用

如今,BGM围绕着我们的生活,音乐是生活的调料品,深受运动爱好者的喜爱,不但能够缓解锻炼时的单调,也能够更好地激发我们的身体状态。最近我入手的悠律凝声环ringbuds pro就是这样一款特别适合运动场景使用。 开放式耳机…

go语言day22 gin-vue-admin全栈项目的依赖安装

flipped-aurora/gin-vue-admin: 🚀ViteVue3Gin的开发基础平台,支持TS和JS混用。它集成了JWT鉴权、权限管理、动态路由、显隐可控组件、分页封装、多点登录拦截、资源权限、上传下载、代码生成器【可AI辅助】、表单生成器和可配置的导入导出等开发必备功能…

从零开始学习性能测试

学习目标 理解性能测试定义、目的理解常见性能测试策略理解性能指标理解性能测试方法学习性能测试工具 什么是性能测试 测试中的非功能测试其实范围比较广,性能、稳定性、安全性等都可以放进这个范畴。非功能测试,一般比功能测试门槛高些,多数…

谷歌账号被停用了,申诉界面可以下载数据,有必要吗?有用吗?

有的朋友在使用谷歌账号的时候,登录遇到“您的账号已停用”的情形。 这个界面提示说可以下载账号相关的数据,那么,谷歌账号被停用后如何下载自己谷歌账号的数据呢?能下载哪些数据Une?下载的数据有用吗? 这…

记录|MVS和VM软件使用记录

目录 前言一、常用属性二、触发模式选择三、操作注意点四、录像、抓拍功能五、VM软件六、VM软件界面介绍七、VM软件运行间隔八、VM软件图像源九、VM软件相机管理十、获取图像十一、方案存储十一、相机拍摄彩图转换颜色转换快速匹配特征模板:运行参数 十二、位置修正…

力扣热题100_二叉树_226_翻转二叉树

文章目录 题目链接解题思路解题代码 题目链接 226. 翻转二叉树 给你一棵二叉树的根节点 root ,翻转这棵二叉树,并返回其根节点。 示例 1: 输入:root [4,2,7,1,3,6,9] 输出:[4,7,2,9,6,3,1] 示例 2: …

63 变量的作用域

变量起作用的代码范围称为变量的作用域,不同作用域内同名变量之间互不影响。在函数外部和函数内部定义的变量,其作用域是不同的,函数内部定义的变量一般为局部变量,在函数外部定义的变量为全局变量。不管是局部变量还是全局变量&a…

【网络安全】探索AI 聊天机器人工作流程实现RCE

未经许可,不得转载。 文章目录 前言正文前言 我发现了一个广泛使用的AI聊天机器人平台中的远程代码执行漏洞。该漏洞存在于聊天机器人的自定义工作流响应代码中,这些工作流允许开发人员通过创建定制的流程来扩展机器人的功能。 正文 在浏览自动化聊天机器人的多个特定功能…

爱国者vs格行vs吉客猫随身wifi综合测评!哪款随身WiFi最好用?随身wifi哪个品牌性价比最高?随身WiFi哪个网速最快?

近两年,随身WiFi作为便携上网的解决方案,备受欢迎。不过市场上品牌众多,各有千秋。今天,我们将聚焦于爱国者、格行以及吉客猫这三个热门品牌,通过详细对比,为您揭示每款随身WiFi的特点和区别,方…

VMware14安装图文

1.下载 通过百度网盘分享的文件:VMware14安装图文 链接:https://pan.baidu.com/s/1t2kHDphI_z1guqp0P-NO_A 提取码:q3j0 --来自百度网盘超级会员V3的分享 2.安装

Python程序组成部分

此文为《Python入门经典以解决计算问题为导向的Python编程实践》27-31页的笔记。 程序组成部分 一、模块二、表达式和语句三、空白缩进续行 四、注释五、特殊元素1、关键字2、运算符3、标点符号(又名分隔符)4、字面量 六、对象命名(很重要&a…

十七.核心动画 - 使用重复图层(CAReplicatorLayer)构建自定义loading视图.

引言 本篇博客我们来详细的讨论一下CAReplicatorLayer图层,它是一个功能非常强大的工具,允许我们通过重复图层来创建复杂且高效的动画效果,无论是加载动画,粒子效果,还是其它重复性的图形动画,CAReplicato…