首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >实现Kubernetes中的抢占式Pod与固定Pod的弹性伸缩:一项全面指南

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

作者头像
用户8589624
发布2025-11-12 15:58:33
发布2025-11-12 15:58:33
70
举报
文章被收录于专栏:nginxnginx

个人名片

在这里插入图片描述
在这里插入图片描述

🎓作者简介: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

代码语言:javascript
复制
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

代码语言:javascript
复制
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

代码语言:javascript
复制
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 配置

代码语言:javascript
复制
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的使用有所帮助。如果有任何问题或需要进一步的帮助,请随时联系我。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-11-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 目录
  • 实现Kubernetes中的抢占式Pod与固定Pod的弹性伸缩:一项全面指南
    • 背景介绍
    • 环境和需求概述
    • 步骤和配置
      • 1. 固定现有两个Deployment的Pod数量
      • 2. 新增使用抢占式Pod的Deployment
      • 3. 配置 HPA 来管理抢占式 Deployment
      • 4. 确保共享 CPU 指标
    • 总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档