文章目录

  • 1、前置准备
  • 2、需求场景
  • 3、Scale 静态扩缩容
    • 3.1、创建 Deployment 脚本
    • 3.2、Scale 扩缩容
  • 3、HPA 自动扩缩容
    • 3.1、安装 Metrics
    • 3.2、创建 Deployment 演示案例
    • 3.3、创建 HPA
    • 3.4、触发 HPA 自动扩缩容

1、前置准备

本次案例演示,我选择了阿里云ECS(抢占式)搭建了 K8S 1主2从集群,资源配置规格如下:

  • 主节点 k8s-master:4核8G、40GB硬盘、CentOS7.9(内网IP:172.16.0.172)
  • 从节点 k8s-node1: 4核8G、40GB硬盘、CentOS7.9(内网IP:172.16.0.173)
  • 从节点 k8s-node2: 4核8G、40GB硬盘、CentOS7.9(内网IP:172.16.0.174)

K8S集群构建参考:https://blog.csdn.net/weixin_46594796/article/details/139649056

2、需求场景

在企业级生产环境中,经常会遇到某个服务容器性能不足的情况,例如:CPU、内存飚高,这种情况一般会想到对该服务进行横向扩容,创建更多的服务容器来分摊工作量。或者说容器资源过剩,想要把资源节省出来,通常这种情况需要我们去手动的进行扩缩容。动态调整应用实例数量以满足业务需求,同时优化资源利用率。

  • 突发流量:当应用访问量突然激增(如促销活动、热点事件),增加Pod副本数,避免服务过载或崩溃。
  • 低峰时段:在流量低谷时减少Pod数量,节省资源成本。

3、Scale 静态扩缩容

3.1、创建 Deployment 脚本

在K8S环境中,我们一般使用 scale 命令来对 Pod 资源进行手动扩缩容,首先先通过 Deployment 创建3个 Niginx Pod,deploy-nginx.yaml内容如下:

mkdir /etc/k8s
cat > /etc/k8s/deploy-nginx.yaml <<-'EOF'
apiVersion: apps/v1
kind: Deployment
metadata:name: deploy-nginx
spec:selector:matchLabels:app: nginxreplicas: 3template:metadata:labels:app: nginxspec:containers:- name: container-nginximage: nginx:1.20.2-alpineports:- containerPort: 80
EOF

执行 delopment 文件:

kubectl apply -f /etc/k8s/deploy-nginx.yaml

此时可以看到,3个Pod容器已经成功部署完成了:
在这里插入图片描述

3.2、Scale 扩缩容

上面脚本执行完毕后,已经自动创建3个Pod了,想要把3个Pod扩容为5个,就需要使用 scale 命令手动执行:

kubectl scale deploy deploy-nginx --replicas=5

就可以看到,直接将容器数量扩容为5个了:
在这里插入图片描述
缩容只需要把数字调小即可,这里就不演示了。

但是这样终归是需要运维人员手动的进行调整,有些特殊场景流量高峰期可能很随机,这样在通过人工进行处理就不太合适了,有没有可以根据资源使用情况自动扩缩容Pod的方案,官方提供了就是 HPA

3、HPA 自动扩缩容

3.1、安装 Metrics

首先,通过命令查看哪些 Pod 占用资源比较高:kubectl top pods,执行完毕后可以发现,错误日志:error: Metrics API not available,说明没有安装Metrics
在这里插入图片描述
首先在主节点上下载配置文件:

wget https://xuzhibin-bucket.oss-cn-beijing.aliyuncs.com/k8s/metric-server.yaml

这个配置文件中已经被修改过,相比于官方的配置文件有两处修改:

  1. 处理加密证书不匹配问题(生产环境需要配置好证书的)
  2. Metrics镜像改成了使用阿里云,否则无法下载
    在这里插入图片描述

这个时候,就可以直接部署 Metrics:

kubectl apply -f metric-server.yaml

最后通过该命令查看,部署是否完毕:

kubectl get po -n kube-system | grep metrics-server

3.2、创建 Deployment 演示案例

演示案例 deployment 脚本(svc-hpa.yaml),这是由Apache提供的,配置如下:

mkdir -p /etc/sca/hpa
cd /etc/sca/hpa
cat > svc-hpa.yaml <<-'EOF'
apiVersion: apps/v1
kind: Deployment
metadata:name: php-apache
spec:selector:matchLabels:run: php-apachetemplate:metadata:labels:run: php-apachespec:containers:- name: php-apacheimage: deis/hpa-exampleports:- containerPort: 80resources:limits:cpu: 500mrequests:cpu: 200m
---
apiVersion: v1
kind: Service
metadata:name: php-apachelabels:run: php-apache
spec:ports:- port: 80selector:run: php-apache
EOF

启动演示案例容器,就会创建一个Pod:

kubectl apply -f svc-hpa.yaml

这里面主要注意的是,有个资源限定的配置:表示对pod容器资源的限定,启动最少占用0.2核CPU,最大占用0.5核CPU:
在这里插入图片描述

3.3、创建 HPA

创建HPA需要使用 autoscale 命令,这里--cpu-percent=50说明是50%,结合上面最大占用500m(0.5核)CPU,所以如果当前Pod占用了0.25核CPU,就会对Pod容器进行扩容,最多可以达到10个,但不会少于1个。

kubectl autoscale deployment php-apache --cpu-percent=50 --min=1 --max=10

在这里插入图片描述
⚠️ 如果不再使用HPA,可以用下述命令进行删除:

kubectl delete hpa php-apache

3.4、触发 HPA 自动扩缩容

先新开一个窗口,通过下述命令监听一下HPA状态:

kubectl get hpa php-apache --watch

此时没有请求量,还是比较平静的:
在这里插入图片描述
在新开一个窗口,通过 Linux 系统提供的工具BusyBox,每过0.1s发送请求,模拟大流量场景让HPA触发扩容,通过下述命令:

kubectl run -i --tty load-generator --rm --image=busybox:1.28 --restart=Never -- /bin/sh -c "while sleep 0.01; do wget -q -O- http://php-apache; done"

过了一段时间,可以看到窗口展示大量接口调用:
在这里插入图片描述
这个时候再去看监控窗口,发现确实开始自动扩容了:只要过了50%,Pod副本数量就开始不断新增,随着Pod增多,CPU占用也逐渐下降了,发现8个Pod就能控制在50%以下,就不会继续扩容了。
在这里插入图片描述

此时已经扩容到8个容器了:
在这里插入图片描述
这个时候把调用脚本停掉,再看监控日志会发现,Pod自动被逐渐销毁,但是并不是马上进行缩容,CPU使用率降下来后,他会先等待一会儿,然后才开始销毁Pod容器,原因是担心只是短暂流量跌下来,会给一点缓冲时间,重复创建销毁容器的代价太高了!
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

对话访谈|盘古信息×智晟威:深度挖掘数字化转型的奥秘

在数字化转型的浪潮中&#xff0c;传统设备企业如何突破“纯硬件”的边界&#xff0c;实现从“卖产品”到“卖生态”的跨越&#xff1f;数字化转型究竟是“高不可攀的奢侈品”&#xff0c;还是“触手可及的生存技能”&#xff1f;近日&#xff0c;广东盘古信息科技股份有限公司…

什么是模型预测控制?

一、概念模型预测控制&#xff08;Model Predictive Control, MPC&#xff09;是一种先进的控制方法&#xff0c;广泛应用于工业过程控制、机器人控制、自动驾驶等领域。MPC的核心思想是利用系统的动态模型预测未来的行为&#xff0c;并通过优化算法计算出当前时刻的最优控制输…

类与类加载器

在Java中&#xff0c;类和类加载器是密切相关的两个概念&#xff0c;理解它们有助于我们更好地掌握Java的运行机制。什么是Java类&#xff1f;Java类就像是一个模板或蓝图&#xff0c;它定义了对象的属性和行为。比如"汽车"可以看作一个类&#xff0c;它有颜色、品牌…

一文速通Python并行计算:14 Python异步编程-协程的管理和调度

一文速通 Python 并行计算&#xff1a;14 Python 异步编程-协程的管理和调度 摘要&#xff1a; Python 异步编程基于 async/await 构建协程&#xff0c;运行在事件循环中。协程生成 Task&#xff0c;遇到 await 时挂起&#xff0c;I/O 完成触发回调恢复运行&#xff0c;通过…

Node.js面试题及详细答案120题(16-30) -- 核心模块篇

《前后端面试题》专栏集合了前后端各个知识模块的面试题&#xff0c;包括html&#xff0c;javascript&#xff0c;css&#xff0c;vue&#xff0c;react&#xff0c;java&#xff0c;Openlayers&#xff0c;leaflet&#xff0c;cesium&#xff0c;mapboxGL&#xff0c;threejs&…

RabbitMQ:Windows版本安装部署

目录一、概述二、OPT三、安装RabbitMQ四、登录测试一、概述 什么是MQ&#xff0c;有什么做作用&#xff1f; MQ即MessageQueue&#xff0c;消息队列。可以分为两部分理解&#xff1a;消息Message用于在不同的应用程序中传递数据。队列Queue&#xff0c;一种FIFO先进先出的数据…

酒店行业安全体系构建与优化策略

酒店行业安全体系构建与优化策略为确保酒店行业领导及宾客的安全&#xff0c;构建全面的治安联防体系及事故处理预案至关重要。某招待所通过设立保卫部&#xff0c;细化内保、治安、防火及交通管理职能&#xff0c;并下设警卫班、监控中心和电瓶车班&#xff0c;以全方位保障安…

python30-正则表达式

在Python中需要通过正则表达式对字符串进⾏匹配的时候&#xff0c;可以使⽤⼀个python自带的模块&#xff0c;名字为re。 re模块的使用&#xff1a;import re 一、匹配函数 1-1、re.match函数&#xff1a;返回匹配对象 match函数实现的是精准匹配&#xff0c;尝试从字符串的…

EP1C12F324I7N Altera Cyclone FPGA

EP1C12F324I7N 是 阿尔特拉 Altera Cyclone 系列中的一款 SRAM-based FPGA&#xff0c;定位为低成本、低功耗、面向嵌入式与消费/工业类量产应用的器件。该器件提供约 12,060 个逻辑单元&#xff08;Logic Elements&#xff09;&#xff0c;片上嵌入式存储约 234 kbit&#xff…

html5语义元素

1、参考&#xff1a;HTML5 语义元素 | 菜鸟教程 2、实战 HTML5 <section> 元素 <section> 标签定义文档中的节&#xff08;section、区段&#xff09;。比如章节、页眉、页脚或文档中的其他部分。 根据W3C HTML5文档: section 包含了一组内容及其标题。 <!D…

java调用PyTorch 训练模型实现神经网络全流程

以下是完整的操作流程:用 PyTorch 训练模型 → 导出为 ONNX 格式 → 用 Java 加载并推理,兼顾开发效率(PyTorch 快速训练)和生产部署(Java 稳定运行)。 一、PyTorch 训练模型并导出为 ONNX 1. 安装依赖 bash pip install torch onnx # PyTorch 和 ONNX 库2. 训练一个…

Maven - Spring Boot 项目打包本地 jar 的 3 种方法

文章目录Pre概述方案思路构建流程图工作机制说明目录结构示例POM 配置模板构建与验证注意事项方案优缺点Pre Maven - Manual Maven JAR Installation&#xff1a;用 mvn install:install-file 安装本地 JAR 的实用指南 概述 在 Spring Boot 项目中&#xff0c;通常依赖包会从…

平替 Claude Code,API接入 GPT-5,Codex CLI 国内直接使用教程

最新升级接入GPT-5的 Codex 拥有可以媲美 Claude Code 的AI编码能力&#xff0c;本文将指导你在 Windows系统上部署原生的 Codex CLI程序&#xff0c;并且接入超低价中转API&#xff0c;让你在国内直接用上超高性价比的 OpenAI Codex CLI 应用。关于 CodexCodex 是 OpenAI 开发…

kubernertes (K8S)部署

参考&#xff1a; https://blog.csdn.net/yu33575/article/details/135387548 二进制安装k8s&#xff1a; https://blog.csdn.net/qq_73990369/article/details/143217084 K8S二进制安装与部署 &#xff1a;https://blog.csdn.net/fantuan_sss/article/details/139073366 k8s…

LeetCode 简单JS刷题

目录 返回数组最后一个元素 2787.将一个数字表示成幂的和的方案数 326.3的幂 1780.判断一个数字是否可以表示成三的幂的和 342.4的幂 返回数组最后一个元素 1.请你编写一段代码实现一个数组方法&#xff0c;使任何数组都可以调用 array.last() 方法&#xff0c;这个方法将…

七大排序算法全解析:从入门到精通

目录 一.排序的概念 二.常见排序算法的实现 2.1 插入排序 &#xff08;1&#xff09;直接插入排序&#xff1a; 当插入第i(i>1)个元素时&#xff0c;前面的array[0],array[1],…,array[i-1]已经排好序&#xff0c;此时用array[i]的排序码与array[i-1],array[i-2],…的排序…

20250814在荣品RD-RK3588开发板的Android13下解决卡迪的LCD屏在开机的时候brightness最暗【背光的pwm信号的极性反了】

20250814在荣品RD-RK3588开发板的Android13下解决卡迪的LCD屏在开机的时候brightness最暗【背光的pwm信号的极性反了】 2025/8/14 11:33缘起&#xff1a;在荣品RD-RK3588开发板的Android13下&#xff0c;卡迪的LCD屏在开机的时候很暗&#xff0c;几乎看不见。 在命令行查看亮度…

Flink的状态管理

一、状态的概念Flink的状态其实你就可以将其想象为中间结果就可以了。在Flink中&#xff0c;算子的任务可以分为无状态和有状态两种情况。无状态算子任务在计算过程中是不依赖于其他数据的&#xff0c;只根据当前的输入数据就可以得到结果输出。比如之前讲到的Map、FlatMap、Fi…

GoLand 项目从 0 到 1:第八天 ——GORM 命名策略陷阱与 Go 项目启动慢问题攻坚

第八天核心任务&#xff1a;解决开发中的两大技术卡点今天的开发不仅聚焦于代码层面的数据库字段映射问题&#xff0c;还遭遇了一个困扰团队许久的环境难题 ——Go 项目启动异常缓慢。经过多维度排查&#xff0c;我们不仅理清了 GORM 命名策略的设计逻辑&#xff0c;还找到了影…

在Ubuntu上安装Google Chrome的详细教程

步骤 1&#xff1a;下载 Google Chrome 安装包 打开浏览器输入https://www.google.cn/chrome/&#xff0c;然后进入Chrome浏览器官方网站 点击下载选择Debian/Ubuntu版本 google-chrome-stable_current_amd64.deb步骤 2&#xff1a;安装下载的.deb 包 sudo dpkg -i google-chro…