在 cron 作业 kubernetes 中访问日志
access logs in cron jobs kubernetes
im 运行 kubernetes 中的 cron 作业,作业成功完成,我将输出记录到内部日志文件(路径:storage/logs),但由于容器已完成,我无法访问该文件这里是我的工作 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 命令或其他替代命令上显示我的日志文件内容吗?
Cronjob
根据 spec.schedule
运行 pod。完成任务后 pod 的状态将设置为 completed
,但 cronjob
控制器在完成后不会删除 pod。并且日志文件内容仍然存在于 pod 的容器文件系统中。所以你需要做:
# here you can get the pod_name from the stdout of the cmd `kubectl get pods`
$ kubectl logs -f -n default <pod_name>
我猜你知道 pod 和你一样一直在身边 successfulJobsHistoryLimit: 3
。大概你的意思是你的日志记录将记录到一个文件而不是标准输出,所以你看不到它 kubectl logs
。如果是这样,也许您还可以登录到标准输出或将某些内容放入作业中以在末尾记录文件的内容,for example in a PreStop hook。
im 运行 kubernetes 中的 cron 作业,作业成功完成,我将输出记录到内部日志文件(路径:storage/logs),但由于容器已完成,我无法访问该文件这里是我的工作 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 命令或其他替代命令上显示我的日志文件内容吗?
Cronjob
根据 spec.schedule
运行 pod。完成任务后 pod 的状态将设置为 completed
,但 cronjob
控制器在完成后不会删除 pod。并且日志文件内容仍然存在于 pod 的容器文件系统中。所以你需要做:
# here you can get the pod_name from the stdout of the cmd `kubectl get pods`
$ kubectl logs -f -n default <pod_name>
我猜你知道 pod 和你一样一直在身边 successfulJobsHistoryLimit: 3
。大概你的意思是你的日志记录将记录到一个文件而不是标准输出,所以你看不到它 kubectl logs
。如果是这样,也许您还可以登录到标准输出或将某些内容放入作业中以在末尾记录文件的内容,for example in a PreStop hook。