问题
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?
回答1:
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.
回答2:
Cronjob
runs pod according to the spec.schedule
. After completing the task the pod's status will be set as completed
, but cronjob
controller don't delete the pod after completing. And the log file content still there in the pod's container filesystem. So you need to do:
- grep the pod name
$ POD_NAME=kubectl get pods | grep "cron-cronjob1-"
$ kubectl logs -f -n default <pod_name>
来源:https://stackoverflow.com/questions/53371505/access-logs-in-cron-jobs-kubernetes