gpt4 book ai didi

kubernetes - 使用 Kubernetes CronJob : How to avoid deployments overriding minReplicas 基于时间的扩展

转载 作者:行者123 更新时间:2023-12-04 12:56:36 25 4
gpt4 key购买 nike

我有一个 Horizo​​ntalPodAutoscalar 来根据 CPU 扩展我的 pod。这里的 minReplicas 设置为 5 :

apiVersion: autoscaling/v2beta2
kind: HorizontalPodAutoscaler
metadata:
name: myapp-web
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: myapp-web
minReplicas: 5
maxReplicas: 10
metrics:
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 50

然后,我添加了 Cron 作业以根据一天中的时间扩大/缩小我的水平 pod 自动缩放器:
kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:
namespace: production
name: cron-runner
rules:
- apiGroups: ["autoscaling"]
resources: ["horizontalpodautoscalers"]
verbs: ["patch", "get"]

---
kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
name: cron-runner
namespace: production
subjects:
- kind: ServiceAccount
name: sa-cron-runner
namespace: production
roleRef:
kind: Role
name: cron-runner
apiGroup: rbac.authorization.k8s.io

---
apiVersion: v1
kind: ServiceAccount
metadata:
name: sa-cron-runner
namespace: production
---

apiVersion: batch/v1beta1
kind: CronJob
metadata:
name: django-scale-up-job
namespace: production
spec:
schedule: "56 11 * * 1-6"
successfulJobsHistoryLimit: 0 # Remove after successful completion
failedJobsHistoryLimit: 1 # Retain failed so that we see it
concurrencyPolicy: Forbid
jobTemplate:
spec:
template:
spec:
serviceAccountName: sa-cron-runner
containers:
- name: django-scale-up-job
image: bitnami/kubectl:latest
command:
- /bin/sh
- -c
- kubectl patch hpa myapp-web --patch '{"spec":{"minReplicas":8}}'
restartPolicy: OnFailure
----
apiVersion: batch/v1beta1
kind: CronJob
metadata:
name: django-scale-down-job
namespace: production
spec:
schedule: "30 20 * * 1-6"
concurrencyPolicy: Forbid
successfulJobsHistoryLimit: 0 # Remove after successful completion
failedJobsHistoryLimit: 1 # Retain failed so that we see it
jobTemplate:
spec:
template:
spec:
serviceAccountName: sa-cron-runner
containers:
- name: django-scale-down-job
image: bitnami/kubectl:latest
command:
- /bin/sh
- -c
- kubectl patch hpa myapp-web --patch '{"spec":{"minReplicas":5}}'
restartPolicy: OnFailure
这真的很好用,除了现在当我部署它时会覆盖这个 minReplicas Horizo​​ntalPodAutoscaler 规范中 minReplicas 的值(在我的情况下,设置为 5)
我正在使用 kubectl apply -f ~/autoscale.yaml 部署我的 HPA
有没有办法处理这种情况?我是否需要创建某种共享逻辑,以便我的部署脚本可以计算出 minReplicas 值应该是什么?或者有没有更简单的方法来处理这个问题?

最佳答案

我认为您还可以考虑以下两种选择:

使用 helm 通过查找功能管理应用程序的生命周期:
此解决方案背后的主要思想是在尝试使用 HPA 创建/重新创建之前查询特定集群资源的状态(此处为 helm)。 install/upgrade命令。

  • Helm.sh: Docs: Chart template guide: Functions and pipelines: Using the lookup function

  • 我的意思是检查当前 minReplicas每次升级应用程序堆栈之前的值。

    管理 HPA资源单独分配给应用程序 list 文件
    在这里您可以将此任务移交给专门的 HPA运算符,可与您的 CronJobs 共存调整 minReplicas根据具体时间表:
  • Banzaicloud.com: Blog: K8S HPA Operator
  • 关于kubernetes - 使用 Kubernetes CronJob : How to avoid deployments overriding minReplicas 基于时间的扩展,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66211456/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com