Kubernetes - HPA-VPA - metrics介绍和安装 - HPA实验

news2025/2/4 15:59:21

目录

参考文章:(97条消息) Kubernetes-自动扩展器HPA、VPA、CA_hpa vpa_SRE运维充电站的博客-CSDN博客

HPA

VPA

官方网址:autoscaler/vertical-pod-autoscaler at master · kubernetes/autoscaler · GitHub

HPA和VPA进行扩缩容的区别:

metrics server

官方网址:autoscaler/vertical-pod-autoscaler at master · kubernetes/autoscaler · GitHub

安装Metrics Server

1、下载官方的yaml文件,并修改image为阿里云的地址

2、执行安装命令

3、测试效果

安装HPA

参考文章:(117条消息) k8s - 容器类型 - logrotate日志轮转工具 - HPA的部署 - Dashboard安装部署_k8s logrotate_Wangsh@的博客-CSDN博客

1、安装好metrics-server

2、创建HPA功能

2、生成镜像文件

3、创建php-apache.yaml 

4、创建HPA

4.1、导出hpa-example镜像,并传到每一台node节点服务器上去

4.2、然后删除pod(删除php-apache.yaml),又重启pod

5、增加负载

6、停止产生负载


参考文章:(97条消息) Kubernetes-自动扩展器HPA、VPA、CA_hpa vpa_SRE运维充电站的博客-CSDN博客

HPA

HPA 是 Horizontal Pod Autoscaler(自动扩缩容)。

它是 Kubernetes 中的一个功能,用于根据 CPU 使用率或其他指标自动调整同一 Deployment 或 ReplicaSet 中运行的 Pod 的副本数量。

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

水平扩缩意味着对增加的负载的响应是部署更多的 Pods。 这与 “垂直(Vertical)” 扩缩不同,对于 Kubernetes, 垂直扩缩(VPA)意味着将更多资源(例如:内存或 CPU)分配给已经为工作负载运行的 Pod。

如果负载减少,并且 Pod 的数量高于配置的最小值,HPA会指示工作负载资源( Deployment、StatefulSet 或其他类似资源)缩减。

水平 Pod 自动扩缩不适用于无法扩缩的对象(例如:DaemonSet。)

HPA 被实现为 Kubernetes API 资源和控制器。

资源决定了控制器的行为。在 Kubernetes 控制平面内运行的水平 Pod 自动扩缩控制器会定期调整其目标(例如:Deployment)的所需规模,以匹配观察到的指标, 例如,平均 CPU 利用率、平均内存利用率或你指定的任何其他自定义指标。

VPA

官方网址:autoscaler/vertical-pod-autoscaler at master · kubernetes/autoscaler · GitHub

使用户无需设置最新的资源限制和对容器中容器的请求。什么时候配置,它将根据使用情况自动设置请求,从而允许对节点进行适当的调度以便适当的资源量可用于每个容器。它还将保持限制和 在初始容器配置中指定的请求。

它既可以缩小过度请求资源的 pod,也可以根据资源的使用情况请求不足的升级Pod,这些Pod 在时间。

VPA 全称 Vertical Pod Autoscaler,即垂直 Pod 自动扩缩容,可以根据容器资源使用情况自动设置 CPU 和 内存 的请求值,从而允许在节点上进行适当的调度,以便为每个 Pod 提供适当的资源。它既可以缩小过度请求资源的容器,也可以根据其使用情况随时提升资源不足的容量。

通过扩缩pod的cpu和内存的大小来提高/降低pod的处理能力

通过对pod的硬件的资源得到调整,来达到提升pod的处理能力

HPA和VPA进行扩缩容的区别:

HPV是通过改变Pod(副本)数量的

VPA是通过改变启动的Pod的cpu使用率和内存大小的

metrics server

官方网址:autoscaler/vertical-pod-autoscaler at master · kubernetes/autoscaler · GitHub

Metrics Server 是 Kubernetes 内置自动缩放管道的可扩展、高效的容器资源指标来源

Metrics Server 从 Kubelets 收集资源指标,并通过Metrics API在 Kubernetes apiserver 中公开它们, 以供Horizo​​ntal Pod Autoscaler(HPA )和Vertical Pod Autoscaler(VPA)使用。还可以通过 访问指标 API kubectl top,从而更轻松地调试自动缩放管道

Metrics Server基于内存存储,重启后数据将全部丢失,而且它仅能留存最近收集到的指标数据,因此,如果用户期望访问历史数据, 就不得不借助于第三方的监控系统(如 Prometheus等)

安装Metrics Server

1、下载官方的yaml文件,并修改image为阿里云的地址

安装路径:https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml

下载后需要修改components.yaml

原因是我们不能在外网下载metrics镜像

添加参数

修改后:

2、执行安装命令

传输到master上去

运行components.yaml文件

[root@master ~]# kubectl apply -f components.yaml 
serviceaccount/metrics-server created
clusterrole.rbac.authorization.k8s.io/system:aggregated-metrics-reader created
clusterrole.rbac.authorization.k8s.io/system:metrics-server created
rolebinding.rbac.authorization.k8s.io/metrics-server-auth-reader created
clusterrolebinding.rbac.authorization.k8s.io/metrics-server:system:auth-delegator created
clusterrolebinding.rbac.authorization.k8s.io/system:metrics-server created
service/metrics-server created
deployment.apps/metrics-server created
apiservice.apiregistration.k8s.io/v1beta1.metrics.k8s.io created
[root@master ~]# 

查看是否启动成功

[root@master ~]# kubectl get deployment -n kube-system
NAME             READY   UP-TO-DATE   AVAILABLE   AGE
coredns          2/2     2            2           31h
metrics-server   1/1     1            1           12m

3、测试效果

[root@master ~]# kubectl top pod
NAME                       CPU(cores)   MEMORY(bytes)   
my-nginx-575db987b-5h7xn   0m           2Mi             
my-nginx-575db987b-nwl5h   0m           2Mi             
my-nginx-575db987b-vqngh   0m           2Mi             
myapp-pod                  0m           0Mi             
redis                      2m           7Mi             
scnginx                    0m           1Mi             
[root@master ~]#
[root@master ~]# kubectl top node
NAME     CPU(cores)   CPU%   MEMORY(bytes)   MEMORY%   
master   123m         6%     1040Mi          60%       
node1    48m          2%     899Mi           52%       
node2    41m          2%     580Mi           33%       
node3    90m          4%     740Mi           43%       
[root@master ~]# 

#能够使用上面的命令查看到Pod的效果,说明metrics server已经安装成功

安装HPA

参考文章:(117条消息) k8s - 容器类型 - logrotate日志轮转工具 - HPA的部署 - Dashboard安装部署_k8s logrotate_Wangsh@的博客-CSDN博客

1、安装好metrics-server

2、创建HPA功能

编辑Dockerfile和index.php

Dockerfiel文件:

FROM php:5-apache
COPY index.php /var/www/html/index.php
RUN chmod a+rx index.php

index.php:(测试HPA扩缩额能力的文件)

<?php
  $x = 0.0001;
  for ($i = 0; $i <= 1000000; $i++) {
    $x += sqrt($x);
  }
  echo "OK!";
?>

2、生成镜像文件

[root@master hpa]# docker build -t clay-hpa:1.0 .

创建一个链接的镜像hpa-example指向我们自己创建的clay-hpa镜像

docker tag clay-hpa:1.0 hpa-example:latest

3、创建php-apache.yaml 

[root@master hpa]# cat 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: clay-hpa:1.0
        ports:
        - containerPort: 80
        resources:
          limits:
            cpu: 200m
          requests:
            cpu: 100m
 
---
 
apiVersion: v1
kind: Service
metadata:
  namespace: default
  name: php-apache
  labels:
    run: php-apache
spec:
  ports:
  - port: 80
  selector:
    run: php-apache
[root@master hpa]# 

启动php-apache.yaml文件

[root@master hpa]# kubectl apply -f php-apache.yaml  
deployment.apps/php-apache created
service/php-apache created
[root@master hpa]# 

4、创建HPA

[root@master hpa]# kubectl autoscale deployment php-apache --cpu-percent=10 --min=1 --max=10
horizontalpodautoscaler.autoscaling/php-apache autoscaled
[root@master hpa]# kubectl get hpa
NAME         REFERENCE               TARGETS         MINPODS   MAXPODS   REPLICAS   AGE
php-apache   Deployment/php-apache   <unknown>/10%   1         10        0          13s
[root@master hpa]# kubectl get pod
NAME                          READY   STATUS              RESTARTS   AGE
php-apache-779bc4fcc9-2qgm4   0/1     ContainerCreating   0          61s
[root@master hpa]# 

发现没有创建成功

原因是其他的node节点服务器上没有所需的hpa镜像导致的

4.1、导出hpa-example镜像,并传到每一台node节点服务器上去

[root@master ~]# docker save >hpa-example.tar clay-hpa:1.0

将它scp到每一台node节点服务器上去,防止启动的副本数量过多,其他的node节点上没有镜像

[root@master ~]# scp hpa-example.tar root@192.168.2.212:/root

传输成功

docker导入hpa-example镜像(每台node都导入)

[root@node1 ~]# docker load < hpa-example.tar 
3c816b4ead84: Loading layer [==================================================>]  58.47MB/58.47MB
b87a266e6a9c: Loading layer [==================================================>]  3.584kB/3.584kB
82bded2c3a7c: Loading layer [==================================================>]  213.6MB/213.6MB
6eb3cfd4ad9e: Loading layer [==================================================>]  3.584kB/3.584kB
b1841504f6c8: Loading layer [==================================================>]  43.04MB/43.04MB
4dd88f8a7689: Loading layer [==================================================>]  11.78kB/11.78kB
9311481e1bdc: Loading layer [==================================================>]  9.728kB/9.728kB
d89c229e40ae: Loading layer [==================================================>]   7.68kB/7.68kB
5ce59bfe8a3a: Loading layer [==================================================>]  13.82MB/13.82MB
bebcda512a6d: Loading layer [==================================================>]  4.096kB/4.096kB
588ee8a7eeec: Loading layer [==================================================>]  34.42MB/34.42MB
13ab94c9aa15: Loading layer [==================================================>]  11.78kB/11.78kB
1aab22401f12: Loading layer [==================================================>]  4.608kB/4.608kB
6f974e73bdb1: Loading layer [==================================================>]  3.584kB/3.584kB
5995ac88ad01: Loading layer [==================================================>]  4.096kB/4.096kB
Loaded image: hpa-example:latest
[root@node1 ~]# 

4.2、然后删除pod(删除php-apache.yaml),又重启pod

[root@master hpa]# kubectl delete -f php-apache.yaml 
deployment.apps "php-apache" deleted
service "php-apache" deleted
[root@master hpa]# 
[root@master hpa]# kubectl apply -f php-apache.yaml 
deployment.apps/php-apache created
service/php-apache created
[root@master hpa]# kubectl get pod
NAME                          READY   STATUS    RESTARTS   AGE
php-apache-779bc4fcc9-4ct7p   1/1     Running   0          12s

5、增加负载

接下来,看看自动扩缩器如何对增加的负载做出反应。 为此,你将启动一个不同的 Pod 作为客户端。 客户端 Pod 中的容器在无限循环中运行,向 php-apache 服务发送查询。

# 在单独的终端中运行它
# 以便负载生成继续,你可以继续执行其余步骤

[root@k8s-master hpa]#  kubectl run -i --tty load-generator --rm --image=busybox:1.28 --restart=Never -- /bin/sh -"while sleep 0.01; do wget -q -O- http://10.244.2.4; done"

在增加负载的同时,使用kubectl get hpa php-apache --watch观察cpu负载情况,pod数量 

可以看到,一分钟左右,cpu的负载在不断升高,而HPA也在不断的增加pod的数量,一致到设置的最大pod数

同时,k8s集群中的php-apache的pod数量也和HPA增加的pod数一致

[root@k8s-master hpa]# kubectl get hpa php-apache --watch
NAME         REFERENCE               TARGETS   MINPODS   MAXPODS   REPLICAS   AGE
php-apache   Deployment/php-apache   1%/10%    1         10        1          18m
php-apache   Deployment/php-apache   63%/10%   1         10        1          21m
php-apache   Deployment/php-apache   199%/10%   1         10        4          21m
php-apache   Deployment/php-apache   107%/10%   1         10        8          21m
php-apache   Deployment/php-apache   51%/10%    1         10        10         22m
php-apache   Deployment/php-apache   24%/10%    1         10        10         22m
php-apache   Deployment/php-apache   22%/10%    1         10        10         22m
php-apache   Deployment/php-apache   15%/10%    1         10        10         22m
php-apache   Deployment/php-apache   1%/10%     1         10        10         23m
[root@k8s-master hpa]# kubectl get pod -o wide
NAME                          READY   STATUS    RESTARTS   AGE     IP           NODE        NOMINATED NODE   READISS GATES
php-apache-7c97954b84-27zc5   1/1     Running   0          4m11s   10.244.3.8   k8s-node3   <none>           <none
php-apache-7c97954b84-2xp8r   1/1     Running   0          4m41s   10.244.1.4   k8s-node1   <none>           <none
php-apache-7c97954b84-5tnfx   1/1     Running   0          4m26s   10.244.3.7   k8s-node3   <none>           <none
php-apache-7c97954b84-64vn7   1/1     Running   0          4m11s   10.244.1.6   k8s-node1   <none>           <none
php-apache-7c97954b84-c8wbq   1/1     Running   0          4m26s   10.244.2.4   k8s-node2   <none>           <none
php-apache-7c97954b84-gw5x8   1/1     Running   0          4m41s   10.244.2.3   k8s-node2   <none>           <none
php-apache-7c97954b84-lkk9p   1/1     Running   0          4m26s   10.244.2.5   k8s-node2   <none>           <none
php-apache-7c97954b84-lvqsj   1/1     Running   0          21m     10.244.1.3   k8s-node1   <none>           <none
php-apache-7c97954b84-rhqcv   1/1     Running   0          4m26s   10.244.1.5   k8s-node1   <none>           <none
php-apache-7c97954b84-rmx9x   1/1     Running   0          4m41s   10.244.3.6   k8s-node3   <none>           <none

6、停止产生负载

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

然后验证结果状态(大约一分钟后):pod的数量显示它已经缩小了

[root@k8s-master HPA]# kubectl get hpa php-apache --watch
NAME         REFERENCE               TARGETS   MINPODS   MAXPODS   REPLICAS   AGE
php-apache   Deployment/php-apache   1%/10%    1         10        1          18m
php-apache   Deployment/php-apache   63%/10%   1         10        1          21m
php-apache   Deployment/php-apache   199%/10%   1         10        4          21m
php-apache   Deployment/php-apache   107%/10%   1         10        8          21m
php-apache   Deployment/php-apache   51%/10%    1         10        10         22m
php-apache   Deployment/php-apache   24%/10%    1         10        10         22m
php-apache   Deployment/php-apache   22%/10%    1         10        10         22m
php-apache   Deployment/php-apache   15%/10%    1         10        10         22m
php-apache   Deployment/php-apache   1%/10%     1         10        10         23m
php-apache   Deployment/php-apache   1%/10%     1         10        10         27m
php-apache   Deployment/php-apache   1%/10%     1         10        1          28m
[root@k8s-master HPA]# kubectl get pod -o wide
NAME                          READY   STATUS    RESTARTS   AGE    IP            NODE        NOMINATED NODE   READINESS GATES
php-apache-7c97954b84-77fgv   1/1     Running   0          7m2s   10.244.1.13   k8s-node1   <none>           <none>
[root@k8s-master HPA]# 

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

自动扩缩完成副本数量的改变可能需要几分钟的时间。
 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/761826.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

绿水青山,节水护水我先行

为了树立人人珍惜水&#xff0c;人人节约水的良好风尚 绿萝志愿团队在7月16日在常庄刺猬河开展了2023年卫生环保志愿活动主要项目是宣传节水&#xff0c;护水志愿活动。 早上志愿者们早早的来到刺猬河旁&#xff0c;用自己带的工具准备清理河道旁的垃圾。志愿者们顶着炎炎的烈日…

Servlet 开发技术

文章目录 前言创建Servlet项目处理请求并响应处理请求text/plain&#xff0c;纯文本text/html&#xff0c;html代码application/json&#xff0c;JSON格式字符串 Servlet 生命周期Servlet在整个生命周期中被调用的方法Servlet运行原理 CORS跨域设置 前言 提示&#xff1a;这里…

rust的cargo和基本数据类型

一、cargo 1、cargo 比较大的项目就不适合用rustc进行编译了&#xff0c;此时就需要使用cargo 在安装包的时候&#xff0c;会遇到网速慢卡住的问题&#xff0c;这时候就要更换国内源或者设置代理 方法一&#xff1a;设置命令行代理 方法二&#xff1a;换源 进入用户目录下的…

linux 安装redis、配置密码及简单使用

1&#xff1a;官网下载压缩包 这里我下载的是6.2.13版本。 2&#xff1a;上传到linux服务器 a:创建redis文件夹 b:进入当前redis文件夹 c:解压缩文件 d:进入 redis-6.2.713 e:使用make 命令进行编译将.c文件编译成.o文件 编译成功之后会出现“Its a good idea to run make test…

微信原生实现一个简易的图片上传功能

一、实现原理 wx.showActionSheet()&#xff1a;显示操作菜单&#xff0c;选择是从相册选择还是相机拍摄照片wx.chooseImage()&#xff1a;从本地相册选择图片或使用相机拍照。wx.uploadFile()&#xff1a;将本地资源上传到服务器。客户端发起一个 HTTPS POST 请求&#xff0c…

在自定义数据集上微调Alpaca和LLaMA

本文将介绍使用LoRa在本地机器上微调Alpaca和LLaMA&#xff0c;我们将介绍在特定数据集上对Alpaca LoRa进行微调的整个过程&#xff0c;本文将涵盖数据处理、模型训练和使用流行的自然语言处理库(如Transformers和hugs Face)进行评估。此外还将介绍如何使用grado应用程序部署和…

分型(一)

一点想法&#xff1a; 坐标系本来就是人头脑当中的东西&#xff0c;可以根据需要动态调整&#xff0c;图像处理中&#xff0c;用动态的波看静态的图像&#xff0c;进而找出图像的特征&#xff0c;分型是不是把动态的过程呈现出静态的特征呢&#xff1f; 芒德布罗集&#xff1…

Python(十五)数据类型——bool型

❤️ 专栏简介&#xff1a;本专栏记录了我个人从零开始学习Python编程的过程。在这个专栏中&#xff0c;我将分享我在学习Python的过程中的学习笔记、学习路线以及各个知识点。 ☀️ 专栏适用人群 &#xff1a;本专栏适用于希望学习Python编程的初学者和有一定编程基础的人。无…

【动手学深度学习】--08.实战:Kaggle房价预测

文章目录 实战&#xff1a;Kaggle房价预测1.访问和读取数据集2.数据预处理2.1标准化数据2.2离散数据处理 3.训练4.K折交叉验证5.模型选择 实战&#xff1a;Kaggle房价预测 1.访问和读取数据集 # 如果没有安装pandas&#xff0c;请取消下一行的注释 # !pip install pandas%matp…

华为云CodeArts产品体验的心得体会及想法

文章目录 前言CodeArts 的产品优势一站式软件开发生产线研发安全Built-In华为多年研发实践能力及规范外溢高质高效敏捷交付 功能特性说明体验感受问题描述完结 前言 华为云作为一家全球领先的云计算服务提供商&#xff0c;致力于为企业和个人用户提供高效、安全、可靠的云服务。…

基于SpringBoot+vue的在线答疑系统设计与实现

博主介绍&#xff1a; 大家好&#xff0c;我是一名在Java圈混迹十余年的程序员&#xff0c;精通Java编程语言&#xff0c;同时也熟练掌握微信小程序、Python和Android等技术&#xff0c;能够为大家提供全方位的技术支持和交流。 我擅长在JavaWeb、SSH、SSM、SpringBoot等框架…

《实战AI低代码》:普元智能化低代码开发平台发布,结合专有模型大幅提升软件生产力

在7月6日举办的“低代码+AI”产品战略发布会上,普元智能化低代码开发平台正式发布。该平台融合了普元自主研发的专有模型,同时也接入了多款AI大模型的功能。它提供了一系列低代码产品,包括中间件、业务分析、应用开发、数据中台和业务流程自动化等,旨在简化企业的复杂软件生…

Linux网络基础 — 传输层

目录 再谈端口号 端口号范围划分 认识知名端口号 netstat pidof UDP协议 UDP协议端格式 UDP的特点 面向数据报 UDP的缓冲区 UDP使用注意事项 基于UDP的应用层协议 TCP协议 TCP协议段格式 几个问题&#xff1a; 确认应答(ACK)机制 6个标记位 超时重传机制 连接…

rust 引用怎么用

本来好好的引用&#xff0c;被 rust 玩坏了&#xff0c;搞得自己都不会使用引用了&#xff0c;我们还是从简单的例子入手&#xff0c;来探索使用引用可能遇到额问题。 下面的示例代码编译不通过&#xff0c;在 s1 赋值给变量 s2 的过程中&#xff0c;字符串 neojos 值的所有权…

webGPT浏览器安装

edge点击“获取” https://microsoftedge.microsoft.com/addons/detail/wetab%E5%85%8D%E8%B4%B9chatgpt%E6%96%B0%E6%A0%87%E7%AD%BE%E9%A1%B5/bpelnogcookhocnaokfpoeinibimbeff?utm_sourceSteamDB # 其他浏览器安装教程如下&#xff1a; https://www.wetab.link/

springcloud gateway 介绍与使用

定义 该项目提供了一个用于在 Spring WebFlux 之上构建 API 网关的库。Spring Cloud Gateway 旨在提供一种简单而有效的方法来路由到 API&#xff0c;并为它们提供横切关注点&#xff0c;例如&#xff1a;安全性、监控/指标和弹性 特征 Spring Cloud Gateway 特性&#xff1a;…

Smartbi 身份认证绕过漏洞

0x00 简介 Smartbi是广州思迈特软件有限公司旗下的商业智能BI和数据分析产品&#xff0c;致力于为企业客户提供一站式商业智能解决方案。 0x01 漏洞概述 Smartbi在安装时会内置三个用户&#xff08;public、service、system&#xff09;&#xff0c;在使用特定接口时&#x…

只会用插件可不行,这些前端动画技术同样值得收藏-JavaScript篇(上)

目录 前言 settimeout/setinterval requestAnimationFrame 基本用法 时间戳参数 帧数与时间戳计算 自动暂停 JS中的贝塞尔曲线 概念 公式 二次贝塞尔 三次贝塞尔 N次贝塞尔 贝塞尔曲线动画 动画类 在动画中使用贝塞尔 总结 相关代码&#xff1a; 贝塞尔曲线相…

【深度学习】:《PyTorch入门到项目实战》(十五):三大经典卷积神经网络架构:LeNet、AlexNet、VGG

【深度学习】&#xff1a;《PyTorch入门到项目实战》(十五)&#xff1a;三大经典卷积神经网络架构&#xff1a;LeNet、AlexNet、VGG&#xff08;代码实现及实际案例比较&#xff09; ✨本文收录于【深度学习】&#xff1a;《PyTorch入门到项目实战》专栏&#xff0c;此专栏主要…

数据结构与算法——顺序表的基本操作(C语言详解版)

顺序表插入元素 向已有顺序表中插入数据元素&#xff0c;根据插入位置的不同&#xff0c;可分为以下 3 种情况&#xff1a; 插入到顺序表的表头&#xff1b;在表的中间位置插入元素&#xff1b;尾随顺序表中已有元素&#xff0c;作为顺序表中的最后一个元素&#xff1b; 虽然…