我正在尝试在 kubernetes 集群(GKE)上运行蛇形管道。该作业是从 GCE 虚拟机启动的。有时它会起作用,但大多数情况下它不起作用。
我采取的步骤是
gcloud container clusters get-credentials snakemake-k8s-demo
kubectl delete pod $(kubectl get pods | grep snakejob|colprint 1)
snakemake --kubernetes --container-image eu.gcr.io/scailyte-is/snakemake-gsdk --use-conda --default-remote-provider GS --default-remote-prefix xxxxxx-snakemake-test-1 --jobs 2
第一次尝试效果很好。
然后我删除了由snakemake管道创建的文件,并再次运行相同的工作而不做任何更改。
作业失败并显示以下错误消息:
HTTPSConnectionPool(host='storage.googleapis.com', port=443): Max retries exceeded with url: /storage/v1/b/xxxxxxx-snakemake-test-1/o?projection=noAcl (Caused by NewConnectionError('<urllib3.connection.VerifiedHTTPSConnection object at 0x7f3ee35159d0>: Failed to establish a new connection: [Errno -3] Temporary failure in name resolution'))
根据 Google Cloud Status Dashboard,Google Cloud Storage 没有问题。
随后的尝试以同样的方式失败。
任何解决方案的提示都非常感激。
该问题是由于缺少允许集群内通信的适当防火墙规则造成的。一旦创建了适当的 ALLOW 规则,直接的问题就消失了,因为 pod 能够访问其 DNS 服务器。
我们的政策是禁止端点之间的所有通信(包括 VPC 内部),除非明确允许。因此,新地址空间中的新集群需要添加才能使其正常工作。
我通过启用在没有先前的 ALLOW 规则适用时触发的最终 DENY 规则的日志记录来解决这个问题。
我还没有弄清楚为什么它第一次起作用,但我怀疑有一些我没有注意到的差异。