如何收集一段时间内Kubernetes CronJob的每一个作业的日志?

How to collect logs of every job of a Kubernetes CronJob for a period of time?

假设我有一个 Kubernetes CronJob

apiVersion: batch/v1beta1
kind: CronJob
metadata:
  name: cron-job-logging
spec:
  schedule: "@hourly"
  jobTemplate:
    spec:
      template:
        spec:
          containers:
          - name: cron-job-logging
            image: python:3
            args:
            - /usr/bin/python3
            - -c
            - import random; print('a') if random.random() < 0.5 else print('b')
          restartPolicy: OnFailure

在 GKE 集群 1 上运行。14.x 为“系统和工作负载日志记录和监控”激活了 GKE 云操作。

如何收集时间段 t(假设一个月)的输出,以便我可以查看 pod 是否打印了 ab

如果看到有关此请求的一些问题,例如 https://github.com/kubernetes/kubernetes/issues/27768。日志似乎对某些用户可用,但对其他用户不可用,这可能是由于 CronJobs 是测试版功能。

我已经部署了你的 cronjob,为了举例,我将时间表设置为每 1 分钟 运行,下面有几种访问它的方法:

  • GKE console – 在 Google Cloud Console 的 Google Kubernetes Engine 部分,select 中列出的 Kubernetes 资源Workloads,然后是 ContainerAudit Logs 链接,此方法是下一个选项:云日志控制台

  • Cloud Logging 控制台 – 您可以直接从 Cloud Logging console by using the logging filters to select the Kubernetes resources, such as cluster, node, namespace, pod, or container logs. Here are sample Kubernetes-related queries 查看您的日志以帮助您入门。

    • 这是我使用的查询(已编辑项目详细信息):
      resource.type="k8s_container"
      resource.labels.project_id="PROJECT_NAME"
      resource.labels.location="ZONE"
      resource.labels.cluster_name="CLUSTER_NAME"
      resource.labels.namespace_name="NAMESPACE"
      labels.k8s-pod/job-name:"cron-job-logging-"
      
    • 结果如下:
  • 云监控控制台 – 如果您启用了云监控工作区,在Kubernetes Engine section of the Cloud Monitoring console, select your cluster, nodes, pod, or containers查看您的日志。

  • gcloud命令行工具 – 使用gcloud logging read命令,select适当的集群,节点, pod 和容器日志。

  • 举个例子:

$ gcloud logging read "resource.labels.project_id=PROJECT AND resource.labels.cluster_name=CLUSTER_NAME AND labels.k8s-pod/job-name:cron-job-logging-"
---
insertId: 6vorvd43akuvy8fi3
labels:
  k8s-pod/controller-uid: c525bbae-c6c9-11ea-931b-42010a80001f
  k8s-pod/job-name: cron-job-logging-1594838040
logName: projects/PROJECT/logs/stdout
receiveTimestamp: '2020-07-15T18:35:14.937645549Z'
resource:
  labels:
    cluster_name: CLUSTER_NAME
    container_name: cron-job-logging
    location: ZONE
    namespace_name: default
    pod_name: cron-job-logging-1594838040-pngsk
    project_id: PROJECT
  type: k8s_container
severity: INFO
textPayload: |
  a
timestamp: '2020-07-15T18:34:09.907735144Z'

更多信息在这里:GKE - Using Logs

如有任何问题,请在评论中告诉我。