zoukankan      html  css  js  c++  java
  • Kubernetes --(k8s)Job、CronJob

    Job

    https://www.kubernetes.org.cn/job
    https://www.kubernetes.org.cn/cronjob

    Job负责批量处理短暂的一次性任务 (short lived one-off tasks),即仅执行一次的任务,它保证批处理任务的一个或多个Pod成功结束.

    Kubernetes支持以下几种Job:

    1. 非并行Job:通常创建一个Pod直至其成功结束
    2. 固定结束次数的Job:设置.spec.completions,创建多个Pod,直到.spec.completions个Pod成功结束
    3. 带有工作队列的并行Job:设置.spec.Parallelism但不设置.spec.completions,当所有Pod结束并且至少一个成功时,Job就认为是成功
    • 根据.spec.completions和.spec.Parallelism的设置,可以将Job划分为以下几种pattern:
    Job类型 使用示例 行为 completions Parallelism
    一次性Job 数据库迁移 创建一个Pod直至其成功结束 1 1
    固定结束次数的Job 处理工作队列的Pod 依次创建一个Pod运行直至completions个成功结束 2+ 1
    固定结束次数的并行Job 多个Pod同时处理工作队列 依次创建多个Pod运行直至completions个成功结束 2+ 2+
    并行Job 多个Pod同时处理工作队列 创建一个或多个Pod直至有一个成功结束 1 2+

    实验1:一次性Job

    第一步:编写job的yml文件

    apiVersion: batch/v1
    kind: Job
    metadata:
       name: job
    spec:
       template:
          spec:
             restartPolicy: Never
             containers:
             - name: job
               image: busybox
               command: ["echooo","Hello World"]
    

    第二步:执行yml文件

    ╭─root@node1 ~  
    ╰─➤  kubectl apply -f job.yml      
    job.batch/job created
    
    

    第三步:查看pod

    ╭─root@node1 ~  
    ╰─➤  kubectl get pod
    NAME        READY   STATUS               RESTARTS   AGE
    job-jhlsf   0/1     ContainerCannotRun   0          53s
    job-ldxnr   0/1     ContainerCannotRun   0          23s
    job-m6cpf   0/1     ContainerCreating    0          3s
    job-m8skh   0/1     ContainerCannotRun   0          64s
    
    

    问题发现:创建了很多pod,为什么?

    解答:Job Controller负责根据Job Spec创建Pod,并持续监控Pod的状态,直至其成功结束。如果失败,则根据restartPolicy(只支持OnFailure和Never,不支持Always)决定是否创建新的Pod再次重试任务。如果重启策略为OnFailure的话,pod会一直重启!

    实验2:固定结束次数的并行Job

    第一步:编写yml文件

    apiVersion: batch/v1
    kind: Job
    metadata: 
       name: job
    spec:
       completions: 2    # 完成数
       parallelism: 2    # 并行数
       template:
          spec:
             restartPolicy: OnFailure
             containers:
             - name: job
               image: busybox
               command: ["/bin/sh","-c","sleep 5;echo Hello World"]
    

    第二步:运行

    ╭─root@node1 ~  
    ╰─➤  kubectl apply -f job.yml 
    job.batch/job created
    
    

    第三步:查看

    ╭─root@node1 ~  
    ╰─➤  kubectl get pod
    NAME        READY   STATUS      RESTARTS   AGE
    job-x5tfw   1/1     Running     0          35s
    job-zx8p2   0/1     Completed   0          35s
    
    ╭─root@node1 ~  
    ╰─➤  kubectl logs job-x5tfw 
    Hello World
    ╭─root@node1 ~  
    ╰─➤  kubectl logs job-zx8p2 
    Hello World
    
    

    CronJob

    CronJob即定时任务,就类似于Linux系统的crontab,在指定的时间周期运行指定的任务。

    实验:

    第一步:编写yml文件

    apiVersion: batch/v1beta1
    kind: CronJob
    metadata:
       name: cronjob1
    spec:
       schedule: "* * * * *"
       jobTemplate:
          metadata:
             name: job
          spec:
             template:
                metadata:
                   name: pod
                spec:
                   restartPolicy: OnFailure
                   containers:
                   - name: busybox
                     image: busybox
                     command: ["echo","hello"]
                     imagePullPolicy: IfNotPresent
    

    第二步:运行

    ╭─root@node1 ~  
    ╰─➤  kubectl apply -f cronjob.yml 
    cronjob.batch/cronjob1 created
    

    第三步: 查看

    ╭─root@node1 ~  
    ╰─➤  kubectl get pod
    NAME                        READY   STATUS      RESTARTS   AGE
    cronjob1-1567149060-vjqtp   0/1     Completed   0          43s
    ╭─root@node1 ~  
    ╰─➤  kubectl logs cronjob1-1567149060-vjqtp
    hello
    
    

  • 相关阅读:
    解决Xcode 7编译错误:does not contain bitcode
    iOS无处不在详解iOS集成第三方登录(SSO授权登录无需密码)
    iOS- 如何集成支付宝
    99.Recover Binary Search Tree
    101.Symmetric Tree
    108.Convert Sorted Array to Binary Search Tree
    242.Valid Anagram
    292.Nim Game
    872.Leaf-Similar Trees
    HDU-1390 Binary Numbers
  • 原文地址:https://www.cnblogs.com/du-z/p/11433886.html
Copyright © 2011-2022 走看看