access logs in cron jobs kubernetes

11/19/2018

im running cron job in kubernetes, jobs completes successfully and i log output to log file inside(path: storage/logs) but i cannot access that file due to container is in completed here is my job 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

is there anyway i can get my log file content display on kubectl log command or other alternatives?

-- Jack
kubernetes
kubernetes-cronjob

2 Answers

11/19/2018

I guess you know that the pod is kept around as you have successfulJobsHistoryLimit: 3. Presumably your point is that your logging is going logged to a file and not stdout and so you don't see it with kubectl logs. If so maybe you could also log to stdout or put something into the job to log the content of the file at the end, for example in a PreStop hook.

-- Ryan Dawson
Source: StackOverflow

11/19/2018

Cronjob runs pod according to the spec.schedule. After completing the task the pod's status will be set as completed, but the cronjob controller doesn't delete the pod after completing. And the log file content still there in the pod's container filesystem. So you need to do:

# here  you can get the pod_name from the stdout of the cmd `kubectl get pods`
$ kubectl logs -f -n default <pod_name>
-- Shudipta Sharma
Source: StackOverflow