k8s的hpa

1、hpa(horizontal pod autoscaling):pod的水平自动伸缩,这是k8s自带的模块,hpa控制副本的数量以及控制部署pod

1)pod占用CPU的比率到达一定的阀值,会触发伸缩机制
2replication controller(副本控制器):pod的副本数
(3)deployment controller(节点控制器):部署pod

2、hpa基于kube-controller-manager服务,周期性的检测pod的CPU使用率,默认是30秒

3、hpa和replication controller、deployment controller都属于k8s的资源对象,通过跟踪分析副本控制器和deployment的pod的负载变化,针对性的调整目标pod的副本数

①针对性——阀值:正常情况下,pod的副本数,以及达到阀值之后,pod的扩容最大数量
②metrics-server部署到集群中,对外提供度量的数据
4、hpa的实例
(1)每个节点部署安装包:docker load -i metrics-server.tar

k8s的hpa_第1张图片

k8s的hpa_第2张图片

k8s的hpa_第3张图片

(2)创建pod、hpa

k8s的hpa_第4张图片

k8s的hpa_第5张图片

k8s的hpa_第6张图片

k8s的hpa_第7张图片

4压力测试

k8s的hpa_第8张图片

k8s的hpa_第9张图片

①扩容

k8s的hpa_第10张图片

k8s的hpa_第11张图片

k8s的hpa_第12张图片

k8s的hpa_第13张图片

k8s的hpa_第14张图片

②缩容

k8s的hpa_第15张图片

5、hpa的规则:周期性的获取数据,缩容的机制问题

(1)定义pod时候必须要有资源限制,否则HPA无法进行监控
(2)扩容是即时的,只要超过阀值会立刻扩容,不是立刻扩容到最大副本数,会在最小值和最大值之间波动,如果扩容的数量满足了需求,不会再扩容
(3)缩容是缓慢的,如果业务的峰值较高,回收的策略太积极,可能会产生业务的崩溃,缩容的速度是比较慢的

6、pod的副本数扩缩容有两种方式(重)

(1)手动扩缩容,修改控制器的副本数
①命令行:kubectl scale deployment nginx --replicas=5
②修改yaml文件,apply -f部署更新
(2)自动扩缩容:hpa,hpa监控的是CPU

7、资源限制

(1)pod的资源限制
(2)命名空间的资源限制
①lucky-cloud项目——部署在test1的命名空间,如果lucky-cloud不做资源限制、或者命名空间不做限制,依然会占满所有集群资源

8、命名空间资源限制的实例

(1)命名空间资源限制resourcequota
①创建pod

k8s的hpa_第16张图片

k8s的hpa_第17张图片

k8s的hpa_第18张图片

②限制副本数

k8s的hpa_第19张图片

k8s的hpa_第20张图片

k8s的hpa_第21张图片

k8s的hpa_第22张图片

③其他命名空间的资源限制

k8s的hpa_第23张图片

k8s的hpa_第24张图片

④测试

k8s的hpa_第25张图片k8s的hpa_第26张图片k8s的hpa_第27张图片

k8s的hpa_第28张图片

⑤查看命名空间的资源限制:kubectl describe ns test1

k8s的hpa_第29张图片

(2)pod的资源限制limitrange(命名空间统一的资源限制)
①创建pod和limitrange限制

k8s的hpa_第30张图片

k8s的hpa_第31张图片

k8s的hpa_第32张图片

k8s的hpa_第33张图片

②压力测试

k8s的hpa_第34张图片

(3)小总结
①hpa:自动扩缩容
②命名空间的资源限制

resourcequota:对命名空间进行资源限制

limitrange:直接声明在命名空间中创建的pod、容器的资源限制(统一限制,所有pod都所这个条件的制约)

9、总结
(1)pod的资源限制:resources→一般在创建时就声明好,必加选项
(2)命名空间的资源限制(resourcequota)→对命名空间使用CPU和内存一定会做限制
* 上述两个的限制的核心:防止整个集群的资源被一个服务或者一个命名空间占满
(3)命名空间的统一资源限制(limitrange)
(4)hpa:自动伸缩

你可能感兴趣的:(kubernetes,java,容器)