前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Kubernetes 1.21引入Indexed Jobs特性

Kubernetes 1.21引入Indexed Jobs特性

作者头像
CNCF
发布2021-04-21 15:38:29
1.2K0
发布2021-04-21 15:38:29
举报
文章被收录于专栏:CNCF

作者:Aldo Culquicondor(谷歌)

一旦你将一个非并行作业(Job[1])容器化,就很容易在 Kubernetes 上启动并运行它,而无需修改二进制文件。在大多数情况下,当运行并行分布式作业时,你必须设置一个单独的系统来在工作资源之间划分工作。例如,你可以设置一个任务队列,将一个工作项分配给每个 Pod[2],或将多个项分配给每个 Pod,直到队列清空为止[3]

Kubernetes 1.21 版本引入了一个新的字段来控制作业完成模式,这是一个配置选项,允许你控制 Pod 完成如何影响作业的总体进度,有两个可能的选项(目前):

  • NonIndexed(默认值):当成功完成的 Pods 的数量等于.spec.completions 中指定的数量时,作业被认为是完成的。换句话说,每一个 Pod 的完成都是彼此同源的。在引入完成模式之前创建的任何作业都是隐式非索引的。
  • Indexed:当有一个成功完成的 Pod 与从 0 到.spec.completions-1 的每个索引相关联时,作业被认为是完成的。该索引暴露于每一个 Pod 中的 batch.kubernetes.io/job-completion-index 注释和 JOB_COMPLETION_INDEX 环境变量。

你可以开始使用带有索引完成模式的作业,简称为索引作业(Indexed Jobs),来轻松启动并行作业。然后,每个 worker Pod 可以根据索引有一个静态分配的数据分区。这使你不必设置排队系统,甚至不必修改二进制文件!

创建索引作业

要创建一个索引作业,你只需添加 completionMode: Indexed 到作业规范中,并使用 JOB_COMPLETION_INDEX 环境变量。

代码语言:javascript
复制
apiVersion: batch/v1
kind: Job
metadata:
  name: 'sample-job'
spec:
  completions: 3
  parallelism: 3
  completionMode: Indexed
  template:
    spec:
      restartPolicy: Never
      containers:
      - command:
        - 'bash'
        - '-c'
        - 'echo "My partition: ${JOB_COMPLETION_INDEX}"'
        image: 'docker.io/library/bash'
        name: 'sample-load'

注意,完成模式是 1.21 版本中的一个 alpha 特性。为了能够在集群中使用它,请确保在 API 服务器和控制器管理器上启用了 IndexedJob 特性门。

当你运行该示例时,你将看到三个创建的 Pods 中的每一个都获得了不同的完成索引。为了方便用户,控制平面设置 JOB_COMPLETION_INDEX 环境变量,但是你可以选择设置自己的或将索引暴露为文件。

请参阅带静态工作分配的并行处理索引作业[4],了解逐步指南和更多示例。

计划

SIG Apps 设想可能有更多的完成模式,为 Job API 启用更多的用例。我们欢迎你在kubernetes/kubernetes[5]中提出你的建议。

特别是,我们正在考虑一种 IndexedAndUnique 模式,其中索引不仅作为注释可用,而且是 Pod 名称的一部分,类似于 StatefulSet。这应该有助于紧密耦合的 Pod 之间的通信。你可以参加这个公开问题[6]的讨论。

总结

索引作业(Indexed Jobs)允许你在并行作业的作业之间静态地划分作业。SIG Apps 希望这个特性能够促进更多的批量工作负载迁移到 Kubernetes。

参考资料

[1]

Job: https://kubernetes.io/docs/concepts/workloads/controllers/job/

[2]

将一个工作项分配给每个 Pod: https://kubernetes.io/docs/tasks/job/coarse-parallel-processing-work-queue/

[3]

将多个项分配给每个 Pod,直到队列清空为止: https://kubernetes.io/docs/tasks/job/fine-parallel-processing-work-queue/

[4]

带静态工作分配的并行处理索引作业: https://kubernetes.io/docs/tasks/job/indexed-parallel-processing-static/

[5]

kubernetes/kubernetes: https://github.com/kubernetes/kubernetes

[6]

公开问题: https://github.com/kubernetes/kubernetes/issues/99497

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-04-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 CNCF 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 创建索引作业
  • 计划
  • 总结
    • 参考资料
    相关产品与服务
    容器服务
    腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档