k8s---HPA 命名空间资源限制

目录

HPA相关知识

 HPA(Horizontal Pod Autoscaling)Pod 水平自动伸缩,Kubernetes 有一个 HPA 的资源,HPA 可以根据 CPU 利用率自动伸缩一个 Replication Controller、 Deployment 或者Replica Set 中的 Pod 数量。

(1)HPA 基于 Master 上的 kube-controller-manager 服务启动参数 horizontal-pod-autoscaler-sync-period 定义的时长(默认为30秒),周期性的检测 Pod 的 CPU 使用率。

(2)HPA 与之前的 RC、Deployment 一样,也属于一种 Kubernetes 资源对象。通过追踪分析 RC 控制的所有目标 Pod 的负载变化情况, 来确定是否需要针对性地调整目标Pod的副本数,这是HPA的实现原理。

(3)metrics-server 也需要部署到集群中, 它可以通过 resource metrics API 对外提供度量数据。
 

HPA部署和运用

进行HPA的部署和配置

//在所有 Node 节点上传 metrics-server.tar 镜像包到 /opt 目录
cd /opt/
docker load -i metrics-server.tar#在主master节点上执行
kubectl apply -f components.yamlmastrt节点拖入components.yaml
#部署完毕后,可以通过命令来监视pod的资源占用
kubectl top podskubectl top nodes

HPA伸缩的测试演示

创建一个用于测试的pod资源
apiVersion: apps/v1
kind: Deployment
metadata:name: centos-testlabels:test: centos1
spec:replicas: 1selector:matchLabels: test: centos1template:metadata:labels:test: centos1spec:containers:- name: centosimage: centos: 7command: ["/bin/bash","-c","yum -y install epel-release;yum -y install stress;sleep 3600"]resources:limits:cpu: "1"memory: 512Mi
#设置资源限制。使用hpa必须添加资源限制字段,否则无法判断。
---
apiVsersion: autoscaling/v1 
kind:  HorizontalPodAutoscaler
metadata:name: hpa-centos7
spec:scaleTargetRef:apiVersion: apps/v1
#表示需要监控的类型是什么kind: Deploymentname: centos-test
#这里表示你需要监控谁minReplicas: 1
#表示最小有几个maxReplicas: 5
#超过副本最大有几个targetCPUUtilzationPercentage: 50//设定cpu使用的阀值。高于50%缩容,低于50%扩容
进入容器占用2个cpustress --cpu 2

HPA的规则


1.定义pod的时候必须要有资源限制,否则HPA无法进行监控

2.扩容是即时的,只要超过阀值就会立刻扩容,不是立刻扩容到最大副本数。他会在最小值和最大值波动,如果扩容数量满足了需求,则不会在扩容。

3.缩容是缓慢的。如果业务的峰值较高,回收的策略太积极的话,可能会产生业务的崩溃。

周期性的获取数据,缩容的机制问题。

如果业务的峰值较高,回收的策略太积极的话,可能会产生业务的崩溃。

pod的副本数扩缩容有两种方式:

1、 手动的方式修改控制器的副本数。

命令行可以通过 kubectl scale deployment pod名称 --replicas=5

修改yaml文件。通过apply -f部署更新

2、 自动扩缩容HPA

hpa监控的是cpu

资源限制

pod的资源限制:在部署pod的时候加入resources字段,通过limits/request来对pod进行限制。

除了pod的资源限制还有命名空间的资源限制

命名空间 资源限制

lucky-zzr项目---部署在test1的命名空间,如果lucky-zzr不做限制,或者命名空间不做限制,他依然会占满所有集群资源

k8s集群部署pod的最大数量:10000个

实验举例

vim ns.yaml
apiVersion: apps/v1
kind: Deployment
metadata:name: centos-test2namespace: test1labels:test: centos2
spec:replicas: 11selector:matchLabels:test: centos2template:metadata:labels:test: centos2spec:containers:- name: centosimage: centos:7command: ["/bin/bash", "-c", "yum -y install epel-release;yum -y install stress;sleep 3600"]resources:limits:cpu: 1000mmemory: 512Mi---apiVersion: v1
kind: ResourceQuota
metadata:name: ns-resourcenamespace: test1
spec:hard:
#硬限制pods: "10"
#表示在这个命名空间内只能部署10个podrequests.cpu: "2"
#最多只能占用多个个cpurequests.memory: 1Gi
#最多只能占用多少内存limits.cpu: "4"
#最大需要多少cpulimits.memory: 2Gi
#最大需要多少内容configmaps: "10"
#当前命名空间内能创建最大的configmap的数量 10个persistentvolumeclaims: "4"
#当前命名空间只能使用4个pvcsecrets: "9"
#创建加密的secrets。只能9个services: "5"
#创建service只能5个services.nodeports: "2"
#nodeport类型的svc只能2个

设置副本数为11个测试。当命名空间限制了之后,最多只能部署10个

通过命名空间的方式对容器进行限制

apiVersion: apps/v1
kind: Deployment
metadata:name: centos-testnamespace: test2Labels:test: centos1
spec:replicas: 1selector:matcjhLabels: test: centos1template:metdata:labels:test: centos1spec:containers:- name: centosimage: centos:7command: ["/bin/bash","-c","yum -y install epel-release;yum -y install stress;sleep 3600"]
---
apiVersion: v1
kind: LimitRange
#表示使用limitrange来进行资源控制的类型。
metadata:name: test2-centosnamespace: test2
spec:limits:default:memory: 512Micpu: "1"defaultRequest:memory: 256Micpu: "0.5"type: Container#default-->limit
#defaultRequest--->request
#type支持Container ,pod ,pvc

通过命名空间对pod进行统一限制:

好处是不需要对每个pod进行限制

缺点是不够灵活

HPA自动伸缩如果使用nodeName的方式将固定在一个node上观察扩容之后,阀值是否会下降?

实验举例:

apiVersion: apps/v1
kind: Deployment
metadata:name: centos-testlabels:test: centos1
spec:replicas: 1selector:matchLabels:test: centos1template:metadata:labels:test: centos1spec:containers:- name: centosimage: centos:7command: ["/bin/bash", "-c", "yum -y install epel-release;yum -y install stress;sleep 3600"]resources:limits:cpu: 1000mmemory: 512MinodeName: node01
#设置资源限制。使用hpa必须添加资源限制字段,否则无法判断---apiVersion: autoscaling/v1
kind: HorizontalPodAutoscaler
metadata:name: hpa-centos
spec:scaleTargetRef:apiVersion: apps/v1
#表示需要监控的类型是什么,基于什么控制器创建的kind: Deploymentname: centos-test
#这里表示你需要监控谁minReplicas: 1
#表示最小有几个maxReplicas: 5
#超过副本最大有几个targetCPUUtilizationPercentage: 50
#设定cpu使用的阀值

测试即使在同一个node节点上阀值还是会下降。实验完成

总结
HPA自动扩缩容

命名空间的两种方式:

ResourceQuota:可以对命名空间进行资源限制

LimitRange:直接声明在命名空间中创建的pod,容器的资源限制。这是一种统一限制。所有的pod都受这个条件的制约。

只要是在命名空间内不管创建多少,都需要使用我声明的资源限制。

pod的资源限制:resources、limit

pod的资源限制是我们创建时候声明好的,这时必加选项。

对命名空间、使用cpu、内存一定会做限制

命名空间的资源限制:ResourceQuota

一般是对命名空间的cpu和内存做限制

命名空间统一资源限制:LimitRange

核心:pod一定要做资源限制否则会占用集群的全部资源,命名空间也需要做限制否则还是会占用集群的全部资源。防止整个集群的资源被一个服务或者一个命名空间占满。

HPA自动伸缩
 

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

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

相关文章

2.1第一次作业

1.atd和crond两个任务管理程序的区别 atd是一次性的执行了一次之后就不再执行,crond是周期性质的可以循环重复的执行定时任务 ⒉.指定在2023/04/15 09: 00将时间写入testmail.txt文件中 [rootserver fox]# at 9:00 2023-04-15 warning: commands will be executed…

整数和浮点数在内存中的存储

数据在内存中的存储 在计算机系统中,数据在内存(RAM - Random Access Memory)中的存储方式取决于数据类型、操作系统、处理器架构以及编程语言等因素。以下是一些关键点来描述数据如何被存储在内存中: 1. 字节寻址: 内存通常…

2023年全国职业院校技能大赛(高职组)“云计算应用”赛项赛卷7

某企业根据自身业务需求,实施数字化转型,规划和建设数字化平台,平台聚焦“DevOps开发运维一体化”和“数据驱动产品开发”,拟采用开源OpenStack搭建企业内部私有云平台,开源Kubernetes搭建云原生服务平台,选…

MGTR-W系列全线遥测终端机:水利水务的全方位守护者“

MGTR-W系列遥测终端机在水利水务领域有着广泛的应用,能够满足各种细分场景的需求。该系列终端机助力实现灌区信息化、高标准农田建设、农村供水信息化、水库雨水情监测、大坝安全监测、地下水监测以及水资源监管等全方位管理。下面将为您简单介绍几款明星产品&#…

GitHub无法完成推送 的设置选项

GitHub无法完成推送 的设置选项 系统设置 VS中控制台设置【指令】 控制台调出方法 以下为VS控制台指令 git config --global --unset http.proxy git config --global --unset https.proxygit config --global http.proxy 127.0.0.1:7890 git config --global https.proxy …

前端开发WebStorm

WebStorm是一款功能强大的JavaScript集成开发环境,凭借智能代码补全、实时分析和代码重构、集成版本控制、强大的调试和测试工具、实时预览和集成前端工具以及自定义配置和插件支持等功能,成为开发者首选的利器。 前端开发WebStorm WebStorm是一款功能强…

租幻兽帕鲁Palworld服务器多少钱?

使用腾讯云服务器搭建搭建幻兽帕鲁Palworld如何选择服务器配置?腾讯云百科txybk.com建议幻兽帕鲁选择腾讯云轻量应用服务器4核16G14M带宽,Ubuntu/Debian系统。如何收费? 腾讯云幻兽帕鲁服务器活动 https://curl.qcloud.com/oRMoSucP 轻量应用…

ffmpeg使用及java操作

1.文档 官网: FFmpeg 官方使用文档: ffmpeg Documentation 中文简介: https://www.cnblogs.com/leisure_chn/p/10297002.html 函数及时间: ffmpeg日记1011-过滤器-语法高阶,逻辑,函数使用_ffmpeg gte(t,2)-CSDN博客 java集成ffmpeg: SpringBoot集成f…

layui 自定义日期选择器今日、昨日 、本周、本月、上个月等

1、layui 日期选择器 laydate日期选择器 <div class"layui-input-inline"><input class"layui-input" id"dateTime" placeholder"日期范围"> </div><script> layui.use([laydate], function () {laydate.ren…

“libpng warning: iCCP: known incorrect sRGB profile” :图片或SVG加载不出来的问题,C++或Qt

加载图片时因为依赖第三方库缺失&#xff0c;报错&#xff01;&#xff01;&#xff01; ERROR或Warning : libpng warning: iCCP: known incorrect sRGB profile 然后我的解决办法也是网上大佬们的思路&#xff0c;在可执行同级目录下&#xff0c;放以下依赖库。 注意的地方…

【3.1数据库系统】数据库体系结构

目录 1.数据库模式2.关系表类型3.数据库视图4.分布式数据库 1.数据库模式 ①.外模式&#xff1a;外模式面向具体的应用程序&#xff0c;定义在逻辑模式之上&#xff0c;但独立于存储模式和存储设备。 ②.概念模式&#xff08;模式&#xff09;&#xff1a;用于描述数据库的逻辑…

Python爬虫框架选择与使用:推荐几个常用的高效爬虫框架

目录 前言 一、Scrapy框架 1. 安装Scrapy 2. Scrapy示例代码 3. 运行Scrapy爬虫 二、Beautiful Soup库 1. 安装Beautiful Soup 2. Beautiful Soup示例代码 3. 运行Beautiful Soup代码 三、Requests库 1. 安装Requests库 2. Requests示例代码 3. 运行Requests代码 …