仅仅有RS或者Deployment往往是不够的,因此Kubernetes提供了一些其他的工作负载。
DaemonSet
在应用级别,常常使用守护进程为应用程序提供一些特殊服务。Kubernetes中,提供了DaemonSet用以提供Pod级别的服务。
DaemonSet可以保证在每个节点都拥有一个Pod的副本,当有新节点加入集群时,会自动为它们创建Pod副本,当节点从集群移出时,Pod也会被回收。
DaemonSet 的一些典型用法:
- 在每个节点上运行集群守护进程
- 在每个节点上运行日志收集守护进程
- 在每个节点上运行监控守护进程
Demo
来自https://kubernetes.io/zh/docs/concepts/workloads/controllers/daemonset/
1 | apiVersion: apps/v1 |
格式
- apiVersion: 创建该对象所使用的 Kubernetes API 的版本
- kind: 必须准确写为DaemonSet
- metadata: DadmonSet对象的元数据
- spec: 配置信息
- template: spec下的必须字段,对Pod模板进行描述,见ReplicaSet或Deployment的.spec.template字段
- restartPolicy: 容器重启策略,这个字段一定存在,且值为Always,这个值未指定时,它是默认值Always
- selector: 匹配算符必须合理
- template: spec下的必须字段,对Pod模板进行描述,见ReplicaSet或Deployment的.spec.template字段
Job
负责创建仅执行一次的Pods(这些Pods应该会在一定时间内退出),保证一个或多个Pods成功结束(返回0)。
Demo
1 | apiVersion: batch/v1 |
格式
- apiVersion: 创建该对象所使用的 Kubernetes API 的版本
- kind: 必须准确写为Job。
- spec: 描述信息。
- template: 唯一的必须字段。
- RestartPolicy: 重启策略,只能设置为Never或OnFailure之一。
- parallelism: 一个非负整数,表示并行数量,默认值为1,如果这个值为0,那么在Job启动后便会被暂停,直至这个数增加。
- completions: 正整数,用于指定应该成功完成的pod的数量,如果设置为nil,表示着任何pod的完成都意味着所有pod的成功,并允许并行度为任意正值。这个值默认为1,如果设置为1,那么并行度parallelism也会限制为1,且该pod的成功意味着Job的成功。
- template: 唯一的必须字段。
Job 的并行执行
适合以 Job 形式来运行的任务主要有三种:
- 非并行 Job:
- 通常只启动一个 Pod,除非该 Pod 失败。
- 当 Pod 成功终止时,立即视 Job 为完成状态。
- 具有确定完成计数的并行 Job:
.spec.completions
字段设置为非 0 的正数值。- Job 用来代表整个任务,当成功的 Pod 个数达到
.spec.completions
时,Job 被视为完成。 - 当使用
.spec.completionMode="Indexed"
时,每个 Pod 都会获得一个不同的 索引值,介于 0 和.spec.completions-1
之间。
- 带工作队列的并行 Job:
- 不设置
spec.completions
,默认值为.spec.parallelism
。 - 多个 Pod 之间必须相互协调,或者借助外部服务确定每个 Pod 要处理哪个工作条目。 例如,任一 Pod 都可以从工作队列中取走最多 N 个工作条目。
- 每个 Pod 都可以独立确定是否其它 Pod 都已完成,进而确定 Job 是否完成。
- 当 Job 中 任何 Pod 成功终止,不再创建新 Pod。
- 一旦至少 1 个 Pod 成功完成,并且所有 Pod 都已终止,即可宣告 Job 成功完成。
- 一旦任何 Pod 成功退出,任何其它 Pod 都不应再对此任务执行任何操作或生成任何输出。 所有 Pod 都应启动退出过程。
- 不设置
CronJob
CronJob 用于执行周期性的动作,例如备份、报告生成等。对Job的封装
Demo
1 | apiVersion: batch/v1 |
格式
- apiVersion: 创建该对象所使用的 Kubernetes API 的版本。
- kind: 必须准确写为CronJob。
- metadata: 元数据。
- spec: 描述信息。
- schedule: 什么时候被调度,时间表语法详见cronitor。
- jobTemplate: 被调度的Job的模板,但是没有apiVersion和kind,这里不再叙述。
- concurrencyPolicy: 并行性规则,值必须是以下几个之一: “Allow”(默认值)表示允许并行执行,”Forbid”表示禁止并行执行,”Replace”表示取消当前Job并移除它,然后用一个新的Job替换掉它。
- suspend: 挂起,如果为true,会告诉从controller暂停后续执行,但不会应用到已经开始的执行,主要用于暂停对CronJob的使用,这个值默认为假。
- startingDeadlineSeconds: 以秒为单位的截止时间,超时的执行会被认为Job失败。
StatefulSets
StatefulSet 是用来管理有状态应用的工作负载 API 对象。
TODO: 完成这一章节
Demo
1 | apiVersion: v1 |