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

2024-01-24 19:52

本文主要是介绍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自动伸缩
 

这篇关于k8s---HPA 命名空间资源限制的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/640825

相关文章

浅谈mysql的sql_mode可能会限制你的查询

《浅谈mysql的sql_mode可能会限制你的查询》本文主要介绍了浅谈mysql的sql_mode可能会限制你的查询,这个问题主要说明的是,我们写的sql查询语句违背了聚合函数groupby的规则... 目录场景:问题描述原因分析:解决方案:第一种:修改后,只有当前生效,若是mysql服务重启,就会失效;

查看Oracle数据库中UNDO表空间的使用情况(最新推荐)

《查看Oracle数据库中UNDO表空间的使用情况(最新推荐)》Oracle数据库中查看UNDO表空间使用情况的4种方法:DBA_TABLESPACES和DBA_DATA_FILES提供基本信息,V$... 目录1. 通过 DBjavascriptA_TABLESPACES 和 DBA_DATA_FILES

Pytorch微调BERT实现命名实体识别

《Pytorch微调BERT实现命名实体识别》命名实体识别(NER)是自然语言处理(NLP)中的一项关键任务,它涉及识别和分类文本中的关键实体,BERT是一种强大的语言表示模型,在各种NLP任务中显著... 目录环境准备加载预训练BERT模型准备数据集标记与对齐微调 BERT最后总结环境准备在继续之前,确

Linux命名管道方式

《Linux命名管道方式》:本文主要介绍Linux命名管道方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、命名管道1、与匿名管道的关系2、工作原理3、系统调用接口4、实现两个进程间通信二、可变参数列表总结一、命名管道1、与匿名管道的关系命名管道由mkf

通过Python脚本批量复制并规范命名视频文件

《通过Python脚本批量复制并规范命名视频文件》本文介绍了如何通过Python脚本批量复制并规范命名视频文件,实现自动补齐数字编号、保留原始文件、智能识别有效文件等功能,听过代码示例介绍的非常详细,... 目录一、问题场景:杂乱的视频文件名二、完整解决方案三、关键技术解析1. 智能路径处理2. 精准文件名

linux如何复制文件夹并重命名

《linux如何复制文件夹并重命名》在Linux系统中,复制文件夹并重命名可以通过使用“cp”和“mv”命令来实现,使用“cp-r”命令可以递归复制整个文件夹及其子文件夹和文件,而使用“mv”命令可以... 目录linux复制文件夹并重命名我们需要使用“cp”命令来复制文件夹我们还可以结合使用“mv”命令总

Python脚本实现图片文件批量命名

《Python脚本实现图片文件批量命名》这篇文章主要为大家详细介绍了一个用python第三方库pillow写的批量处理图片命名的脚本,文中的示例代码讲解详细,感兴趣的小伙伴可以了解下... 目录前言源码批量处理图片尺寸脚本源码GUI界面源码打包成.exe可执行文件前言本文介绍一个用python第三方库pi

Rust中的Drop特性之解读自动化资源清理的魔法

《Rust中的Drop特性之解读自动化资源清理的魔法》Rust通过Drop特性实现了自动清理机制,确保资源在对象超出作用域时自动释放,避免了手动管理资源时可能出现的内存泄漏或双重释放问题,智能指针如B... 目录自动清理机制:Rust 的析构函数提前释放资源:std::mem::drop android的妙

Linux环境变量&&进程地址空间详解

《Linux环境变量&&进程地址空间详解》本文介绍了Linux环境变量、命令行参数、进程地址空间以及Linux内核进程调度队列的相关知识,环境变量是系统运行环境的参数,命令行参数用于传递给程序的参数,... 目录一、初步认识环境变量1.1常见的环境变量1.2环境变量的基本概念二、命令行参数2.1通过命令编程

解读静态资源访问static-locations和static-path-pattern

《解读静态资源访问static-locations和static-path-pattern》本文主要介绍了SpringBoot中静态资源的配置和访问方式,包括静态资源的默认前缀、默认地址、目录结构、访... 目录静态资源访问static-locations和static-path-pattern静态资源配置