kubernetesでcronジョブを実行している場合、ジョブは正常に完了し、出力を内部のログファイル(パス:storage/logs)に記録しますが、コンテナーが完了しているため、そのファイルにアクセスできません。
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コマンドまたは他の代替でログファイルの内容を表示できますか?
successfulJobsHistoryLimit: 3
。おそらくあなたのポイントは、ログが標準出力ではなくファイルに記録されることであり、kubectl logs
。その場合は、stdoutにログインするか、ジョブに何かを入れてファイルの内容を最後に記録することもできます。 たとえば in PreStop hook .
Cronjob
は、spec.schedule
に従ってポッドを実行します。タスクを完了すると、ポッドのステータスはcompleted
に設定されますが、cronjob
コントローラーは完了後にポッドを削除しません。そして、ポッドのコンテナファイルシステムにログファイルの内容が残っています。だからあなたがする必要があります:
$ POD_NAME=kubectl get pods | grep "cron-cronjob1-"
$ kubectl logs -f -n default <pod_name>