我创建了一个Cron作业,该作业每60分钟运行一次。在作业的容器中,我将空dir卷安装为详细的记录。在我的容器中,我正在路径detailed-logslogs.csv
上编写一个CSV文件。
我试图使用kubectl cp podname:detailed-logslogs.csv k8slogslogs.csv
将此文件从POD复制到本地计算机,但会引发错误:
路径"详细信息 logs.csv"找不到(没有这样的文件或目录)。
作业成功运行后,由工作创建的pod转到completed
状态,这可能是一个问题吗?
一旦POD完成运行,您所引用的文件就不会持续。您可以做的是在运行CRON作业时备份文件。我可以建议的两个解决方案要么将持久卷附加到作业pod上,要么在运行作业时将文件上传到某处。
使用持久卷
在这里您可以通过快速的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