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, 或者根本没有创建。为了解决第一个问题,任务应该是幂等的(多次而不是一次运行不会得到不希望的结果)。对于第二个问题,请确保下一个任务运行完成本应该由上一次的(错过的)运行完成的任何工作。
图书资料: