下文基于kubernetes 1.5.2版本编写
概念
HPA全称Horizontal Pod Autoscaling,即pod的水平自动扩展。自动扩展主要分为两种,其一为水平扩展,针对于实例数目的增减;其二为垂直扩展,即单个实例可以使用的资源的增减。HPA属于前者。
HPA的操作对象是RC、RS或Deployment对应的Pod,根据观察到的CPU等实际使用量与用户的期望值进行比对,做出是否需要增减实例数量的决策。
原理
它根据Pod当前系统的负载来自动水平扩容,如果系统负载超过预定值,就开始增加Pod的个数,如果低于某个值,就自动减少Pod的个数。目前K8S的HPA只能根据CPU等资源使用情况去度量系统的负载,而且目前还依赖heapster去收集CPU的使用情况。
条件
HPA通过定期(定期轮询的时间通过–horizontal-pod-autoscaler-sync-period选项来设置,默认的时间为30秒)通过Status.PodSelector来查询pods的状态,获得pod的CPU使用率。然后,通过现有pods的CPU使用率的平均值(计算方式是最近的pod使用量(最近一分钟的平均值,从heapster中获得)除以设定的每个Pod的CPU使用率限额)跟目标使用率进行比较,并且在扩容时,还要遵循预先设定的副本数限制:MinReplicas <= Replicas <= MaxReplicas。
计算扩容后Pod的个数:sum(最近一分钟内某个Pod的CPU使用率的平均值)/CPU使用上限的整数+1
流程
1、创建HPA资源,设定目标CPU使用率限额,以及最大、最小实例数
2、收集一组中(PodSelector)每个Pod最近一分钟内的CPU使用率,并计算平均值
3、读取HPA中设定的CPU使用限额
4、计算:平均值之和/限额,求出目标调整的实例个数
5、目标调整的实例数不能超过1中设定的最大、最小实例数,如果没有超过,则扩容;超过,则扩容至最大的实例个数
6、回到2,不断循环
例外
考虑到自动扩展的决策可能需要一段时间才会生效,甚至在短时间内会引入一些噪声。例如当pod所需要的CPU负荷过大,从而运行一个新的pod进行分流,在创建过程中,系统的CPU使用量可能会有一个攀升的过程。所以,在每一次作出决策后的一段时间内,将不再进行扩展决策。对于ScaleUp而言,这个时间段为3分钟,Scaledown为5分钟。
HPA允许一定范围内的CPU使用量的不稳定,只有avg(CurrentPodsConsumption) / Target小于90%或者大于110%时才会触发扩容或缩容,避免频繁扩容、缩容造成颠簸。
为什么选择相对比率
为了简便,选用了相对比率(90%的CPU资源)而不是0.6个CPU core来描述扩容、缩容条件。如果选择使用绝对度量,用户需要保证目标(限额)要比请求使用的低,否则,过载的Pod未必能够消耗那么多,从而自动扩容永远不会被触发:假设设置CPU为1个核,那么这个pod只能使用1个核,可能Pod在过载的情况下也不能完全利用这个核,所以扩容不会发生。在修改申请资源时,还有同时调整扩容的条件,比如将1个core变为1.2core,那么扩容条件应该同步改为1.2core,真是太麻烦了,与自动扩容的目标相悖。
实例
创建Deployment
kubectl delete -f lykops-hpa-deploy.yaml
cat << EOF > lykops-hpa-deploy.yaml
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: lykops-hpa-deploy
labels:
software: apache
project: lykops
app: hpa
version: v1
spec:
replicas: 1
selector:
matchLabels:
name: lykops-hpa-deploy
software: apache
project: lykops
app: hpa
version: v1
template:
metadata:
labels:
name: lykops-hpa-deploy
software: apache
project: lykops
app: hpa
version: v1
spec:
containers:
- name: lykops-hpa-deploy
image: web:apache
command: [ "sh", "/etc/run.sh" ]
ports:
- containerPort: 80
name: http
protocol: TCP
resources:
requests:
cpu: 0.001
memory: 4Mi
limits:
cpu: 0.01
memory: 16Mi
EOF
kubectl create -f lykops-hpa-deploy.yaml --record
创建service
cat << EOF > lykops-hpa-deploy-svc.yaml
apiVersion: v1
kind: Service
metadata:
name: lykops-hpa-svc
labels:
software: apache
project: lykops
app: hpa
version: v1
spec:
selector:
software: apache
project: lykops
app: hpa
version: v1
name: lykops-hpa-deploy
ports:
- name: http
port: 80
protocol: TCP
EOF
kubectl create -f lykops-hpa-deploy-svc.yaml
创建HPA
kubectl delete -f lykops-hpa.yaml
cat << EOF > lykops-hpa.yaml
apiVersion: autoscaling/v1
kind: HorizontalPodAutoscaler
metadata:
name: lykops-hpa
labels:
software: apache
project: lykops
app: hpa
version: v1
spec:
scaleTargetRef:
apiVersion: v1
kind: Deployment
name: lykops-hpa-deploy
#这里只能为这三项
minReplicas: 1
maxReplicas: 10
targetCPUUtilizationPercentage: 5
EOF
kubectl create -f lykops-hpa.yaml
测试
多台机器不断访问service的clusterIP地址,然后可以看出是否增加pod数了
分享到:
相关推荐
Job和CronJob用于后台任务的调度,Horizontal Pod Autoscaling(HPA)则提供了动态调整Pod数量的能力。 服务发现通过Service实现,Ingress则提供了对外暴露服务的入口。对于安全性,ServiceAccount和RBAC(基于角色...
使用水平Pod自动缩放器和Kubernetes上的自定义指标自动缩放Spring Boot先决条件您应该已经安装了minikube。 您应该使用至少4GB的RAM启动minikube: minikube start \ --memory 4096 \ --extra-config=controller-...
最后,Horizontal Pod Autoscaling(HPA)是Kubernetes的一种自动缩放机制,可以根据Pod的资源使用情况动态调整Pod的数量。HPA有助于优化资源利用率,当应用负载增加时自动增加Pod,负载减少时减少Pod,以应对流量...
Horizontal Pod Autoscaling(HPA)是一种自动缩放机制,能够根据系统负载情况自动调整 Pod 的数量。HPA 可以根据 CPU 使用率、内存使用率等指标来调整 Pod 的数量,确保系统的高可用性。 资源限制 – pod Pod 是...
- **Horizontal Pod Autoscaling (HPA)**:根据CPU使用率或其他指标自动调整Pod的数量。 - **Cluster Autoscaling**:根据需求自动调整集群规模。 - **Metrics Server**:收集集群中Pods的资源使用情况。 - **...
在Kubernetes(k8s)环境中,水平Pod自动缩放器(Horizontal Pod Autoscaler, HPA)是一种强大的功能,它允许系统根据工作负载动态调整Pod的数量。然而,HPA默认仅支持基于CPU和内存利用率的指标进行缩放。但在实际...
它会发现Horizontal Pod Autoscaling资源,并开始收集请求的指标并将其存储在内存中。 它是使用库实现的。 这是一个HorizontalPodAutoscaler资源的示例,该资源配置为从部署myapp每个pod中获取requests-per-...
Horizontal Pod Autoscaling(HPA)是 kubernetes 中的一种机制,可以根据 CPU 利用率自动伸缩一个 Replication Controller、Deployment 或者 Replica Set 中的 Pod 数量。在使用 HPA 时,需要创建 HPA 控制器,并...
描述Kubernetes的Horizontal Pod Autoscaling是如何工作的?** Horizontal Pod Autoscaler (HPA)通过监控Pod的CPU利用率或其他自定义指标,自动增加或减少Pod的数量以应对变化的工作负载。 **22. Kubernetes的...
Horizontal Pod Autoscaling(HPA)允许根据 CPU 或自定义指标自动调整 Pod 数量。服务发现通过 Service API 实现,Ingress 可以配置 HTTP/HTTPS 路由规则。Traefik 等 Ingress 控制器则简化了这个过程。 ...
在集群资源管理方面,Kubernetes提供了高可用性部署的能力,这包括资源配额、调度器、垃圾收集控制器和自动化扩缩容(Horizontal Pod Autoscaling)。用户可以通过定义资源请求和限制来控制容器使用的计算资源。 ...
传统的单集群水平自动扩展(Horizontal Pod Autoscaling, HPA)存在一些局限性,例如资源限制、高可用性问题以及跨云管理的复杂性。 **多集群资源池的必要性** 1. **单集群规模受限**:单个Kubernetes集群通常对...
8. **Horizontal Pod Autoscaling (HPA)**:自动调整Pod的数量以适应负载变化,实现弹性伸缩。 9. **网络模型**:Kubernetes 提供了一个扁平的网络模型,每个Pod都有一个唯一的IP地址,可以直接互相通信。 与传统...
Metrics Server用于收集Pod的资源使用情况,External Metrics Adapter则允许扩展自定义指标,通过SLS(Serverless Log Service)和ARMS(Application Real-Time Monitoring Service)实现日志和性能监控,HAS...
“autoscaling”是自动扩展功能,Kubernetes提供了Horizontal Pod Autoscaler(HPA),可以根据CPU或内存使用情况自动调整Pod的数量。 "kube2iam"是一个工具,允许在Amazon Web Services(AWS)上的Kubernetes集群...
在Kubernetes中,Horizontal Pod Autoscaler(HPA)负责监控Pod的CPU或内存利用率,并自动增加或减少副本数量。 6. **设置自动扩展**: `Deployment-autoscaling.yml`可能包含了HPA的配置,如最小和最大副本数、目标...
10. **自动扩展(Horizontal Pod Autoscaling, HPA)**:了解如何设置和利用 HPA 来根据资源使用情况动态调整 Pod 数量。 11. **安全与认证**:Kubernetes 提供了多种安全机制,包括 RBAC(Role-Based Access ...
3. **Kubernetes Horizontal Pod Autoscaler (HPA)**:在GKE中,HPA是实现内存自动缩放的核心组件。它可以自动调整Pod的副本数量,以保持Pod的内存使用在期望范围内。 4. **配置与调整**:开发者需要定义合适的缩放...