从 gcloud 命令安装 Google Cloud 组件错误

Posted

技术标签:

【中文标题】从 gcloud 命令安装 Google Cloud 组件错误【英文标题】:Install Google Cloud components error from gcloud command 【发布时间】:2017-07-30 12:54:00 【问题描述】:

我正在尝试从gcloud command-line tool 安装几个 GCP 组件,但总是遇到相同的错误:

$ gcloud components list

Your current Cloud SDK version is: 146.0.0
The latest available version is: 146.0.0

┌─────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
│                                                  Components                                                 │
├───────────────┬──────────────────────────────────────────────────────┬──────────────────────────┬───────────┤
│     Status    │                         Name                         │            ID            │    Size   │
├───────────────┼──────────────────────────────────────────────────────┼──────────────────────────┼───────────┤
│ Not Installed │ App Engine Go Extensions                             │ app-engine-go            │  47.9 MiB │
│ Not Installed │ Bigtable Command Line Tool                           │ cbt                      │   3.8 MiB │
│ Not Installed │ Cloud Datalab Command Line Tool                      │ datalab                  │   < 1 MiB │
│ Not Installed │ Cloud Datastore Emulator                             │ cloud-datastore-emulator │  15.4 MiB │
│ Not Installed │ Cloud Datastore Emulator (Legacy)                    │ gcd-emulator             │  38.1 MiB │
│ Not Installed │ Cloud Pub/Sub Emulator                               │ pubsub-emulator          │  21.0 MiB │
│ Not Installed │ Google Container Registry's Docker credential helper │ docker-credential-gcr    │   3.3 MiB │
│ Not Installed │ gcloud app Java Extensions                           │ app-engine-java          │ 128.3 MiB │
│ Not Installed │ gcloud app Python Extensions                         │ app-engine-python        │   7.2 MiB │
│ Not Installed │ kubectl                                              │ kubectl                  │  11.5 MiB │
│ Installed     │ BigQuery Command Line Tool                           │ bq                       │   < 1 MiB │
│ Installed     │ Cloud SDK Core Libraries                             │ core                     │   5.7 MiB │
│ Installed     │ Cloud Storage Command Line Tool                      │ gsutil                   │   2.8 MiB │
│ Installed     │ Default set of gcloud commands                       │ gcloud                   │           │
│ Installed     │ gcloud Alpha Commands                                │ alpha                    │   < 1 MiB │
│ Installed     │ gcloud Beta Commands                                 │ beta                     │   < 1 MiB │
└───────────────┴──────────────────────────────────────────────────────┴──────────────────────────┴───────────┘

然后尝试安装kubectl

$ gcloud components install kubectl

You cannot perform this action because this Cloud SDK installation is 
managed by an external package manager.  If you would like to get the 
latest version, please see our main download page at:
https://cloud.google.com/sdk/
ERROR: (gcloud.components.install) The component manager is disabled for this installation

知道为什么会出现这个错误吗?

【问题讨论】:

知道了!您需要直接使用版本化存档而不是包管理器(apt-get 或 yum)安装 gcloud 命令行。如果您使用后者,似乎没有其他方法可以安装某些附加软件包。 您也可以使用 yum 安装组件(或其中一些),请看这里:cloud.google.com/sdk/downloads#yum 【参考方案1】:
ERROR: (gcloud.components.update) You cannot perform this action because this Cloud SDK installation is managed by an external package manager.
Please consider using a separate installation of the Cloud SDK created through the default mechanism described at: https://cloud.google.com/sdk/

我无法安装所需的 kubectl gcloud 组件,原因是我使用 snap manager 安装 GCloud SDK,所以我还需要通过 snap 安装 kubectl。

sudo snap install kubectl --classic

它适用于我的情况。

【讨论】:

【参考方案2】:

要为 Ubuntu 操作系统的这个答案添加更多上下文,这些是我在使用 apt-get 包管理器安装 google-cloud-sdk 时采取的步骤

    使用删除现有安装

    sudo apt-get remove google-cloud-sdk

    导航到 https://cloud.google.com/sdk/docs/quickstart-linux 并按照步骤为您的系统下载正确的tar.gz 软件包

    导航到下载目录并使用

    解压缩存档

    tar -zxf google-cloud-sdk-*

    使用安装 SDK

    ./google-cloud-sdk/install.sh

    通过以下任一方式使gcloud 命令可用:

    运行source ~/.bashrc 或 关闭当前的终端会话并打开一个新的

使用此安装,我可以使用以下命令更新和安装kubectl

gcloud components update
gcloud components install kubectl

【讨论】:

在第 4 步之后,您需要重新启动终端才能使更改生效。否则,这个解决方案解决了我在 Ubuntu 上安装 Kubernetes 的所有问题。 我需要使用sudo gcloud components install kubectl 当我运行第 4 条命令 (install.sh) 时出现这种错误:文件“/usr/local/lib/python3.5/ssl.py”,第 98 行,在 import _ssl # 如果不能导入,就让错误传播 ImportError: No module named '_ssl'【参考方案3】:

我的问题

我想在现有 GCE 实例 (Ubuntu Xenial) 上升级 gcloud CLI 版本,并运行 gcloud components update 导致以下结果:

# gcloud components update
ERROR: (gcloud.components.update) You cannot perform this action because this Cloud SDK installation is managed by an external package manager.
Please consider using a separate installation of the Cloud SDK created through the default mechanism described at: https://cloud.google.com/sdk/

我的解决方案

我发现 SDK 可执行文件安装在 /usr/lib/google-cloud-sdk 中,并通过 /usr/bin 中的符号链接包含在 PATH 中:

# ll /usr/bin | grep google-cloud
lrwxrwxrwx  1 root   root          30 Aug 20  2018 bq -> ../lib/google-cloud-sdk/bin/bq*
lrwxrwxrwx  1 root   root          34 Aug 20  2018 gcloud -> ../lib/google-cloud-sdk/bin/gcloud*
lrwxrwxrwx  1 root   root          52 Aug 20  2018 git-credential-gcloud.sh -> ../lib/google-cloud-sdk/bin/git-credential-gcloud.sh*
lrwxrwxrwx  1 root   root          34 Aug 20  2018 gsutil -> ../lib/google-cloud-sdk/bin/gsutil*

因此,为了安装最新版本,我按照https://cloud.google.com/sdk/docs/quickstart-linux 的步骤 3 和 4:

    下载最适合您的操作系统的存档文件。
# curl -O https://dl.google.com/dl/cloudsdk/channels/rapid/downloads/google-cloud-sdk-247.0.0-linux-x86_64.tar.gz
    将存档解压缩到文件系统上的任何位置;最好是您的主文件夹。
# tar zxvf google-cloud-sdk-247.0.0-linux-x86_64.tar.gz google-cloud-sdk

然后将旧的/usr/lib/google-cloud-sdk 目录替换为新目录:

# mv /usr/lib/google-cloud-sdk /usr/lib/google-cloud-sdk-ORIG
# mv google-cloud-sdk /usr/lib/

这允许已经在 PATH 上的符号链接继续工作,保持现有的 auth/config 到位,并且似乎支持将来通过 gcloud components update 进行升级:

# gcloud components update

All components are up to date.

有用的故障排除命令

在升级 gcloud 之前和之后运行这些可能会有所帮助。

gcloud 在您的 PATH 中的什么位置:

$ which gcloud
/usr/bin/gcloud

你使用的是什么版本的gcloud

$ gcloud version
Google Cloud SDK 247.0.0
bq 2.0.43
core 2019.05.17
gsutil 4.38

gcloud 使用什么凭据(默认情况下):

$ gcloud auth list

gcloud 使用什么配置(默认):

$ gcloud config list

【讨论】:

【参考方案4】:

如果 aptapt-get 未卸载 gcloud,请尝试使用 snap remove google-cloud-sdk

如果您使用较新的 Ubuntu 版本(例如 LTS 18.04),可能会出现这种情况。

【讨论】:

【参考方案5】:

Cloud SDK 组件管理器仅在您不通过其他包管理器安装 SDK 时才有效。如果要使用组件管理器,可以使用以下方法之一安装:

https://cloud.google.com/sdk/downloads#versioned

https://cloud.google.com/sdk/downloads#interactive

我们的 deb 和 yum 存储库中提供了其他软件包,因此所有相同的组件都可用,您只需使用现有的软件包管理器来安装它们:

https://cloud.google.com/sdk/downloads#apt-get

https://cloud.google.com/sdk/downloads#yum

【讨论】:

通过apt很好地安装了SDK,但尝试sudo apt-get install google-cloud-sdk-pubsub-emulator并得到错误:E: Unable to locate package google-cloud-sdk-pubsub-emulator 您说“Cloud SDK 组件管理器仅在您不通过其他包管理器安装 SDK 时才有效。”但就我而言,我从未安装过 gcloud;它预装在每个 GCP 实例上。那么,对于我们这些使用 docker 的人来说,这种预安装是没用的吗? 不同的 GCP 镜像由不同的人管理,因此预装的 Cloud SDK 版本可能会有所不同。 debian 镜像使用上面提到的 apt-get 方法安装 SDK,并且所有这些组件都可用。其他发行版管理他们自己的 SDK 包,并且可能没有所有可用的组件。如果您需要一些不可用的东西,最好的选择是卸载镜像中附带的 SDK,然后使用上述方法之一进行安装。 也按照说明通过 apt-get 安装,也无法按照 Karl 的上述说明安装 google-cloud-sdk-pubsub-emulator(或数据存储)。 如果得到E: Unable to locate package google-cloud-sdk-pubsub-emulator,则需要添加Cloud SDK分发URI作为包源,如here解释。

以上是关于从 gcloud 命令安装 Google Cloud 组件错误的主要内容,如果未能解决你的问题,请参考以下文章

我可以自动化 Google Cloud SDK gcloud init - 交互式命令吗

在没有 gcloud 客户端的情况下访问 google 容器注册表

Google Compute Engine:无法从 gcloud 终端查询 API

在 Google Compute Engine 上使用 gcloud 安装 node.js

减少 gcloud Google Compute Platform CLI 冗长

使用 gcloud 连接到 Google Datastore