• centos7下kubernetes(11。kubernetes-运行一次性任务)


    容器按照持续运行的时间可以分为两类:服务类容器和工作类容器

    服务类容器:持续提供服务

    工作类容器:一次性任务,处理完后容器就退出

    Deployment,replicaset和daemonset都用于管理服务类容器,

    对于工作类的容器,我们用job

    编辑一个简单的job类型的yml文件

    1.apiversion:当前job的apiversion是batch/v1

    2.kind:当前的资源类型是job

    3.restartpolicy指定什么情况下需要重启容器。对于job只能设置为never或者onfailure

    对于其他的controller(比如deployment,replicaset等)可以设置为always

    创建job应用

    通过kubectl get job进行查看

    显示destire为1,成功1

    说明是按照预期启动了一个pod,并且成功执行

    查看pod的状态

    由于myjob的pod处于completed的状态,所以需要加--show-all参数才能显示出来

    通过kubectl logs 查看pod标准输出

    如果job没有执行成功,怎么办?

    修改job.yml文件,故意引起一个错误,然后重新启动myjob

    先将原来的job删除

     然后重新启动一个新的job

    重新启动一个job,我们发现有一个未成功的job,查看pod的时候竟然有两个job相关的pod,目标job只有1个啊,为什么??

    我们再次查看一下

    目前达到了6个

    原因是:当地一个pod启动时,容器失败退出,根据restartPolicy:Never,此失败容器不会被重启,但是job destired的pod是1,目前successful为1。由于我们的命令是错误的,successful永远不能到1,

    job contorller会一直创建新的pod达到job得期望状态,最多重新创建6次,因为K8S为job提供了spec.bakcofflimits来限制重试次数,默认为6.

    如果将restartpolicy设置为OnFailure会怎么样?我们来实验一下

    修改job.yml文件

    将restartpolicy修改为OnFailure

    重新启动job.yml

    pod数量只有1,job为失败得状态

    但是pod得restart得次数在变化,说明onfailure生效,容器失败后会自动重启

    并行执行job

    之前我们得实验都是一次运行一个job里只有一个pod,当我们同时运行多个pod得时候,怎么进行设置呢?

    可以通过:parallelism设置

    修改job.yml文件

    此次我们执行一个job同时运行3个pod

    kubectl apply -f job.yml

    job一共启动了3个pod,而且AGE相同,说明是并行运行得。

    还可以通过completions设置job成功完成pod的总数;

    配置含义:每次运行3个pod,知道运行了6个结束

    重新执行一下

    kubectl apply -f job.yml

    也不是很准,但是确实不是同时并行启动的

    定时执行job

    kubernetes提供了类似crontab定时执行任务的功能

    首先修改apiserver使api支持cronjob

    vim /etc/kubernetes/manifests/kube-apiserver.yaml

     - --runtime-config=batch/v1beta1=true    加入这一行

     保存退出

    kubectl apiversions   查看api版本(如果这里没有生效的话,需要重启kubelet这个服务)

    systemctl restart kubelet.service

    修改yml文件如下: 

    apiVersion: batch/v1beta1         batch/v1beta1当前cronjob的apiserver
    kind: CronJob     当前资源类型为cronjob
    metadata:
      name: cronjob
    spec:
      schedule: "*/1 * * * *"      指定什么时候运行job,格式与linux中的计划任务一致
      jobTemplate:
        spec:
          template:
            spec:
              containers:
              - name: hello
                image: busybox
                command: ["echo","hello k8s job!"]
              restartPolicy: OnFailure
    ~

    运行这个job

    kubectl apply -f job.yml

    如果出现一下错误请一定要检查yml文件的内容,进行修改

     正常运行如下:

     查看cronjob

    kubectl get cronjob

     

    查看job,通过时间间隔可以看到,每1分种创建一个pod

     kubectl get job

     

    查看pod日志

     删除cronjob

    kubectl delete cronjob cronjob

  • 相关阅读:
    SSHkey的申请
    版本控制系统-集中式VS分布式(分享)
    01-OC中数组NSArray的遍历
    第4周小组作业:WordCount优化
    第2周作业1:开设博客
    第2周个人作业:WordCount
    测试课程总结2017
    优秀博客的评比结果及相关说明
    静态代码检查工具简介
    Selenium安装中的一些问题及解决办法-软硕1703班3组整理分享
  • 原文地址:https://www.cnblogs.com/lkun/p/9720043.html
Copyright © 2020-2023  润新知