k8s cronjob部署springboot 分布式任务

cronjob.yaml 文件

apiVersion: batch/v1
 kind: CronJob
 metadata:
   name: k8s-springboot-demo
   namespace: rz-dt
 spec:
   failedJobsHistoryLimit: 3
   successfulJobsHistoryLimit: 1
   startingDeadlineSeconds: 180
   concurrencyPolicy: Forbid
   schedule: "*/2 * * * *"
   jobTemplate:
     spec:
       template:
         spec:
           containers:
             - name: k8s-springboot-demo
               image: rz-dt-image-server-registry.cn-shanghai.cr.aliyuncs.com/rz-dt/k8s-springboot-demo:2023-05-23-10-54-54
               imagePullPolicy: Always
               command: ["java"]
               args: ["-jar","/usr/local/cenobitor/k8s-springboot-demo.jar","sendEmail"]
               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
           volumes:
             - name: time-config
               hostPath:
                 path: /usr/share/zoneinfo/Asia/Shanghai
Command.java
package com.example.demo.job;

public interface Command {
    /**
     * 遵循Unix约定,如果命令执行正常,则返回0;否则为非0。
     */
    int execute(String... args);
}

SendEmailCommand.java
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 {
            // 省略业务逻辑代码

            log.info("send email success");

            return 0;

        } catch (Exception e) {
            log.error("send email error", e);
            return -1;
        }
    }
}
ProjectCommandLineRunner.java
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;

    @PostConstruct
    private void init() {
        commandMap.put("sendEmail", sendEmailCommand);
    }

    @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);
        }

        Command command = commandMap.get(args[0]);

        String[] arguments = Arrays.copyOfRange(args, 1, args.length);

        System.exit(command.execute(arguments));

          //执行成功则,正常退出0, 异常退出非0
        System.exit(0);

    }
}


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"]

k8s 一键部署 脚本 deploy.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=aliyun0398513192 rz-dt-image-server-registry.cn-shanghai.cr.aliyuncs.com --password=1234

echo "镜像最新版本提交"
docker tag k8s-springboot-demo:2023-05-23-10-54-54 rz-dt-image-server-registry.cn-shanghai.cr.aliyuncs.com/rz-dt/k8s-springboot-demo:2023-05-23-10-54-54
docker push rz-dt-image-server-registry.cn-shanghai.cr.aliyuncs.com/rz-dt/k8s-springboot-demo:2023-05-23-10-54-54

echo "k8s一键部署"
export IMG_TAG=${image_tag}
envsubst < cronjob.yaml | kubectl apply -f -


  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值