将 hostPath 持久卷安装到 Argo 工作流任务模板

问题描述 投票:0回答:1

我正在为我的公司开展一个小型概念验证项目,并希望使用 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

当此工作流程执行时,即使我用文件填充了主机目录,它也只是打印一个空目录。我从根本上缺少什么吗?感谢您的帮助。

kubernetes minikube persistent-volumes argo-workflows
1个回答
0
投票

您找到解决问题的方法了吗?我也有类似的问题。

当我在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
© www.soinside.com 2019 - 2024. All rights reserved.