我正在为我的公司开展一个小型概念验证项目,并希望使用 Argo Workflows 来自动化一些数据工程任务。设置起来非常简单,我已经能够创建许多工作流程来处理存储在 Docker 映像中或从 REST API 检索的数据。但是,为了处理我们的敏感数据,我想将 hostPath 持久卷安装到我的工作流程任务之一。当我按照文档操作时,我没有得到所需的行为,目录显示为空。
操作系统:Ubuntu 18.04.4 LTS
Kubernetes 执行器:Minikube v1.20.0
Kubernetes 版本:v1.20.2
Argo 工作流程版本:v3.1.0-rc4
我的持久卷(声明)如下所示:
apiVersion: v1
kind: PersistentVolume
metadata:
name: argo-volume
labels:
type: local
spec:
storageClassName: manual
capacity:
storage: 10Gi
accessModes:
- ReadWriteOnce
hostPath:
path: "/tmp/data"
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: argo-hello
spec:
storageClassName: manual
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
然后我就跑
kubectl -n argo apply -f pv.yaml
我的工作流程如下:
apiVersion: argoproj.io/v1alpha1
kind: Workflow
metadata:
generateName: hello-world-volumes-
spec:
entrypoint: dag-template
arguments:
parameters:
- name: file
value: /mnt/vol/test.txt
volumes:
- name: datadir
persistentVolumeClaim:
claimName: argo-hello
templates:
- name: dag-template
inputs:
parameters:
- name: file
dag:
tasks:
- name: readFile
arguments:
parameters: [{name: path, value: "{{inputs.parameters.file}}"}]
template: read-file-template
- name: print-message
template: helloargo
arguments:
parameters: [{name: msg, value: "{{tasks.readFile.outputs.result}}"}]
dependencies: [readFile]
- name: helloargo
inputs:
parameters:
- name: msg
container:
image: lambertsbennett/helloargo
args: ["-msg", "{{inputs.parameters.msg}}"]
- name: read-file-template
inputs:
parameters:
- name: path
container:
image: alpine:latest
command: [sh, -c]
args: ["find /mnt/vol; ls -a /mnt/vol"]
volumeMounts:
- name: datadir
mountPath: /mnt/vol
当此工作流程执行时,即使我用文件填充了主机目录,它也只是打印一个空目录。我从根本上缺少什么吗?感谢您的帮助。
您找到解决问题的方法了吗?我也有类似的问题。
当我在docker本地运行容器时,我的代码可以看到/data/raw和/data/stage中的文件。当我在 Argo 中使用以下工作流程运行它时,它没有看到任何内容。
我确认可以从 AKS 中在 Argo 外部运行的另一个容器访问 PVC / PV。
apiVersion: argoproj.io/v1alpha1
kind: Workflow
metadata:
name: omniscient-python
namespace: abc
labels:
example: 'true'
spec:
volumes:
- name: argo-pvc-blob-raw
persistentVolumeClaim:
claimName: argo-pvc-blob-raw
- name: argo-pvc-blob-stage
persistentVolumeClaim:
claimName: argo-pvc-blob-stage
entrypoint: argosay
templates:
- name: argosay
container:
name: main
image: abc.azurecr.io/abc:latest
command:
- python3
args:
- src/abc/__main__.py
volumeMounts:
- name: argo-pvc-blob-raw
mountPath: /data/raw
- name: argo-pvc-blob-stage
mountPath: /data/stage
ttlStrategy:
secondsAfterCompletion: 300
podGC:
strategy: OnPodCompletion