k8s+springboot+CronJob 定时任务部署

这篇具有很好参考价值的文章主要介绍了k8s+springboot+CronJob 定时任务部署。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

kubernetes+springboot+CronJob 定时任务配置如下代码:

k8s+springboot+CronJob 定时任务部署,kubernetes,spring boot,容器

  1. cronjob.yaml k8s 文件  
    apiVersion: batch/v1
    kind: CronJob
    metadata:
      name: k8s-springboot-demo
      namespace: rz-dt
    spec:
      failedJobsHistoryLimit: 3 #执行失败job任务保留数量
      successfulJobsHistoryLimit: 5 #执行成功job任务保留数量
      startingDeadlineSeconds: 180
      concurrencyPolicy: Forbid
      schedule: "*/1 * * * *" #每分钟执行一次
      jobTemplate:
        spec:
          template:
            spec:
              containers:
                - name: k8s-springboot-demo
                  image: rz-dt-image-server-registry-vpc.cn-shanghai.cr.aliyuncs.com/rz-dt/k8s-springboot-demo:$IMG_TAG
                  imagePullPolicy: Always
                  #command: ["java","-jar","/usr/local/cenobitor/k8s-springboot-demo.jar"]#dockerfile已有此处不需要配置
                  args: ["sendEmail","sendEmail2"] # 配置任务类的名称
                  volumeMounts:
                    - name: time-config
                      mountPath: /etc/localtime
                      readOnly: true
                  #envFrom:
                  # - configMapRef:
                  #      name: smcp-config
                  # - secretRef:
                  #     name: smcp-service-secret
                  resources:
                    requests:
                      cpu: "250m"
                      memory: 216Mi
                    limits:
                      cpu: "500m"
                      memory: 512Mi
              restartPolicy: Never
              #从私有仓库拉取镜像凭证
              imagePullSecrets:
                - name: rz-dt-miyue-vpc
              volumes:
                - name: time-config
                  hostPath:
                    path: /usr/share/zoneinfo/Asia/Shanghai
    
  2. Dockerfile 文件
    #基础镜像,如果本地仓库没有,会从远程仓库拉取 openjdk:8
    FROM openjdk:8
    #暴露端口
    EXPOSE 8089
    #容器中创建目录
    RUN mkdir -p /usr/local/cenobitor
    #编译后的jar包copy到容器中创建到目录内
    COPY target/k8s-springboot-demo.jar /usr/local/cenobitor/k8s-springboot-demo.jar
    #指定容器时区
    RUN rm -f /etc/localtime \
    && ln -sv /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
    && echo "Asia/Shanghai" > /etc/timezone
    #指定容器启动时要执行的命令
    ENTRYPOINT ["java","-jar","/usr/local/cenobitor/k8s-springboot-demo.jar"]
    
  3. test.sh 文件

    echo "开始制作镜像..."
    image_tag=`date +%Y-%m-%d-%H-%M-%S` #_%H%M
    echo "当前时间:$image_tag"
    docker build -t k8s-springboot-demo:${image_tag} .
    echo "制作镜像成功!"
    
    echo "登录"
    sudo docker login --username=aliyun0398513152 rz-dt-image-server-registry-vpc.cn-shanghai.cr.aliyuncs.com --password=1234
    
    echo "镜像最新版本提交"
    docker tag k8s-springboot-demo:${image_tag} rz-dt-image-server-registry-vpc.cn-shanghai.cr.aliyuncs.com/rz-dt/k8s-springboot-demo:${image_tag}
    docker push rz-dt-image-server-registry-vpc.cn-shanghai.cr.aliyuncs.com/rz-dt/k8s-springboot-demo:${image_tag}
    
    echo "k8s一键部署"
    export IMG_TAG=${image_tag}
    envsubst < cronjob.yaml | kubectl --kubeconfig ~/.kube-rz/config apply -f -
    
    
    

    4个代码实现类:

  4. package com.example.demo.job;
    
    public interface Command {
        /**
         * 遵循Unix约定,如果命令执行正常,则返回0;否则为非0。
         */
        int execute(String... args);
    }
    
    
    
    package com.example.demo.job;
    
    import lombok.extern.slf4j.Slf4j;
    import org.springframework.stereotype.Component;
    
    @Component
    @Slf4j
    public class SendEmailCommand implements Command {
    
        @Override
        public int execute(String... args) {
    
            try {
                // 省略业务逻辑代码
                for (String arg:args) {
                    log.info("send email  success args:" +arg);
                }
    
    
                log.info("send email success");
    
                return 0;
    
            } catch (Exception e) {
                log.error("send email error", e);
                return -1;
            }
        }
    }
    
    
    
    package com.example.demo.job;
    
    import lombok.extern.slf4j.Slf4j;
    import org.springframework.stereotype.Component;
    
    @Component
    @Slf4j
    public class SendEmail2Command implements Command {
    
        @Override
        public int execute(String... args) {
    
            try {
                // 省略业务逻辑代码
    
                for (String arg:args) {
                    log.info("send email 2  success args:" +arg);
                }
    
                log.info("send email 2 success");
    
                return 0;
    
            } catch (Exception e) {
                log.error("send email error", e);
                return -1;
            }
        }
    }
    
    
    
    package com.example.demo.job;
    
    import lombok.extern.slf4j.Slf4j;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.boot.CommandLineRunner;
    import org.springframework.stereotype.Component;
    
    import javax.annotation.PostConstruct;
    import java.util.Arrays;
    import java.util.HashMap;
    import java.util.Map;
    
    @Component
    @Slf4j
    public class ProjectCommandLineRunner implements CommandLineRunner {
    
        Map<String, Command> commandMap = new HashMap<>();
    
        @Autowired
        private SendEmailCommand sendEmailCommand;
    
        @Autowired
        private SendEmail2Command sendEmail2Command;
    
        @PostConstruct
        private void init() {
            commandMap.put("sendEmail", sendEmailCommand);
            commandMap.put("sendEmail2", sendEmail2Command);
        }
    
        @Override
        public void run(String... args) throws Exception {
    
            if (args.length == 0) {
                return;
            }
    
            if (!commandMap.containsKey(args[0])) {
                log.error("'{}' command not found", args[0]);
                System.exit(-1);
            }
    
            for (String arg:args) {
                log.info("command args:" +arg);
            }
    
           for (int i = 0; i < args.length; i++) {
                Command command =  commandMap.get(args[i]);
                String[] arguments = Arrays.copyOfRange(args, 0, args.length);
                command.execute(arguments);
            }
    
            
            //执行成功则,正常退出0, 异常退出非0
            System.exit(0);
        }
    }
    
    
    

kubectl 客户端执行,sh test.sh :

k8s+springboot+CronJob 定时任务部署,kubernetes,spring boot,容器

k8s+springboot+CronJob 定时任务部署,kubernetes,spring boot,容器

k8s+springboot+CronJob 定时任务部署,kubernetes,spring boot,容器

k8s+springboot+CronJob 定时任务部署,kubernetes,spring boot,容器文章来源地址https://www.toymoban.com/news/detail-555201.html

到了这里,关于k8s+springboot+CronJob 定时任务部署的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Kubernetes(k8s)一次性任务:Job

    目录 一.系统环境 二.前言 三.Kubernetes Job简介 四.创建一次性任务job 4.1 创建一个简单任务的job 4.2 创建需要执行多次的job任务 五.测试job失败重试次数 六.job任务使用示例:计算圆周率 七.总结 本文主要基于Kubernetes1.21.9和Linux操作系统CentOS7.4。 服务器版本 docker软件版本 Kubern

    2024年02月07日
    浏览(31)
  • 【业务功能118】微服务-springcloud-springboot-Kubernetes集群-k8s集群-KubeSphere-OpenELB部署及应用

    网址: openelb.io OpenELB 是一个开源的云原生负载均衡器实现,可以在基于裸金属服务器、边缘以及虚拟化的 Kubernetes 环境中使用 LoadBalancer 类型的 Service 对外暴露服务。OpenELB 项目最初由 KubeSphere 社区发起,目前已作为 CNCF 沙箱项目加入 CNCF 基金会,由 OpenELB 开源社区维护与支

    2024年02月03日
    浏览(86)
  • CronJob in K8s

    CronJob的设计思想是基于Cron工具的,Cron是一种在Unix和类Unix系统中用于自动执行任务的工具。CronJob的设计思想是将Cron的功能引入到Kubernetes中,以便在集群中自动化和调度任务的执行。 CronJob的设计思想包括以下几个方面: 基于时间的调度:CronJob根据时间表来周期性地调度任

    2024年02月09日
    浏览(27)
  • k8s概念-Job和CronJob

    回到目录  对于非耐久性任务,比如压缩文件,任务完成后,pod需要结束运行,不需要pod继续保持在系统中,这个时候就要用到Job。 Job负责批量处理短暂的一次性任务 (short lived one-off tasks),即仅执行一次的任务,它保证批处理任务的一个或多个Pod成功结束 yaml文件 多次执行

    2024年02月14日
    浏览(27)
  • Kubernetes(K8S)集群部署

    目录 一、创建3台虚拟机 二、为每台虚拟机安装Docker 三、安装kubelet 3.1 安装要求 3.2 为每台服务器完成前置设置 3.3 为每台服务器安装kubelet、kubeadm、kubectl 四、使用kubeadm引导集群 4.1 master服务器 4.2 node1、node2服务器 4.3 初始化主节点 4.4 work节点加入集群 五、token过期怎么办?

    2024年02月07日
    浏览(63)
  • yum部署kubernetes(k8s)集群、k8s常用资源管理

    目录 一、环境搭建 1、准备环境 1)计算机说明,建议系统版本7.4或者7.6 2)修改所有主机的计算机名设置host文件  2、安装master节点 1)安装etcd配置etcd 2)安装k8s-master节点 3)配置apiserver 4)配置controller和scheduler 5)启动k8s服务 3、安装k8s-master上的node 1)安装node 2)配置kube

    2024年02月13日
    浏览(54)
  • Kubernetes(k8s)集群安装部署

    名称 IP 系统 配置 主控节点 192.168.202.101 CentOS 7.9.2009 2核4G 工作节点1 192.168.202.102 CentOS 7.9.2009 2核4G 工作节点2 192.168.202.103 CentOS 7.9.2009 2核4G 2.1 升级操作系统内核 导入elrepo gpg key 安装elrepo YUM源仓库 安装kernel-ml版本,ml为长期稳定版本,lt为长期维护版本 设置grub2默认引导为0 重

    2024年02月10日
    浏览(60)
  • Kubernetes(k8s)部署模式发展

    在部署应用程序的方式上,主要经历了三个时代: 传统部署: 互联网早期,会直接将应用程序部署在物理机上 优点:简单,不需要其它技术的参与 缺点:不能为应用程序定义资源使用边界,很难合理地分配计算资源,而且程序之间容易产生影响 虚拟化部署: 可以在一台物

    2024年02月11日
    浏览(40)
  • kubernetes(k8s) 安装与部署

    版本:kubernetes(k8s) v1.28.2 并准备主机名映射。 设置好静态IP。 在Ubuntu的/etc/hosts文件中,填入如下内容。也可以在Windows的C:WindowsSystem32driversetchosts文件中填写相同内容。 关闭防火墙和SELinux。 关闭防火墙命令如下。 可使用命令 systemctl status firewalld 查看防火墙状态。 关闭

    2024年02月03日
    浏览(52)
  • kubernetes(k8s)+kubesphere部署

    目录 一 装备三台机器linux(centos) 二 准备前置环境并安装kubernetes 1  三台机器都要做如下操作  1.1 关闭防火墙: 1.2 关闭 selinux: 1.3 关闭 swap 1.4 添加主机名与 IP 对应关系 1.5 date 查看时间 (可选) 1.6 卸载系统之前的 docke 命令自行百度不做说明 1.7 安装 Docker-CE  1. 7.1 装

    2024年01月17日
    浏览(57)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包