Kubernetes in Action笔记 - (7) DaemonSet、Job和CronJob

分享到:

文章目录

DaemonSet

DaemonSet 用于确保一个pod匹配它的选择器并在每个节点上运行。因此,它并没有期望的副本数的概念。

如果节点下线, DaemonSet不会在其他地方重新创建pod。 但是, 当将一个新节 点添加到集群中时, DaemonSet会立刻部署一个新的pod实例。

使用场景的例子:

  • pod执行系统级别的与基础结构相关的操作。例如, 希望在每个节点上运行日志收集器和资源监控器。
  • 另一个典型的例子是Kubemetes 自己的kube-proxy进程, 它需要运行在所有节点上才能使服务工作

可以通过 pod 模板中的 nodeSelector 属性让 DaemonSet 只在特定的节点上运行 pod。

 1apiVersion: apps/vlbeta2
 2  kind: DaemonSet
 3  metadata: 
 4    name: ssd-monitor
 5  spec:
 6    selector:
 7      matchLabels:
 8        app: ssd-monitor
 9    template:
10      metadata:
11      labels:
12        app: ssd-monitor
13      spec:
14        # pod模板包含 会选择有disk=ssd标签的节点个节点选择器,
15        nodeSelector:
16          disk: ssd 
17        containers:
18          - name: main
19            image: luksa/ssd-monitor

Job

Job允许运行一种 pod, 该 pod 在内部进程成功结束时, 不重启容器。

在发生节点故障时,该节点上由 Job 管理的 pod 将按照 ReplicationSet 的 pod 的方式,重新安排到其他节点。 如果进程本身异常退出(进程返回错误退出代码时), 可以将 Job 配置为重新启动容器。

Job 对于临时任务很有用, 关键是任务要以正确的方式结束。需要明确地将重启策略设置为OnFa辽ure或Never,防止容器在完成任务时重新启动

 1apiVersion: batch/vl
 2  kind: Job
 3  metadata: 
 4    name: batch-job
 5  spec:
 6    template:
 7      metadata:
 8      labels:
 9        app: batch-job
10      spec:
11        # Job 不能使用Always作为默认的重启策略
12        restartPolicy: OnFailure
13        containers:
14          - name: main
15            image: luksa/ssd-monitor

作业可以配置为创建多个pod实例, 以并行或串行方式运行它们。这是通过在Job配置中设置 completions和paralletism属性来完成的。

如果需要一个Job顺序运行多次,则可以将completions设为希望运行的次数。Job将一个接一个地运行五个pod。它最初创建一个pod, 当pod的容器运行完成时,它创建第二个pod, 以此类推,直到五个pod成功完成。如果其中 一 个pod发生故障,工作会创建 一个新的pod, 所以Job总共可以创建五个以上的pod。

1apiVersion: batch/vl
2kind: Job
3metadata:
4  name: multi-completion-batch-job
5  spec:
6    completions: 5
7    template: 
8      ...

通过paralletism Job配置属性,指定允许多少个pod并行执行

1apiVersion: batch/vl
2kind: Job
3metadata:
4  name: multi-completion-batch-job
5  spec:
6    completions: 5
7    paralletism: 2
8    template: 
9      ...

可以在 Job 运行时更改 Job 的 parallelism 属性

1kubectl scale job multi-completion-ba七ch-job --replicas 3

通过在 pod 配置中设置 activeDeadlineSeconds 属性,可以限制 pod的时间。如果 pod 运行时间超过此时间, 系统将尝试终止 pod, 并将 Job 标记为失败。通过指定 Job manifest 中的 spec.backoff巨m辽字段, 可以配置 Job 在被标记为失败之前可以重试的次数。 如果没有明确指定它, 则默认为6。

CronJob

cron 任务通过创建 CronJob 资源进行配置。它可以通过配置项中的 jobTemplate 属性创建任务资源。

计划任务的运行方式:在计划的时间内,CronJob资源 会创建 Job资源,然后Job创建pod。

 1apiVersion: batch/vlbeta
 2kind: CronJob
 3metadata: cron-job-run-every-fifteen-minutes
 4spec:
 5  schedule: "0,15,30,45 * * * *"
 6  jobTemplate:
 7    spec:
 8      template:
 9        metadata:
10          labels:
11            app: periodic-batch-job
12        spec:
13          restartPolicy: OnFailure
14          containers:
15          - name: main
16            image: luksa/batch-job

startingDeadlineSeconds字段来指定截止日期。当Job或pod创建并运行得相对较晚的时候,任务将不会运行,并将显示为Failed。

在正常 情况下,CronJob总是为计划中配置的每个执行创建一个 Job, 但可能会同时创建两个Job, 或者根本没有创建。为了解决第一个问题,任务应该是幂等的(多次而不是一次运行不会得到不希望的结果)。对于第二个问题,请确保下一个任务运行完成本应该由上一次的(错过的)运行完成的任何工作。


图书资料: