k8s+springboot+CronJob 定时任务部署

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

  1. cronjob.yaml k8s 文件  
    apiVersion: batch/v1
    kind: CronJob
    metadata:name: k8s-springboot-demonamespace: rz-dt
    spec:failedJobsHistoryLimit: 3 #执行失败job任务保留数量successfulJobsHistoryLimit: 5 #执行成功job任务保留数量startingDeadlineSeconds: 180concurrencyPolicy: Forbidschedule: "*/1 * * * *" #每分钟执行一次jobTemplate:spec:template:spec:containers:- name: k8s-springboot-demoimage: rz-dt-image-server-registry-vpc.cn-shanghai.cr.aliyuncs.com/rz-dt/k8s-springboot-demo:$IMG_TAGimagePullPolicy: Always#command: ["java","-jar","/usr/local/cenobitor/k8s-springboot-demo.jar"]#dockerfile已有此处不需要配置args: ["sendEmail","sendEmail2"] # 配置任务类的名称volumeMounts:- name: time-configmountPath: /etc/localtimereadOnly: true#envFrom:# - configMapRef:#      name: smcp-config# - secretRef:#     name: smcp-service-secretresources:requests:cpu: "250m"memory: 216Milimits:cpu: "500m"memory: 512MirestartPolicy: Never#从私有仓库拉取镜像凭证imagePullSecrets:- name: rz-dt-miyue-vpcvolumes:- name: time-confighostPath: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
    #指定容器启动时要执行的命令
    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=1234echo "镜像最新版本提交"
    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 {@Overridepublic 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 {@Overridepublic 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<>();@Autowiredprivate SendEmailCommand sendEmailCommand;@Autowiredprivate SendEmail2Command sendEmail2Command;@PostConstructprivate void init() {commandMap.put("sendEmail", sendEmailCommand);commandMap.put("sendEmail2", sendEmail2Command);}@Overridepublic 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, 异常退出非0System.exit(0);}
    }

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/19177.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2023.7月最新版idea安装Jrebel实现热部署,可解决后端启动等待时间过长问题

2023.7最新版idea热部署配置 一 下载jrebel插件二 激活我使用的方法 三 配置方式1 设置自动编译2 设置 compiler.automake.allow.when.app.running3 勾选项目&#xff0c;然后以Rebel方式启动 4 Settings查看Activation情况四 报错解决1 启动失败 2 端口被占用 五 总结 一 下载…

vue3+vite+Ts 基于Antv/x6 绘制流程图

需求效果&#xff1a; 需求&#xff1a; 实现一个流程图&#xff0c;双击可对相应的组件进行一些功能操作&#xff1b; 工具栈&#xff1a; 这里使用antv/x6&#xff0c; 基于vue3vitets进行开发 官网地址&#xff1a; https://x6.antv.antgroup.com/examples/showcase/pra…

代码随想录算法训练营第六十二天—图论补充

理论基础&#xff1a; 第一题、所有可能的路径 力扣题目链接 class Solution { private:vector<vector<int>> result;vector<int> path;void dfs(vector<vector<int>>& graph, int x){if(x graph.size() - 1){result.push_back(path);retu…

科技资讯|苹果Vision Pro手部追踪和手势相关新专利曝光

近日&#xff0c;美国专利商标局正式授予苹果一项与 Apple Vision Pro 主要功能相关的专利&#xff1a;手部追踪和手指手势。 苹果专利指出&#xff0c;沉浸感的质量取决于几个重要因素。例如&#xff0c;显示器的特性&#xff0c;如图像质量、帧率、像素分辨率、高动态范围 …

vue3+mapboxgl鼠标浮动显示cgcs2000

一、需求 鼠标在地图中浮动展示地图的经纬度&#xff0c;cgcs2000 xy 还有显示带号 二、实现效果 展示经度&#xff0c;纬度&#xff0c;x值&#xff0c;y值显示的是带号和y值 三、思路 3.1、mapbox获取经纬度方法 初始化地图后.on方法中有个mousemove方法 mapboxUtil._m…

2023年31个最适合博主的WordPress主题

自从我最初开始写博客以来&#xff0c;在近十年的经验中&#xff0c;我已经出于各种目的在多个博客中测试和使用了数十种不同的 WordPress 主题。 以下是我挑选的绝对最佳WordPress主题&#xff0c;专门针对不想编写一行代码的博主。 无论您是想创建个人理财博客、撰写时尚、…

[RocketMQ] Broker asyncPutMessage处理消息以及存储的高性能设计措施 (十一)

asyncPutMessage方法真正的用来存储消息。 文章目录 1.asyncPutMessage存储普通消息1.1 checkStoreStatus检查存储状态1.2 checkMessage检查消息 2.CommitLog#asyncPutMessage异步存储消息2.1 处理延迟消息2.2 获取最新mappedFile2.2.1 tryCreateMappedFile创建新的MappedFile2…

【LeetCode热题100】打卡第33天:环形链表LRU缓存

文章目录 【LeetCode热题100】打卡第33天&#xff1a;环形链表&LRU缓存⛅前言 环形链表&#x1f512;题目&#x1f511;题解 LRU缓存&#x1f512;题目&#x1f511;题解 【LeetCode热题100】打卡第33天&#xff1a;环形链表&LRU缓存 ⛅前言 大家好&#xff0c;我是知…

Vue 组件化开发

文章目录 前言组件化开发父子组件相互传数据父传子&#xff1a;自定义属性子传父&#xff1a;自定义事件父子组件互传案例 插槽 slot多个插槽 总结组件化开发总结Vue组件的基本组成子组件使用的三个步骤父子组件相互传递数据 前言 提示&#xff1a;这里可以添加本文要记录的大…

Android-jar包方式连接本地sqlite并操作返回数据

背景: 数据库的创建及字段都是后端人员维护,Android端只是映射相关数据库到本地来操作。为了统一管理操作方式方法,所以提出,后端打jar包的方式封装对Android端数据库sqllite的连接、操作。 说明: 因为之前是后端打jar包,JDBC连接的驱动及方法有差异,导致连接Android…

VMware将虚拟机网络设置为NAT模式

虚拟机有vmware和desktop&#xff0c;本人一直使用的是vmware。安装好vmware并激活后&#xff0c;创建完虚拟机。(需要vmware和激活码的可留言) 进入虚拟机设置&#xff0c;网络适配器选择NAT模式 在虚拟机工具栏->菜单栏点击编辑&#xff0c;选择“虚拟网络编辑器”。 选择…

[C语言][小游戏][猜拳游戏]

C语言的奇妙旅行 一、模块化编程二、游戏基本设计2.1 确定计算机要出的手势2.2 显示“石头剪刀布”&#xff0c;然后玩家输入自己要出的手势2.3进行输赢判断&#xff0c;显示结果2.4询问是否继续2.5 基本程序 三、游戏实现的过程3.1将玩家的手势和电脑的手势显示出来 三、总代码…