0

我有一个 Argo 工作流程,它有两个步骤,第一个在 Linux 上运行,第二个在 Windows 上运行

apiVersion: argoproj.io/v1alpha1
kind: WorkflowTemplate
metadata:
  name: my-workflow-v1.13
spec:
  entrypoint: process
  volumeClaimTemplates:
    - metadata:
        name: workdir
      spec:
        accessModes: [ "ReadWriteOnce" ]
        resources:
          requests:
            storage: 1Gi
  arguments:
    parameters:
      - name: jobId
        value: 0
  templates:
    - name: process
      steps:
        - - name: prepare
            template: prepare
        - - name: win-step
            template: win-step

    - name: win-step
      nodeSelector:
        kubernetes.io/os: windows
      container:
        image: mcr.microsoft.com/windows/nanoserver:1809
        command: ["cmd", "/c"]
        args: ["dir", "C:\\workdir\\source"]
        volumeMounts:
          - name: workdir
            mountPath: /workdir

    - name: prepare
      nodeSelector:
        kubernetes.io/os: linux
      inputs:
        artifacts:
          - name: src
            path: /opt/workdir/source.zip
            s3:
              endpoint: minio:9000
              insecure: true
              bucket: "{{workflow.parameters.jobId}}"
              key: "source.zip"
              accessKeySecret:
                name: my-minio-cred
                key: accesskey
              secretKeySecret:
                name: my-minio-cred
                key: secretkey
      script:
        image: garthk/unzip:latest
        imagePullPolicy: IfNotPresent
        command: [sh]
        source: |
          unzip /opt/workdir/source.zip -d /opt/workdir/source
        volumeMounts:
          - name: workdir
            mountPath: /opt/workdir

两个步骤共享一个卷。

为了在 Azure Kubernetes 服务中实现这一点,我必须创建两个节点池,一个用于 Linux 节点,另一个用于 Windows 节点

在此处输入图像描述

问题是,当我对工作流进行排队时,有时它会完成,有时win-step(在 Windows 容器中运行的步骤)会挂起/失败并显示此消息

在此处输入图像描述

1 node(s) had volume node affinity conflict

我已经读到这可能会发生,因为该卷被安排在特定区域中,而 Windows 容器(因为它位于不同的池中)被安排在无法访问该卷的不同区域中,但我不能找到解决方案。

请帮忙。

4

1 回答 1

2

第一个在 Linux 上运行,第二个在 Windows 上运行

我怀疑您是否可以在 Linux(通常是 ext4 文件系统)和 Windows 节点上挂载相同的卷,Azure Windows 容器使用 NTFS文件系统。

因此,您在第二步中尝试挂载的卷位于与您的nodeSelector.

于 2020-11-23T16:13:31.340 回答