BroadcastJob

BroadcastJob

BroadcastJob 控制器将 Pod 分发到集群中每个 node 上,类似于 DaemonSet,但是 BroadcastJob 管理的 Pod 并不是长期运行的 daemon 服务,而是类似于 Job 的任务类型 Pod

最终在每个 node 上的 Pod 都执行完成退出后,BroadcastJob 和这些 Pod 并不会占用集群资源。这个控制器非常有利于做升级基础软件、巡检等过一段时间需要在整个集群中跑一次的工作。

此外,BroadcastJob 还可以维持每个 node 跑成功一个 Pod 任务。如果采取这种模式,当后续集群中新增 nodeBroadcastJob 也会分发 Pod 任务上去执行。


BroadcastJob Spec

  • Template

Template 描述了 Pod 模板,用于创建任务 Pod。注意,由于是任务类型的 Pod,其中的 restart policy 只能设置为 NeverOnFailure,不允许设为 Always

  • Parallelism

Parallelism 指定了最多能允许多少个 Pod 同时在执行任务,默认不做限制。

比如,一个集群里有 10 个 node、并设置了 Parallelism 为 3,那么 BroadcastJob 会保证同时只会有 3 个 node 上的 Pod 在执行。每当一个 Pod 执行完成,BroadcastJob 才会创建一个新 Pod 执行。

  • CompletionPolicy

CompletionPolicy 支持指定 BroadcastJob 控制器的 reconciling 行为,可以设置为 AlwaysNever

Always 策略意味着 job 最终会完成,不管是执行成功还是失败了。在 Always 策略下还可以设置以下参数:

ActiveDeadlineSeconds   指定一个超时时间,如果 BroadcastJob 开始运行超过了这个时间,所有还在跑着的 job 都会被停止、并标记为失败

BackoffLimit    指定一个重试次数,超过这个次数后才标记 job 失败,默认没有限制。目前,Pod 实际的重试次数是看 Pod status 中上报所有容器的 ContainerStatus.RestartCount 重启次数。
                如果这个重启次数超过了 BackoffLimit,这个 job 就会被标记为失败、并把运行的 Pod 删除掉

TTLSecondsAfterFinished 限制了 BroadcastJob 在完成之后的存活时间,默认没有限制。比如设置了 TTLSecondsAfterFinished 为 10s,那么当 job 结束后超过了 10s,控制器就会把 job 和下面的所有 Pod 删掉

Never 策略意味着 BroadcastJob 永远都不会结束(标记为 SucceededFailed),即使当前 job 下面的 Pod 都已经执行成功了。 这也意味着 ActiveDeadlineSecondsBackoffLimitTTLSecondsAfterFinished 这三个参数是不能使用的。

比如说,用户希望对集群中每个 node 都下发一个配置,包括后续新增的 node 都需要做,那么就可以创建一个 Never 策略的 BroadcastJob


示例

  • 监控 BroadcastJob status

在一个单 node 集群中创建一个 BroadcastJob,执行 kubectl get bjBroadcastJob 的 short name)看到以下状态:

kubectl get bj

NAME                 DESIRED   ACTIVE   SUCCEEDED   FAILED
broadcastjob-sample  1         0        1           0
Desired     期望的 Pod 数量(等同于当前集群中匹配的 node 数量)

Active      运行中的 Pod 数量

SUCCEEDED   执行成功的 Pod 数量

FAILED      执行失败的 Pod 数量
  • 使用 activeDeadlineSeconds

创建 BroadcastJob 配置 activeDeadlineSeconds 为 10。这个 job 会在运行超过 10s 之后被标记为失败,并把下面还在运行的 Pod 删除掉。

apiVersion: apps.kruise.io/v1alpha1
kind: BroadcastJob
metadata:
  name: broadcastjob-active-deadline
spec:
  template:
    spec:
      containers:
        - name: sleep
          image: busybox
          command: ["sleep",  "50000"]
      restartPolicy: Never
  completionPolicy:
    type: Always
    activeDeadlineSeconds: 10
  • 使用 ttlSecondsAfterFinished

创建 BroadcastJob 配置 ttlSecondsAfterFinished 为 30。这个 job 会在执行结束后 30s 被删除。

apiVersion: apps.kruise.io/v1alpha1
kind: BroadcastJob
metadata:
  name: broadcastjob-ttl
spec:
  template:
    spec:
      containers:
        - name: pi
          image: perl
          command: ["perl",  "-Mbignum=bpi", "-wle", "print bpi(2000)"]
      restartPolicy: Never
  completionPolicy:
    type: Always
    ttlSecondsAfterFinished: 30
  • 使用 Never completionPolicy

创建 BroadcastJob 配置 completionPolicyNever。这个 job 会持续运行,即使当前所有 node 上的 Pod 都执行完成了。

apiVersion: apps.kruise.io/v1alpha1
kind: BroadcastJob
metadata:
  name: broadcastjob-never-complete
spec:
  template:
    spec:
      containers:
        - name: sleep
          image: busybox
          command: ["sleep",  "5"]
      restartPolicy: Never
  completionPolicy:
    type: Never

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值