【问题标题】:How can I create a new Kubernetes pod from another existing pod?如何从另一个现有 pod 创建新的 Kubernetes pod?
【发布时间】:2020-09-13 16:27:50
【问题描述】:

我有一个 Kubernetes pod,它可以下载多种类型的文件(比如 XYZ),并且我有一些处理脚本(每个都在一个 docker 映像中),它们对其中一个感兴趣或更多文件(比如说processor_X_and_Yprocessor_X_and_Zprocessor_Z)。

第一个pod一直在运行,我需要根据文件类型下载文件后创建一个处理器pod,例如如果下载器下载了Z类型的文件,我需要创建一个新的实例processor_X_and_Zprocessor_Z 的新实例。

我目前的想法是使用Argo workflow,通过为每个处理器创建一个简单的工作流程,然后通过从下载器窗格调用Argo REST API 来启动合适的工作流程。因此,我已经实现了我的目标和我的系统的自动缩放。

我的问题是 Kubernetes 中是否有另一个更简单的引擎或服务,我可以使用它从另一个 pod 创建一个新产品,而无需使用这个工作流引擎?

【问题讨论】:

  • 为什么不使用 Kubernetes API 来创建 Pod?似乎您正在使用 CI/CD 工具来管理您的管理工作负载。不确定这是否适合这项工作。
  • @nodox Argo 确实有 CI/CD 工具,但也有一些其他可能相关的功能。
  • 将单个作业放入像 RabbitMQ 这样的队列系统中,并让工作人员使用队列中的作业,这可能是一种更具可扩展性的方法。您无需处理 Kubernetes 细节或 RBAC 即可在开发环境中测试此方法,并且当您突然同时获得 10,000 个作业时,您不会冒着淹没集群的风险。

标签: kubernetes kubernetes-pod argo-workflows


【解决方案1】:

您只需让您的 pod 访问在控制平面上运行的 api-server。这将使它能够使用 kubectl 或任何其他 k8s 库来创建/编辑/删除 pod。您可能希望使用 RBAC 将其权限限制为手头任务所需的最低权限。

【讨论】:

    【解决方案2】:

    正如另一个答案中提到的,您可以让您的 pod 访问 Kubernetes API,然后通过 kubectl 应用一个 Pod 资源。

    如果要启动 Argo Workflow,可以使用 kubectl 应用 Workflow 资源,也可以使用 Argo CLI

    但如果您仍然使用 Argo,您可能会发现使用 Argo Eventskick off a Workflow 会更容易。您必须根据下载源文件的方式/从何处选择event source。例如,如果文件位于 S3 上,您可以使用 SNS 事件源。

    如果您只需要定期检查新文件,您可以使用CronWorkflow 来执行检查,并根据是否有要下载的内容有条件地执行其余的工作流程。

    【讨论】:

      猜你喜欢
      • 2020-08-14
      • 1970-01-01
      • 2020-07-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-12
      • 2015-06-01
      • 1970-01-01
      相关资源
      最近更新 更多