无法在kubernetes上运行cronjobs

时间:2015-08-21 10:34:36

标签: kubernetes

我有一个问题,即kubernetes中的cronjob似乎不起作用。 下面是使用的测试Dockerfile

FROM debian:jessie

RUN apt-get update
RUN apt-get -y install --no-install-recommends cron

RUN echo 'PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin' | crontab

RUN echo '0-59/2 * * * 0-4 export ENV=dev RECIPIENT=email@example.com; echo "$(date) ${ENV} ${RECIPIENT}" >> /var/log/cron.log' | crontab

CMD ["cron", "-f", "-L", "15"]

使用本机docker运行上面的dockerfile,我可以在日志文件中看到输出,但不能在kubernetes中看到。检查了事件,但没有注意到任何异常。

下面是使用的复制控制器yaml文件

apiVersion: v1
kind: ReplicationController
metadata:
  labels:
    name: cron-test
  name: cron-test
spec:
  replicas: 1
  selector:
    name: cron-test
  template:
    metadata:
      labels:
        name: cron-test
    spec:
      containers:
        - name: cron-test
          image: example/cron-test:latest
          resources:
            limits:
              cpu: 100m
              memory: 512Mi
          imagePullPolicy: Always

由于

2 个答案:

答案 0 :(得分:2)

不知怎的,我通过切换Dockerfile来实现它的工作

Dockerfile

FROM debian:jessie

RUN apt-get update
RUN apt-get -y install --no-install-recommends cron

COPY . /src
WORKDIR /src

RUN cp run.sh /run.sh \
    && chmod a+x /run.sh \
    && touch /var/log/cron.log

CMD ["/run.sh"]

run.sh

#!/bin/sh

cat << EOF > /tmp/setup-env.sh
export ENV=dev
export RECIPIENT=email@example.com
EOF

crontab /src/crons.conf
exec cron -f -L 15

crons.conf

PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
0-59/2 * * * 0-4 . /tmp/setup-env.sh ; echo "$(date) ${ENV} ${RECIPIENT}" >> /var/log/cron.log 2>&1

我的猜测是因为crontab /src/crons.conf在构建时运行并且构建文件系统与运行文件系统不同,即使用本机docker(rootfs)构建并在kubernetes(overlayfs)上运行它。

答案 1 :(得分:0)

你可能在一周错误的一天(0-4),我只是尝试了所有*并观察了预期的输出。