доступ к журналам в cron jobs kubernetes

Я выполняю задание cron в kubernetes, задания завершаются успешно, и я записываю вывод в файл журнала внутри (путь: хранилище / журналы), но я не могу получить доступ к этому файлу из-за того, что контейнер завершен, вот моя работа 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 или других альтернатив?


person Jack    schedule 19.11.2018    source источник


Ответы (2)


Думаю, вы знаете, что капсула хранится, как и вы successfulJobsHistoryLimit: 3. Предположительно, ваша точка зрения заключается в том, что ваш журнал записывается в файл, а не в стандартный вывод, и поэтому вы не видите его с помощью kubectl logs. Если да, то, возможно, вы также могли бы войти в стандартный вывод или добавить что-нибудь в задание, чтобы в конце регистрировать содержимое файла, например в PreStop hook.

person Ryan Dawson    schedule 19.11.2018
comment
великолепно, я собираюсь использовать управление журналами, потому что есть несколько файлов журналов, к которым я хочу получить централизованный доступ - person Jack; 21.11.2018

Cronjob запускает модуль в соответствии с spec.schedule. После выполнения задачи статус модуля будет установлен как completed, но контроллер cronjob не удаляет модуль после завершения. И содержимое файла журнала все еще находится в файловой системе контейнера модуля. Итак, вам нужно сделать:

# here  you can get the pod_name from the stdout of the cmd `kubectl get pods`
$ kubectl logs -f -n default <pod_name>
person Shudipta Sharma    schedule 19.11.2018
comment
это работает только со стандартными выходами, я захожу в файл внутри модуля, мне нужен другой механизм - person Jack; 21.11.2018
comment
Я заметил, что это работает только на stdout, не работает на stderr. - person linehrr; 24.03.2020
comment
@linehrr Не проверял, может ты и прав. - person Shudipta Sharma; 24.03.2020