web-dev-qa-db-ja.com

cronジョブkubernetesのアクセスログ

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コマンドまたは他の代替でログファイルの内容を表示できますか?

6
Jack

successfulJobsHistoryLimit: 3。おそらくあなたのポイントは、ログが標準出力ではなくファイルに記録されることであり、kubectl logs。その場合は、stdoutにログインするか、ジョブに何かを入れてファイルの内容を最後に記録することもできます。 たとえば in PreStop hook .

5
Ryan Dawson

Cronjobは、spec.scheduleに従ってポッドを実行します。タスクを完了すると、ポッドのステータスはcompletedに設定されますが、cronjobコントローラーは完了後にポッドを削除しません。そして、ポッドのコンテナファイルシステムにログファイルの内容が残っています。だからあなたがする必要があります:

  • ポッド名をgrep $ POD_NAME=kubectl get pods | grep "cron-cronjob1-"
  • $ kubectl logs -f -n default <pod_name>
3
Shudipta Sharma