K8S学习笔录 - 任务和定时任务

原文连接git

利用集群来进行一些批处理任务。通常状况下能够并行或串行启动多个计算进程去处理一批工做项,处理完成后整个批处理任务结束github

或者作成定时任务,定时去执行某些工做json

这个看起来是否是很适合DaemonSet篇中的做业任务呢api

Job

具体配置含义以下,也能够经过Job文档学习。bash

type Job struct {
    metav1.TypeMeta `json:",inline"`

    metav1.ObjectMeta `json:"metadata,omitempty"`

    // Job的主要定义就在这里
    Spec JobSpec `json:"spec,omitempty"`

    // Job的各类状态,对于咱们来说是只读的
    Status JobStatus `json:"status,omitempty"`
}

type JobSpec struct {
    // 定义最多能运行的Pod数量,不能超过Completions的值
    // 无论任什么时候间,Pod在运行状态中的数量都不会超过该数
    // 默认为1
    Parallelism *int32 `json:"parallelism,omitempty"`

    // 能够表明Job成功的成功运行的Pod数量
    // 不设置则表明任何Pod执行成功后都表明Job成功
    // 设置为N,则Parallelism的的最大值为N,只要有N个Pod运行成功就表明这个Job执行成功
    Completions *int32 `json:"completions,omitempty"`

    // Pod的存活的最大时间,超过这个时间会当即被杀死,并杀死相关的容器
    // 必须为正整数
    ActiveDeadlineSeconds *int64 `json:"activeDeadlineSeconds,omitempty"`

    // Job失败后重试次数,默认为6次
    BackoffLimit *int32 `json:"backoffLimit,omitempty"`

    // Label筛选器,经过Pod的Label匹配当前Pod的数量
    // 通常状况系统会帮忙设置好这个
    Selector *metav1.LabelSelector `json:"selector,omitempty"`

    // 是否要手动控制Pod的labels和selectors的生成
    // 不设置或者设置为false的时候,系统会为这个Pod生成一个惟一标签给Job和他的Pod模板
    // 设置成true的话,一切都要手动来完成,除非有特殊需求而且明白怎么搞,不然不建议设置
    ManualSelector *bool `json:"manualSelector,omitempty"`

    // Pod定义
    // 须要额外说明一下
    // Job的Template中
    // Pod的重启配置restartPolicy属性只能设置为Never或OnFailure
    Template v1.PodTemplateSpec `json:"template"`

    // 一个alpha等级的功能,若是使用须要配置开启
    // 功能大概是在Job完成N秒之后删除Job
    // 具体能够看网上的一些文档说明
    TTLSecondsAfterFinished *int32 `json:"ttlSecondsAfterFinished,omitempty"`
}
复制代码

CronJob

type CronJob struct {
    metav1.TypeMeta `json:",inline"`
    metav1.ObjectMeta `json:"metadata,omitempty"`

    // CronJob定义
    Spec CronJobSpec `json:"spec,omitempty"`

    // CronJob的状态
    Status CronJobStatus `json:"status,omitempty"`
}

type CronJobSpec struct {
    // 执行周期, 详情https://zh.wikipedia.org/wiki/Cron
    Schedule string `json:"schedule"`

    // 等待调度的时间,若是到时间还未被调度,无论什么缘由,都算任务失败
    StartingDeadlineSeconds *int64 `json:"startingDeadlineSeconds,omitempty"`

    // 对并发任务的处理方案,例如CronJob A,每分钟执行一次,可是执行时间超过了一分钟,则在第二次执行时间到达时的处理方案
    // 值为Allow、Forbid、Replace
    // Allow 容许屡次任务同时进行
    // Forbid 忽略第二次执行,须要等到第一次任务执行完成后才能够
    // Replace 取消当前任务,第二次执行替代第一次执行
    ConcurrencyPolicy ConcurrencyPolicy `json:"concurrencyPolicy,omitempty"`

    // 是否暂停
    // 在修改了此值以后,控制器会中止后续的任务执行,可是已经开始的任务不受影响
    Suspend *bool `json:"suspend,omitempty"`

    // Job模板
    JobTemplate JobTemplateSpec `json:"jobTemplate"`

    // 任务成功(失败)记录上限,默认值而为3
    SuccessfulJobsHistoryLimit *int32 `json:"successfulJobsHistoryLimit,omitempty"`
    FailedJobsHistoryLimit *int32 `json:"failedJobsHistoryLimit,omitempty"`
}

type ConcurrencyPolicy string
const (
    AllowConcurrent ConcurrencyPolicy = "Allow"
    ForbidConcurrent ConcurrencyPolicy = "Forbid"
    ReplaceConcurrent ConcurrencyPolicy = "Replace"
)

type JobTemplateSpec struct {
    metav1.ObjectMeta `json:"metadata,omitempty"`
    Spec batchv1.JobSpec `json:"spec,omitempty"`
}
复制代码

Job简单示例

定义一个指望成功执行4次、同时只启动2个Pod来执行的任务配置。markdown

apiVersion: batch/v1
kind: Job
metadata:
 name: ab
 labels:
 app: ab
spec:
 completions: 4
 parallelism: 2
 template:
 metadata:
 labels:
 app: ab
 spec:
 restartPolicy: Never
 containers:
 - name: ab
 image: jordi/ab
 args:
 - -n100
 - -c10
 - -k
 - -r
 - http://www.mi0ffice.cn/
复制代码

运行状态和最终状态以下并发

$ kubectl describe job/ab
Name:           ab
Namespace:      default
Selector:       controller-uid=ba5277a5-1f53-46dc-965a-7bb676d3201e
Labels:         app=ab
Annotations:    <none>
Parallelism:    2
Completions:    4
Start Time:     Sun, 19 Jan 2020 19:06:20 +0800
Completed At:   Sun, 19 Jan 2020 19:07:10 +0800
Duration:       50s
Pods Statuses:  0 Running / 4 Succeeded / 0 Failed
Pod Template:
  Labels:  app=ab
           controller-uid=ba5277a5-1f53-46dc-965a-7bb676d3201e
           job-name=ab
  Containers:
   ab:
    Image:      jordi/ab
    Port:       <none>
    Host Port:  <none>
    Args:
      -n100
      -c10
      -k
      -r
      http://www.mi0ffice.cn/
    Environment:  <none>
    Mounts:       <none>
  Volumes:        <none>
Events:
  Type    Reason            Age   From            Message
  ----    ------            ----  ----            -------
  Normal  SuccessfulCreate  54s   job-controller  Created pod: ab-2mvhc
  Normal  SuccessfulCreate  54s   job-controller  Created pod: ab-hq64x
  Normal  SuccessfulCreate  32s   job-controller  Created pod: ab-cr7fz
  Normal  SuccessfulCreate  27s   job-controller  Created pod: ab-kc7q7
复制代码

对于CronJob不在多说了,你们本身试一试就知道了。须要注意,CronJob的apiVersion为 batch/v1beta1app

相关文章
相关标签/搜索