自动扩缩

自动扩缩:使Kubernetes集群中的Pod视情况自动对Pod进行扩缩容

1)原理:通过自动修改RC、RS和Deployment等资源的replicas字段实现

2)集群中必须配置Metrics Server插件才可实现自动扩缩

//由该插件获取容器的度量数据(API Server不会暴露度量数据)

HorizontalPodAutoscaler

HorizontalPodAutoscaler(HPA):实现Pod的自动扩缩容

1)HorizontalPodAutoscaler属于Kubernetes的一种资源类型;

2)HPA通过Horizontal控制器周期性检查Pod度量是否满足期望值;

3)Horizontal可修改Pod控制器的replicas字段实现Pod的自动扩缩容;

//不止Pod控制器,Horizontal也可修改Deployment和StatefulSet等对象的


通过HPA自动扩缩的流程(前提:HPA已与资源对象绑定):

1)获取Pod控制器所管理的所有Pod度量;

2)计算使度量值达到或接近期望值所需的Pod数量;

3)修改其他资源对象的replicas字段;

//Horizontal通过Scale子资源修改其他资源对象的replicas字段


如:HPA修改Deployment的replicas字段的流程
在这里插入图片描述
//每个组件获取数据的动作都是周期性的(扩缩容不是立即发生的)

//HPA两次扩缩容之间存在时间间隔设置(默认:3分钟)



度量计算公式:期望值 = 当前值 * (当前指标 / 期望指标)

1)默认向上取整;

2)多个度量计算Pod,则取计算结果的最大值;

3)真正期望值也受其他因素影响;


如:通过两个度量计算副本数
在这里插入图片描述

创建HorizontalPodAutoscaler

HorizontalPodAutoscaler的创建方式分为:autoscale命令和YAML文件

1)使用YAML文件创建HPA较为麻烦,一般使用create命令创建;

2)HPA创建时还需与指定资源对象绑定才可进行自动扩缩;

3)HPA一般基于两种资源自动扩缩:CPU使用率内存使用



(1)autoscale命令创建HPA的格式(基于CPU使用率):

kubectl autoscale 资源类型 资源名 --cpu-percent=CPU指标值 --min=最少Pod数 --max=最多Pod数


如:创建Deployment并与HPA绑定

1)编写Deployment的YAML文件;
在这里插入图片描述
2)创建Deployment,并通过create命令创建HPA与Deployment绑定;
在这里插入图片描述
3)验证结果,
在这里插入图片描述



(2)YAML文件创建HPA的格式(基于内存使用):

apiVersion: autoscaling/v1
kind: HorizontalPodAutoscaler
metadata:
  name: HPA名
spec:
  metrics:
  - type: metric类型
    resource:
      依据metric类型配置
  maxReplicas: 最少Pod数
  minReplicas: 最多Pod数
  scaleTargetRef:
    apiVersion: 被绑定对象的api版本
    kind: 被绑定对象的资源类型
    name: 被绑定对象的名称

1)metric类型分为以下3种:

metric类型说明
resourceHPA基于Pod的资源度量自动扩缩容
Pods引用其他种类与Pod相关的度量进行扩缩容
Object引用其他与Pod不直接相关的度量进行扩缩容

//不是所有度量都适合作为HPA进行扩缩容的依据

2)若增加的Pod数量不能使观测度量平均值线性下降,则HPA就会报错;

PodDisruptionBudget

PodDisruptionBudget(PDB):确保节点中运行的最少Pod数量

创建PodDisruptionBudget

PodDisruptionBudget的创建方式分为:create命令和YAML文件

1)使用YAML文件创建PDB较为麻烦,一般使用create命令创建;



(1)create命令创建PDB的格式:

kubectl create pdb 名称 --selector=标签名=值 --min-available=最少Pod数 –maxUnavailable=最多不可用Pod数

1)若多个表格标签,可通过多个–selector选项指定;



(2)YAML文件创建PDB的格式:

apiVersion: policy/v1beta1
kind: PodDisruptionBudget
metadata:
  name: PDB名
spec:
  maxUnavailable: 最多不可用Pod数
  minAvailable: 最少Pod数
  selector:
    matchLabels:

1)Pod数可通过数值指定,也可通过百分比形式指定;

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐