【问题标题】:Copy file from cron job's pod to local directory in AKS将文件从 cron 作业的 pod 复制到 AKS 中的本地目录
【发布时间】:2019-07-14 14:37:32
【问题描述】:

我创建了一个每 60 分钟运行一次的 cron 作业。在作业的容器中,我已将 emptyDir 卷安装为详细日志。在我的容器中,我正在路径 detailed-logs\logs.csv 处编写一个 csv 文件。

我正在尝试使用 kubectl cp podname:detailed-logs\logs.csv \k8slogs\logs.csv 将此文件从 pod 复制到本地机器,但它会引发错误:

找不到路径“detailed-logs\logs.csv”(没有这样的文件或目录)。

一旦作业成功运行,作业创建的 pod 会进入 completed 状态,这可能是个问题吗?

【问题讨论】:

    标签: azure kubernetes azure-aks kubernetes-pod kubernetes-cronjob


    【解决方案1】:

    一旦您的 pod 完成运行,您所引用的文件将不会持续存在。您可以做的是在 cron 作业运行时备份文件。我可以建议的两种解决方案是将持久卷附加到作业 pod,或者在运行作业时将文件上传到某处。

    使用持久音量

    您可以在这里通过快速的readWriteOnce Persistent Volume Claim 创建一个 PV:

    kind: PersistentVolumeClaim
    apiVersion: v1
    metadata:
      name: my-pvc
    spec:
      accessModes:
        - ReadWriteOnce
      resources:
        requests:
          storage: 5Gi
    

    然后您可以使用以下命令将其安装到 pod 上:

          ...
            volumeMounts:
            - name: persistent-storage
              mountPath: /detailed-logs
          volumes:
          - name: persistent-storage
            persistentVolumeClaim:
              claimName: my-pvc
          ...
    

    上传文件

    我这样做的方式是在安装了aws-cli 的容器中运行作业,然后将我的文件存储在 AWS S3 上,您可以选择其他平台:

    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: backup-sh
    data:
      backup.sh: |-
        #!/bin/bash
        aws s3 cp /myText.txt s3://bucketName/
    ---
    apiVersion: batch/v1beta1
    kind: CronJob
    metadata:
      name: s3-backup
    spec:
      schedule: "0 0 * * *"
      jobTemplate:
        spec:
          template:
            spec:
              containers:
              - name: aws-kubectl
                image: expert360/kubectl-awscli:v1.11.2
                env:
                - name: AWS_ACCESS_KEY_ID
                  valueFrom:
                    secretKeyRef:
                      name: s3-creds
                      key: access-key-id
                - name: AWS_SECRET_ACCESS_KEY
                  valueFrom:
                    secretKeyRef:
                      name: s3-creds
                      key: secret-access-key
                command:
                  - /bin/sh
                  - -c
                args: ["sh /backup.sh"]
                volumeMounts:
                - name: backup-sh
                  mountPath: /backup.sh
                  readOnly: true
                  subPath: backup.sh
              volumes:
              - name: backup-sh
                configMap:
                  name: backup-sh
              restartPolicy: Never
    

    【讨论】:

    • 我不能按照建议使用持久化卷或外部存储。有什么方法可以使用我可以使用的非持久卷? Cron 作业保留以前的作业历史记录,因此是否有与之关联的卷。
    • 查看this link 以了解如何使用 hostPath 卷。从文本中引用,“hostPath 卷将文件或目录从主机节点的文件系统安装到您的 Pod 中。” @Tarun
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-08-11
    • 2012-01-22
    • 2021-04-23
    • 2017-01-16
    • 1970-01-01
    • 2021-06-06
    • 2016-01-19
    相关资源
    最近更新 更多