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内部资源的垂直扩展。

相关推荐
咚咚?3 小时前
基于gitlab 构建CICD发布到K8S 平台
容器·kubernetes·gitlab
尘土哥6 小时前
Docker 快速上手
docker·容器·eureka
wenzhangli77 小时前
低代码引擎核心技术:OneCode常用动作事件速查手册及注解驱动开发详解
人工智能·低代码·云原生
胡耀超11 小时前
Umi-OCR 的 Docker安装(win制作镜像,Linux(Ubuntu Server 22.04)离线部署)
linux·深度学习·ubuntu·docker·容器·nlp·ocr
铃木隼.15 小时前
docker容器高级管理-dockerfile创建镜像
运维·docker·容器
容器魔方16 小时前
持续领跑,华为云连续5年蝉联中国容器软件市场份额第一
云原生·容器·云计算
樽酒ﻬق18 小时前
Prometheus Operator:Kubernetes 监控自动化实践
java·算法·云原生·运维开发
麟城Lincoln20 小时前
【Linux-云原生-笔记】Apache相关
linux·笔记·云原生·apache·webserver
IT成长日记21 小时前
【Docker基础】Dockerfile指令速览:文件与目录操作指令详解
docker·容器·volume·add·dockerfile·workdir
胡耀超21 小时前
GraphRAG Docker化部署,接入本地Ollama完整技术指南:从零基础到生产部署的系统性知识体系
运维·docker·容器·大模型·知识图谱·rag·ollama