在专用吊舱上运行Kubernetes cronjob

在专用吊舱上运行Kubernetes cronjob,kubernetes,kubernetes-cronjob,Kubernetes,Kubernetes Cronjob,我有一个作为Kubernetes服务的API,我需要每小时在API中运行一个端点。(繁重的统计计算,大约需要3-5分钟) 目前我使用curl直接调用端点: containers: - name: callout image: 'buildpack-deps:curl' args: - /bin/sh - '-ec' - 'curl http://api-service/v1/Stats/CalculateStats' 问题是任务被

我有一个作为Kubernetes服务的API,我需要每小时在API中运行一个端点。(繁重的统计计算,大约需要3-5分钟)

目前我使用curl直接调用端点:

containers:
- name: callout
    image: 'buildpack-deps:curl'
    args:
        - /bin/sh
        - '-ec'
        - 'curl http://api-service/v1/Stats/CalculateStats'
问题是任务被发送到服务,并且它最终在一个pod上结束。运行计算会使pod忙碌,而来自常规用户的其他请求通过前端会减慢速度

如何从具有更高CPU请求的同一API映像创建专用pod(这样它可以运行得更快)并在其上运行计算,然后移除pod并在下一个计划中重复该过程


谢谢

这就是我想到的:

  • 为cronjob任务创建单独的部署。此部署基本上与生产部署相同,但具有更高的CPU声明和(重要!)一个单独的标记。默认情况下,将副本计数设置为
    0
    。无论何时更新生产部署,都可以更新此部署,因此两个部署都运行相同版本的AppApplication
  • 创建一个单独的服务,将所有POD绑定到1中新创建的标记。。此服务不应向公众(即互联网)公开
  • 在cronjob中:

    • 放大在1中创建的部署。至
      1
    • 等待部署的吊舱准备就绪
    • 执行
      curl
      -命令
    • 缩小在1中创建的部署。返回到
      0
    这将确保只有在执行昂贵的请求时才会消耗额外的资源。这种方法的一个缺点是,如果没有足够的资源可用,pod的部署可能会失败,因此我们应该监控集群,并在部署扩展时保持一些资源“准备就绪”。这可以通过AWS上的群集自动缩放器实现。扩展可能需要一些时间,因此cronjob应该能够处理这种延迟


    顺便提一下:我还建议使用“昂贵的操作”对公众保护/隐藏端点,这样用户就不能“意外”或出于恶意破坏生产部署。

    而不是运行
    curl
    ,CronJob能否启动一个pod,其
    图像:
    与您的普通应用程序相同,但使用不同的
    命令:
    执行更新任务?@DavidMaze我不确定.Net Core是否支持它。我会检查一下,thanksI找到了“向上/向下扩展部署”命令,但是有没有办法在cronjob中运行kubectl命令?kubectl规模--副本=部署