Kubernetes 的批处理与工作流

阅读时长 7 分钟读完

在 Kubernetes 中管理和运行容器非常方便和高效,它可以帮助我们统一管理多个实例,保障应用的稳定性。在应用场景中,我们经常需要对一组任务进行批处理,或者循环执行某个任务。本文将介绍 Kubernetes 的批处理和工作流机制,并提供相应的示例代码。

Kubernetes 批处理

Kubernetes 中的批处理通常是指需要在一段时间内处理一组任务,例如每天晚上定时处理一批数据。Kubernetes 中有两个非常重要的资源:JobCronJob

Job

Job 是一种 Kubernetes 控制器,经常被用来执行一些批处理任务(如数据清理、数据导入等),也可以用于计算任务(如机器学习、机器翻译等)。Job 创建了一个或多个 Pod,并确保在所有 Pod 运行完毕后,这个任务就结束了。

以下是创建一个简单的 Batch Job 的示例 YAML 文件:

-- -------------------- ---- -------
----------- --------
----- ---
---------
  ----- ---------
-----
  ------------- -
  ---------
    ---------
      -------
        ---- --------
    -----
      -----------
      - ----- --------
        ------ -------
        -------- ------ ----- ----- ----- ---- --- ----- -----
      -------------- ---------
  • backoffLimit:如果 Pod 失败并重启次数达到此限制,则 Job 会标记为 Failure。如果忽略此限制,则 Job 会一直重试失败的 Pod 直到达到 terminationConfig 中指定的退出条件。
  • template.spec.restartPolicy:当 Pod 失败并重启时,重启策略可以是 NeverOnFailure

CronJob

CronJob 控制器是一种创建与管理任务定时执行的 Kubernetes 原生控制器。它会在给定的时间周期内自动启动一个或多个 Job。

以下是创建一个简单的 Cron Job 的示例 YAML 文件:

-- -------------------- ---- -------
----------- -------------
----- -------
---------
  ----- --------
-----
  --------- ---- - - - --
  ------------
    -----
      ---------
        ---------
          -------
            ---- -------
        -----
          -----------
          - ----- -------
            ------ -------
            -------- ------ ----- ----- ----- ---- --- ---- -----
          -------------- ---------
  • schedule:定义 CronJob 的时间规则,就是你们熟知的 Cron 时间。
  • jobTemplate.spec:定义了 Job 的定义,这里可以用和 Job 定义相同的 YAML。

Kubernetes 工作流

在分布式场景下,任务间的依赖管理通常十分棘手,这就需要使用到 Kubernetes 的工作流控制器。Kubernetes 是一个灵活的工作流控制器,可以帮助我们管理任务之间的依赖关系。

Kubernetes 工作流控制器是一种对 Kubernetes API 资源的抽象,提供了定义和执行期间交互的能力。Workflow 是这个控制器的核心资源类型。

以下是创建一个简单的工作流控制器的示例 YAML 文件:

-- -------------------- ---- -------
----------- --------------------
----- --------
---------
  ----- -----------
-----
  ----------- -------------
  ----------
  - ----- -------------
    ------
    - - ----- ------
        --------- -----------
  - ----- -----------
    ----------
      ------ -------
      -------- ----------- -----
      ----- ------ ----- ---- --- -----------
  • entrypoint:定义 Workflow 的入口点,这里是 my-entrypoint
  • templates:定义基础模板,这里的模板名称为 my-template。每个模板都是一个或多个步骤的集合。

示例代码

以下是上述三种类型的示例 YAML 文件:

Batch Job

-- -------------------- ---- -------
----------- --------
----- ---
---------
  ----- ---------
-----
  ------------- -
  ---------
    ---------
      -------
        ---- --------
    -----
      -----------
      - ----- --------
        ------ -------
        -------- ------ ----- ----- ----- ---- --- ----- -----
      -------------- ---------

Cron Job

-- -------------------- ---- -------
----------- -------------
----- -------
---------
  ----- --------
-----
  --------- ---- - - - --
  ------------
    -----
      ---------
        ---------
          -------
            ---- -------
        -----
          -----------
          - ----- -------
            ------ -------
            -------- ------ ----- ----- ----- ---- --- ---- -----
          -------------- ---------

Workflow

-- -------------------- ---- -------
----------- --------------------
----- --------
---------
  ----- -----------
-----
  ----------- -------------
  ----------
  - ----- -------------
    ------
    - - ----- ------
        --------- -----------
  - ----- -----------
    ----------
      ------ -------
      -------- ----------- -----
      ----- ------ ----- ---- --- -----------

总结

Kubernetes 中有两个非常重要的资源:JobCronJob,这两个资源可以很方便的帮助我们进行批处理和定时任务处理。此外,Kubernetes 的工作流控制器是一种十分灵活并且能够帮助我们管理任务之间的依赖关系的控制器,比较适合分布式环境下的任务处理。通过学习使用这三种 Kubernetes 的资源控制器,可以使我们更好地管理和运行容器,提高应用的稳定性和高效性。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/65b8b264add4f0e0ff147369

纠错
反馈