云原生之kubernetes在kubernetes集群下的jobs与cronjobs管理

Posted 江湖有缘

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了云原生之kubernetes在kubernetes集群下的jobs与cronjobs管理相关的知识,希望对你有一定的参考价值。

【云原生之kubernetes】在kubernetes集群下的jobs与cronjobs管理

一、jobs与cronjobs介绍

1.job介绍

jobs:job负责处理任务,即仅执行一次的任务,它保证批处理任务的一个或多个Pod成功结束。

2.cronjobs介绍

CronJob在Job上加上了时间调度,CronJob是基于调度的Job执行将会自动产生多个job,调度格式参考Linux的cron系统。

二、检查本地kubernetes集群

1.检查工作节点状态

[root@k8s-master jobs]# kubectl get nodes -owide
NAME         STATUS   ROLES                  AGE   VERSION   INTERNAL-IP     EXTERNAL-IP   OS-IMAGE                KERNEL-VERSION          CONTAINER-RUNTIME
k8s-master   Ready    control-plane,master   18d   v1.23.1   192.168.3.201   <none>        CentOS Linux 7 (Core)   3.10.0-957.el7.x86_64   containerd://1.6.6
k8s-node01   Ready    <none>                 18d   v1.23.1   192.168.3.202   <none>        CentOS Linux 7 (Core)   3.10.0-957.el7.x86_64   containerd://1.6.6
k8s-node02   Ready    <none>                 18d   v1.23.1   192.168.3.203   <none>        CentOS Linux 7 (Core)   3.10.0-957.el7.x86_64   containerd://1.6.6

2.检查系统pod状态

[root@k8s-master jobs]# kubectl get pods -A  -owide
NAMESPACE     NAME                                       READY   STATUS    RESTARTS      AGE   IP               NODE         NOMINATED NODE   READINESS GATES
kube-system   calico-kube-controllers-7bc6547ffb-2nf66   1/1     Running   2 (91m ago)   18d   10.244.235.201   k8s-master   <none>           <none>
kube-system   calico-node-8c4pn                          1/1     Running   2 (91m ago)   18d   192.168.3.202    k8s-node01   <none>           <none>
kube-system   calico-node-f28qq                          1/1     Running   2 (91m ago)   18d   192.168.3.203    k8s-node02   <none>           <none>
kube-system   calico-node-wmc2j                          1/1     Running   2 (91m ago)   18d   192.168.3.201    k8s-master   <none>           <none>
kube-system   coredns-6d8c4cb4d-6gm4x                    1/1     Running   2 (91m ago)   18d   10.244.235.200   k8s-master   <none>           <none>
kube-system   coredns-6d8c4cb4d-7vxlz                    1/1     Running   2 (91m ago)   18d   10.244.235.199   k8s-master   <none>           <none>
kube-system   etcd-k8s-master                            1/1     Running   2 (91m ago)   18d   192.168.3.201    k8s-master   <none>           <none>
kube-system   kube-apiserver-k8s-master                  1/1     Running   2 (91m ago)   18d   192.168.3.201    k8s-master   <none>           <none>
kube-system   kube-controller-manager-k8s-master         1/1     Running   2 (91m ago)   18d   192.168.3.201    k8s-master   <none>           <none>
kube-system   kube-proxy-8dfw8                           1/1     Running   2 (91m ago)   18d   192.168.3.201    k8s-master   <none>           <none>
kube-system   kube-proxy-ghzrv                           1/1     Running   2 (91m ago)   18d   192.168.3.203    k8s-node02   <none>           <none>
kube-system   kube-proxy-j867z                           1/1     Running   2 (91m ago)   18d   192.168.3.202    k8s-node01   <none>           <none>
kube-system   kube-scheduler-k8s-master                  1/1     Running   2 (91m ago)   18d   192.168.3.201    k8s-master   <none>           <none>

三、查询k8s中jobs的相关模块

1.查询查询apiVersion

[root@k8s-master jobs]#  kubectl api-resources |grep job
cronjobs                          cj           batch/v1                               true         CronJob
jobs                                           batch/v1                               true         Job

2.查询jobs

[root@k8s-master jobs]# kubectl explain jobs --recursive  |more
KIND:     Job
VERSION:  batch/v1

DESCRIPTION:
     Job represents the configuration of a single job.

FIELDS:
   apiVersion	<string>
   kind	<string>
   metadata	<Object>
      annotations	<map[string]string>
      clusterName	<string>
      creationTimestamp	<string>
      deletionGracePeriodSeconds	<integer>
      deletionTimestamp	<string>
      finalizers	<[]string>
      generateName	<string>
      generation	<integer>
      labels	<map[string]string>
      managedFields	<[]Object>
         apiVersion	<string>
         fieldsType	<string>
         fieldsV1	<map[string]>
         manager	<string>
         operation	<string>
         subresource	<string>
         time	<string>
      name	<string>
      namespace	<string>
      ownerReferences	<[]Object>
         apiVersion	<string>
         blockOwnerDeletion	<boolean>
         controller	<boolean>
         kind	<string>
         name	<string>
         uid	<string>
      resourceVersion	<string>
      selfLink	<string>
      uid	<string>
   spec	<Object>
--More--

四、k8s中使用jobs创建一次性任务

1.编辑jobs.yaml文件

[root@k8s-master jobs]# cat jobs.yaml 
apiVersion: batch/v1
kind: Job
metadata:
  name: jobs-tes
  namespace: default
spec:
  backoffLimit: 3
  activeDeadlineSeconds: 120      #限制容器运行时间
#  ttlSecondsAfterFinished: 10          #任务执行完成后,10s内会删除pod
#  selector:
#    matchLabels:
#      app: helloworld
  template:
    metadata:
      name: hellworld
      labels:
        app: helloworld
    spec:
      restartPolicy: Never
      containers:
      - name: helloworld
        image: busybox:1.28
        command:
        - /bin/sh
        - -c
        - "echo 'hello the world'"

2.运行jobs

 kubectl apply -f jobs.yaml 

3.查看jobs

[root@k8s-master jobs]# kubectl get jobs.batch jobs-tes 
NAME       COMPLETIONS   DURATION   AGE
jobs-tes   1/1           19s        40s

4.查看运行日志

[root@k8s-master jobs]# kubectl logs  jobs-tes-ns64n 
hello the world

5.删除jobs

[root@k8s-master jobs]# kubectl delete jobs.batch jobs-tes 
job.batch "jobs-tes" deleted

五、创建cronjobs类型任务

1.编写cronjobs.yaml文件

[root@k8s-master jobs]# cat cronjobs.yaml 
apiVersion: batch/v1
kind: CronJob
metadata:
  name: cronjob-test
  namespace: default
spec:
  schedule: "*/1 * * * *"
  successfulJobsHistoryLimit: 3  #保留成功任务的历史记录次数
#  startingDeadlineSeconds:150 #上一个任务在150s后没有完成,进行下一个任务;在150s内,检测任务完成,立即执行下一个任务
  jobTemplate:
    metadata:
      name: helloworld
    spec:
      backoffLimit: 3
      activeDeadlineSeconds: 120      #限制容器运行时间
    #  ttlSecondsAfterFinished: 10          #任务执行完成后,10s内会删除pod
    #  selector:
    #    matchLabels:
    #      app: helloworld
      template:
        metadata:
          name: hellworld
          labels:
            app: helloworld
        spec:
          restartPolicy: Never
          containers:
          - name: helloworld
            image: busybox:1.28
            command:
            - /bin/sh
            - -c
            - "echo 'hello life'"

2.创建cronjobs

[root@k8s-master jobs]# kubectl apply -f cronjobs.yaml 
cronjob.batch/cronjob-test created

3.查看cronjobs状态

[root@k8s-master jobs]# kubectl get cronjobs.batch cronjob-test 
NAME           SCHEDULE      SUSPEND   ACTIVE   LAST SCHEDULE   AGE
cronjob-test   */1 * * * *   False     0        38s             2m32s

4.查看任务完成状态

[root@k8s-master jobs]# kubectl get pods
NAME                          READY   STATUS      RESTARTS   AGE
cronjob-test-27639747-9rbzx   0/1     Completed   0          2m21s
cronjob-test-27639748-hldht   0/1     Completed   0          81s
cronjob-test-27639749-jqbwk   0/1     Completed   0          21s

5.查看cronjobs日志

[root@k8s-master jobs]# kubectl logs cronjob-test-27639748-hldht 
hello life
[root@k8s-master jobs]# kubectl logs cronjob-test-27639749-jqbwk 
hello life
[root@k8s-master jobs]# kubectl logs cronjob-test-27639750-8brd4
hello life

以上是关于云原生之kubernetes在kubernetes集群下的jobs与cronjobs管理的主要内容,如果未能解决你的问题,请参考以下文章

云原生之kubernetes在kubernetes集群下的jobs与cronjobs管理

云原生之kubernetes在kubernetes集群下的映射外部服务—Eendpoint

云原生之kubernetes实战使用yum方式部署kubernetes集群

云原生之kubernetes实战使用yum方式部署kubernetes集群

云原生之kubernetes实战kubernetes集群的证书管理

云原生核心技术之——Kubernetes