k8s HPA
水平自动扩容和缩容HPA
HPA全称Horizontal Pod Autoscaler,即pod水平自动伸缩。HPA可以基于CPU利用率对replication controller、deployment和replicaset中的pod数量进行自动扩缩容(除了CPU利用率,也可以基于其他应用程序提供的度量指标custom metrics进行自动扩缩容)。
pod自动缩放不适用于无法缩放的对象,比如daemonsets。
HPA由kubernetes api资源和控制器实现。资源决定了控制器的行为。控制器辉周期性的获取目标资源指标,并于目标值比较后来调整pod副本数量。
创建测试Deployment
vi php-apache.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: php-apache
spec:
selector:
matchLabels:
run: php-apache
replicas: 1
template:
metadata:
labels:
run: php-apache
spec:
containers:
- name: php-apache
image: aminglinux/hpa-example
ports:
- containerPort: 80
resources:
limits:
cpu: 500m ##限制Pod CPU资源最多使用500m
requests:
cpu: 200m ##K8s要保证Pod使用的最小cpu资源为200m
---
apiVersion: v1
kind: Service
metadata:
name: php-apache
labels:
run: php-apache
spec:
ports:
- port: 80
selector:
run: php-apache
安装merics-server(通过它才能获取到具体的资源使用情况)
下载yaml文件
wget https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/high-availability-1.21+.yaml
修改YAML文件
vi high-availability-1.21+.yaml
将image: k8s.gcr.io/metrics-server/metrics-server:v0.6.2 修改为 image: aminglinux/metrics-server:v0.6.2
在image: 这行上面增加一行: - --kubelet-insecure-tls
创建HPA
vi hpa-php-apache.yaml
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
name: php-apache
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: php-apache
minReplicas: 1 ##最小Pod数为1
maxReplicas: 10 ##最大Pod数为10
metrics:
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 50 ##当Pod的CPU使用率超过50%时,需要自动扩容
模拟负载变动,查看扩缩容
再开一个终端,执行
kubectl run -i --tty load-generator --rm --image=busybox:1.28 --restart=Never -- /bin/sh -c "while sleep 0.01;do wget -q -O- http://php-apache;done"
回到原终端查看HAP和po
kubectl get deployment,po,hpa|grep -E 'NAME|php-apache'
#php-apache pod副本会逐渐增加,hpa的tagets列cpu使用率会越来越高,当超50%就会生成新pod副本