虚拟机元数据简介


每个虚拟机 (VM) 实例都将其元数据存储在元数据服务器上。您的虚拟机可自动获得对元数据服务器 API 的访问权限,而无需任何额外的授权。元数据以键值对的形式存储。

本文档简要介绍了虚拟机元数据,并说明了虚拟机元数据的类型和属性。

使用虚拟机元数据

以下部分介绍了您可以使用元数据条目来管理虚拟机的几种场景。

启动和关停脚本

元数据服务器在与启动和关停脚本结合使用时会特别有用,因为您可以使用元数据服务器以编程方式获取虚拟机的专属信息,而无需额外的授权。

例如,您可以编写一个启动脚本来获取虚拟机外部 IP 的元数据键值对,并在您的脚本中使用该 IP 来设置数据库。 由于每个虚拟机上的 Compute Engine 预定义元数据键都相同,因此您可以重复使用脚本,而无需针对每个虚拟机更新脚本。这有助于您为应用创建更加可靠的代码。

宿主机维护

元数据服务器通过 scheduling/ 元数据目录条目和 maintenance-event 特性提供有关虚拟机调度选项的信息。您可以使用这些元数据值在维护事件即将发生时通知您,以便您为该事件准备好环境。如需了解详情,请参阅获取实时迁移通知

客户机特性

客户机特性是指应用在虚拟机上运行期间可写入的特定类型的自定义元数据。客户机特性仅适用于需要少量不常更改的数据的用例,如需详细了解客户机属性,请参阅设置和查询客户机属性

元数据安全注意事项

当您发出从元数据服务器获取信息的请求时,您的请求和后续元数据响应永远不会传到运行虚拟机的物理宿主机以外。

不过,任何可以查询元数据网址的进程都可以访问元数据服务器中的所有值。这包括您写入该服务器的任何自定义元数据值。Google 建议您谨慎将敏感值写入元数据服务器或运行第三方进程。

预定义和自定义元数据键

每个元数据条目以键值对的形式存储在元数据服务器上。元数据键区分大小写。您的键可以是预定义键,也可以是自定义元数据键。

预定义元数据键

预定义的元数据键是由 Compute Engine 创建的元数据键。 当您创建虚拟机时,Compute Engine 会自动设置该虚拟机上某些键的元数据值,例如虚拟机实例 ID 或项目 ID。对于 Compute Engine 不会自动设置值的预定义键,您可以根据系统配置从一组可用值中进行选择。 例如,如需为虚拟机启用 OS Login,您可以将该虚拟机的 enable-oslogin 预定义键的值设置为 TRUE。如需为该虚拟机停用 OS Login,您可以将键的值更新为 FALSE。 您只能更新这些键的值,不能更新键本身。

如需详细了解预定义的元数据键以及这些键的列表,请参阅预定义元数据键

自定义元数据键

通过自定义元数据,您可以在单个虚拟机或项目中创建和使用自己的元数据键值对。您可以添加新的自定义元数据键,更新现有键的值,以及移除不需要的任何自定义元数据条目。 设置自定义元数据对于将任意值传递给项目中的虚拟机非常有用。它对创建启动关停脚本也有用。

如需了解如何为虚拟机添加、更新或移除自定义元数据,请参阅配置自定义元数据

元数据类型

虚拟机元数据条目可以提供特定于单个虚拟机或项目的信息。您的元数据根据其提供的信息类型分为项目元数据和实例元数据。

项目元数据

项目元数据提供有关项目的信息。项目元数据会进一步分为以下类型,具体取决于您为项目元数据定义的范围:

  • 项目范围的元数据是您使用项目范围定义的项目元数据。您可以在项目级设置此元数据,这些元数据会传播到该项目中的所有虚拟机。

    您可以使用预定义和自定义元数据键来设置项目范围的元数据。详细了解预定义的项目元数据键和如何设置自定义项目范围的元数据

  • 项目可用区元数据预览版)是您使用项目中的可用区范围定义的项目元数据。您设置的元数据只会传播到该项目所配置可用区中的虚拟机。项目可用区元数据可帮助您进行故障隔离,并提供更高的可靠性。您还可以使用项目可用区元数据替换任何现有键的项目范围值,并使用可用区专用值。

    Compute Engine 不会为项目可用区元数据提供任何预定义键。您必须创建自己的自定义项目可用区元数据键。 详细了解如何设置自定义项目可用区元数据

实例元数据

实例元数据提供有关特定虚拟机实例的信息。您可以为每个虚拟机实例单独设置实例元数据。

您可以使用预定义和自定义元数据键来设置实例元数据。详细了解预定义的实例元数据键以及如何设置自定义实例元数据

元数据的排列方式

Compute Engine 会在目录列表中存储和维护虚拟机的元数据以及项目的元数据键和值。根据元数据的类型,Compute Engine 会将元数据条目存储在以下某个目录中:

元数据类型 目录
  • 项目范围的元数据
  • 项目可用区元数据

http://metadata.google.internal/computeMetadata/v1/project/
实例元数据

http://metadata.google.internal/computeMetadata/v1/instance/

每个目录都以键值对的形式存储元数据条目。某些元数据条目还是包含其他元数据键的目录。用作目录的元数据条目在元数据键名中由尾随斜杠 (/) 标记。例如,/project/attributes/ 是包含其他元数据键的 project/ 目录下的目录。如需创建自定义元数据目录列表,您必须在创建自定义元数据条目时在元数据键名中使用尾随斜杠 (/)。

项目和项目可用区元数据条目存储在同一 project/ 目录中。如果您在项目级和项目可用区级的虚拟机上为同一自定义元数据键设置了不同的值,则这些键的项目可用区元数据值优先于相应可用区中的项目范围元数据。

  • 如果您为已具有项目范围值的元数据键添加项目可用区元数据值,则 Compute Engine 将替换此指定可用区中虚拟机的项目范围值,并使用项目可用区值更新 /project 目录。
  • 如果您为已具有项目可用区值的元数据键添加新的项目范围元数据值,则系统不会进行任何更改。Compute Engine 会将项目可用区值保留在特定可用区的 /project 目录中。
  • 如果您没有为特定可用区中的自定义元数据键指定项目可用区值,但键具有项目范围的值,则您的虚拟机将继续在这些可用区中具有项目范围值。

例如,假设您定义了项目范围的元数据对 key-1=value-1。假设您还要为 us-central1-a 可用区定义项目可用区元数据对 key-1=zonal-value-1。项目 us-central1-a 可用区中的所有虚拟机都会继承 key-1=zonal-value1 作为元数据对。对于尚未为 key-1 设置任何项目可用区元数据的其他可用区中的所有虚拟机,元数据对会保留为 key-1=value-1

后续步骤