访问cron作业kubernetes中的日志

时间:2018-11-19 09:18:53

标签: kubernetes kubernetes-cronjob

我在kubernetes中运行cron作业,作业成功完成,我将输出记录到日志文件中(路径:存储/日志),但是由于容器已完成而无法访问该文件,这是我的工作Yaml。

apiVersion: v1
items:
- apiVersion: batch/v1beta1
  kind: CronJob
  metadata:
    labels:
      chart: cronjobs-0.1.0
    name: cron-cronjob1
    namespace: default
  spec:
    concurrencyPolicy: Forbid
    failedJobsHistoryLimit: 1
    jobTemplate:      
      spec:
        template:
          metadata:          
            labels:
              app: cron
              cron: cronjob1
          spec:
            containers:
            - args:
              - /usr/local/bin/php
              - -c
              - /var/www/html/artisan bulk:import
              env:
              - name: DB_CONNECTION
                value: postgres
              - name: DB_HOST
                value: postgres
              - name: DB_PORT
                value: "5432"
              - name: DB_DATABASE
                value: xxx
              - name: DB_USERNAME
                value: xxx
              - name: DB_PASSWORD
                value: xxxx
              - name: APP_KEY
                value: xxxxx
              image: registry.xxxxx.com/xxxx:2ecb785-e927977
              imagePullPolicy: IfNotPresent
              name: cronjob1
              ports:
              - containerPort: 80
                name: http
                protocol: TCP              
            imagePullSecrets:
            - name: xxxxx
            restartPolicy: OnFailure          
            terminationGracePeriodSeconds: 30
    schedule: '* * * * *'
    successfulJobsHistoryLimit: 3

反正我可以在kubectl log命令或其他替代方法上显示我的日志文件内容吗?

2 个答案:

答案 0 :(得分:3)

Cronjob根据spec.schedule运行pod。完成任务后,窗格的状态将设置为completed,但是cronjob控制器在完成后不会删除窗格。并且日志文件的内容仍位于pod的容器文件系统中。因此,您需要这样做:

  • 使用grep广告连播名称$ POD_NAME=kubectl get pods | grep "cron-cronjob1-"
  • $ kubectl logs -f -n default <pod_name>

答案 1 :(得分:2)

我想您知道,像successfulJobsHistoryLimit: 3一样,豆荚也随处可见。大概您的意思是您的日志记录将记录到文件而不是stdout,因此您不会在kubectl logs中看到它。如果是这样,也许您也可以登录到stdout或在作业中添加一些内容以最后记录文件的内容,for example放在PreStop hook中。