Job 对象


1 )概述

  • Job 任务在 K8s中类似 DaemonSet 和 Deployment 类似的对象,也是负责管理 Pod 的
  • 用于负责一些一次性的业务需求,它不是需要一直在后台运行的,所以不是 DaemonSet
  • 同时 Deployment 部署的是大的应用系统本身,它也不是一个 Deployment
  • 它可以执行一次,或者是多次有限次数的,或者是定期哪天执行的这么一个任务
  • 对于这种需求来讲就定义一个job

2 )场景

  • 场景1:在运行的博客系统中给用户添加一个默认的用户头像的新功能

    • 这个任务能够让每一个用户在登录我的博客系统之后,他自己能看到有一个默认的头像需求
    • 这个需求,它是一个一次性的需求,可以考虑用任务来做
  • 场景2: 文件管理的功能

    • 我要定期的可能去删除一些任务
    • 我要定期删除某些就是说存储的一些日志
    • 或者是一些比如三年前没有人下载过的文件
    • 这类定时任务,可以通过job方式去执行

3 )应用

  • $ vi job-demo1.yaml

    apiVersion: batch/v1
    kind: Job
    metadata: # 对外暴露本身的信息
      name: pi
    spec:
      template:
        spec:
          containers:
          - name: pi
            image: registry.cn-beijing.aliyuncs.com/google_registry/perl:5.26
            command: ["perl", "-Mbignum=bpi", "-wle", "print bpi(100)"]
          restartPolicy: Never
      backoffLimit: 4
    
  • $ kubectl apply -f job-demo1.yaml

    job.batch/pi created
    
  • $ kubectl get job

    NAME   COMPLETIONS   DURATION   AGE
    pi     1/1           2s         25s
    
  • $ kubectl get po

    NAME          READY   STATUS      RESTARTS   AGE
    pi--1-v9864   0/1     Completed   0          59s
    
  • $ kubectl logs pi--1-v9864

    3.141592653589793238462643383279502884197169399375105820974944592307816406286208998628034825342117068
    
  • $ echo $(kubectl get pods --selector=job-name=pi --output=jsonpath='{.items[*].metadata.name}')

    pi--1-v9864
    
    • K8s 提供了一个很强大的功能,就叫select选择器
    • 首先在选取所有的pods之后,定义一些过滤器,比如过滤某些指定的label
    • 或者拆分
    • $ pods=$(kubectl get pods --selector=job-name=pi --output=jsonpath='{.items[*].metadata.name}')
    • $ echo $pods
  • $ kubectl delete -f job-demo1.yaml 清理Job

    job.batch "pi" deleted
    
Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐