Deprecated: stripos(): Passing null to parameter #1 ($haystack) of type string is deprecated in /opt/bitnami/wordpress/wp-includes/functions.wp-styles.php on line 90
水平自动扩容和缩容HPA - IT民工进阶记

水平自动扩容和缩容HPA

HPA全称是Horizontal Pod Autoscaler,翻译成中文是POD水平自动伸缩,HPA可以基于CPU利用率对replication controller、deployment和replicaset中的pod数量进行自动扩缩容(除了CPU利用率也可以基于其他应程序提供的度量指标custom metrics进行自动扩缩容)。pod自动缩放不适用于无法缩放的对象,比如DaemonSets。

HPA由Kubernetes API资源和控制器实现。资源决定了控制器的行为。控制器会周期性的获取目标资源指标(如,平均CPU利用率),并与目标值相比较后来调整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

应用YAML文件

$ kubectl apply -f php-apache.yaml

安装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: registry.cn-hangzhou.aliyuncs.com/kavin1028/metrics-server:v0.6.4 
在image: 这行上面增加一行: - --kubelet-insecure-tls 

水平自动扩容和缩容HPA
应用此YAML文件

$ kubectl apply -f high-availability-1.21+.yaml

创建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%时,需要自动扩容

应用YAML

$ kubectl apply -f hpa-php-apache.yaml

模拟php-apache Pod CPU使用率增加

再开一个终端,执行

$ 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"

If you don't see a command prompt, try pressing enter.
OK!OK!OK!OK!OK!OK!OK!OK!OK!OK!OK!OK!OK!OK!OK!OK!OK!OK!OK!OK!OK!OK!OK!OK!

回到原来终端查看hap和po

kubectl get deployment,po,hpa |egrep 'NAME|php-apache' ##php-apache Pod副本会逐渐增加,hpa的TARGETS列CPU使用率会越来越高,当超过50%就会自动生成新的Pod副本

$ kubectl get deploy,hpa,po |egrep 'NAME|php-apache'

NAME                         READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/php-apache   9/9     9            9           8m
NAME                                             REFERENCE               TARGETS   MINPODS   MAXPODS   REPLICAS   AGE
horizontalpodautoscaler.autoscaling/php-apache   Deployment/php-apache   34%/50%   1         10        9          9m40s
NAME                              READY   STATUS    RESTARTS   AGE
pod/php-apache-756896bc49-275pb   1/1     Running   0          99s
pod/php-apache-756896bc49-5ccn9   1/1     Running   0          54s
pod/php-apache-756896bc49-8mp28   1/1     Running   0          8m
pod/php-apache-756896bc49-bfsbj   1/1     Running   0          99s
pod/php-apache-756896bc49-g27dx   1/1     Running   0          114s
pod/php-apache-756896bc49-m5nbh   1/1     Running   0          54s
pod/php-apache-756896bc49-pk5wf   1/1     Running   0          114s
pod/php-apache-756896bc49-r46pm   1/1     Running   0          54s
pod/php-apache-756896bc49-xg4hq   1/1     Running   0          54s

停止执行后,缓慢缩容

[root@master01 HPA]# while :; do kubectl get po | grep 'php-apache' | wc -l; sleep 3; done
9
9
9
9
9
8
8
8
8
8
7
7
7
7
7
7
7
7
6
6
6
6
6
4
4
4
4
2
1
1
1
1
1
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

给TA打赏
共{{data.count}}人
人已打赏
Kubernetes云原生

ConfigMap&Secret场景应用

2025-4-9 8:42:23

LinuxOps工具

vdbench基础使用指南

2025-4-3 11:43:58

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索
本站支持IPv6访问