使用 kube-downscaler 降低 Kubernetes 集群成本( 二 )

  • downscaler/downscale-period 或 downscaler/downtime 工作负载命名空间上的注释 。
  • downscaler/upscale-period 或 downscaler/uptime 工作负载命名空间上的注释 。
  • --upscale-period 或 --default-uptime CLI 参数 。
  • --downscale-period 或 --default-downtime CLI 参数 。
  • UPSCALE_PERIOD 或 DEFAULT_UPTIME 环境变量 。
  • DOWNSCALE_PERIOD 或 DEFAULT_DOWNTIME 环境变量 。
    • 工作负载的命名空间不是排除列表的一部分:
    • 如果提供排除列表,它将用于代替默认值(仅包括kube-system ) 。
    • 工作负载的标签与标签列表不匹配 。
    • 工作负载的名称不是排除列表的一部分 。
    • 工作负载未标记为排除(注释 downscaler/exclude: "true" 或 downscaler/exclude-until: "2024-04-05") 。
    • 没有活动 Pod 强制整个集群进入正常运行时间(注释 downscaler/force-uptime: "true" ) 。
    Minimum replicas最小副本数默认情况下,部署将缩减为零副本 。这可以通过部署或其命名空间的注释进行配置, downscaler/downtime-replicas 也可以通过 CLI 使用 --downtime-replicas  。
    Ex: downscaler/downtime-replicas: "1" 。
    Specific workload特定工作负载在正常的情况下 HorizontalPodAutoscalers ,该字段不能设置为零, 因此downscaler/downtime-replicas 至少 1 应设置为。关于 CronJobs  , 它们的状态将按照我们的预期进行定义 suspend: true  。
    注意点请注意 , 默认的宽限期为 15 分钟适用于新的 Nginx 部署,即
    • 如果当前时间不在,它不会立即缩小 Mon-Fri 9-17 (Buenos Aires timezone)  , 而是在 15 分钟后缩小 。downscaler最终会记录如下内容:
    INFO: Scaling down Deployment default/nginx from 1 to 0 replicas (uptime: Mon-Fri 09:00-17:00 America/Buenos_Aires, downtime: never)请注意,如果 HorizontalPodAutoscaler (HPA) 与部署一起使用,请考虑以下事项:
    • 如果需要缩减到 0 个副本,则应在 上 Deployment 应用注释 。这是一种特殊情况,因为 minReplicas 不允许在 HPA 上为 0 。将部署副本设置为 0 实质上会禁用 HPA 。在这种情况下,HPA 将发出事件,例如 failed to get memory utilization: unable to get metrics for resource memory: no metrics returned from resource metrics API 没有 Pod 可以从中检索指标 。
    • 如果需要缩小大于 0,则应在 HPA 上应用注释 。这允许在停机期间根据外部流量动态扩展 Pod,并在停机期间保持较低的 minReplicas 流量 , 如果没有低流量 。如果对部署而不是 HPA 进行批注 , 则会导致争用条件 , 即缩减部署 ,  kube-downscaler HPA 在部署更高时 minReplicas 将其升级 。
    若要使用 在 HPA 上 --downtime-replicas=1 启用downscaler,请确保将以下注释添加到部署和 HPA 。
    $ kubectl annotate deploy nginx 'downscaler/exclude=true'$ kubectl annotate hpa nginx 'downscaler/downtime-replicas=1'$ kubectl annotate hpa nginx 'downscaler/uptime=Mon-Fri 09:00-17:00 America/Buenos_Aires'详细配置Uptime/downtime specdownscaler通过命令行参数、环境变量或 Kubernetes 注释进行配置 。
    时间定义(例如 DEFAULT_UPTIME )接受以逗号分隔的规范列表,例如,以下配置将缩小非工作时间的所有部署:
    DEFAULT_UPTIME="Mon-Fri 07:30-20:30 Europe/Berlin"仅在周末和周五 20:00 后缩?。?
    DEFAULT_DOWNTIME="Sat-Sun 00:00-24:00 CET,Fri-Fri 20:00-24:00 CET'每个时间规范可以采用以下两种格式之一: