启用自动缩放后,GKE 不会缩放到 0/从 0 缩放

2023-12-19

我想在我的 GKE 上运行 CronJob,以便每天执行批处理操作。理想的情况是,我的集群在作业未运行时扩展到 0 个节点,并在每次满足计划时动态扩展到 1 个节点并在其上运行作业。

我首先尝试使用一个简单的 CronJob 来实现这一点库伯内特斯 https://kubernetes.io/docs/tasks/job/automated-tasks-with-cron-jobs/仅打印当前时间并终止的 doc。

我首先使用以下命令创建了一个集群:

gcloud container clusters create $CLUSTER_NAME \
    --enable-autoscaling \
    --min-nodes 0 --max-nodes 1 --num-nodes 1 \
    --zone $CLUSTER_ZONE

然后,我创建了一个具有以下描述的 CronJob:

apiVersion: batch/v1beta1
kind: CronJob
metadata:
  name: hello
spec:
  schedule: "1 * * * *"
  jobTemplate:
    spec:
      template:
        spec:
          containers:
          - name: hello
            image: busybox
            args:
            - /bin/sh
            - -c
            - date; echo Hello from the Kubernetes cluster
          restartPolicy: Never

该作业计划每小时运行一次,并在终止前打印当前时间。

首先,我想创建具有 0 个节点的集群,但设置--num-nodes 0导致错误。为什么会这样呢?请注意,我可以在创建集群后手动将集群缩小到 0 个节点。

其次,如果我的集群有 0 个节点,则不会安排作业,因为集群不会自动扩展到 1 个节点,而是会出现以下错误:

无法调度 Pod:没有可用于调度 Pod 的节点。

第三,如果我的集群有 1 个节点,作业会正常运行,但之后集群不会缩小到 0 个节点,而是保持 1 个节点。我让我的集群连续运行两个作业,并且它在中间没有缩小规模。我认为一小时对于集群来说应该足够长了。

我缺少什么?

编辑:我已经让它工作并详细说明了我的解决方案here https://stackoverflow.com/questions/49903951/node-pool-does-not-reduce-his-node-size-to-zero-although-autoscaling-is-enabled/51891485#51891485.


Update:

注意:从 Kubernetes 版本 1.7 开始,您可以指定最小 节点池的大小为零。这允许您的节点池扩展 如果不需要运行您的实例,则完全关闭 工作负载。

https://cloud.google.com/kubernetes-engine/docs/concepts/cluster-autoscaler https://cloud.google.com/kubernetes-engine/docs/concepts/cluster-autoscaler


旧答案:

不支持将整个集群扩展到 0,因为系统 Pod 始终需要至少一个节点:

See docs https://cloud.google.com/kubernetes-engine/docs/concepts/cluster-autoscaler#minimum_and_maximum_node_pool_size

您可以使用一台用于系统 Pod 的小型计算机创建一个节点池,并使用一台用于运行工作负载的大型计算机创建一个额外的节点池。这样,第二个节点池可以缩小到 0,并且您仍然有空间来运行系统 Pod。

尝试后,@xEc 提到:另请注意,在某些情况下,我的节点池无法扩展,例如,如果我创建初始大小为 0 而不是 1 的池。

初步建议:

也许您可以运行一个微型虚拟机,使用 cron 来扩展集群,提交一个作业(而不是 CronJob),等待它完成,然后将其缩小到 0?

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

启用自动缩放后,GKE 不会缩放到 0/从 0 缩放 的相关文章

随机推荐

  • 如何将带有分隔符的连接数组拆分为块

    我有字符串数组 const arr some word anotherverylongword word yyy u const joined arr join 我想要获取块数组 其中连接的字符串长度不大于 10 例如输出将是 some w
  • 在 shell 脚本中回显空行的首选方法是什么?

    我目前正在为 shell 脚本编写一些代码 该脚本需要在脚本的两个部分之间有一个空行 这样在向用户显示输出时可以将它们分开 我的问题是 我不确定 shell 脚本中空行的首选做法是什么 最好的做法是只写echo没有别的或可写的echo 就像
  • HTML 选择选项多行值

    I have select and option我的 HTML 页面中的标签
  • 如何在onPrepareDialog中设置setSingleChoiceItems的内容?

    伙计们 在 onCreateDialog 中我有这个 case DIALOG REVIEW if bundle containsKey POSITION final int position bundle getInt POSITION A
  • 使用 Spring Boot Data JPA 按需创建表

    我正在尝试创建一个 Spring Boot 应用程序 我想在其中按需创建和使用数据库表 而不为它们定义实体 存储库 我有一个基本 Business 实体和 BusinessType 实体来保留业务类型 我希望能够使用自己的表为业务类型 例如
  • 对溢出范围进行条件格式化

    这可能是一个重复的问题 但如果我们还没有此功能 那将是令人惊讶的 我有一张桌子Table5在 C 列中 其高度可能会改变 在 E 列中 我有一个公式 例如提取唯一值 因此生成的溢出范围具有动态高度 我想对生成的溢出范围进行条件格式设置 例如
  • M1 Mac Tensorflow VS Code Rosetta2

    我正在努力使用 M1 mac 安装 TensorFlow 我有 python 3 9 7 和 Monterrey 12 3 以及 Apple Silicon Visual Studio 代码 有一个苹果解决方案 涉及 miniconda 苹
  • WCF服务设计模式

    我想创建一个 WCF 服务 做到这一点的最佳设计模式是什么 例如三个独立的项目 如下所示 1 数据合约2 业务逻辑3 SvcHost项目 这听起来并不太糟糕 尽管我可能会将 DataContract 和 SvcHostProject 结合起
  • Firebase 引用未声明

    我创建了一个新的 Xcode 项目 将 Firebase pod 添加到我的 pod 文件中并安装它 并根据 Firebase 文档添加了 Google services plist 文件和其余部分 导入 Firebase工作正常 但如果我
  • 模型更改时不会调用 ngModel.$render

    我正在尝试将 tinymce 与 Angular 一起使用 但指令中的 render 函数遇到一些问题 当我更新模型时 不会调用 render 函数 这里用一个plunkr来说明 http plnkr co edit Ih1nDq p pr
  • 如何删除搜索索引本身

    搜索索引有一个删除文档的方法 https cloud google com appengine docs standard python search indexclass https cloud google com appengine
  • 使用 C# 截取设备屏幕的屏幕截图

    嗨 有没有办法截取在WINDOWS CE5 0设备屏幕上运行的应用程序的屏幕截图 提前致谢 using System using System Collections Generic using System IO using System
  • 实施应用程序品牌的行业标准?

    我目前正在制作原型 为我们的应用程序添加本地化和品牌支持 目前 我已经能够成功地利用本地化框架和定制文化来支持本地化和品牌推广 自定义文化使我能够拥有一个 en US BrandA 资源 DLL 其中包含 BrandA 的 en US 语言
  • 如何将每行中特定索引中的值替换为numpy数组中的相应值

    我的数据框如下所示 datetime1 datetime2 datetime3 datetime4 id 1 5 6 5 5 2 7 2 3 5 3 4 2 3 2 4 6 4 4 7 5 7 3 8 9 我有一个像这样的 numpy 数组
  • Nant 因构建服务器上的权限错误而失败

    完全新手问题 我正在尝试在构建服务器上运行 Nant 脚本 非常基本的脚本 不执行任何操作 但它失败并出现错误 System Security SecurityException 请求 System Security Permissions
  • RoR:has_one“或另一个”? (或者,没有继承的多态性。)

    大家好 我的项目有一个有趣的要求 我需要一个has one关系 其中它要么是一个类 要么是另一个类 但没有继承 如果这是唯一的方法 我可以摆脱继承 但是两个关联记录具有完全不同的数据并且根本不相关 我需要弄清楚的是类似以下内容 1 Foo
  • Python - 将对象的属性复制到另一个对象的正确方法是什么?

    我有两节课 除了 2 个属性外 它们几乎相同 我需要将所有属性从一个属性复制到另一个属性 我只是想知道如果有一个模式或最佳实践 or如果我基本上应该这样做 spam attribute one foo attribute one spam
  • 如何在 Android NDK 中使用 pthreads? [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 据我所知 pthreads 是 C
  • 在 Swift 中使用 UIAlertController 更改警报的标题和消息字体

    我正在尝试更改使用 UIAlertController 显示的警报的标题和消息字体 我正在尝试使用 NSAttributedStirng 进行操作 但它会给出编译器错误 无法采用 NSAttributed 字符串代替 Stirng 我尝试过
  • 启用自动缩放后,GKE 不会缩放到 0/从 0 缩放

    我想在我的 GKE 上运行 CronJob 以便每天执行批处理操作 理想的情况是 我的集群在作业未运行时扩展到 0 个节点 并在每次满足计划时动态扩展到 1 个节点并在其上运行作业 我首先尝试使用一个简单的 CronJob 来实现这一点库伯