https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale-walkthrough/
Horizontal Pod Autoscaler 可以通过监控CPU利用率 动态调整Pod的数量 达到动态扩容和缩容的目的。
Before you begin
例子运行在Kubernetes cluster and kubectl, version 1.2 or later。 metrics-server 需要被部署到集群 因为 Horizontal Pod Autoscaler 需要使用 API 收集资源利用率。部署指南metrics-server。如果想指定多种度量策略,可以升级Kubernetes cluster and kubectl 到 1.6 以上版本。
Run & expose php-apache server
为了演示Horizontal Pod Autoscaler 我们将使用基于php-apache 镜像的自定义docker镜像 dockerfile
FROM php:5-apache
ADD index.php /var/www/html/index.php
RUN chmod a+rx index.php
PHP进行了消耗CPU资源的计算
<?php $x = 0.0001; for ($i = 0; $i <= 1000000; $i++) { $x += sqrt($x); } echo "OK!"; ?>
首先运行部署镜像 并且通过以下配置将服务暴露出去
application/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: k8s.gcr.io/hpa-example
ports:
- containerPort: 80
resources:
limits:
cpu: 500m
requests:
cpu: 200m
---
apiVersion: v1
kind: Service
metadata:
name: php-apache
labels:
run: php-apache
spec:
ports:
- port: 80
selector:
run: php-apache
运行以下命令:
$ kubectl apply -f https://k8s.io/examples/application/php-apache.yaml
deployment.apps/php-apache created
service/php-apache created
Create Horizontal Pod Autoscaler
控制副本数量在1到10 将平均CPU利用率维持在50%左右
$ kubectl autoscale deployment php-apache --cpu-percent=50 --min=1 --max=10
$ kubectl get hpa
NAME REFERENCE TARGET MINPODS MAXPODS REPLICAS AGE
php-apache Deployment/php-apache/scale 0% / 50% 1 10 1 18s
由于没有发送请求 所以cpu利用率为0
Increase load
循环发送请求
$ kubectl run --generator=run-pod/v1 -it --rm load-generator --image=busybox /bin/sh
Hit enter for command prompt
while true; do wget -q -O- http://php-apache.default.svc.cluster.local; done
查看CPU负载
$ kubectl get hpa
NAME REFERENCE TARGET MINPODS MAXPODS REPLICAS AGE
php-apache Deployment/php-apache/scale 305% / 50% 1 10 1 3m
副本已经增加到7个
$ kubectl get deployment php-apache
NAME READY UP-TO-DATE AVAILABLE AGE
php-apache 7/7 7 7 19m
Stop load
Ctrl + C 停止请求
$ kubectl get hpa
NAME REFERENCE TARGET MINPODS MAXPODS REPLICAS AGE
php-apache Deployment/php-apache/scale 0% / 50% 1 10 1 11m
$ kubectl get deployment php-apache
NAME READY UP-TO-DATE AVAILABLE AGE
php-apache 1/1 1 1 27m
在这里,CPU利用率下降到0,因此HPA自动将副本数缩减到1。