首页 > 其他分享 >高级调度 —— CronJob计划任务、初始化容器 InitContainer

高级调度 —— CronJob计划任务、初始化容器 InitContainer

时间:2023-11-03 21:11:20浏览次数:32  
标签:初始化 CronJob InitContainer 容器 任务 执行 spec

一、CronJob 计划任务

在 k8s 中周期性运行计划任务,与 linux 中的 crontab 相同
注意点:CronJob 执行的时间是 controller-manager 的时间,所以一定要确保 controller-manager 时间是准确的,另外 cronjob

一)cron 表达式

# ┌───────────── 分钟 (0 - 59)
# │ ┌───────────── 小时 (0 - 23)
# │ │ ┌───────────── 月的某天 (1 - 31)
# │ │ │ ┌───────────── 月份 (1 - 12)
# │ │ │ │ ┌───────────── 周的某天 (0 - 6)(周日到周一;在某些系统上,7 也是星期日)
# │ │ │ │ │                          或者是 sun,mon,tue,web,thu,fri,sat
# │ │ │ │ │
# │ │ │ │ │
# * * * * *

二)配置文件

apiVersion: batch/v1
kind: CronJob  # 定时任务
metadata:
  name: cron-job-test   # 定时任务名字
spec:
  concurrencyPolicy: Allow # 并发调度策略:Allow 允许并发调度,Forbid:不允许并发执行,Replace:如果之前的任务还没执行完,就直接执行新的,放弃上一个任务
  failedJobsHistoryLimit: 1 # 保留多少个失败的任务
  successfulJobsHistoryLimit: 3 # 保留多少个成功的任务
  suspend: false # 是否挂起任务,若为 true 则该任务不会执行
#  startingDeadlineSeconds: 30 # 间隔多长时间检测失败的任务并重新执行,时间不能小于 10
  schedule: "* * * * *" # 调度策略
  jobTemplate:
    spec:
      template:
        spec:
          containers:
          - name: busybox
            image: busybox:1.28
            imagePullPolicy: IfNotPresent
            command:
            - /bin/sh
            - -c
            - date; echo Hello from the Kubernetes cluster
          restartPolicy: OnFailure

二)初始化容器 InitContainer

在真正的容器启动之前,先启动 InitContainer,在初始化容器中完成真实容器所需的初始化操作,完成后再启动真实的容器。
相对于 postStart 来说,首先 InitController 能够保证一定在 EntryPoint 之前执行,而 postStart 不能,其次 postStart 更适合去执行一些命令操作,而 InitController 实际就是一个容器,可以在其他基础容器环境下执行更复杂的初始化功能。
在 pod 创建的模板中配置 initContainers 参数:

spec:
  initContainers:
  - image: nginx
    imagePullPolicy: IfNotPresent
    command: ["sh", "-c", "echo 'inited;' >> ~/.init"]
    name: init-test

标签:初始化,CronJob,InitContainer,容器,任务,执行,spec
From: https://www.cnblogs.com/yifanSJ/p/17808496.html

相关文章

  • automapper 两种初始化方式
     另外一种 选择安装AutoMapper.Extensions.Microsoft.DependencyInjection这个包一种像下面这样收动配置,这种只需要引入基础包AutoMapper.IConfigurationProviderconfig=newMapperConfiguration(cfg=>{cfg.AddProfile<TradeApiMappingProfile>();cfg.AddProfil......
  • C++构造函数初始化列表
    构造函数的一项重要功能是对成员变量进行初始化,为了达到这个目的,可以在构造函数的函数体中对成员变量一一赋值,还可以采用初始化列表。C++构造函数的初始化列表使得代码更加简洁,请看下面的例子:#include<iostream>usingnamespacestd;classStudent{private:......
  • C++使用new来初始化指向类的指针
    C++使用new来初始化类的指针1.ClassName*p=newClassName;调用默认构造函数。如果类里没有写默认构造函数,会使用编译器帮我们生成的,但不会初始化成员变量,如classNoConstructor//没写构造函数的类{public:~NoConstructor(){}voidprintVal(){......
  • 安装MySQL初始化问题由于找不到VCRUNTIME140_1.dll,无法继续执行代码。重新安装程序可
    1.关于安装MySQL初始化遇到的问题出现的是如下图错误 这是安装mysql-8.0.25初始化的时候我遇到的报错解决方法如下:安装微软常用运行库合集[下载地址,没有积分的可以评论区联系我](https://download.csdn.net/download/qq_42603590/19686518)安装好之后就不会报错了好了之......
  • python tkinter事件循环中一直检测初始化加载文件有没有加载成功
     pythontkinter事件循环中一直检测初始化加载文件有没有加载成功importtkinterastkdefcheck_file_loaded():#检查文件是否加载成功的逻辑iffile_loaded:#文件加载成功,执行相应操作print("文件加载成功")else:#文件未加......
  • Java数组_01静态初始化数组
    1、初始化  2、访问数组数据 3、遍历数组 ......
  • (2)PC微信UI自动化-微信窗体自动化初始化(C#)
    ​ 我们接下来的操作的对象是微信窗体,分成这几个步骤可以将微信窗体进行自动化操作前的初始化(1)通过窗体名称找到微信句柄指针。(2)通过窗体指针找到微信的进程ID。(3)使用进程ID初始化自动化组件服务。(4)设置微信窗体的状态为激活。(1)找到PC端微信窗体并获取微信窗体的句柄数据......
  • QPushButton 类初始化方法
    QPushButton类初始化方法以下是QPushButton类的初始化方法和常用参数的示例:QPushButton(text,parent=None)Pythontext:按钮显示的文本,默认为空;parent:按钮的父部件,可以是另一个部件;不指定时自动关联到默认的顶级窗口;QPushButton示例以下是一个使用QPushButton创建......
  • springboot正常启动的时候,@Configuration的@Bean属于初始化就得加载的,当该springboot
      ......
  • Kafka的部分初始化参数的学习与整理
    Kafka的部分初始化参数的学习与整理背景前段时间跟同事一起处理过kafka的topicoffset的retention时间与log的retention时间不一致.导致消息还有,但是offset没有,导致重复消费的问题.发现很多产品其实参数很复杂,不能只看一个参数就立马进行修改.应该完整细致的......