zoukankan      html  css  js  c++  java
  • Controller之job和cronjob

    一、job概念(一次性任务)

    Job负责批量处理短暂的一次性任务 (short lived one-off tasks),即仅执行一次的任务,它保证批处理任务的一个或多个Pod成功结束。
    Kubernetes支持以下几种Job:
    
    非并行Job:通常创建一个Pod直至其成功结束
    固定结束次数的Job:设置.spec.completions,创建多个Pod,直到.spec.completions个Pod成功结束
    带有工作队列的并行Job:设置.spec.Parallelism但不设置.spec.completions,当所有Pod结束并且至少一个成功时,Job就认为是成功
    

    二、CronJob概念(定时任务)

    CronJob即定时任务,就类似于Linux系统的crontab,在指定的时间周期运行指定的任务。在Kubernetes 1.5,使用CronJob需要开启batch/v2alpha1 API,即–runtime-config=batch/v2alpha1。
    
    CronJob Spec
    .spec.schedule指定任务运行周期,格式同Cron
    .spec.jobTemplate指定需要运行的任务,格式同Job
    .spec.startingDeadlineSeconds指定任务开始的截止期限
    .spec.concurrencyPolicy指定任务的并发策略,支持Allow、Forbid和Replace三个选项
    

    三、job示例

    [root@master-191 ~]# kubectl get pod,svc
    NAME             TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)   AGE
    svc/kubernetes   ClusterIP   10.254.0.1   <none>        443/TCP   24d
    [root@master-191 ~]# vim job.yaml
    apiVersion: batch/v1
    kind: Job
    metadata:
      name: pi
    spec:
      template:
        spec:
          containers:
          - name: pi
            image: perl
            command: ["perl",  "-Mbignum=bpi", "-wle", "print bpi(2000)"]
          restartPolicy: Never
      backoffLimit: 4
    
    [root@master-191 ~]# kubectl create -f job.yaml 
    job "pi" created
    [root@master-191 ~]# kubectl get pod
    NAME       READY     STATUS              RESTARTS   AGE
    pi-c92zx   0/1       ContainerCreating   0          7s
    [root@master-191 ~]# kubectl get pod
    NAME       READY     STATUS    RESTARTS   AGE
    pi-c92zx   1/1       Running   0          1m
    #通过日志,可查看计算的圆周率值,想看到这个效果要快点做,执行完pod就删除了,当然删除了以后,往上面翻记录,找到pod名称也能看到日志。
    [root@master-191 ~]# kubectl logs -f pi-c92zx
    3.14159265358979323846264338327950288419716939937510582097494459230781640628620899862803482534211706798214808651328230664709384460955058223172535940812848111745028410270193852110555964462294895493038196442
    #成功执行后,pod资源已经自动删除
    [root@master-191 ~]# kubectl get pod
    No resources found, use --show-all to see completed objects.
    #查看job执行状态
    [root@master-191 ~]# kubectl get jobs
    NAME      DESIRED   SUCCESSFUL   AGE
    pi        1         1            1m
    

    四、cronjob示例

    [root@master-191 ~]# vim cronjob.yaml
    apiVersion: batch/v1beta1
    kind: CronJob
    metadata:
      name: hello
    spec:
      schedule: "*/1 * * * *"
      jobTemplate:
        spec:
          template:
            spec:
              containers:
              - name: hello
                image: busybox
                args:
                - /bin/sh
                - -c
                - date; echo Hello You xiaoqing Happy new year.
              restartPolicy: OnFailure
    [root@master-191 ~]# kubectl create -f cronjob.yaml 
    cronjob "hello" created
    ###看不到pod,我用的是k8s1.9.9版本,高版本的或许能看见pod的状态由running到completed,这个是正常运行一次结束的状态。
    [root@master-191 ~]# kubectl get pod
    No resources found.
    [root@master-191 ~]# kubectl get pod
    No resources found, use --show-all to see completed objects.
    [root@master-191 ~]# kubectl get cronjob
    NAME      SCHEDULE      SUSPEND   ACTIVE    LAST SCHEDULE   AGE
    hello     */1 * * * *   False     0         34s             1m
    [root@master-191 ~]# kubectl delete -f cronjob.yaml 
    cronjob "hello" deleted
    [root@master-191 ~]# kubectl get pod
    No resources found.
    [root@master-191 ~]# kubectl get cronjob
    No resources found.
    
    七分钟左右时,神奇的看见了一次效果。这个第七分钟不是一定的,看运气的哦。一直查看pod状态,连续2分钟,应该能看到一次效果。
    [root@master-191 ~]# kubectl get cronjob
    NAME      SCHEDULE      SUSPEND   ACTIVE    LAST SCHEDULE   AGE
    hello     */1 * * * *   False     0         1m              7m
    [root@master-191 ~]# kubectl get pod
    NAME                     READY     STATUS              RESTARTS   AGE
    hello-1612683780-xjb2d   0/1       ContainerCreating   0          1s
    [root@master-191 ~]# kubectl get pod
    NAME                     READY     STATUS              RESTARTS   AGE
    hello-1612683780-xjb2d   0/1       ContainerCreating   0          3s
    [root@master-191 ~]# kubectl get pod
    No resources found, use --show-all to see completed objects.
    [root@master-191 ~]# kubectl logs -f hello-1612683780-xjb2d
    Sun Feb  7 07:43:11 UTC 2021
    Hello You xiaoqing Happy new year.
    
    查阅资料发现,这条命令可以看到创建的容器,但看不见echo的输出,因为容器执行完立即就删除了。
    [root@master-191 ~]# kubectl get job --show-all
    NAME               DESIRED   SUCCESSFUL   AGE
    hello-1612685340   1         1            2m
    hello-1612685400   1         1            1m
    hello-1612685460   1         1            45s
    [root@master-191 ~]# kubectl logs -f hello-1612685340
    Error from server (NotFound): pods "hello-1612685340" not found
    
    

    kubenetes官网:https://kubernetes.io/zh/docs
    kubenetes社区:https://www.kubernetes.org.cn
    kuboard.cn官网:https://kuboard.cn/learning

  • 相关阅读:
    CentOS虚拟机和物理机共享文件夹实现
    集训第六周 数学概念与方法 概率 数论 最大公约数 G题
    集训第六周 数学概念与方法 概率 F题
    集训第六周 E题
    集训第六周 古典概型 期望 D题 Discovering Gold 期望
    集训第六周 古典概型 期望 C题
    集训第六周 数学概念与方法 UVA 11181 条件概率
    集训第六周 数学概念与方法 UVA 11722 几何概型
    DAG模型(矩形嵌套)
    集训第五周 动态规划 K题 背包
  • 原文地址:https://www.cnblogs.com/you-xiaoqing/p/14385454.html
Copyright © 2011-2022 走看看