在现有吊舱上进行K8S cronjob调度?

时间:2020-07-17 06:14:51

标签: kubernetes kubernetes-cronjob

我的应用程序在K8S吊舱中运行。我的应用程序将日志写入到我已经在容器上安装了卷的特定路径。我的要求是安排cronjob,它将每周触发一次,并从该pod卷中读取日志,并根据我的脚本生成报告(该脚本基本上是根据某些关键字过滤日志)。并通过邮件发送报告。 不幸的是,由于无法获得有关将conrjob集成到现有pod或卷中的任何文档或博客,我不确定如何进行此操作。

apiVersion: v1
kind: Pod
metadata:
name: webserver
spec:
  volumes:
  - name: shared-logs
    emptyDir: {}

  containers:
  - name: nginx
    image: nginx
    volumeMounts:
    - name: shared-logs
      mountPath: /var/log/nginx

   - name: sidecar-container
     image: busybox
     command: ["sh","-c","while true; do cat /var/log/nginx/access.log /var/log/nginx/error.log; sleep 30; done"]
     volumeMounts:
      - name: shared-logs
        mountPath: /var/log/nginx


apiVersion: batch/v1beta1
kind: CronJob
metadata:
name: "discovery-cronjob"
labels:
  app.kubernetes.io/name: discovery
spec:
  schedule: "*/5 * * * *"
  jobTemplate:
  spec:
    template:
      spec:
        containers:
        - name: log-report
          image: busybox
          command: ['/bin/sh']
          args:  ['-c', 'cat /var/log/nginx/access.log > nginx.log']
          volumeMounts:
          - mountPath: /log
            name: shared-logs
        restartPolicy: Never

1 个答案:

答案 0 :(得分:0)

我在这里看到两件事,您需要知道:

  1. 很遗憾,无法在现有吊舱上安排cronjob。豆荚短暂存在,工作需要完成。无法判断该工作是否完成。这是设计使然。

  2. 此外,为了能够查看从一个容器到另一个容器的文件,您必须使用PVC。如果您的工作要访问它,则必须保留由您的应用程序创建的日志。在这里,您可以找到有关如何Create ReadWriteMany PersistentVolumeClaims on your Kubernetes Cluster的示例:

Kubernetes允许我们动态设置PersistentVolumes 使用PersistentVolumeClaims。吊舱将这些声明视为批量。的 PVC的访问模式决定了可以建立多少个节点 连接到它。我们可以参考资源提供商的文档 他们支持的访问模式。