技术沙龙第五期

大勇:

今天要分享的是:云平台中的HPA(horizontal pod autoscalers)水平自动伸缩。

大勇:

虽然通常我们可以部署Deployment时设置pod 的数量。 但是这样设置不够灵活,在不同的运行环境,会导致资源的浪费,而随着吞吐量的上升,又需要不同的设置。

大勇:

HPA 即通过检测pod CPU的负载,解决deployment里某pod负载太重,动态伸缩pod的数量来负载均衡。

大勇:

大勇:

HPA可以检测pod cpu的使用情况,通知deployment增加或者减少所管理pod副本的数量。

大勇:

1、假如已经部署好了一个工作负载,deployment/kms. 现在需要配置HPA。设置kms的pod数量最小为2,最大为10 执行命令:kubectl autoscale deployment kms --min=2 --max=10

大勇:

当我们手动强行设置pod数为1时,kms的pod数量会马上删除一个,然后又重新创建一个新的pod,始终维持到最小数量2

大勇:

从步骤1来看,只是 为POD 限定了一个可设置的范围,也没多神奇的地方。

大勇:

步骤2 将进一步根据POD 负载指标,来设置自动扩容策略

大勇:

假如POD 的CUP 利用率超过80% 自动扩容

大勇:

则这样设置kms 的HPA kubectl autoscale deployment kms --min=2 --max=10 --cpu-percent=80

大勇:

这里设置了cpu-percent=80,表示pod的cpu利用率超过了百分之80会自动扩容,最小规格2个pod,每超过80%,再自动扩容,直到 pod最大数10.

大勇:

自动扩容,也不是无限扩容,也会参考当前集群总体资源来设置一个合理的区间阈值

大勇:

HPA 虽然能通过各自策略,实现POD的配置自动伸缩; 主要是仰仗SVC的强大的负载均衡

大勇:

k8s中svc有三种类型,分别为ClusterIP、NodePort、LoadBalancer;但是当SVC的类型是ClusterIP时,明显的POD端启动多个或者减少时,对服务的持续访问影响最小;而Deployment的部署方式,通常用在无状态部署,相当于访问每个POD 提供的功能效果是一样的。 即Deployment 部署的应用,最适合HPA自动扩容的方式。

大勇:

而当:SVC 是NodePort 对集群节点端口有依赖;SVC 是LoadBalancer 时对IP资源有要求; 或者通过SatefulSet(有状态) 方式部署的应用,每个POD 都有编号,pod的主机名会映射到DNS,相当于每个POD的都是不一样的。 则这些场景的云应用,采用HPA 自动扩容的方式又不太适用。

大勇:

好了,我今天的分享就到这了,主要是对POD 的自动化扩容提供了一种方法HPA,以及对它使用的场景进行了简单分析。 就我们当前的部署来看,大部分都是deployment 方式,还是能使用上的。