3

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

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

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

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

4

1 回答 1

0

一旦您的 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
于 2019-02-20T21:40:12.067 回答