hpa自动伸缩

1、定义:hpa全称horizontal pod autoscaling(pod的水平自动伸缩),这是k8s自带的模块。pod占用CPU的比率到达一定阀值会触发伸缩机制(根据CPU使用率自动伸缩)

replication controller副本控制器,控制pod的副本数

deployment controller节点控制器,部署pod

hpa控制副本的数量以及控制部署pod

(1)hpa基于kube-controll-manager服务,周期性的检测pod的CPU使用率,默认30秒检测一次

(2)hpa和replication controller、deployment controller都属于k8s的资源对象,通过跟踪分析副本控制器和deployment的pod的负载变化,针对性的调整目标pod的副本数(针对性:有一个阀值,正常情况下,pod的副本数,以及达到阀值后pod的扩容最大数量)

(3)metrics-server部署到集群中去,对外提供度量的数据

2、hpa规则【面试】

(1)定义pod时必须要有资源限制,否则hpa无法进行监控

(2)扩容是即时的,只要超过阀值会立刻扩容,但不是立刻扩容到最大副本数,会在最小值和最大值之间波动。若扩容数量满足需求,不会再扩容

(3)缩容是缓慢的,若业务峰值较高,回收策略太积极可能对业务产生崩溃。周期行的获取数据,缩容的机制问题

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

(1)手动方式,修改控制器的副本数

方式1:命令行通过kubectl scale deployment nginx --replicas=3

方式2:edit修改控制器

方式3:修改yaml文件,使用apply -f部署更新

(2)hpa自动扩缩容

监控指标是cpu

hpa自动扩缩容实验

1、安装镜像包(每个节点)

docker load -i metrics-server.tar

2、安装yaml文件(master节点)查看pod以及node节点占用cpu情况

3、实现hpa

4、模拟cpu负载,压力测试

下降原因:每个pod部署在不同节点上

5、再做压力测试观察数据

结论:一旦超过阀值,立刻扩容

6、缩容:关闭压力测试

4资源限制

(1)pod的资源限制limit

(2)命名空间资源限制★★★

lucky-cloud项目部署在test1的命名空间,若pod不做限制,或命名空间不做限制,依然会占满所有集群资源

①ResourceQuata可以对命名空间进行资源限制

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

• ResourceQuata

创建命名空间test1

对命名空间进行资源限制

测试

①调整pod副本数

结论:在此命名空间只能创建3个有效的pod

②缩容

③命名空间其他限制条件

configmaps: "10"

在当前名命名空间创建最大的configmap的数量10个

persistentvolumeclaims: "4"

在当前命名空间只能使用4个pvc

secrets: "5"

创建加密的secret只能5个

services: "5"

创建service的个数只能5个

services.nodeports: "2"

创建service的nodeport类型的svc只能2个

测试

①创建svc1

结论:第1个svc创建成功

②创建svc2

结论:第2个svc创建成功

③创建svc3

结论:在test1这个命名空间中限制只能创建2个service.nodeport

查看命名空间的限制

 LimitRange

创建命名空间

压力测试

结论:最多只能占1个cpu(1000m代表1个cpu)

type类型

container(常用)

pod

pvc

### 配置 HPA 实现 Pods 的弹性伸缩 在 Kubernetes 中,水平 Pod 自动扩展器 (HPA, Horizontal Pod Autoscaler) 是一种用于动态调整工作负载副本数的工具。它可以基于 CPU 利用率或其他自定义指标来决定是否需要增加或减少 Pod 数量。 #### 1. 创建 Deployment 和 Service 为了使 HPA 能够正常运行,首先需要创建一个可以被监控的工作负载(Deployment 或 ReplicaSet)。以下是创建一个简单 Deployment 的 YAML 文件示例: ```yaml apiVersion: apps/v1 kind: Deployment metadata: name: myapp-deployment spec: replicas: 3 selector: matchLabels: app: myapp template: metadata: labels: app: myapp spec: containers: - name: myapp-container image: nginx:latest resources: requests: cpu: 200m limits: cpu: 500m ``` 此配置指定了初始副本数为 `3` 并设置了容器资源请求和限制[^4]。 #### 2. 定义 HPA 对象 接下来,可以通过以下 YAML 文件定义 HPA 对象,该对象将根据指定的目标 CPU 利用率自动调整 Pod 副本的数量: ```yaml apiVersion: autoscaling/v2beta2 kind: HorizontalPodAutoscaler metadata: name: myapp-hpa spec: scaleTargetRef: apiVersion: apps/v1 kind: Deployment name: myapp-deployment minReplicas: 1 maxReplicas: 10 metrics: - type: Resource resource: name: cpu target: type: Utilization averageUtilization: 50 ``` 上述配置表示当目标 Deployment (`myapp-deployment`) 的平均 CPU 利用率达到或超过 50% 时,HPA 将尝试增加 Pod 数量;反之则减少 Pod 数量。 #### 3. 启用自定义指标支持 除了默认的 CPU 指标外,还可以通过 Prometheus Adapter 支持更多类型的自定义指标。这允许更灵活地定义扩缩容逻辑。例如,可以根据内存使用情况、QPS 或其他业务特定指标触发扩缩容操作[^2]。 要启用这一功能,需安装并配置 Prometheus 和 Prometheus Adapter 插件到集群中,并确保它们能够访问所需的监控数据源。 #### 4. 测试 HPA 功能 完成以上设置之后,可通过模拟高流量场景验证 HPA 是否按预期工作。例如,可采用 WebBench 工具向服务发起大量 HTTP 请求以制造压力环境[^1]。 执行命令如下所示: ```bash kubectl apply -f deployment.yaml kubectl apply -f hpa.yaml webbench -c 100 -t 30 http://<service-ip> ``` 观察期间应能看到 Pod 数目随负载变化而相应增减的现象。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值