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

71

我正在尝试从gcloud命令行工具安装多个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

有任何想法为什么会引发这个错误吗?


2
明白了!您需要直接使用版本化的存档安装gcloud命令行,而不是使用软件包管理器(apt-get或yum)。如果您使用后者,则似乎没有其他安装某些附加软件包的方法。 - Ivan Fernandez
1
您也可以使用yum安装组件(或其中一些),请参见此处: https://cloud.google.com/sdk/downloads#yum - Robert Lacok
我最初就做了那个,但还是没起作用。为什么我的问题总是在宇宙中独一无二呢? - Nathan McKaskle
8个回答

77

为了给Ubuntu操作系统的答案增加更多背景信息,这是我在已经使用apt-get软件包管理器安装了google-cloud-sdk后所采取的步骤:

  1. 使用以下命令删除现有的安装

    sudo apt-get remove google-cloud-sdk

  2. 前往 https://cloud.google.com/sdk/docs/quickstart-linux并按照步骤下载适用于您的系统的正确的tar.gz软件包

  3. 导航至下载目录并解压缩存档,使用

    tar -zxf google-cloud-sdk-*

  4. 使用以下命令安装SDK

    ./google-cloud-sdk/install.sh

  5. 通过以下方法之一使gcloud命令可用:

    • 运行source ~/.bashrc
    • 关闭当前终端会话并打开新会话。

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

gcloud components update
gcloud components install kubectl

3
在第4步完成后,您需要重新启动终端才能使更改生效。否则,这个方法解决了我在Ubuntu上安装Kubernetes时遇到的所有问题。 - RDRR
我需要使用 sudo gcloud components install kubectl - Yaakov Bressler
当我运行第四个命令(install.sh)时,我会遇到这样的错误:File "/usr/local/lib/python3.5/ssl.py",第98行,in <module> import _ssl#如果我们无法导入它,请让错误传播ImportError:没有名为'_ssl'的模块 - Suat Atan PhD
错误的答案,这正是我所做的,但它仍然显示相同的错误,声称我使用了第三方打包程序进行安装,而事实上我明确没有这样做。 - Nathan McKaskle

44
云 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


3
通过apt安装了SDK,但尝试使用“sudo apt-get install google-cloud-sdk-pubsub-emulator”时出现错误:E:无法找到软件包google-cloud-sdk-pubsub-emulator - basickarl
你说:“Cloud SDK 组件管理器只有在您没有通过其他软件包管理器安装 SDK 时才能正常工作。”但在我的情况下,我从未安装过 gcloud;它预装在每个 GCP 实例上。那么,对于我们使用 Docker 的人来说,这种预安装是否无用? - carbocation
不同的GCP映像由不同的人管理,因此预安装的Cloud SDK版本可能会有所不同。Debian映像使用上述apt-get方法安装SDK,并将拥有所有这些组件。其他发行版管理自己的SDK包,可能没有所有组件可用。如果您需要某些不可用的内容,则最好的选择是卸载图像上的SDK,并使用上述方法之一进行安装。 - Mark
根据说明,也已通过apt-get安装,但无法像Karl上面的笔记那样安装google-cloud-sdk-pubsub-emulator(或数据存储)。 - El Yobo
1
如果你遇到了 E: Unable to locate package google-cloud-sdk-pubsub-emulator 的错误,那么你需要按照这里所述的步骤将Cloud SDK分发URI添加为软件包源。 - xEc
如果有人在这里查看此解决方案以安装docker凭据助手组件,则该组件“尚未”在apt存储库中提供。 - Rondo

6
如果aptapt-get无法卸载gcloud,请尝试使用snap remove google-cloud-sdk。这可能是因为您使用的是较新版本的Ubuntu(例如LTS 18.04)。

6

我的问题

我想要升级现有 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步进行操作:
  1. 下载适合您操作系统的归档文件。
# curl -O https://dl.google.com/dl/cloudsdk/channels/rapid/downloads/google-cloud-sdk-247.0.0-linux-x86_64.tar.gz
  1. 将存档文件提取到您文件系统上的任何位置,最好是您的Home文件夹。
# 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

1

谷歌支持团队的回答如下:

这可能是由于使用apt-get或yum等包管理器安装Google Cloud SDK导致的。
如果您想启用Google Cloud CLI组件管理器,可以按照此文档[2]卸载现有的包管理器安装的Cloud SDK,并使用安装程序重新安装Cloud SDK[1]。
但是,安装'docker-credential-gcr'不受Cloud SDK支持,请考虑使用gcloud凭据助手[3]或通过curl命令[4]安装它。

[1] https://cloud.google.com/sdk/docs/install#installation_instructions

[2] https://cloud.google.com/sdk/docs/uninstall-cloud-sdk


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管理器来安装GCloud SDK,因此我还需要通过snap安装kubectl。

sudo snap install kubectl --classic

在我的情况下,这有效。


0

0
我试图在Linux机器上使用remote-exec安装cbt,代码如下:

exampleScript.sh

gcloud components update --quiet 
gcloud components install cbt --quiet

参考 Terraform 代码

resource "null_resource" "remote-exec-resource" {
  provisioner "remote-exec" {
    connection {
      type     = "ssh"
      user     = "username"
      private_key = "your_ssh_key"
      host     = "your_host_external_ip"
    }
    script = "exampleScript.sh"
  }
  depends_on = [YOUR_RESOURCE]
}

但是我遇到了相同的错误,我通过以下的解决方法解决了这个问题。
remote-exec 中,我不再调用 exampleScript.sh,而是将脚本传递给 google_compute_instance
resource "google_compute_instance" "default" {
    metadata_startup_script = "exampleScript.sh"
}

安装Cloud SDK的参考资料。

https://cloud.google.com/knowledge/kb/cloud-sdk-shows-error-sdk-component-manager-is-disabled-000004810


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接