gcloud compute

与使用 Compute Engine API 相比,使用 gcloud compute 命令行工具能够以更简单易用的格式轻松管理 Google Compute Engine 资源。

gcloud 工具属于 Cloud SDK,是一种统一的命令行工具,包含语句自动填充、就地更新、各种手册式帮助信息、易读格式和机器可解析格式的输出以及与 Google Cloud SDK 集成等功能。

如果您以前从未使用过 Compute Engine,请从一个快速入门指南开始

安装或更新 gcloud compute

设置 gcloud compute

Google Compute Engine 使用 OAuth2 进行身份验证和授予访问权限,因此在使用 gcloud compute 之前,您必须先向 Cloud SDK 授予代表您访问您的项目并获取身份验证令牌的权限。

如果您是第一次使用 gcloud 命令行工具,gcloud 会自动使用 default 配置。在大多数情况下,您只需要使用 default 配置。

  1. 运行 gcloud init 以启动身份验证过程。在出现提示时按 Enter 键。

    该命令会输出一个网址,并尝试打开一个浏览器窗口来请求访问您的项目。如果此时系统打开了一个浏览器窗口,您将看到以下输出:

    gcloud init
    
    Welcome! This command will take you through the configuration of gcloud.
    
    Your current configuration has been set to: [default]
    
    ...
    
    To continue, you must login. Would you like to login (Y/n)?  y
    
    Your browser has been opened to visit:
    
    https://accounts.google.com/o/oauth2/auth?scope=https%3A%2F%2Fwww.googleapis.co%2
    Fauth%2Fappengine.admin+https%3A%2F%2...

    如果 Cloud SDK 检测到系统无法打开浏览器(例如,您正在使用远程机器),您将看到以下输出。或者,如果您使用的是本地机器,但浏览器并未自动加载网址,请重试 gcloud init 命令并添加 --console-only 标志。

    gcloud init --console-only
    

    复制身份验证网址并将其粘贴到浏览器中。然后,将收到的验证码粘贴回终端。

    Go to the following link in your browser:
    
    https://accounts.google.com/o/oauth2/auth?scope=https%3A%2F%2Fwww.googleapis.co%2
    Fauth%2Fappengine.admin+https%3A%2F%2...
    
    Enter verification code:
  2. 授予访问权限。

    在浏览器窗口中,查看应用权限,并在准备就绪后点击接受。如果您在使用远程机器或使用了 --console-only 标志,请复制返回的代码并将其粘贴到命令行中输入验证码后。否则,该代码会自动发送至命令行工具。

  3. 选择此配置的凭据。

    设置完凭据后,gcloud 会提示您提供此配置的默认项目。从列表中选择一个项目 ID 即可。

    设置此属性后,所有 gcloud compute 命令都使用默认项目 ID,除非您使用 --project 标志替换此项目 ID 或设置 CLOUDSDK_CORE_PROJECT 环境变量。如果您未设置默认项目或环境变量,则必须在您运行的每个 gcloud compute 命令中加入 --project 标志。

当您第一次运行 gcloud 时,该工具还会根据项目元数据中的默认地区和区域键为您设置默认地区和区域。如果您要使用属于某个地区或区域的资源,必须指定相应的地区或区域(例如,每次操作虚拟机实例时,都必须指定一个地区)。通过设置默认地区和区域,gcloud 可以推断出这些信息,因此您无需在每个请求中都提供此类信息。请注意,您可以随时手动替换或更改这些默认设置。

如需了解详情,请参阅设置默认属性

使用配置

gcloud 使用 configurations 的概念来帮助您管理不同帐号的凭据。每项配置都包含了要进行身份验证的电子邮件帐号,以及如默认项目 ID、默认地区设置等特定设置。gcloud 自动安装了 default 配置。该配置的凭据将用于向 Google Cloud Platform 服务进行身份验证。

对于大多数用户而言,仅使用 default 配置就足够了。但是,如果您的使用场景需要您在多个帐号之间切换,则可以创建更多配置以便进行这种切换。

请参阅 gcloud topic configurations 详细了解如何使用配置。

设置默认属性

目前,当您首次创建项目并使用 gcloud 时,Compute Engine 会根据您的项目元数据中的信息选择默认地区和区域,并为您的 default 配置设置此属性。您可以通过获取有关该项目的元数据信息来查看这些默认属性:

gcloud compute project-info describe

查找以下元数据键:

- key: google-compute-default-region
  value: ...
- key: google-compute-default-zone
  value: ..

如果您未更改或替换这些属性,gcloud 会自动为您发出的所有 gcloud 请求提供这些属性。要更改或替换这些属性,请使用以下方法。

更改元数据服务器中的默认地区和区域

您可以更改元数据服务器中的默认地区和区域,只需向元数据服务器发出请求即可。例如:

gcloud compute project-info add-metadata \
    --metadata google-compute-default-region=europe-west1,google-compute-default-zone=europe-west1-b

在您重新运行 gcloud init 命令后,gcloud 命令行工具将仅检测到对默认地区和区域进行的最新更改。在您更新默认元数据后,请运行 gcloud init 以重新初始化您的 default 配置。

在本地客户端中设置默认地区和区域

您可以手动选择其他地区或区域,而无需更新元数据服务器,只需在 gcloud 客户端本地设置这些属性即可。

首先,请确保您使用的是要为其设置这些属性的配置。每个配置都有自己的设置;要在配置之间切换,请运行以下命令:

gcloud config configurations activate CONFIGURATION_NAME

接下来,要在客户端中设置地区或区域属性,请运行以下命令:

gcloud config set compute/zone ZONE
gcloud config set compute/region REGION

如果要完全移除默认属性,请使用 unset 命令。

gcloud config unset compute/zone
gcloud config unset compute/region

请注意,完全移除默认属性会导致 gcloud 在您运行每个命令时提示您指定地区或区域。

在环境变量中设置默认值

您可以设置向 gcloud compute 命令提供值的环境变量。这些环境变量会覆盖您使用 gcloud config 命令设置的默认属性,但不会覆盖 --zone--region 等显式标志。

Linux/macOS
使用 export 命令设置地区和区域变量。
$ export CLOUDSDK_COMPUTE_ZONE=ZONE
$ export CLOUDSDK_COMPUTE_REGION=REGION
要使这些环境变量永久生效,请将这些命令添加到 ~/.bashrc 文件中并重启终端。
Windows
使用 set 命令设置地区和区域变量。
C:\> set CLOUDSDK_COMPUTE_ZONE=ZONE
C:\> set CLOUDSDK_COMPUTE_REGION=REGION

您可以替换环境变量,只需在命令中添加特定的 --zone--region 标志即可。

设置每个请求的值

您可以替换默认属性,只需在每个命令中添加特定的 --zone--region 标志即可。例如:

gcloud compute instances create example-instance --zone us-central1-f

这些标志仅适用于您要配合使用的单个命令。另外,这些标志不会更改您的任何默认设置,而只是替换该请求的设置。

默认属性的优先顺序

gcloud 命令行工具按照以下顺序评估每个配置的默认属性:

  • 如果您明确提供 --zone--region--project 标志,则命令行工具将覆盖该单个请求的所有其他设置。
  • 如果在元数据服务器中定义了默认地区和区域属性,则当您运行 gcloud init 时,gcloud 命令行工具会将您的本地 gcloud 客户端设置为这些属性。对于后续请求,该工具会提示您指定地区。
  • 如果在元数据服务器和本地客户端上针对该配置定义了默认的地区和区域属性,则该工具会使用本地客户端上的默认属性。
  • 如果在元数据服务器、本地客户端和环境变量中定义了默认地区和区域属性,则无论您使用哪种配置,该工具都会使用环境变量中的默认属性。

常见的 gcloud compute 命令

以下是处理实例时的常见任务示例。如需详细了解如何处理常规实例,请参阅实例

创建实例

使用 instances create 命令来创建一个新实例。例如,以下命令会在“us-central1-a”地区中创建一个名为“my-instance”的实例。

gcloud compute instances create my-instance

如果您省略 --zone 标志,gcloud 可根据您的默认属性推断出您所需的地区。

如果未在 create 命令中指定机器类型映像等其他必需的实例设置,则这些设置会被设为默认值。您可以通过显示 create command 的帮助信息来查看默认值:

gcloud compute instances create --help

列出实例

您可以使用 instances list 命令以多种方式列出您的实例。您可以使用以下命令创建易懂的表格输出:

gcloud compute instances list

您可以使用正则表达式来缩小按名称返回的实例范围。例如,以下命令将返回名称以“my-”开头的所有实例。

gcloud compute instances list --filter="name ~ ^my-.*"

如需详细了解如何列出和过滤资源,请参阅提取资源

要返回关于一个实例的详情,请使用 instances describe 命令。例如,以下命令将返回关于“my-instance”的信息。

gcloud compute instances describe my-instance --zone us-central1-a

上述命令以 YAML 格式返回结果。您可以使用 --format 标志来更改结果的显示方式。如需了解获取和列出资源(包括实例)的更多示例,请参阅获取资源

连接实例

使用 gcloud compute 可以轻松连接您的实例。gcloud compute sshgcloud compute scp 命令提供了适用于 SSH 和 SCP 的包装函数,负责处理身份验证以及将实例名称映射到 IP 地址。

例如,要通过 ssh 连接“us-central1-a”地区中的“my-instance”,您可以使用以下命令:

gcloud compute ssh my-instance --zone us-central1-a

要将本地文件“file-1”复制到“us-central1-a”地区中的“my-instance”,您可以使用以下命令:

gcloud compute scp ~/file-1 my-instance:~/remote-destination --zone us-central1-a

scp 命令还可用于将实例中的文件复制到本地机器。例如,要在“us-central1-a”地区中的实例“my-instance”上创建名为“file-1”的本地副本,您可以使用以下命令:

gcloud compute scp my-instance:~/file-1 ~/local-destination --zone us-central1-a

默认情况下,gcloud compute sshgcloud compute scp 命令都使用位于“~/.ssh/google_compute_engine”的私钥文件。如果您不想使用此密钥文件,则可以通过使用 --ssh-key-file 标志指定其他位置,来指定不同的密钥文件。例如,您可能已经拥有要使用的私钥,或者可能要将不同的私钥用于不同的项目。

直接使用基于 SSH 的程序

如果您想要直接使用 sshscp,则 gcloud compute 会生成一个 SSH 配置文件,该文件包含您的实例的主机别名以及身份验证配置。要完成此操作,请运行以下命令:

gcloud compute config-ssh

以下是添加到 SSH 配置文件 (~/.ssh/config) 的一个别名示例:

Host my-instance.us-central1-a.myproject
HostName 107.178.220.224
IdentityFile ~/.ssh/google_compute_engine
UserKnownHostsFile=/dev/null
CheckHostIP=no
StrictHostKeyChecking=no

您可以指定一个针对每位用户的备用 SSH 配置文件,只需使用 --ssh-config-file 标志即可。

每次添加或移除实例时,您都应该重新运行 config-ssh 命令。

使用 config-ssh 命令更新您的 SSH 配置文件后,您可以使用任何基于 SSH 的程序来访问您的实例。例如,如果您要访问位于“us-central1-a”地区的名为“myproject”的项目中的“my-instance”实例,则可以使用 OpenSSH ssh 客户端,如下所示:

$ ssh my-instance.us-central1-a.myproject

要在实例上创建文件“file-1”的本地副本,可以使用 scp 客户端,如下所示:

$ scp my-instance.us-central1-a.myproject:~/file-1 .

使用元数据

您可以在服务器定义的元数据之外为实例或项目设置自定义元数据。如果您要将任意值(可在实例上通过您的代码查询)传递到您的项目或实例,此功能会非常有用。此部分介绍了几个常见的元数据操作。如需详细了解如何使用元数据,请参阅存储和检索元数据

添加和移除实例元数据

您可以在使用 create 命令创建实例时使用 gcloud compute 配置实例元数据,或者也可以使用 add-metadataremove-metadata 命令处理现有实例的元数据。元数据是通过 --metadata 标志指定的以等号 ("=") 分隔的键/值对。另外,您也可以使用 --metadata-from-file 标志从本地文件中读取元数据。

例如,要将自定义元数据键“role”、“unique-id”和“build-num”添加到“us-central1-a”地区中名为“my-instance”的现有实例,您可以使用以下命令:

gcloud compute instances add-metadata my-instance \
    --zone us-central1-a \
    --metadata role=worker unique-id=1234 build-num=4.32

要移除自定义元数据键“role”和“unique-id”,您可以使用以下命令:

gcloud compute instances remove-metadata my-instance \
    --zone us-central1-a \
    --keys role unique-id

在现有实例中添加和移除元数据后,您可以运行以下命令来查看所做的更改:

gcloud compute instances describe my-instance --zone us-central1-a
...
metadata:
  fingerprint: eU448B6JGQw=
  items:
  - key: build-num
    value: '4.32'
  kind: compute#metadata
...

要更改现有的元数据或添加新的元数据,请使用 add-metadata 命令。实例元数据更新是指执行添加操作。这意味着您只需指定要添加或更改的元数据键即可。如果您指定现有键,那么系统将使用新值更新该键的值。

对于安装了 Google Compute Engine 工具的映像,系统为启动脚本功能保留了两个元数据键:

  • startup-script:表示实例启动时,系统执行的脚本内容。对于较长的脚本内容,您可以使用 --metadata-from-file 标志来传递指向包含脚本内容的文件的路径。
  • startup-script-url:表示实例启动时,系统执行位于指定可公开访问的位置的脚本。

例如,要在“us-central1-a”地区中创建名为“my-instance”的实例,并使用 --metadata 标志指定启动脚本内容,您可以使用以下命令:

gcloud compute instances create my-instance --zone us-central1-a \
    --metadata startup-script="echo 'hello world'"

如果您通过 SSH 连接“my-instance”并检查系统日志 (/var/log/syslog),您将看到启动脚本的结果。

对于名为“my-instance”的现有实例,您可以使用 --metadata-from-file 标志添加本地文件格式的启动脚本,如下所示:

gcloud compute instances add-metadata my-instance \
    --metadata-from-file startup-script=/local/path/to/script/startup

在本例中,启动脚本会在实例重新启动时(例如当您使用 gcloud compute instances reset 时)运行。

添加和移除项目级层元数据

项目中的所有实例都可以访问项目级层元数据。默认情况下,项目保留了项目级层元数据。此外,您还可以添加和移除自定义项目级层元数据。和实例元数据一样,项目元数据更新也是指执行添加操作。这意味着您只需指定要添加或更改的元数据键即可。如果您指定现有键,那么系统将使用新值更新该键的值。

要查看现有的项目级层元数据,请使用 project-info describe 命令:

gcloud compute project-info describe

以下命令添加了两个项目范围的元数据。

gcloud compute project-info add-metadata \
    --metadata-from-file startup-script=/local/path/to/script
    --metadata startup-id=1234

请注意,startup-script 键已被保留,这意味着当实例启动时,系统将运行指定的本地文件中的内容。

要移除刚刚添加的两个元数据,请使用以下命令:

gcloud compute project-info remove-metadata --keys startup-script startup-id

删除实例

要删除“us-central1-a”地区中的实例“my-instance”,您可以使用 instances delete 命令:

gcloud compute instances delete my-instance --zone us-central1-a

当您创建实例时,系统还会创建一个永久性磁盘。这个磁盘将计入您的永久性磁盘配额,并且每月都会产生相关费用。如果使用 instances delete 命令删除实例,则在默认情况下,系统会移除与实例关联的永久性磁盘。要防止永久性磁盘被移除,您可以执行以下操作:

  • 使用 instances delete 命令的 --keep-disks 标志。
  • 将永久性磁盘配置为不会被自动删除。从创建实例后到删除实例之前的任何时间,您都可以使用 instances set-disk-auto-delete 命令来保留永久性磁盘。请注意,无论自动删除配置如何,instances delete 命令的 --delete-disks 标志都将删除磁盘。

如需了解详情,请参阅设置永久性磁盘的自动删除状态

列出操作

操作是对 Google Compute Engine 资源进行更改的记录。要列出项目中的所有操作,您可以使用 operations list 命令:

gcloud compute operations list

操作具有多种范围,可用于缩小 list 请求中返回的操作范围。例如,您可以使用 --global--zones--regions 标志来优化结果。例如,以下命令仅返回“us-central1-a”和“us-central1-b”地区中的操作:

gcloud compute operations list --filter="zone:(us-central1-a us-central1-b)"

如需了解获取和列出资源(包括操作)的更多示例,请参阅获取资源

获取帮助页面

使用以下命令可显示如何获取不同类型的帮助(从关于 gcloud compute 命令的一般帮助,到有关资源组 (instances) 或命令 (create) 的特定帮助)。通常,适用于所有资源和命令的综合帮助信息都遵循以下模式:

gcloud compute --help
gcloud compute instances --help
gcloud compute instances create --help

要获得快速帮助,请使用 -h 标志,而不是 --help 标志。此外,您还可以参阅 Cloud SDK 参考以查看所有综合帮助信息。

如需了解专门用于配置 gcloud 工具的命令的综合帮助信息,请运行以下命令:

gcloud topic TOPIC

其中,TOPIC 是您希望获得相关帮助信息的适用主题。请参阅 gcloud topic 参考文档,其中的主题可为您提供帮助。

后续步骤

本页内容告一段落,您现在可以开始自行使用 gcloud compute 工具了!以下这些内容可帮助您开始使用:

此页内容是否有用?请给出您的反馈和评价:

发送以下问题的反馈:

此网页
Compute Engine 文档