0

我正在尝试在 Google Kubernetes Engine 上部署 Dask Gateway。部署没有问题。但是,我在使用继承自 dockerhub 的默认 docker 映像的自定义 dask-gateway dockerfile 时遇到问题;然后将容器提交到 Google Container Registry (GCR)。它似乎导致以下 PermissionError。

PermissionError: [Errno 13] Permission denied: '/home/dask/dask-worker-space

(有关完整堆栈跟踪,请参见下面的屏幕截图)

有趣的是,当 dask 工作人员直接从 dockerhub 而不是 GCR 使用 docker 映像时,黑暗工作人员启动时没有任何问题。我需要使用自定义的 dockerfile 来为黑暗工作者添加更多的 python 包,但除此之外,没有其他配置更改。就好像将 docker 容器发送到 GCR 对权限做了一些奇怪的事情。

这是错误的完整堆栈跟踪:

在此处输入图像描述

这是我用于 dask 工作人员的 dockerfile:

FROM daskgateway/dask-gateway:0.9.0

RUN pip --no-cache-dir install --upgrade cloudpickle dask-ml scikit-learn \
nltk gensim spacy keras asyncio google-cloud-storage SQLAlchemy snowflake-sqlalchemy google-api-core gcsfs pyarrow mlflow \
tensorflow prefect hvac aiofile google-cloud-logging

任何帮助将不胜感激,因为我不知道如何调试。

4

1 回答 1

1

当您使用 GKE 集群时,请确保您为集群设置的服务帐户对容器注册表具有正确的权限。

您正在创建映像并将其提交到 Container Registry,因此您需要那里的写入权限。如果您使用的是默认服务帐户或自定义服务帐户,则该过程会有所不同。

  1. 如果您使用默认服务帐户,则至少需要存储读取器和写入器范围来执行此操作。(默认情况下,GKE 集群仅在读取器范围内创建)。
  • 如果您有一个正在运行的集群,您将需要更改每个节点池的范围

      gcloud container node-pools create [new pool name] \
      --cluster [cluster name] \
      --machine-type [your desired machine type] \
      --num-nodes [the same amount of nodes you have] \
      --scopes [your new set of scopes]
    

    (所有可能的选项都可以在命令中找到gcloud container node-pools create --help

    完成后,您将需要排空节点kubectl drain [node],并删除旧的节点池

      gcloud container node-pools delete [POOL_NAME] \
      --cluster [CLUSTER_NAME]
    
  • 如果您没有集群,您可以在创建它时在控制台上编辑范围,或者,如果您将使用 gcloud 创建它,则使用您想要的范围(完整列表

  1. 如果您使用的是自定义服务帐户,请确保它已授予角色“roles/storage.admin”。(来源
于 2020-11-26T14:43:30.720 回答