`
lykops
  • 浏览: 86269 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

kubernetes资源对象--Horizontal Pod Autoscaling(HPA)

 
阅读更多

下文基于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数了
分享到:
评论

相关推荐

    kubernetes-handbook-jimmysong-v1.4-20180903.pdf

    Job和CronJob用于后台任务的调度,Horizontal Pod Autoscaling(HPA)则提供了动态调整Pod数量的能力。 服务发现通过Service实现,Ingress则提供了对外暴露服务的入口。对于安全性,ServiceAccount和RBAC(基于角色...

    spring-boot-k8s-hpa:在Kubernetes上使用水平Pod自动缩放器和自定义指标自动缩放Spring Boot

    使用水平Pod自动缩放器和Kubernetes上的自定义指标自动缩放Spring Boot先决条件您应该已经安装了minikube。 您应该使用至少4GB的RAM启动minikube: minikube start \ --memory 4096 \ --extra-config=controller-...

    1、Kubernetes Pod 控制器有哪些1

    最后,Horizontal Pod Autoscaling(HPA)是Kubernetes的一种自动缩放机制,可以根据Pod的资源使用情况动态调整Pod的数量。HPA有助于优化资源利用率,当应用负载增加时自动增加Pod,负载减少时减少Pod,以应对流量...

    21+22、部署 Prometheus+集群高可用-V3.pdf

    Horizontal Pod Autoscaling(HPA)是一种自动缩放机制,能够根据系统负载情况自动调整 Pod 的数量。HPA 可以根据 CPU 使用率、内存使用率等指标来调整 Pod 的数量,确保系统的高可用性。 资源限制 – pod Pod 是...

    Kubernetes Cookbook Building Cloud Native Applications

    - **Horizontal Pod Autoscaling (HPA)**:根据CPU使用率或其他指标自动调整Pod的数量。 - **Cluster Autoscaling**:根据需求自动调整集群规模。 - **Metrics Server**:收集集群中Pods的资源使用情况。 - **...

    k8s-prom-hpa:具有Prometheus自定义指标的Kubernetes水平Pod自动缩放器

    在Kubernetes(k8s)环境中,水平Pod自动缩放器(Horizontal Pod Autoscaler, HPA)是一种强大的功能,它允许系统根据工作负载动态调整Pod的数量。然而,HPA默认仅支持基于CPU和内存利用率的指标进行缩放。但在实际...

    kube-metrics-adapter:用于Kubernetes HPA指标的通用指标适配器

    它会发现Horizo​​ntal Pod Autoscaling资源,并开始收集请求的指标并将其存储在内存中。 它是使用库实现的。 这是一个HorizontalPodAutoscaler资源的示例,该资源配置为从部署myapp每个pod中获取requests-per-...

    4、部署 prometheus1

    Horizontal Pod Autoscaling(HPA)是 kubernetes 中的一种机制,可以根据 CPU 利用率自动伸缩一个 Replication Controller、Deployment 或者 Replica Set 中的 Pod 数量。在使用 HPA 时,需要创建 HPA 控制器,并...

    Kubernetes(k8s)面试题.pdf

    描述Kubernetes的Horizontal Pod Autoscaling是如何工作的?** Horizontal Pod Autoscaler (HPA)通过监控Pod的CPU利用率或其他自定义指标,自动增加或减少Pod的数量以应对变化的工作负载。 **22. Kubernetes的...

    kubernetes使用指南

    Horizontal Pod Autoscaling(HPA)允许根据 CPU 或自定义指标自动调整 Pod 数量。服务发现通过 Service API 实现,Ingress 可以配置 HTTP/HTTPS 路由规则。Traefik 等 Ingress 控制器则简化了这个过程。 ...

    kubernates handbook

    在集群资源管理方面,Kubernetes提供了高可用性部署的能力,这包括资源配额、调度器、垃圾收集控制器和自动化扩缩容(Horizontal Pod Autoscaling)。用户可以通过定义资源请求和限制来控制容器使用的计算资源。 ...

    06 姜伟&蒋兴彦-Karmada跨集群弹性伸缩场景与实现剖析.pdf

    传统的单集群水平自动扩展(Horizontal Pod Autoscaling, HPA)存在一些局限性,例如资源限制、高可用性问题以及跨云管理的复杂性。 **多集群资源池的必要性** 1. **单集群规模受限**:单个Kubernetes集群通常对...

    Kubernetes容器集群管理系统调研与对比

    8. **Horizontal Pod Autoscaling (HPA)**:自动调整Pod的数量以适应负载变化,实现弹性伸缩。 9. **网络模型**:Kubernetes 提供了一个扁平的网络模型,每个Pod都有一个唯一的IP地址,可以直接互相通信。 与传统...

    阿里云ACK在线教育行业解决方案.pdf

    Metrics Server用于收集Pod的资源使用情况,External Metrics Adapter则允许扩展自定义指标,通过SLS(Serverless Log Service)和ARMS(Application Real-Time Monitoring Service)实现日志和性能监控,HAS...

    k8s:重要的生产级Kubernetes Ops服务

    “autoscaling”是自动扩展功能,Kubernetes提供了Horizontal Pod Autoscaler(HPA),可以根据CPU或内存使用情况自动调整Pod的数量。 "kube2iam"是一个工具,允许在Amazon Web Services(AWS)上的Kubernetes集群...

    skillbox:DevOps网络研讨会

    在Kubernetes中,Horizontal Pod Autoscaler(HPA)负责监控Pod的CPU或内存利用率,并自动增加或减少副本数量。 6. **设置自动扩展**: `Deployment-autoscaling.yml`可能包含了HPA的配置,如最小和最大副本数、目标...

    K8s-Notes:学习K8时的注意事项

    10. **自动扩展(Horizontal Pod Autoscaling, HPA)**:了解如何设置和利用 HPA 来根据资源使用情况动态调整 Pod 数量。 11. **安全与认证**:Kubernetes 提供了多种安全机制,包括 RBAC(Role-Based Access ...

    googleMemoryAutoScaling

    3. **Kubernetes Horizontal Pod Autoscaler (HPA)**:在GKE中,HPA是实现内存自动缩放的核心组件。它可以自动调整Pod的副本数量,以保持Pod的内存使用在期望范围内。 4. **配置与调整**:开发者需要定义合适的缩放...

Global site tag (gtag.js) - Google Analytics