Kubernetes(K8s)_13_自动扩缩
Kuberntes(K8s)自动扩缩容Pod
Kubernetes(K8s)_13_自动扩缩
自动扩缩
自动扩缩:使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类型 | 说明 |
---|---|
resource | HPA基于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数可通过数值指定,也可通过百分比形式指定;
更多推荐
所有评论(0)