【k8s资源调度-HPA(自动扩缩容)】

1、HPA可以做什么?

  • 通过观察pod的cpu、内存使用率或自定义metrics指标进行自动的扩容或缩容pod的数量。
  • 通常用于Deployment,不适用于无法扩/缩容的对象,如DaemonSet。
  • 控制管理器每隔30s(可以通过-horizontal-pod-autoscaler–sync-period修改)查询metrics的资源使用情况

2、cpu、内存指标监控

  • 实现cpu或内存的监控,首先有个前提条件是该对象必须配置了resources.requests.cpu或resources.requests.memory才可以,可以配置当cpu/memory达刻上述配置的百分比后进行扩容或缩
    容。

2.1 创建一个deployment的配置文件

apiVersion: apps/v1  # deployment api版本
kind: Deployment    # 资源类型为 Deployment
metadata:  # 原信息labels:  # 标签app: nginx-deploy  # 具体的标签信息:app=nginx-deploy   key: value 配置形式name: nginx-deploy   # deployment的名字namespace: default   # 所在的命名空间
spec:replicas: 1   # 期望副本数revisionHistoryLimit: 10   # 进行滚动更新后,保留的历史版本数量selector:  # 选择器,用于找到匹配的RSmatchLabels:  # 按照标签匹配app: nginx-deploy   # 匹配的标签strategy:   #更新策略rollingUpdate:  # 滚动更新配置maxSurge: 25%  # 滚动更新时,更新的个数最多超过多少个期望副本数,或者比例maxUnavailable: 25%  # 进行滚动更新时,最大不可用比例更新比例,表示在所有副本数中,最多可以有多少个不更新成功type: RollingUpdate  # 更新类型,采用滚动更新template:   # pod 模板metadata:  # pod模板的元信息labels:   # pod模板的标签app: nginx-deploy   # pod模板的标签信息spec:      # pod 期望信息containers:    # pod 的容器信息- image: nginx:1.20    # 镜像信息imagePullPolicy: IfNotPresent   # 镜像拉取策略name: nginx        # 容器名字restartPolicy: Always   # pod的重启策略terminationGracePeriodSeconds: 30   # pod的过期时间

2.2 创建这个deployment资源

[root@k8s-master ~]# kubectl create -f nginx-deploy.yaml
deployment.apps/nginx-deploy created
[root@k8s-master ~]# kubectl get deployments.apps  nginx-deploy
NAME           READY   UP-TO-DATE   AVAILABLE   AGE
nginx-deploy   1/1     1            1           15s
[root@k8s-master ~]# kubectl get po nginx-deploy-86b7d8c46d-7xwkw
NAME                            READY   STATUS    RESTARTS   AGE
nginx-deploy-86b7d8c46d-7xwkw   1/1     Running   0          29s

2.3 更新配置文件

刚才的配置文件中不包含resources.requests.cpu和resouces.limits.cpu

在这里插入图片描述

2.4 替换deployment

[root@k8s-master ~]# kubectl replace -f nginx-deploy.yaml
deployment.apps/nginx-deploy replaced

2.5 执行hpa命令

kubectl autoscale deploy nginx-deploy --cpu-percent=20 --min=2 --max=5

[root@k8s-master ~]# kubectl autoscale deploy nginx-deploy  --cpu-percent=20  --min=2  --max=5
horizontalpodautoscaler.autoscaling/nginx-deploy autoscaled# 本来我们的replace副本是1个的,现在又帮我们创建了一个
[root@k8s-master ~]# kubectl get deployments.apps  nginx-deploy
NAME           READY   UP-TO-DATE   AVAILABLE   AGE
nginx-deploy   2/2     2            2           15m

2.6 开启指标服务

2.6.1 下载开启指标的yaml配置文件

[root@k8s-master ~]# wget https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml -O metrics-server-components.yaml

2.6.2 修改镜像地址为国内的地址

[root@k8s-master ~]# sed -i 's/registry.k8s.io\/metrics-server/registry.cn-hangzhou.aliyuncs.com\/google_containers/g'  metrics-server-components.yaml[root@k8s-master ~]# grep image metrics-server-components.yamlimage: registry.cn-hangzhou.aliyuncs.com/google_containers/metrics-server:v0.7.0imagePullPolicy: IfNotPresent

2.6.3 修改metrics-server-components.yaml配置

修改容器的ts配置,不验证ts,在containers的args参数中增加 --kubelet-insecure-tls 参数

2.6.4 安装这个指标插件

[root@k8s-master ~]# kubectl apply  -f metrics-server-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

2.6.5 查看这个pod的资源

[root@k8s-master ~]# kubectl get po --all-namespaces  | grep metrics
kube-system    metrics-server-7bb86dcf48-hfpb5      1/1     Running   0              99s

2.7 通过kubectl top pod 监控 融资所占用的资源

[root@k8s-master ~]#  kubectl top pod
NAME                           CPU(cores)   MEMORY(bytes)
dns-test                       0m           0Mi
fluentd-59k8k                  2m           57Mi
fluentd-hhtls                  3m           57Mi
nginx-deploy-fdd948cf4-fgxjv   0m           1Mi
nginx-deploy-fdd948cf4-r8ktj   0m           1Mi

2.8 测试自动扩缩容

由于刚才创建的deploy资源还未包含service,所以需要创建一个service

2.8.1 创建一个service

# service配置文件如下
apiVersion: v1
kind: Service
metadata:name: nginx-svclabels:app: nginx
spec:selector:app: nginx-deployports:- port: 80targetPort: 80name: webtype: NodePort
[root@k8s-master ~]# kubectl create -f nginx-svc.yml
service/nginx-svc created
[root@k8s-master ~]#
[root@k8s-master ~]# kubectl get svc
NAME         TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)        AGE
kubernetes   ClusterIP   10.1.0.1       <none>        443/TCP        5d
nginx-svc    NodePort        <none>        80:31231/TCP   6s
[root@k8s-master ~]# curl 10.10.10.100:31231
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>body {width: 35em;margin: 0 auto;font-family: Tahoma, Verdana, Arial, sans-serif;}
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p><p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p><p><em>Thank you for using nginx.</em></p>
</body>
</html>

2.8.1 进行压测

  • 方法:通过给service发送http请求,实现压测,看我们的hpa是否可以自动扩容
2.8.1.1 在node1上执行请求

在这里插入图片描述

2.8.1.2 在node2上执行请求

在这里插入图片描述

2.8.1.3 在master上查看hpa的状态
[root@k8s-master ~]# kubectl get hpa
NAME           REFERENCE                 TARGETS   MINPODS   MAXPODS   REPLICAS   AGE
nginx-deploy   Deployment/nginx-deploy   52%/20%   2         5         3          120m
2.8.1.4 在master上查看pod的状态

我们的hpa设置的副本数量是5个,这时可以看到副本由2个变为了5个副本。可以自动扩容

[root@k8s-master ~]# kubectl  top pod
NAME                           CPU(cores)   MEMORY(bytes)
dns-test                       0m           0Mi
fluentd-59k8k                  5m           57Mi
fluentd-hhtls                  7m           57Mi
nginx-deploy-fdd948cf4-fgxjv   39m          2Mi
nginx-deploy-fdd948cf4-r8ktj   38m          2Mi
nginx-deploy-fdd948cf4-td2vn   41m          2Mi
nginx-deploy-fdd948cf4-xckj5   37m          2Mi
nginx-deploy-fdd948cf4-zpvhc   37m          2Mi
2.8.1.5 取消掉两台node节点上的http请求,查看hpa状态

两台node节点的负载取消后,hpa的targets也下降下来,但是replicas的副本数量是5,不是立马就缩减为2的。这个需要一段时间后可以减少为2。

[root@k8s-master ~]#  kubectl get hpa
NAME           REFERENCE                 TARGETS   MINPODS   MAXPODS   REPLICAS   AGE
nginx-deploy   Deployment/nginx-deploy   0%/20%    2         5         5          127m
2.8.1.6 查看pod的状态

两台node节点的负载取消后,pod的负载也降下来了。

[root@k8s-master ~]#  kubectl top pod
NAME                           CPU(cores)   MEMORY(bytes)
dns-test                       0m           0Mi
fluentd-59k8k                  2m           57Mi
fluentd-hhtls                  2m           57Mi
nginx-deploy-fdd948cf4-fgxjv   0m           2Mi
nginx-deploy-fdd948cf4-r8ktj   0m           2Mi
nginx-deploy-fdd948cf4-td2vn   0m           2Mi
nginx-deploy-fdd948cf4-xckj5   0m           2Mi
nginx-deploy-fdd948cf4-zpvhc   0m           2Mi

过一段时间后,发现pod的数量减少为了2

[root@k8s-master ~]#  kubectl top pod
NAME                           CPU(cores)   MEMORY(bytes)
dns-test                       0m           0Mi
fluentd-59k8k                  2m           57Mi
fluentd-hhtls                  2m           57Mi
nginx-deploy-fdd948cf4-r8ktj   0m           2Mi
nginx-deploy-fdd948cf4-td2vn   0m           2Mi
2.8.1.7 查看hpa的描述信息

在这里插入图片描述

3、自定义指标(metrics)

  • 控制管理器开启 -horiztal-pod-autoscaler-use-rest-clients
  • 控制管理器的-apiserver指向API Server Aggregator
  • 在API Server Aggregatore中注册自定义的metrics API

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

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

相关文章

特征选择|一种提升预测模型性能的方法(原理及其优化实现,Matlab)

文章来源于我的个人公众号&#xff1a;KAU的云实验台&#xff0c;主要更新智能优化算法的原理、应用、改进 如今&#xff0c;生成的数据集呈指数级增长&#xff0c;这将产生具有大量特征和样本的数据集&#xff0c;而显然&#xff0c;某些特征是不相关/冗余的&#xff0c;它们…

springBoot整合Redis(一、Jedis操作Redis)

在springboot环境下连接redis的方法有很多&#xff0c;首先最简单的就是直接通过jedis类来连接&#xff0c;jedis类就相当于是redis的客户端表示。 但是因为现在比较常用的是&#xff1a;StringRedisTemplate和RedisTemplate&#xff0c;所以jedis只做简单的介绍。 一、Jedis…

powershell中安装git

以管理员权限打开 PowerShell。 在 PowerShell 中&#xff0c;你可以使用 winget 这个 Windows 的包管理器来安装 Git。下列命令会安装 Git&#xff1a; winget install --id Git.Git -e --source winget另一种方式是直接从 Git 官方网站下载安装程序&#xff0c;并运行它完…

Langchain-Chatchat部署总结

项目地址&#xff1a; https://github.com/chatchat-space/Langchain-Chatchat 整体安装比较方便&#xff0c;在阿里云购买云主机&#xff0c;购买的国外站点机器&#xff0c; 该项目运行最佳坏境为 Linux Ubuntu 22.04.5Python 版本 3.11.7CUDA 版本: 12.1torch2.1.2 使…

Spring的优点

1.方便解耦&#xff0c;简化开发 Spring就是一个容器&#xff0c;可以将所有对象创建和关系维护交给Spring管理。 2.AOP编程支持 面向切面编程&#xff0c;方便实现程序进行权限拦截&#xff0c;运行监控等功能。 3.声明式事务的支持 通过配置完成事务的管理&#xff0c;…

Vue全局事件防止重复点击(等待请求)【进阶版】

继《Vue全局指令防止重复点击&#xff08;等待请求&#xff09;》之后&#xff0c;感觉指令方式还是不太友好&#xff0c;而且嵌套闭包比较麻烦&#xff0c;于是想到了Vue的全局混入&#xff0c;利用混入&#xff0c;给组件绑定click事件。 一、实现原理 与指令方式大致一样&…

针对小型企业网络防护的免费防火墙软件

针对小型企业网络防护&#xff0c;以下是一些适合的防火墙软件/解决方案&#xff1a; pfSense&#xff1a;pfSense 是一款基于 FreeBSD 的开源防火墙和路由器软件&#xff0c;提供丰富的功能和灵活的配置选项&#xff0c;适合用于小型企业网络防护。它支持多种功能&#xff0c;…

代码随想录算法训练营第五十五天| 309.最佳买卖股票时机含冷冻期、714.买卖股票的最佳时机含手续费

309.最佳买卖股票时机含冷冻期 题目链接&#xff1a;. - 力扣&#xff08;LeetCode&#xff09; 解题思路&#xff1a;今天若买入&#xff0c;应当是前天积攒的利润减去当前股票 java&#xff1a; class Solution {public int maxProfit(int[] prices) {if (prices null |…

Linux 网络命令指南

目录 配置IP地址和子网掩码 网络接口的详细信息 测试与目标主机的连通性 下载文件或内容 远程登录&#xff0c;进行远程管理和协作 CentOS / Red Hat&#xff08;使用 firewalld&#xff09; 关闭防火墙 开启防火墙 配置TCP端口&#xff08;假设使用3306端口&#xff…

最短路径算法总结(Dijkstra、Bellman-ford、SPFA和Floyd)

在最短路径算法中&#xff0c;常用的有Dijkstra、Bellman-ford、spfa、Floyd这四大算法 Dijkstra&#xff1a;迪克斯特拉算法Bellman-ford&#xff1a;贝尔曼-福特算法SPFA&#xff1a;Shortest Path Faster Algorithm算法Floyd&#xff1a;弗洛伊德算法 四大算法介绍 简介 …

一键获取电商平台商品信息,快速提高电商业务效率

阿里巴巴店铺所有商品API接口技术全解析 一、引言 在阿里巴巴这个全球领先的电商平台上&#xff0c;店铺所有商品API接口&#xff08;item_search_shop&#xff09;为开发者提供了一个便捷的途径&#xff0c;能够获取店铺的所有商品信息。通过这一接口&#xff0c;无论是数据…

Web UI自动化测试原理

&#x1f525; 交流讨论&#xff1a;欢迎加入我们一起学习&#xff01; &#x1f525; 资源分享&#xff1a;耗时200小时精选的「软件测试」资料包 &#x1f525; 教程推荐&#xff1a;火遍全网的《软件测试》教程 &#x1f4e2;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1…

【深度学习笔记】3_7 softmax回归的简介实现

注&#xff1a;本文为《动手学深度学习》开源内容&#xff0c;仅为个人学习记录&#xff0c;无抄袭搬运意图 3.7 softmax回归的简洁实现 我们在3.3节&#xff08;线性回归的简洁实现&#xff09;中已经了解了使用Pytorch实现模型的便利。下面&#xff0c;让我们再次使用Pytorc…

每日五道java面试题之spring篇(六)

目录&#xff1a; 第一题 ApplicationContext通常的实现是什么&#xff1f;第二题 什么是Spring的依赖注入&#xff1f;第三题 依赖注入的基本原则第四题 依赖注入有什么优势&#xff1f;第五题 有哪些不同类型的依赖注入实现方式&#xff1f; 第一题 ApplicationContext通常的…

d3dcompiler_47.dll是什么,电脑出现d3dcompiler_47.dll丢失如何解决

当打开软件时提示“d3dcompiler_47.dll丢失”时&#xff0c;用户通常会看到类似于以下的错误消息&#xff1a; “无法启动此程序&#xff0c;因为计算机中丢失了d3dcompiler_47.dll。尝试重新安装该程序以解决此问题。” “找不到d3dcompiler_47.dll文件&#xff0c;因此应用…

分布式一致性软件-zookeeper

在我们进行软件开发过程中&#xff0c;为了实现某个功能可能借助多个软件&#xff0c;如存储数据的数据库软件&#xff1a;MySQL&#xff0c;Redis&#xff1b;消息中间件&#xff1a;rocketMq&#xff0c;kafka等。那么在分布式系统中&#xff0c;如果想实现数据一致性&#x…

[git] 根据master更新本地分支

git 当前分支 t1 拉取远程master分支, 并更新将master分支合并到当前分支t1 git fetch origin master git merge origin/master t1第一行命令 git fetch origin master 会从远程仓库中获取最新的 master 分支代码&#xff0c;将其保存到本地的 origin/master 分支。 第二行命…

数据库原理及应用(MySQL版在线实训版)

学习视频&#xff1a;学生学习页面 (xueyinonline.com) 头歌实验&#xff1a;虚拟教研室-数据库原理及应用 (educoder.net) 习题答案&#xff1a;数据库原理及应用&#xff08;MySQL版在线实训版&#xff09;-习题答案 陈业斌 - 道客巴巴 (doc88.com)

[C++]虚函数用法

讲虚函数之前先讲讲面向对象的三大特性&#xff1a;封装、继承、多态。 1、封装 封装是指将数据&#xff08;属性&#xff09;和操作数据的方法&#xff08;函数&#xff09;封装在一个单元中&#xff0c;这个单元就是类。封装的主要目的是隐藏类的内部实现细节&#xff0c;只…

Java内部类的使用与应用

内部类的使用与应用 1. 内部类用法 普通内部类&#xff1a; 实例化内部类对象需要先实例化外部类对象&#xff0c;然后再通过OuterClassName.new InnerClassName()方式实例化内部类。内部类对象在创建后会与外部类对象秘密链接&#xff0c;因此无法独立于外部类创建内部类对象…