网站首页 > 技术文章 正文
k8s横向自动伸缩pod的过程如下:
- 采集pod的度量数据。不同的版本有不同的方式。在旧版本,Horizontal Pod Autoscaler直接从Heapster中获取pod的度量数据。Heapster则会收集各节点上cAdvisor中的度量数据,cAdvisor则会收集当前节点上各pod的度量。1.9版本后,则会从资源度量API中获取数据。
- 计算使度量数值到达所指定目标数值所需的pod数量。当只考虑单个度量时,计算方式大致是将所有pod的度量求和后除以配置的目标值,再向上取整。如果是多个度量,则会先单独计算每个度量的副本数,然后取最大值。
- 更新被伸缩资源(如replicaset,deployment等)的replicas字段。这是通过被伸缩资源的Scale子资源进行修改,从而Autoscaler不必了解具体的细节。
基于CPU使用率自动伸缩
一般情况下,我们会希望当CPU使用量达到一个阈值后,触发自动扩容,比如使用率达到60%。这个比例是指pod的CPU实际使用和配置的requests的比值。因此需要给被伸缩的pod设置CPU请求(requests参数)。
可以通过执行下面命令创建HPA(HorizontalpodAutoscaler)对象
kubectl autoscales deployment kubia --cpu-percent=30 --min=1 --max=5
这会帮你创建HPA对象,并将叫做kubia的Deployment设置为申诉目标,pod的目标CPU使用率为30%,并制定了伸缩的最小最大值。
HPA的伸缩有速率限制:
- 单次扩容操作中若副本数大于2,则至多使副本数翻倍;若副本数只有1或2,最多扩容4个副本
- 两次扩缩容操作之间有时间间隔的限制
其他类型度量的自动伸缩
基于内存的自动伸缩
和基于cpu的自动伸缩类似,但是若想基于内存的自动扩容有效,应用必须能在扩容后释放自己申请的内存,否则会一直要扩容
Resource度量类型
刚才提到的基于CPU和基于内存的自动伸缩都属于Resource度量类型
pods度量类型
Pods类型用来引用任何其他种类的与pod直接相关的度量,包括qps和消息队列中的消息数等。HPA yaml示例如下
...
spec:
metrics:
- type: Pods
resource:
metricName: qps
targetAverageValue: 100
scaleTargetRef:
apiVersion: extensions/v1beta1
kind: Deployment
name: kubia
minReplicas: 1
maxReplicas: 5
Object度量类型
Object度量类型被用来让Autoscaler基于并非直接与pod关联的度量来进行伸缩。比如,基于Ingress对象,度量是平均请求延时进行收缩。Autoscaler只会从这单个对象中获取单个度量数据。示例如下
...
spec:
metrics:
- type: Object
resource:
metricName: latencyMillis
target:
apiVersion: extensions/v1beta1
kind: Ingress
name: frontend
targetValue: 20
其他
PodDisruptionBudget(PDB)资源用于指定最少需要维持运行的pod数量,从1.7开始也支持最多有多少不可用的pod,命令示例如下
kubectl create pdb kubia-pdb --selector=app=kubia --min-available=3 --max-unavailable=2
猜你喜欢
- 2024-10-10 K8S集群metrics-server组件安装 k8s集群包含哪些组件
- 2024-10-10 第6课 Kubernetes之深入掌握Pod机制及应用
- 2024-10-10 万字长文 | 使用 RBAC 限制对 Kubernetes 资源的访问
- 2024-10-10 Kubernetes:监控指南 kubernetes 监控
- 2024-10-10 《蹲坑学K8S》之21-1:Metrics-Server监控
- 2024-10-10 K8S架构设计及工作流程分析 k8s 结构图
- 2024-10-10 Metrics Server 快速安装 melsoft安装教程
- 2024-10-10 K8S系统的监控及HPA控制器 k8s dashboard 监控
- 2024-10-10 如何通过在多个Vagrant管理的虚拟机上部署多节点Kubernetes集群
- 2024-10-10 Kubernetes集群的自动水平伸缩 kubernetes 自动伸缩
你 发表评论:
欢迎- 最近发表
-
- 在 Spring Boot 项目中使用 activiti
- 开箱即用-activiti流程引擎(active 流程引擎)
- 在springBoot项目中整合使用activiti
- activiti中的网关是干什么的?(activiti包含网关)
- SpringBoot集成工作流Activiti(完整源码和配套文档)
- Activiti工作流介绍及使用(activiti工作流会签)
- SpringBoot集成工作流Activiti(实际项目演示)
- activiti工作流引擎(activiti工作流引擎怎么用)
- 工作流Activiti初体验及在数据库中生成的表
- Activiti工作流浅析(activiti6.0工作流引擎深度解析)
- 标签列表
-
- oraclesql优化 (66)
- 类的加载机制 (75)
- feignclient (62)
- 一致性hash算法 (71)
- dockfile (66)
- 锁机制 (57)
- javaresponse (60)
- 查看hive版本 (59)
- phpworkerman (57)
- spark算子 (58)
- vue双向绑定的原理 (68)
- springbootget请求 (58)
- docker网络三种模式 (67)
- spring控制反转 (71)
- data:image/jpeg (69)
- base64 (69)
- java分页 (64)
- kibanadocker (60)
- qabstracttablemodel (62)
- java生成pdf文件 (69)
- deletelater (62)
- com.aspose.words (58)
- android.mk (62)
- qopengl (73)
- epoch_millis (61)
本文暂时没有评论,来添加一个吧(●'◡'●)