我有一个 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 容器(因为它位于不同的池中)被安排在无法访问该卷的不同区域中,但我不能找到解决方案。
请帮忙。