access logs in cron工作kubernetes

k2fxgqgv  于 2023-05-16  发布在  Kubernetes
关注(0)|答案(2)|浏览(95)

我正在 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>命令或其他替代品?

mzsu5hc0

mzsu5hc01#

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>
0md85ypi

0md85ypi2#

我猜你知道pod是保存在周围的,因为你有successfulJobsHistoryLimit: 3。大概你的观点是你的日志记录将被记录到一个文件而不是stdout,所以你在kubectl logs中看不到它。如果是这样的话,也许你也可以登录到标准输出,或者在作业中添加一些东西来记录文件末尾的内容,在PreStop hook中记录for example

相关问题