Kubernetes(十三)——HPA演练

简介

在Kubernetes 中,HorizontalPodAutoscaler 自动更新工作负载资源(例如 Deployment 或者 StatefulSet),目的是自动扩缩工作负载以满足需求。

HPA控制器通过Metrics Server的API(Heapster的API或聚合API)获取这些数据,基于用户定义的扩缩容规则进行计算,得到目标Pod副本数量。
当目标Pod副本数量与当前副本数量不同时,HPA控制器就访问Pod的副本控制器(Deployment 、RC或者ReplicaSet)发起scale操作,调整Pod的副本数量,完成扩缩容操作。

水平扩缩意味着对增加的负载的响应是部署更多的 Pods。 这与 “垂直(Vertical)” 扩缩不同

垂直扩缩意味着将更多资源(例如:内存或 CPU)分配给已经为工作负载运行的 Pod。
参考文档

运行 php-apache 服务器并暴露服务

制作镜像

cat<<EOF >Dockerfile
FROM php:5-apache
COPY index.php /var/www/html/index.php
RUN chmod a+rx index.php
EOF
cat<<EOF >index.php
<?php
  $x = 0.0001;
  for ($i = 0; $i <= 1000000; $i++) {
    $x += sqrt($x);
  }
  echo "OK!";
?>
EOF
docker build -t hpa-example:1.0 .

导出镜像

docker save -o hpa-example hpa-example:1.0

SCP传到node节点,因为不知道调度到哪个node,所以传输到所有node

在这里插入图片描述
导入镜像

docker load -i hpa-example
#每一个节点都导入镜像
cat<<EOF >php-apache.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  namespace: default
  name: php-apache
spec:
  selector:
    matchLabels:
      run: php-apache
  replicas: 1
  template:
    metadata:
      labels:
        run: php-apache
    spec:
      containers:
      - name: php-apache
        image: hpa-example:1.0
        ports:
        - containerPort: 80
        resources:
          limits:
            cpu: 20m
          requests:
            cpu: 10m
---
apiVersion: v1
kind: Service
metadata:
  namespace: default
  name: php-apache
  labels:
    run: php-apache
spec:
  ports:
  - port: 80
  selector:
    run: php-apache
EOF
kubectl apply -f php-apache.yaml
# 运行php-apache.yaml启动php-apache
kubectl get pods -o wide
# 查看容器启动情况
kubectl get svc
# 查看服务
kubectl delete svc php-apache
#删除ClusterIP服务
kubectl expose deployment php-apache  --type="NodePort" --port=8080  --target-port=80
#暴露NodePort服务

在这里插入图片描述

现在集群外的局域网主机也可以通过192.168.2.249:31676访问

在这里插入图片描述

创建 Horizontal Pod Autoscaler

php-apache服务器已经运行,我们将通过 kubectl autoscale 命令创建 Horizontal Pod Autoscaler。
以下命令将创建一个 Horizontal Pod Autoscaler 用于控制我们上一步骤中创建的 deployment,使 Pod 的副本数量在维持在1到10之间。
大致来说,HPA 将通过增加或者减少 Pod 副本的数量(通过 Deployment )以保持所有 Pod 的平均CPU利用率在50%以内。

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

查看 Autoscaler 的状态:

kubectl get hpa

在这里插入图片描述

增加负载

kubectl run -i --tty load-generator --rm --image=busybox --restart=Never -- /bin/sh -c "while sleep 0.01; do wget -q -O- http://10.244.4.43; done"

在这里插入图片描述

或者局域网其他主机通过以下命令循环访问

while sleep 0.01; do wget -q -O- http://192.168.2.249:31676; done

在这里插入图片描述

30s左右,通过以下命令,我们可以看到 CPU 负载升高,水平扩展了,Hpa会根据Pod的CPU使用率动态调节Pod的数量。
在这里插入图片描述
ctrl +c停止负载,等待几分钟可以看到自动缩容
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_46415378/article/details/124546809
今日推荐