kubernetes之HPA和VPA

目录

HPA

服务发布

创建HPA

增加负载

停止产生负载

VPA


HPA

HPA(Horizontal Pod Autoscaling,Pod水平自动伸缩)是Kubernetes中的一个核心功能,它允许用户根据当前Pod的资源使用率(如CPU、内存等)或其他自定义指标来自动调整Pod的副本数量,以实现资源的动态扩展和缩减。

为防止等下镜像拉取失败,先下载并加载镜像至每个node上

https://hub.docker.com/

如节点k8s-node-2

root@k8s-node-2 \~\]# docker load -i hpa-example.tar

服务发布

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

为了演示 HorizontalPodAutoscaler,首先启动一个 Deployment 用 hpa-example 镜像运行一个容器, 然后使用以下yaml文件将其暴露为一个 服务(Service)

root@k8s-master-1 hpa\]# mkdir /hpa \[root@k8s-master-1 hpa\]# cd /hpa \[root@k8s-master-1 hpa\]# vim hpa.yaml

复制代码
apiVersion: apps/v1
kind: Deployment
metadata:
  name: php-apache
spec:
  selector:
    matchLabels:
      run: php-apache
  template:
    metadata:
      labels:
        run: php-apache
    spec:
      containers:
      - name: php-apache
        image: k8s.gcr.io/hpa-example:latest
        imagePullPolicy: IfNotPresent
        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

root@k8s-master-1 hpa\]# kubectl apply -f php-apache.yaml deployment.apps/php-apache created service/php-apache created \[root@k8s-master-1 hpa\]# kubectl get pod -o wide NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES php-apache-f5b448469-kldd8 1/1 Running 0 12s 10.224.140.78 k8s-node-2 \ \

创建HPA

创建一个以cpu为资源限制的HorizontalPodAutoscaler

复制代码
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
  name: php-apache
spec:
  scaleTargetRef: # 指定了 HPA 要调整的目标资源
    apiVersion: apps/v1
    kind: Deployment
    name: php-apache #指明了 Deployment 的名称为 php-apache。
  minReplicas: 1 #定义了 HPA 可以缩放到的最小副本数为1
  maxReplicas: 10 #定义了 HPA 可以扩展到的最大副本数为10
  metrics:
  - type: Resource
    resource:
      name: cpu #指明了具体的资源类型为 CPU
      target:
        type: Utilization #目标类型为使用率。
        averageUtilization: 50

averageUtilization: 50:定义了 CPU 使用率的目标值为 50%。这意味着,如果 php-apache Deployment 中所有 Pod 的平均 CPU 使用率超过了 50%,HPA 将增加副本数以尝试降低 CPU 使用率。相反,如果平均 CPU 使用率低于 50%,HPA 将尝试减少副本数以节省资源。

如果要以内存为限制资源,以下是一个yaml示例:

复制代码
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
  name: php-apache
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: php-apache
  minReplicas: 1
  maxReplicas: 10
  - type: Resource
    resource:
      name: memory
      target:
        type: AverageValue
        averageValue: 500Mi

检查新制作的 HorizontalPodAutoscaler 的当前状态:

root@k8s-master-1 hpa\]# kubectl get hpa

注意当前的 CPU 利用率是 0%,这是由于我们尚未发送任何请求到服务器 (TARGET 列显示了相应 Deployment 所控制的所有 Pod 的平均 CPU 利用率)

此时,副本数量为1个

增加负载

root@k8s-master-1 hpa\]# kubectl run -i --tty load-generator --rm --image=busybox:latest --restart=Never -- /bin/sh -c "while sleep 0.01; do wget -q -O- http://php-apache; done"

启动一个不同的 Pod 作为客户端。 客户端 Pod 中的容器在无限循环中运行,向 php-apache 服务发送查询。

这条 kubectl run 命令用于在 Kubernetes 集群中启动一个临时的 busybox 容器,该容器会不断地向 http://php-apache 发送 HTTP GET 请求,模拟一个负载生成器。

这时,由于请求增多,CPU 利用率持续上升,

可以看到,Deployment 的副本数量已经增长到了 6个

停止产生负载

在创建 busybox 容器的终端中,输入 <Ctrl> + C 来终止负载的产生。

证结果状态(大约一分钟后):

一旦 CPU 利用率降至 0,HPA 会自动将副本数缩减为 1

VPA

VPA(Vertical Pod Autoscaler)即垂直Pod自动扩缩容,是Kubernetes中一种用于自动调节Pod中容器资源请求(CPU和内存)的工具。

VPA根据Pod的实际使用情况自动调整其CPU和内存资源请求,以确保应用程序具有足够的资源运行,并同时避免资源的浪费。

与Horizontal Pod Autoscaler(HPA)不同,VPA通过调整单个Pod的资源请求来应对负载变化,主要关注于单个Pod内部资源的垂直扩展。

相关推荐
moppol33 分钟前
Serverless 架构入门与实战:AWS Lambda、Azure Functions、Cloudflare Workers 对比
云原生·serverless·aws
IvanCodes1 小时前
一、Docker:一场颠覆应用部署与运维的容器革命
docker·容器
栗子~~1 小时前
Milvus docker-compose 部署
docker·容器·milvus
没有名字的小羊3 小时前
2.安装Docker
运维·docker·容器
xiezhr3 小时前
50 个常用 Docker 命令
运维·docker·容器
退役小学生呀9 天前
三、kubectl使用详解
云原生·容器·kubernetes·k8s
被困者10 天前
Linux部署Sonic前后端(详细版)(腾讯云)
spring cloud·云原生·eureka
程序员小潘10 天前
Kubernetes多容器Pod实战
云原生·容器·kubernetes
进击的码码码码N10 天前
Docker 镜像加速
运维·docker·容器