无法在 Google Cloud Composer 上安装新的 pipy 包

Posted

技术标签:

【中文标题】无法在 Google Cloud Composer 上安装新的 pipy 包【英文标题】:Can't install new pipy packages on Google Cloud Composer 【发布时间】:2020-03-21 01:07:38 【问题描述】:

我们正在使用版本为 composer-1.8.0-airflow-1.10.3Google Cloud Composer 在 GCP 上调度我们的管道。

最近,当我们需要向环境中添加一些新的 Python 包时(无论是使用 Terraform 还是 Cloud Console),我们不断收到一条奇怪的错误消息,但 Cloud Composer 仍在运行且未安装新包。

Cloud Composer UI 上显示的错误消息:

找不到资源(resource=europe-west1-xxxxxxxxxxxxxxxxxxxx-composer-backend-sub-3fb66162-3xxxd-4f43-ba47-xxxxxx)。,Http 错误状态代码:400 Http 错误消息:BAD REQUEST 附加错误:" originalResponse":"\"paths\":[\"/apis\",\"/apis/\",\"/apis/apiextensions.k8s.io\",\"/apis/apiextensions.k8s.io /v1beta1\",\"/healthz\",\"/healthz/etcd\",\"/healthz/log\",\"/healthz/ping\",\"/healthz/poststarthook/crd-informer-已同步\",\"/healthz/poststarthook/generic-apiserver-start-informers\",\"/healthz/poststartthook/start-apiextensions-controllers\",\"/healthz/poststarthook/start-apiextensions-informers\" ,\"/metrics\",\"/openapi/v2\",\"/version\"]","re​​ason":"类型提供程序 'europe-west1-xxxxxxxxxxxxxxxxxxxx- 的描述符 url 'https://35.187.59.32/swaggerapi/apis/batch/v1'无法获取 addons-job-typer'。",Http 错误状态代码:400 Http 错误消息:BAD REQUEST 附加错误:"ResourceType":"gcp-types/storage-v1:storage.objects.list", "ResourceErrorCode":"403","ResourceErrorMessage":"code":403, "errors":["domain":"global","message":"xxxxxxxx@cloudservices.gserviceaccount.com 没有 storage.objects.list 对 composer-unlistable 的访问权限。","re​​ason":"forbidden" ],"message":"xxxxxxxx@cloudservices.gserviceaccount.com 没有 storage.objects.list 对 composer-unlistable 的访问权限。","statusMessage":"Forbidden","re​​questPath":"https://www.googleapis.com/storage/v1/b/composer-unlistable/o","httpMethod ":"GET","suggestion":"考虑授予 xxxxxxxx@cloudservices.gserviceaccount.com 权限"

查看 Stackdriver 日志记录 时,我们可以找到与该环境更新相关的错误消息:

状态: 代码:9 消息:“FAILED_PRECONDITION”

对导致此行为的原因以及如何解决它有任何想法吗?

编辑:

请注意,xxxxxxxx@cloudservices.gserviceaccount.com 是 Google 用于内部通信的服务帐号,无法在 IAM 页面上进行管理(请参阅Service Account Documentation)。

此外,我们注意到有时添加新包可以正常工作。但是下次我们尝试添加另一个包时,它会失败并显示与上述相同的错误消息。

【问题讨论】:

您是否在开始收到此错误之前不久将气流版本升级到 1.10.3?另外,你手动将环境的GKE集群升级到1.14++版本了吗? 【参考方案1】:

我可以通过手动将 Composer 环境的 GKE 集群 (composer-1.8.2-airflow-1.10.3) 升级到 1.14.8-gke.12 来重现此错误:

如documentation 中所述,不使用私有 IP 的 Composer 环境不应将 GKE 升级到 1.14+。这些版本有deprecated Swagger in favor of OpenAPI。未来的 Cloud Composer 版本将创建使用 OpenAPI 的集群,并将现有环境升级到 GKE 1.14 及更高版本。

目前,OpenAPI 仅用于私有 IP 环境,因此没有问题。

很遗憾,无法降级您的 GKE 集群,因此唯一的解决方案是删除并重新创建您的环境。

【讨论】:

确实是问题所在。我们使用 GKE 1.13 版重新创建了环境。谢谢! 这太荒谬了。将 GKE 升级到 1.15.x 会破坏其他任何东西吗?我现在被困在1.14.10 上,同样的问题。我正在尝试扩展集群,但出现上述错误。 更糟糕的是:我刚刚创建了一个新的 Composer 环境。 GKE 版本没有选项。它默认为1.14.10-gke.17,我无法安装pandas。一个人能做什么?在我以前的环境(我手动将 GKE 从 1.13 升级到 1.14 的环境)中,我尝试升级到 1.15,并且出现了同样的问题。 Cloud Composer 现在完全没用了吗?【参考方案2】:

服务xxxxxxxx@cloudservices.gserviceaccount.com 帐户似乎没有正确的权限。在 IAM 部分中,将“Storage Object Viewer”角色添加到此服务帐户。

【讨论】:

其实这是一个google内部服务账号。 cloud.google.com/iam/docs/… 是的,我知道。您需要确保该服务帐户可以使用这些权限。

以上是关于无法在 Google Cloud Composer 上安装新的 pipy 包的主要内容,如果未能解决你的问题,请参考以下文章

Google Cloud Composer DAG 未出现在 UI 中

google-cloud-composer BigQuery 跨数据集加载

使用 Cloud Proxy 的 Google Cloud Composer 和 MS SQL

如何在Google BigQuery Composer和Cloud Shell中提交多个查询

DAG 在 Google Cloud Composer 网络服务器上不可点击,但在本地 Airflow 上运行良好

使用 Google Cloud Composer Rest API 或 Node.js 客户端