我能够成功地将grpcio
库版本升级到1.31.0
. 作为第一步,我建议您将 Cloud Composer 实例升级到最新版本 ( composer-1.11.3-airflow-1.10.9
),因为它应该更稳定并解决了一些问题。
要在 Cloud Composer 中安装更新版本的 PyPi 包,您可以按照以下步骤或官方文档:
- 创建
requirements.txt
文件并将包名称与版本一起传递:
grpcio>=1.29.0
- 执行更新命令并提供 ENVIRONMENT_NAME、新创建文件的完整路径以及 Composer 环境(即 europe-west1)的 LOCATION。
gcloud composer environments update <ENVIRONMENT_NAME> \\
--update-pypi-packages-from-file </PATH/requirements.txt> \\
--location <LOCATION>
我为确认该grpcio
版本已从 更改为1.23.0
所采取的步骤1.31.0
如下:
- 通过在 Cloud Shell 中执行以下命令,连接到您的环境的 GKE 集群。您可以在->变量中找到
GKE_CLUSTER
环境中的值。替换为区域名称:ENVIRONMENT CONFIGURATION
GKE cluster
GKE_LOCATION
gcloud container clusters get-credentials ${GKE_CLUSTER} --zone ${GKE_LOCATION}
- 连接到 GKE 集群中的工作 POD。NAMESPACE 名称应以: 开头
composer-<version>-...
,POD_NAME应以airflow-worker-...
:开头
kubectl get pods --all-namespaces
kubectl exec -itn <NAMESPACE_NAME> <POD_NAME> -- /bin/bash
- 运行 pip freeze 以查看环境中安装的所有具有相应版本的软件包:
pip freeze
- 寻找
grpcio==1.31.0
包裹。
更新:
当您尝试安装新软件包时,Composer 尝试创建新构建,但失败了,这可以通过在 Stackdriver Logging 中使用以下高级过滤器在 Cloud Build 的日志中看到:
resource.type="build"
问题是 PyPi 依赖项冲突,每个更新操作都会触发一个重建映像的 Cloud Build 操作。在您使用 Cloud Build 的 Composer 版本中,当看到任何冲突时更新操作失败。在最新版本1.11.3
中,您可以选择是否允许冲突。
基于此,我将分享两个建议以避免您遇到的问题:
- 使用更新的 Composer 版本创建新环境或升级现有环境。在更新的版本 (>=1.10.0) 中,Composer 在版本中使用 pip
19.0.2
而不是9.0.3
. 因此 pip 本身可能会更好地找到依赖关系。
- 分析 Cloud Build 日志并将包固定到不冲突的版本;然而,这可能相当困难,因为一旦你解决了一个冲突,另一个冲突可能会出现。