k8s中实现pod自动扩缩容

一、k8s应用自动扩缩容概述
1)背景:
在实际的业务场景中,我们经常会遇到某个服务需要扩容的场景(例如:测试对服务压测、电商平台秒杀、大促活动、或由于资源紧张、工作负载降低等都需要对服务实例数进行扩缩容操作)。

2)扩缩容分类
对象分类
• node扩缩容
• 在使用 kubernetes 集群经常问到的一个问题是,我应该保持多大的节点规模来满足应用需求呢?cluster-autoscaler 的出现解决了这个问题, 可以通过 cluster-autoscaler 实现节点级别的动态添加与删除,动态调整容器资源池,应对峰值流量。

• pod层面
• 我们一般会使用 Deployment 中的 replicas 参数,设置多个副本集来保证服务的高可用,但是这是一个固定的值,比如我们设置 10 个副本,就会启 10 个 pod 同时 running 来提供服务。如果这个服务平时流量很少的时候,也是 10 个 pod 同时在 running,而流量突然暴增时,有可能出现 10 个 pod 不够用的情况。针对这种情况怎么办?就需要自动扩缩容。

按方式分类
• 手动模式
通过 kubectl scale 命令,这样需要每次去手工操作一次,而且不确定什么时候业务请求量就很大了,所以如果不能做到自动化的去扩缩容的话,这也是一个很麻烦的事情。

• 自动模式
kubernetes HPA(Horizontal Pod Autoscaling):根据监控指标(cpu 使用率、磁盘、自定义的等)自动扩容或缩容服务中的pod数量,当业务需求增加时,系统将无缝地自动增加适量 pod 容器,提高系统稳定性。

kubernetes KPA(Knative Pod Autoscaler):基于请求数对 Pod 自动扩缩容,KPA 的主要限制在于它不支持基于 CPU 的自动扩缩容。

kubernetes VPA(Vertical Pod Autoscaler):基于 Pod 的资源使用情况自动设置 pod 的 CPU 和内存的 requests,从而让集群将 Pod 调度到有足够资源的最佳节点上。

二、如何实现自动扩缩容
HPA运作方式
• 整体逻辑:K8s 的 HPA controller 已经实现了一套简单的自动扩缩容逻辑,默认情况下,每 15s 检测一次指标,只要检测到了配置 HPA 的目标值,则会计算出预期的工作负载的副本数,再进行扩缩容操作。同时,为了避免过于频繁的扩缩容,默认在 5min 内没有重新扩缩容的情况下,才会触发扩缩容。

• 缺陷:HPA 本身的算法相对比较保守,可能并不适用于很多场景。例如,一个快速的流量突发场景,如果正处在 5min 内的 HPA 稳定期,这个时候根据 HPA 的策略,会导致无法扩容。

• pod数量计算方式:通过现有 pods 的 CPU 使用率的平均值(计算方式是最近的 pod 使用量(最近一分钟的平均值,从 metrics-server 中获得)除以设定的每个 Pod 的 CPU 使用率限额)跟目标使用率进行比较,并且在扩容时,还要遵循预先设定的副本数限制:MinReplicas <= Replicas <= MaxReplicas。计算扩容后 Pod 的个数:sum(最近一分钟内某个 Pod 的 CPU 使用率的平均值)/CPU 使用上限的整数+1

三、安装 Metrics Server

# 官方仓库地址:https://github.com/kubernetes-sigs/metrics-server
$ wget https://github.com/kubernetes-sigs/metrics-server/releases/download/v0.4.0/components.yaml
在部署之前,修改 components.yaml 的镜像地址为:
hostNetwork: true  # 使用hostNetwork模式
containers:
- name: metrics-serverimage: cnych/metrics-server:v0.4.0kubectl apply -f components.yaml
kubectl get pods -n kube-system -l k8s-app=metrics-server

问题处理:
如果出现pod的状态一直在重启,要看下日志报错
在这里插入图片描述在这里插入图片描述
E0102 12:55:08.341168 1 server.go:132] unable to fully scrape metrics: [unable to fully scrape metrics from node master1: unable to fetch metrics from node master1: Get “https://192.168.100.15:10250/stats/summary?only_cpu_and_memory=true”: x509: cannot validate certificate for 192.168.100.15 because it doesn’t contain any IP SANs, unable to fully scrape metrics from node node-1: unable to fetch metrics from node node-1: Get “https://192.168.100.16:10250/stats/summary?only_cpu_and_memory=true”: x509: cannot validate certificate for 192.168.100.16 because it doesn’t contain any IP SANs, unable to fully scrape metrics from node node-2: unable to fetch metrics from node node-2: Get “https://192.168.100.17:10250/stats/summary?only_cpu_and_memory=true”: x509: cannot validate certificate for 192.168.100.17 because it doesn’t contain any IP SANs]

修复方式:
在如下位置添加:- --kubelet-insecure-tls
在这里插入图片描述
检查:
在这里插入图片描述指标获取
K8S 从 1.8 版本开始,各节点CPU、内存等资源的 metrics 信息可以通过 Metrics API 来获取,用户可以直接获取这些 metrics 信息(例如通过执行 kubect top 命令),HPA 使用这些 metics 信息来实现动态伸缩。

[root@master1 ha]# kubectl top nodes
NAME      CPU(cores)   CPU%   MEMORY(bytes)   MEMORY%
master1   419m         20%    1465Mi          39%
node-1    251m         12%    811Mi           22%
node-2    235m         11%    813Mi           22%

四、实践
1)使用 Deployment 来创建一个 Nginx Pod,然后利用 HPA 来进行自动扩缩容。资源清单如下所示:(hpa-demo.yaml)

apiVersion: apps/v1
kind: Deployment
metadata:name: hpa-demo
spec:selector:matchLabels:app: nginxtemplate:metadata:labels:app: nginxspec:containers:- name: nginximage: nginxports:- containerPort: 80resources:requests:memory: 50Micpu: 50m
#执行yaml启动
kubectl apply -f hpa-demo.yaml
#查看pod
kubectl get pods -l app=nginx

2)创建一个 HPA 资源对象

#此命令创建了一个关联资源 hpa-demo 的 HPA,最小的 Pod 副本数为1,最大为10。HPA 会根据设定的 cpu 使用率(10%)动态的增加或者减少 Pod 数量。 
kubectl autoscale deployment hpa-demo --cpu-percent=10 --min=1 --max=10
#查看hpa状态
[root@master1 ha]# kubectl get hpa
NAME       REFERENCE             TARGETS         MINPODS   MAXPODS   REPLICAS   AGE
hpa-demo   Deployment/hpa-demo   <unknown>/10%   1         10        0          10s
[root@master1 ha]#
[root@master1 ha]# kubectl get hpa
NAME       REFERENCE             TARGETS   MINPODS   MAXPODS   REPLICAS   AGE
hpa-demo   Deployment/hpa-demo   0%/10%    1         10        1          20s

五、测试验证

#使用busybox进行压测
[root@master1 ha]# kubectl run -it --image busybox test-hpa --restart=Never --rm /bin/sh
If you don't see a command prompt, try pressing enter.
/ # while true; do wget -q -O- http://10.244.137.87; done
#观察hpa值变化:
kubectl get hpa --watch

在这里插入图片描述

#观察pod的变化
kubectl get pods -l app=nginx --watch

在这里插入图片描述

流量太大时候就会出现不能及时扩容的场景,这也就是缺点的地方

在这里插入图片描述

当cpu恢复后pod的数量也自动缩容,实现了自动扩缩容
在这里插入图片描述

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

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

相关文章

openCV处理音视频的常用API及一般流程

OpenCV是一个功能强大的开源计算机视觉库&#xff0c;提供了丰富的API和函数&#xff0c;用于图像处理、特征提取、目标检测等任务。下面是一些常用的OpenCV API及其在C中的使用方法&#xff1a; 1. 图像读取和显示&#xff1a; #include <opencv2/opencv.hpp>int ma…

【PostgreSQL】约束-主键

【PostgreSQL】约束链接 检查 唯一 主键 外键 排他 主键 主键&#xff08;Primary Key&#xff09;是数据库表中用于唯一标识每一行记录的字段。主键具有以下特点&#xff1a; 唯一性&#xff1a;每个主键值在表中是唯一的&#xff0c;不允许出现重复值。非空性&#xff1a…

vue3(十三)-基础入门之路由配置与重定向

一、一级路由与重定向 1、创建 App.vue 在父组件中导入子组件 Navbar <template><div><navbar></navbar></div> </template><style lang"scss"></style><script> import navbar from /components/Navbarex…

arm64 UAO/PAN 特性对用户空间边界读写的影响(copy_from/to_user)

文章目录 1 UAO/PAN 特性由来2 硬件PAN的支持3 UAO 的支持 1 UAO/PAN 特性由来 linux 内核空间与用户空间通过 copy_from/to_user 进行数据拷贝交换&#xff0c;而不是通过简单的 memcpy/strcpy 进行拷贝复制&#xff0c;原因是安全问题&#xff08;这里不详细展开&#xff09…

初始化数组方法大全

初始化数组方法大全 大家好&#xff0c;我是免费搭建查券返利机器人赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01;今天&#xff0c;让我们一同深入研究在编程中常用的操作之一——数组的初始化。数组是许多编程语…

pytest --collectonly 收集测试案例

pytest --collectonly 是一条命令行指令&#xff0c;用于在运行 pytest 测试时仅收集测试项而不执行它们。它会显示出所有可用的测试项列表&#xff0c;包括测试模块、测试类和测试函数&#xff0c;但不会执行任何实际的测试代码。 这个命令对于查看项目中的测试结构和确保所有…

C++的基础语句

C前奏 1.变量的定义2.键入和输出3.运算符4.sizeof()函数5.判断6.goto语句7.总结 这个专题&#xff0c;我会用简单的语言介绍C的语法&#xff0c;并会适当的对比实现相同或相似功能的C与python代码写法上的不同。 1.变量的定义 对于python来说&#xff0c;我们可以跳过定义直接…

定岗定编设计:企业职能部门定岗定编设计项目成功案例

一、客户背景及现状分析 某大型车辆公司隶属于某央企集团&#xff0c;建于20世纪60年代&#xff0c;是中国高速、重载、专用铁路车辆生产经营的优势企业&#xff0c;轨道车辆制动机研发制造的主导企业&#xff0c;是隶属于国内最大的轨道交通设备制造上市企业的骨干二级公司。公…

AI绘图软件,科技之旅绘画

科技与艺术的碰撞总能产生令人惊叹的火花&#xff0c;现在小编要给大家介绍一款引领未来艺术潮流的AI绘图软件——首助编辑高手。这是一款将人工智能与创意绘画完美结合的软件&#xff0c;它将为你打开一扇全新的创意之门。 所需工具&#xff1a; 一个【首助编辑高手】软件 …

Qt第一个UI程序设计

在第一个Qt程序的基础上我对ui界面进行设计&#xff0c;点击设计按钮 然后 拖动Label按钮输入想要输入的语句。 运行结果如下图。

通过用户输入数字,并计算二次方程

通过用户输入数字&#xff0c;并计算二次方程 以下实例为通过用户输入数字&#xff0c;并计算二次方程&#xff1a; 实例(Python 3.0) # Filename : test.py # author by : www.dida100.com# 二次方程式 ax**2 bx c 0 # a、b、c 用户提供&#xff0c;为实数&#xff0c;a…

案例1—综合项目组网(2)

交换机连接服务器&#xff1a; 服务器虚拟化&#xff1a; 1. 为什么要用虚拟化技术 2. 虚拟化和NFV的区别 3. 将8台服务器虚拟化为一个资源池的大致步骤 4. 服务器规划情况&#xff1a;管理网和业务网 交换机连接服务器&#xff1a; 1&#xff09;将交换机和服务器相连&am…

算法巡练day03Leetcode203移除链表元素707设计链表206反转链表

今日学习的文章视频链接 https://www.bilibili.com/video/BV1nB4y1i7eL/?vd_source8272bd48fee17396a4a1746c256ab0ae https://programmercarl.com/0707.%E8%AE%BE%E8%AE%A1%E9%93%BE%E8%A1%A8.html#%E7%AE%97%E6%B3%95%E5%85%AC%E5%BC%80%E8%AF%BE 链表理论基础 见我的博…

计算机组成原理 主存和CPU连接与主存提速方案

文章目录 主存与CPU的连接译码器线选法译码片选法总结 位拓展字拓展字位同时拓展 主存提速方案存储周期双端口RAM多模块存储器单体多字存储器多模块多体并行存储器存储器高位交叉编址低位交叉编址 主存与CPU的连接 #mermaid-svg-3wv6WzRP2BvKEHQZ {font-family:"trebuchet…

【线上问题】两台服务器的时间不一致导致jwt解析错误

目录 一、问题描述二、解决方法 一、问题描述 1.线上生产问题&#xff0c;本地和测试环境均无问题 2.本地和测试由于网关和登录服务均在同一台机器 3.线上的登录服务和网关部署不在一起&#xff0c;登录服务的时间正常&#xff0c;网关服务的服务器时间比实际快5秒 4.登录服务j…

负缓存 (在 DNS 中较为常见)

摘要 负缓存&#xff0c;也被称为负值缓存或负面缓存&#xff0c;指的是在域名系统&#xff08;DNS&#xff09;中记录和重用之前失败查询结果的机制。当DNS服务器无法解析一个域名时&#xff0c;它会返回一个特定错误码&#xff08;例如NXDOMAIN&#xff09;&#xff0c;指示…

ChatGPT付费创作系统V2.6.2独立版 +WEB端+ H5端 + 小程序端

详情介绍 安装测试环境:Nginx 1.20+PHP7.4+MySQL 5.7 演示网址已升级至2.6.2最新版,仅供研究测试 WEB端:https://chat.ttbobo.cn 体验后台:https://chat.ttbobo.cn/admin 账号:admin 密码:123456 ChatGPT付费创作系统V2.6.2独立版 +WEB端+ H5端 + 小程序端 - 百创…

鸿蒙原生应用再添新丁!中国移动 入局鸿蒙

鸿蒙原生应用再添新丁&#xff01;中国移动 入局鸿蒙 来自 HarmonyOS 微博1月2日消息&#xff0c;#中国移动APP启动鸿蒙原生应用开发#&#xff0c;拥有超3亿用户的中国移动APP宣布&#xff0c;正式基于HarmonyOS NEXT启动#鸿蒙原生应用#及元服务开发。#HarmonyOS#系统的分布式…

【Linux】进程控制深度了解

> 作者简介&#xff1a;დ旧言~&#xff0c;目前大二&#xff0c;现在学习Java&#xff0c;c&#xff0c;c&#xff0c;Python等 > 座右铭&#xff1a;松树千年终是朽&#xff0c;槿花一日自为荣。 > 目标&#xff1a;熟练掌握Linux下的进程控制 > 毒鸡汤&#xff…

【Leetcode】466. 统计重复个数

文章目录 题目思路代码 题目 466. 统计重复个数 思路 题目要求找出一个最大整数 m&#xff0c;使得经过 n2 个字符串 s2 组成的字符串能够被经过 n1 个字符串 s1 组成的字符串完全包含的次数。使用动态规划来记录每个位置匹配的情况&#xff0c;并通过循环节的分析来计算最…