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副本
相关推荐
白手小弟5 分钟前
docker部署Stirling-PDF
docker·容器·pdf
HoweWWW1 小时前
k8s 微服务 ingress-nginx 金丝雀发布
微服务·容器·kubernetes
向往风的男子1 小时前
【从问题中去学习k8s】k8s中的常见面试题(夯实理论基础)(三十一)
学习·容器·kubernetes
HoweWWW1 小时前
k8s中的存储
linux·容器·kubernetes
djgxfc2 小时前
Docker概述
spring cloud·云原生·eureka
苏supper2 小时前
k8s的NodeIP、PodIP、ClusterIP、ExternalIP
kubernetes
夜猫逐梦2 小时前
【docker】阿里云使用docker,2024各种采坑
阿里云·docker·容器
c1tenj22 小时前
docker发布redis容器
redis·docker·容器
研究司马懿3 小时前
【云原生监控】Prometheus之PushGateway
云原生·prometheus·云原生监控·企业级监控系统·promesql
骇客野人7 小时前
【开端】docker基线漏洞修复
运维·docker·容器