我正在 kubernetes 中运行 CronJob,作业成功完成,我将输出记录到(path: 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 <podname>
命令或其他替代品?
2条答案
按热度按时间mzsu5hc01#
Cronjob
根据spec.schedule
运行pod。完成任务后,Pod的状态将设置为completed
,但cronjob
控制器在完成后不会删除Pod。日志文件内容仍然存在于pod的容器文件系统中。所以你需要做:0md85ypi2#
我猜你知道pod是保存在周围的,因为你有
successfulJobsHistoryLimit: 3
。大概你的观点是你的日志记录将被记录到一个文件而不是stdout,所以你在kubectl logs
中看不到它。如果是这样的话,也许你也可以登录到标准输出,或者在作业中添加一些东西来记录文件末尾的内容,在PreStop hook中记录for example。