K8s之自动扩缩容

news2024/11/14 19:35:03

Kubernetes (K8s) 的动态扩缩容(自动伸缩)功能是集群管理中非常关键的一部分,能够根据工作负载的变化自动调整应用程序的副本数,以确保资源的高效利用和服务的稳定性。

K8s介绍文章 容器之k8s(Kubernetes)-CSDN博客

1. 动态扩缩容的类型

Kubernetes 提供了三种主要的动态扩缩容机制:

  1. 水平Pod自动扩缩容 (Horizontal Pod Autoscaler, HPA):

    • 作用:HPA 根据指标(如 CPU 使用率、内存使用率、自定义指标等)自动调整应用程序的 Pod 副本数量。
    • 使用场景:适用于需要根据工作负载动态增加或减少应用实例的场景。
    • 配置示例
      apiVersion: autoscaling/v1
      kind: HorizontalPodAutoscaler
      metadata:
        name: my-app-hpa
      spec:
        scaleTargetRef:
          apiVersion: apps/v1
          kind: Deployment
          name: my-app
        minReplicas: 2
        maxReplicas: 10
        targetCPUUtilizationPercentage: 50
      
      这个示例配置了一个 HPA,针对 my-app 部署进行扩缩容。当 CPU 使用率超过 50% 时,会增加 Pod 的副本数量,最多扩展至 10 个实例;当使用率低于 50% 时,会缩减至不低于 2 个实例。
  2. 垂直Pod自动扩缩容 (Vertical Pod Autoscaler, VPA):

    • 作用:VPA 自动调整单个 Pod 的资源请求和限制(如 CPU、内存),而不是 Pod 的数量。
    • 使用场景:适用于工作负载不变但需要动态调整资源分配的应用,如长期运行的服务或数据库。
    • 配置示例
      apiVersion: autoscaling.k8s.io/v1
      kind: VerticalPodAutoscaler
      metadata:
        name: my-app-vpa
      spec:
        targetRef:
          apiVersion: "apps/v1"
          kind:       Deployment
          name:       my-app
        updatePolicy:
          updateMode: "Auto"
      
      这个配置示例会自动根据应用程序的资源使用情况调整 my-app 的 Pod 资源请求和限制。
  3. 集群自动扩缩容 (Cluster Autoscaler):

    • 作用:Cluster Autoscaler 根据集群中 Pod 的需求,自动增加或减少节点数。
    • 使用场景:当集群资源不足以支持当前 Pod 的资源需求时,会自动增加节点;当资源利用率较低时,自动减少节点以节省成本。
    • 配置示例: Cluster Autoscaler 通常通过命令行参数或配置文件来配置,并与云提供商(如 GCP、AWS)或裸机集群集成。例如,在 GKE 中,Cluster Autoscaler 可以在创建节点池时启用:
      gcloud container clusters create my-cluster \
        --enable-autoscaling --min-nodes=1 --max-nodes=10 \
        --num-nodes=3
      

2. 工作机制

水平Pod自动扩缩容 (HPA)

HPA 定期(默认 15 秒)查询指标服务器(Metrics Server)来获取 Pod 的资源使用情况。如果平均使用率超过了定义的阈值,HPA 会自动增加 Pod 的副本数。反之,如果使用率低于阈值,则会减少副本数。

垂直Pod自动扩缩容 (VPA)

VPA 监控 Pod 的实际资源使用情况,并根据实际需要调整 Pod 的资源请求值。当发现资源请求不合理(如经常超出或远低于实际使用)时,VPA 会推荐或自动应用新的资源请求和限制。

集群自动扩缩容 (Cluster Autoscaler)

Cluster Autoscaler 监控集群中所有未调度的 Pod 以及当前节点的资源使用情况。如果有 Pod 无法调度(即集群资源不足),它会尝试扩展集群。如果发现某些节点的资源利用率长期很低(如未调度 Pod 数为 0 且占用率低),则会尝试缩减集群节点数。

3. 应用场景

  • 电子商务网站:在促销活动期间,流量会大幅增加,HPA 可以动态增加服务实例以应对流量高峰,而在活动结束后自动减少实例,节约资源。
  • 数据处理任务:对于需要大量计算资源的批处理任务,可以使用 VPA 动态调整资源分配,确保任务在资源充足的情况下高效执行。
  • 成本控制:Cluster Autoscaler 在夜间或业务低峰期自动缩减节点,降低云资源成本。

4. 配置和调优建议

  • 监控和指标:确保 Metrics Server 或 Prometheus 等监控系统正常工作,以便 HPA 和 VPA 能够获取准确的指标数据。
  • 平滑过渡:为 HPA 配置合适的 minReplicasmaxReplicas,避免频繁扩缩容导致的不稳定。也可以使用 scaleDownStabilizationWindow 等参数来调节缩容的响应速度。
  • 资源限制:合理设置 Pod 的资源请求和限制,以便 VPA 可以有效工作,避免资源浪费或因资源不足导致的性能问题。
  • 扩展策略:根据业务需求,设置 Cluster Autoscaler 的扩展和缩减策略,确保集群既能在高负载时满足需求,也能在低负载时节省成本。

5. 常见问题与解决方案

  • 扩缩容滞后:由于指标收集的延迟,可能导致扩缩容响应不及时。可以通过缩短采样间隔或调整 HPA 的扩展行为来改善。
  • 资源竞争:多个应用共享节点时,VPA 调整资源时可能导致资源竞争,需合理设置每个应用的资源限制,避免干扰。
  • 冷启动问题:新增加的 Pod 需要时间启动,可能在短时间内无法处理请求。可以通过预热机制或调整 HPA 的启动参数来缓解。

总结

Kubernetes 的动态扩缩容机制使得应用能够根据实际需求自动调整资源,既能在高峰期提供足够的计算能力,又能在低负载时节约资源。这种自动化的资源管理极大地提升了系统的弹性和可扩展性,适用于各种复杂的应用场景。

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

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

相关文章

文件包含漏洞(1)

目录 PHP伪协议 php://input Example 1&#xff1a; 造成任意代码执行 Example 2&#xff1a; 文件内容绕过 php://filer zip:// PHP伪协议 php://input Example 1&#xff1a; 造成任意代码执行 搭建环境 <meta charset"utf8"> <?php error_repo…

代码随想录算法训练营第51天|卡码网99. 岛屿数量、100. 岛屿的最大面积

1.卡码网99. 岛屿数量 题目链接&#xff1a;https://kamacoder.com/problempage.php?pid1171 文章链接&#xff1a;https://www.programmercarl.com/kamacoder/0099.岛屿的数量深搜.html#_99-岛屿数量 本题思路: 遇到一个没有遍历过的节点陆地&#xff0c;计数器就加一&#x…

银河麒麟桌面操作系统V10:如何设置应用开机自启动?

银河麒麟桌面操作系统V10&#xff1a;如何设置应用开机自启动&#xff1f; 1、图形界面设置2、命令行设置3、注意 &#x1f496;The Begin&#x1f496;点点关注&#xff0c;收藏不迷路&#x1f496; 1、图形界面设置 打开“设置”->“系统”->“开机启动”。点击“添加…

秋招突击——笔试整理——8/25——拼多多笔试整理

文章目录 引言正文第一题——多多删树个人解答 第二题、多多的奇数序列个人解答 第三题&#xff1a;多多换礼物个人解答参考实现 第四题、多多的字符反转个人实现 总结 引言 今天的拼多多笔试挺难的&#xff0c;感觉自己在技巧性还差很多&#xff0c;很多东西需要看很久&#…

第3章-02-Python库Selenium安装与讲解

🏆作者简介,黑夜开发者,CSDN领军人物,全栈领域优质创作者✌,CSDN博客专家,阿里云社区专家博主,2023年CSDN全站百大博主。 🏆数年电商行业从业经验,历任核心研发工程师,项目技术负责人。 🏆本文已收录于专栏:Web爬虫入门与实战精讲,后续完整更新内容如下。 文章…

windows javascript 打开、关闭摄像头

1. 效果 打开摄像头 关闭摄像头&#xff08;包括指示灯也关了的&#xff09; 2. 代码 open_close_camera.html // open_close_camera.html <!DOCTYPE html> <html><head><meta charset"UTF-8"><title>use camera</title>…

CPP中lamada表达式作用一览[more cpp-6]

一般语法 CPP中的lambda 表达式的本质就是匿名函数&#xff0c;它可以在代码中定义一个临时的、局部的函数.为什么需要lamada表达式&#xff1f; 因为命名是个大问题 想名字以及避免命名冲突是很劳神费力的事&#xff0c;这就是lamada表达式的优点(lamada优点表现为简洁性)总…

7.Linux_GCC与GDB

GCC 1、GCC编译过程 首先使用编辑器对.c文件进行编辑&#xff0c;即&#xff1a;敲代码。之后GCC编译器会对.c文件进行预处理、编译、汇编、链接&#xff0c;最终输出可执行文件。具体流程如下&#xff1a; 四个阶段的含义及指令 1、预处理 指令&#xff1a;gcc - E <.…

专利服务系统小程序的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;用户管理&#xff0c;专利申请管理&#xff0c;分类号管理&#xff0c;专利管理&#xff0c;增值服务管理&#xff0c;业务指导信息管理&#xff0c;系统管理 微信端账号功能包括&#xff1a;系统首页…

免费插件集-illustrator插件-Ai插件-路径节点分割路径

文章目录 1.介绍2.安装3.通过窗口>扩展>知了插件4.功能解释5.总结 1.介绍 本文介绍一款免费插件&#xff0c;加强illustrator使用人员工作效率&#xff0c;路径处理功能&#xff0c;功能是路径节点分割路径。首先从下载网址下载这款插件 https://download.csdn.net/down…

kubenetes--资源调度

前言&#xff1a;本博客仅作记录学习使用&#xff0c;部分图片出自网络&#xff0c;如有侵犯您的权益&#xff0c;请联系删除 出自B站博主教程笔记&#xff1a; 完整版Kubernetes&#xff08;K8S&#xff09;全套入门微服务实战项目&#xff0c;带你一站式深入掌握K8S核心能…

C语言 之 自定义类型:结构体

结构体类型的声明 结构体的声明 struct tag {member-list; //结构体中的成员&#xff0c;可以有多个 }variable-list; //这里是直接创建结构体的变量&#xff0c;但是不一定要在这里声明变量 //不能把后面这个 ; 省略了例如结构体用于描述一个学生&#xff1a; struct Stu…

48.给定一个 n × n 的二维矩阵表示一个图像,实现一个算法将图像原地顺时针旋转 90 度

48. Rotate Image 题目 你得到了一个 n x n 的二维矩阵,表示一张图像。 将图像顺时针旋转 90 度。 注意: 你必须 就地 旋转图像,这意味着你需要直接修改输入的二维矩阵。不能分配另一个二维矩阵来进行旋转。 示例 1: 输入: [ [1,2,3], [4,5,6], [7,8,9] ] 输出: [ [7,…

数据中台架构设计

由于当前项目需要对接多个不同的数据源&#xff0c;同时涉及到多端处理&#xff0c;而且需要考虑海量数据处理&#xff0c;还有总部与分部架构部署问题&#xff0c;因而整体技术栈倾向于大数据和分表分库式处理数据层接入问题。 简单讲&#xff0c;项目分为数据中台和业务中台…

介绍下线程池的七个参数

corePoolSize&#xff1a;核心线程数&#xff0c;池中要保留的线程数&#xff0c;即使它们处于空闲状态&#xff0c;除非设置了allowCoreThreadTimeOutmaximumPoolSize&#xff1a;最大线程数量keepAliveTime&#xff1a;线程存活时间unit&#xff1a;时间单位workQueue&#x…

【C++离线查询】2250. 统计包含每个点的矩形数目

本文涉及的基础知识点 离线查询 LeetCode2250. 统计包含每个点的矩形数目 给你一个二维整数数组 rectangles &#xff0c;其中 rectangles[i] [li, hi] 表示第 i 个矩形长为 li 高为 hi 。给你一个二维整数数组 points &#xff0c;其中 points[j] [xj, yj] 是坐标为 (xj,…

Linux——文件系统层次结构,绝对路径

一、文件系统层次结构 linux中所有文件存储在文件系统中&#xff0c;文件系统层次结构可以类比为一颗到立的树&#xff0c;最顶层为根目录/&#xff0c;根目录/底又分了/etc,/bin,/boot,/dev等子目录&#xff0c;而这些子目录底下又可以生成子目录分支。 以下为linux中较为重要…

亿图设备采集

这个数控系统的英文名是HUST,在台湾知名度还可以,但大陆这边我做这么多年项目也只接触过屈指可数的几次,可见市场占有率并不大。下面是一些介绍: 台灣億圖 HUST CNC 是一個充滿活力的公司,我們經營的目標是提供能滿足客戶之優良產品,以及優質的服務。我們的期望是使 HUS…

【STM32】驱动LCD

没买LCD屏&#xff0c;没有上机实践&#xff0c;只是学习了理论。 大部分图片来源&#xff1a;正点原子HAL库课程 专栏目录&#xff1a;记录自己的嵌入式学习之路-CSDN博客 目录 1 屏幕接口 2 屏幕驱动的基本步骤 3 8080时序的各信号线 4 8080的读和写 5 屏…

微信开发者工具上传代码到微信Git

1、创建Git用户并设置密码 2、创建项目 3、开发者工具中设置授权方式 4、开发者工具中设置创建地址 5、如有需要执行其他Git命令 到这里点击 “推送”可以上传代码到创建。