hpa实验

目录

  • 1. 构建镜像
  • 2. 使用下面的 YAML 文件生成服务端:
  • 3. 创建 Horizontal Pod Autoscaler
  • 4. 增加负荷
  • 5. 撤销负荷

1. 构建镜像

本文将要使用一个基于 php-apache 镜像自定义的 docker 镜像来演示 HorizontalPodAutoscaler。Dockerfile 如下所示:

FROM php:5-apache
COPY index.php /var/www/html/index.php
RUN chmod a+rx index.php

其中 index.php 文件的内容如下所示,该 php 页面执行了一些大量消耗 CPU 的计算:

<?php
  $x = 0.0001;
  for ($i = 0; $i <= 1000000; $i++) {
    $x += sqrt($x);
  }
  echo "OK!";
?>

2. 使用下面的 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: 上面的镜像
        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

3. 创建 Horizontal Pod Autoscaler

php-apache 服务启动以后,现在可以使用 kubectl autoscale (opens new window)指令来创建 Autoscaler。下面的指令创建了一个 HorizontalPodAutoscaler,该 Autoscaler 使得我们在前一个步骤中创建的 php-apache Deployment 在 1 到 10 个副本之间伸缩。大致上,HPA 在通过增加或减少 Deployment 的副本数,以使得所有 Pod 的平均 CPU 利用率维持在 50% 左右(每个 Pod 的 CPU Request 是 200 milli-cores,即平均 CPU 利用率应该是 100 milli-cores)。。

kubectl autoscale deployment php-apache --cpu-percent=50 --min=1 --max=10

执行下面的指令,可以查看当前 HPA 的状态

kubectl get hpa

输出结果如下所示:

NAME         REFERENCE                     TARGET    MINPODS   MAXPODS   REPLICAS   AGE
php-apache   Deployment/php-apache/scale   0% / 50%  1         10        1          18s
  • 请注意,当前 CPU 的消耗是 0%,因为我们尚未向 php-apache 服务发送任何请求;
  • TARGET 这一列展示了 Deployment 中所有 Pod 的平均 CPU 利用率。

4. 增加负荷

  • 启动了一个容器,并进入该容器的命令行终端:
kubectl run -it --rm load-generator --image=busybox /bin/sh
  • 在容器命令行中输入如下脚本,并回车:
  • 该脚本向 php-apache 服务无限循环地发送查询请求:
while true; do wget -q -O- http://php-apache; done
  • 大约 1 分钟左右,我们可以通过指令观察到较高的 CPU 利用率;
kubectl get hpa
  • 输出如下:
NAME         REFERENCE                     TARGET      MINPODS   MAXPODS   REPLICAS   AGE
php-apache   Deployment/php-apache/scale   305% / 50%  1         10        1          3m    
  • 此时,CPU 利用率增加到了 CPU 请求的 305%。对应的,HPA 将 Deployment 的副本数调整到 7:
kubectl get deployment php-apache   
  • 输出如下:
NAME         READY   UP-TO-DATE   AVAILABLE   AGE
php-apache   7/7      7           7           19m  

5. 撤销负荷

在 load-generator 终端界面中输入组合键 + c 可以终止模拟的用户请求。此后,php-apache 服务的 CPU 利用率将持续下降到 0。
执行以下指令可以观察到这个变化的过程:

watch "kubectl get hpa && echo && kubectl get deployment php-apache"   

一分钟左右,最终的输出结果如下:

NAME         REFERENCE                     TARGET       MINPODS   MAXPODS   REPLICAS   AGE
php-apache   Deployment/php-apache/scale   0% / 50%     1         10        1          11m

NAME         READY   UP-TO-DATE   AVAILABLE   AGE
php-apache   1/1     1            1           27m

此时,CPU 利用率降低到 0,因此 HPA 将副本数自动地将副本数向下伸缩到 1。
注意
自动伸缩的过程可能需要持续几分钟才能完成。

你可能感兴趣的:(kubernetes,k8s,hpa)