CKA考试知识点分享(1)---HPA
CKA 版本:1.32
第一套题是涉及HPA相关。本文不是题目,只是为了学习相关知识点做的实验。
Horizontal Pod Autoscaler (HPA) 是 Kubernetes 中用于自动调整 Pod 副本数量的功能,根据 CPU、内存等指标或自定义指标动态扩展或缩容 Deployment、ReplicaSet 或 StatefulSet 中的 Pod。
1. 环境准备
需要准备一套K8S集群。
1.1 安装metrics-server
Metrics-Server 是 Kubernetes Resource Metrics API 的唯一官方实现,为 kubectl top、HPA(基于 CPU/内存扩缩容)等核心功能提供实时数据。HPA的CPU和内存指标依赖metrics-server。所以我们安装metrics-server。
下载安装yaml
https://github.com/kubernetes-sigs/metrics-server/releases/tag/v0.7.2
因为内部是自建的k8s集群,需要忽略一下证书验证 - --kubelet-insecure-tls
检查metrics-server 正常运行。
kubectl get pod -A |grep metrics-server
1.2 安装测试POD
这里测试pod 我使用官方文档中的测试实例
apiVersion: apps/v1
kind: Deployment
metadata:name: php-apache
spec:selector:matchLabels:run: php-apachetemplate:metadata:labels:run: php-apachespec:containers:- name: php-apacheimage: k8s.m.daocloud.io/hpa-exampleports:- containerPort: 80resources:limits:cpu: 500mrequests:cpu: 200m
---
apiVersion: v1
kind: Service
metadata:name: php-apachelabels:run: php-apache
spec:ports:- port: 80selector:run: php-apache
创建好了之后 验证一下
2. HPA 操作
2.1 创建HPA
kubectl autoscale deployment php-apache --cpu-percent=50 --min=1 --max=10
kubectl get hpa
2.2 施加压力
施加压力:
查看hpa 状态
kubectl get hpa -w
明显可以看出,pod数量少的时候 pod的CPU使用率上去了,所以hpb对pod数量进行扩容。然后当pod数量提升到9个的时候,CPU使用率降到50%以下了。达到了预期。
查看pod
kubectl get pod
停止压力,观察hpa的行为
3 HPA的行为
从上面可以看到 当压力停止后,差不多5分钟左右时间 pod数量从9个降到1个,恢复到没有压力的时候。hpa进行扩缩容的时长,每次减少多少个pod, 这些都是由hpa的行为控制的,如下所示
kubectl edit hpa php-apache
behavior:scaleDown:policies:- periodSeconds: 60type: Podsvalue: 8selectPolicy: MaxscaleUp:policies:- periodSeconds: 15type: Podsvalue: 4- periodSeconds: 15type: Percentvalue: 100selectPolicy: MaxstabilizationWindowSeconds: 0
上面为收缩(scaledown)和扩容(scaleup)两个方向:
收缩策略(scaleDown):每60秒最大减少8个Pod
单策略:仅使用Pods类型策略
执行频率:每60秒周期内
最大缩减量:8个Pod
扩容策略(scaleUp) 每15秒最大增长量=max(4个Pod,或者Pod数量×100%
双策略组合:
绝对值策略:每15秒最多增加4个Pod
百分比策略:每15秒最多增加当前副本数的100%
选择策略:selectPolicy: Max(取两个策略计算结果中的较大值)
立即生效:stabilizationWindowSeconds=0表示取消扩容冷却期
施加压力
压力上来后,很快pod就冲1个变成3个再变成7个。基本没有任何延迟。
停止压力
延迟时长5分钟 直接从7个变成1个。
可以看出。stabilizationWindowSeconds=0 是当扩容时没有任何延迟,直接进行扩容。
参考链接:
https://kubernetes.io/zh-cn/docs/tasks/run-application/horizontal-pod-autoscale/