将文件从Cron作业的Pod复制到AKS中的本地目录

时间:2019-02-20 19:51:54

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

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

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

  找不到

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

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

1 个答案:

答案 0 :(得分:0)

您的Pod完成运行后,您所引用的文件将不会保留。您可以做的是在cron作业运行时对文件进行备份。我可以建议的两个解决方案是将永久卷附加到作业窗格,或者在运行作业时将文件上传到某个位置。

使用持久卷

在这里,您可以通过快速readWriteOnce持久性容量声明来创建PV:

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

然后您可以使用以下方法将其安装到吊舱上:

      ...
        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