返回

定时弹性伸缩cronhpa,让k8s也能做到自动扩缩容

闲谈

使用 CronHPA 根据时间点实现扩缩容

简介

水平自动扩缩容 (HPA) 是 Kubernetes 中一项重要的特性,它可以根据实际负载自动调整 Pod 的数量。然而,原生 HPA 并不支持根据时间点进行扩缩容。CronHPA 是一款开源项目,弥补了这一不足,允许我们根据特定时间点来进行扩缩容。

CronHPA 的工作原理

CronHPA 通过使用定时任务来触发 HPA 的扩缩容操作。当定时任务被触发时,CronHPA 会检查 HPA 的配置。如果满足扩缩容条件,CronHPA 就会执行相应的操作。

CronHPA 配置

CronHPA 的配置主要包括以下部分:

  • spec.schedule : 定义定时任务的执行时间,例如 "*/10 * * * *" 表示每 10 分钟执行一次任务。
  • spec.jobTemplate : 定义定时任务要执行的任务,通常是创建一个 HPA 对象。
  • spec.suspend : 用于暂停或启用 CronHPA。当 CronHPA 被暂停时,它不会执行定时任务。

实战操作

部署 CronHPA

apiVersion: batch/v1
kind: CronJob
metadata:
  name: cronhpa-example
spec:
  schedule: "*/10 * * * *"
  jobTemplate:
    spec:
      template:
        spec:
          containers:
          - name: create-hpa
            image: busybox
            command:
            - /bin/sh
            - -c
            - kubectl create hpa hpa-example --replicas=1 --min=1 --max=10 --target=utilization/cpu --initial-delay-seconds=300 --max-seconds=1800

创建 HPA

apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
  name: hpa-example
  namespace: default
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: nginx-deployment
  minReplicas: 1
  maxReplicas: 10
  metrics:
  - type: Utilization
    resource:
      name: cpu
      targetAverageUtilization: 80

测试定时扩缩容

等待 CronHPA 的定时任务触发,并观察 HPA 的副本数。当定时任务触发时,HPA 的副本数应该会自动增加到 10。当定时任务再次触发时,HPA 的副本数应该会自动减回到 1。

结论

CronHPA 是一个强大的工具,它可以根据时间点进行扩缩容,从而满足更多场景的需求。通过使用 CronHPA,我们可以根据特定的业务需求自动调整应用程序的容量,从而提高资源利用率和降低成本。

常见问题解答

  1. CronHPA 支持哪些调度类型?
    CronHPA 支持 CronJob 调度类型,允许我们根据特定的时间表达式进行调度。

  2. CronHPA 可以与哪些 HPA 类型一起使用?
    CronHPA 可以与任何类型的 HPA 一起使用,包括基于指标、基于请求或基于 CPU 的 HPA。

  3. CronHPA 可以暂停吗?
    是的,CronHPA 可以使用 spec.suspend 字段进行暂停。

  4. CronHPA 是否支持在多个命名空间中工作?
    是的,CronHPA 可以通过指定 jobTemplate.spec.template.metadata.namespace 字段在多个命名空间中工作。

  5. 如何解决 CronHPA 触发错误?
    检查 CronHPA 日志和事件以识别任何错误消息。确保 CronHPA 的定时任务表达式有效,并且 HPA 配置正确。