导航

记一次 k8s + deployment + configmap + crontab

Posted on 2024-09-10 23:22  old_dog~  阅读(93)  评论(0)    收藏  举报

背景

基于k8s 部署crontab任务,同时支持热加载crontab配置,避免更新crontab配置而导致的更新代码与更新docker 镜像。

执行

公司环境,直接在web页面操作的,删除部分敏感信息且不展示操作命令

1、增加configmap:

metadata:
  name: cron-task
 
data:
  crontab-config: >+
 
    0 6 * * *   root /usr/local/bin/python3 /opt/work/run.py beg="$(date -d '31 days ago' +"\%Y-\%m-\%d
    00:00:00")"  >> /var/log/opt_work_run.log 2>&1

2、配置deployment pod,挂载cron-task

kind: Pod
apiVersion: v1
metadata:
spec:
  volumes:
    - name: task-crontab
      configMap:
        name: cron-task
        items:
          - key: crontab-config
            path: cronjobs
  containers:
      volumeMounts:
        - name: task-crontab
          mountPath: /etc/cron.d/

3、发布pod

一些疑问

1、为什么不用k8s的cronjob?

只能配置一个job,不方便。pod+crontab可以运行多个任务。

2、为什么选择configmap?

操作简单,且比较适合配置内容的文件。除了crontab配置文件,nginx配置文件也是不错的应用。

3、为什么挂载到/etc/cron.d/?

crontab有两个路径
1、/var/spool/cron/crontabs/{username}

  • 用户级别任务,crontab指令操作的就是这个文件,文件名等于用户名。
  • 权限要求高,可读可写,configmap挂载只有可读权限。

2、/etc/cron.d/

  • 系统级任务,文件名任意。
  • 权限要求低,只读权限就可以。

4、crontab配置中为什么有转义?

%在crontab配置文件中会换行,导致后面的配置被截断