kubernetes学习之路(十二)控制器(三)DaemonSet、Job、CronJob

1、DaemonSet

什么是 DaemonSet

  DaemonSet 确保全部(或者一些)Node 上运行一个 Pod 副本。当有 Node 加入集群时,会自动在其增加一个 Pod,简单来说就是在每一个Node上运行一个副本

典型用法:

  • 运行集群存储 daemon,例如 glusterd、ceph
  • 在每个 Node 上运行日志收集 daemon,如 fluentd、logstash
  • 在每个 Node 上运行监控 daemon,如 Prometheus Node Exporter、collectd、Datadog代理、New Relic代理,或Ganglia gmond

示例:

[root@m1 yaml]# cat daemonset.yaml 

apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: daemonset-example
  labels:
    app: daemonset
spec:
  selector:
    matchLabels:
      name: daemonset-example
  template:
    metadata:
      labels:
        name: daemonset-example
    spec:
      containers:
      - name: daemonset-example
        image: docker.harbor.com/library/nginx:v1


[root@m1 yaml]# kubectl create -f daemonset.yaml 
daemonset.apps/daemonset-example created

结果:

可以看到在两个节点上分别运行了一个副本

[root@m1 yaml]# kubectl get daemonset

NAME                DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR   AGE

daemonset-example   2         2         2       2            2           <none>          10s

 

[root@m1 yaml]# kubectl get daemonset -o wide

NAME                DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR   AGE   CONTAINERS          IMAGES                               SELECTOR

daemonset-example   2         2         2       2            2           <none>          16s   daemonset-example   docker.harbor.com/library/nginx:v1   name=daemonset-example

 

[root@m1 yaml]# kubectl get pod -o wide

NAME                                READY   STATUS    RESTARTS   AGE    IP            NODE    NOMINATED NODE   READINESS GATES

daemonset-example-dxvst             1/1     Running   0          28s    10.244.1.36   m2-n1   <none>           <none>

daemonset-example-lqmbr             1/1     Running   0          28s    10.244.2.34   m3-n2   <none>           <none>

 

2、Job

Job 负责批处理任务,即仅执行一次的任务,它保证批处理任务的一个或多个 Pod 成功结束
 
特殊说明
  • spec.template格式同Pod
  • RestartPolicy仅支持NeverOnFailure
  • 单个Pod时,默认Pod成功运行后Job即结束
  • .spec.completions 标志Job结束需要成功运行的Pod个数,默认为1
  • .spec.parallelism 标志并行运行的Pod的个数,默认为1
  • spec.activeDeadlineSeconds 标志失败Pod的重试最大时间,超过这个时间不会继续重试

示例:

示例中在perl镜像启动后执行任务,任务执行后可通过查看日志的方式查看到 派π的2000位

apiVersion: batch/v1
kind: Job
metadata:
  name: pi
spec:
  template:
    metadata:
      name: pi
    spec:
      containers:
      - name: pi
        image: perl
        command: ["perl", "-Mbignum=bpi", "-wle", "print bpi(2000)"]
      restartPolicy: Never   ##用不重启

查看任务执行情况

可以看到任务数为1,如果完成结果为 1/1 未完成就是0/1

kubectl get job

 

3、CronJob

CronJob 管理基于时间的 Job,即:

  • 在给定时间点只运行一次
  • 周期性的在给定时间的运行

前提条件是kubernetes版本 >=1.8

CronJob Spec

  • .spec.schedule :调度,必须字段,指定任务运行周期,格式同 Cron
  • .spec.jobTemplate : Job模板,必须字段,指定需要运行的任务,格式同Job
  • .spec.startingDeadlineSeconds : 启动Job的期限(秒级别),可选字段。如果因任何原因错过了被调度的时间,那么错过执行的Job将被认为是失败的。如果没有指定,则没有期限
  • .spec.concurrencyPolicy : 并发策略,可选字段。制定了如何处理被 Cron Job 创建的 Job 的并发执行。有三种策略:
  1. Allow(默认):允许并发运行Job
  2. Forbid:禁止并发运行,如果前一个还没有完成,则直接跳过下一个
  3. Replace:取消当前正在运行的 Job,用一个新的来替换

注意:当前策略只能应用于同一个 Cron Job 创建的 Job。如果存在多个Cron Job,他们创建的Job之间总是允许并发运行

  • .spec.suspend : 挂起,可选字段。如果设置为true,后续所有执行都会被挂起。它对已经开始执行的Job不起作用,默认值false
  • .spec.successfulJobsHistoryLimit 和 .spec.failedJobsHistoryLimit : 历史限制,可选字段。指定了可以保留多少完成和失败的Job。默认情况下,他们分别设置为 3 和 1 。设置限制的值为 0 ,相关类型的Job完成后将不会被保留。

示例:

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 from the kubernetes cluster
          restartPolicy: OnFailure

查看

kubectl get cronjob

kubectl get job

删除

kubectl delete cronjob hello

 

 

 

 

 

 

 

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值