如果您的虚拟机没有本地 SSD 且不属于代管式实例组 (MIG),您可以停止虚拟机,然后更改虚拟机的机器类型。
如果现有机器类型不适合您在虚拟机上运行的工作负载,请更改该虚拟机的机器类型。在工作负载发生变化时,您可以更改虚拟机的机器类型,以调整 vCPU 数量和内存量。例如,您可以在设置、开发和测试阶段使用具有较小机器类型的虚拟机,然后在准备好运行生产工作负载时将该虚拟机改为使用较大的机器类型。
对于没有本地 SSD 且不属于 MIG 的虚拟机,您可以在不影响以下资源的情况下更改机器类型:
- 虚拟机的 SSH 密钥
- 虚拟机配置,例如虚拟机元数据
- 虚拟机的永久性磁盘数据,包括已安装的应用和应用数据
如果您需要更改 MIG 中的虚拟机的机器类型,请参阅在 MIG 中自动应用虚拟机配置更新。
准备工作
- 了解如何关停虚拟机。
- 了解机器类型。
-
如果您尚未设置身份验证,请进行设置。身份验证是通过其进行身份验证以访问 Google Cloud 服务和 API 的过程。如需从本地开发环境运行代码或示例,您可以按如下方式向 Compute Engine 进行身份验证。
Select the tab for how you plan to use the samples on this page:
Console
When you use the Google Cloud console to access Google Cloud services and APIs, you don't need to set up authentication.
Java
如需在本地开发环境中使用本页面上的 Java 示例,请安装并初始化 gcloud CLI,然后使用您的用户凭据设置应用默认凭据。
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
If you're using a local shell, then create local authentication credentials for your user account:
gcloud auth application-default login
You don't need to do this if you're using Cloud Shell.
如需了解详情,请参阅 Set up authentication for a local development environment。
Python
如需在本地开发环境中使用本页面上的 Python 示例,请安装并初始化 gcloud CLI,然后使用您的用户凭据设置应用默认凭据。
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
If you're using a local shell, then create local authentication credentials for your user account:
gcloud auth application-default login
You don't need to do this if you're using Cloud Shell.
如需了解详情,请参阅 Set up authentication for a local development environment。
REST
如需在本地开发环境中使用本页面上的 REST API 示例,请使用您提供给 gcloud CLI 的凭据。
Install the Google Cloud CLI, then initialize it by running the following command:
gcloud init
如需了解详情,请参阅 Google Cloud 身份验证文档中的使用 REST 时进行身份验证。
限制
- 如果您的虚拟机具有本地 SSD,您无法更改虚拟机的机器类型。
- 如果您的虚拟机使用临时外部 IP 地址,则 IP 地址可能会在您修改虚拟机的机器类型时发生变化。如需保留 IP 地址,请将其升级为静态外部 IP 地址。
- 更改虚拟机的机器类型不适用于部分配置:
- 如果您要使用机器家族中的最新一代 CPU,请参阅将虚拟机迁移到新的机器系列。
- 如果您要将机器类型更改为 Arm 机器类型,请参阅将工作负载从现有虚拟机迁移到新虚拟机。
- 您可以按照本文档中的步骤更改 G2 加速器优化机器类型的机器类型。对于其他加速器优化机器类型,请查看修改加速器优化虚拟机。
结算影响
不同机器类型的计费费率不同,因此请确保您了解更改机器类型的价格影响。例如,
e2-standard-2
机器类型的费用高于e2-micro
机器类型。更改机器类型可能还会影响相关虚拟机的持续使用折扣。系统会针对同一区域中的不同类别单独计算持续使用折扣。如果您要更改机器类型,使新机器类型属于其他类别,则虚拟机的后续运行时间将计入新类别的持续使用折扣。
例如,假设您有一个机器类型为
n2-standard-2
的虚拟机,该虚拟机运行了半个月。然后决定将该机器类型更改为m1-ultramem-40
。在您进行此更改后,Compute Engine 就会开始将虚拟机的运行时间计入内存优化的 vCPU 和内存类别的持续使用折扣。在您的账单上,您会看到机器类型更改之前应用于
n2-standard-2
机器类型的持续使用折扣,以及针对m1-ultramem-40
的单独持续使用折扣(如果您的虚拟机在m1-ultramem-40
上保持运行的时间至少占本月剩余时间的 25%)。最佳做法
以下是一些可帮助您成功更改虚拟机机器类型的最佳实践。
使用快照定期备份永久性磁盘数据。在更改机器类型之前,考虑截取永久性磁盘数据的快照。如果您要确保新机器类型能够支持现有虚拟机上的数据,可以截取永久性磁盘快照,并使用该快照来启动第二个运行新机器类型的虚拟机,以确认该虚拟机将成功启动。
将其他永久性磁盘添加到
/etc/fstab
文件中。如果您已将其他永久性磁盘挂接到虚拟机,请确保将它们添加到/etc/fstab
文件中,以便在虚拟机重新启动时自动装载这些磁盘。在更改机器类型之前创建预留。为避免与资源可用性相关的错误,请在新机器类型可用时为它们创建 Compute Engine 预留,以便在区域内进行预留。预留有助于确保资源在您需要时可用。
如需创建预留,请完成以下步骤:
创建预留(或标识现有预留),其属性与计划虚拟机相同。预留的虚拟机数量必须大于或等于您要更改的虚拟机数量。(可选)为了防止其他虚拟机使用此预留,请使用
specificReservationRequired
选项。验证计划的虚拟机是否可以使用该预留:
- 验证所需的虚拟机是否具有正确的预留亲和性。
- 在更改虚拟机之前,立即确保预留具有足够的容量。
更改机器类型
您只能更改已停止虚拟机的机器类型。只有当虚拟机处于TERMINATED
状态时,才会被视为已停止。您无法更改正在运行的虚拟机的机器类型。如果您要将机器类型升级到最新一代,请先查看将虚拟机迁移到新的机器系列,然后再继续操作。
执行此任务所需的权限
您必须拥有以下权限才能执行此任务:
- 针对虚拟机的
compute.instances.setMachineType
权限
控制台
gcloud
使用
gcloud compute instances stop
命令停止虚拟机:gcloud compute instances stop VM_NAME
将
VM_NAME
替换为包含要更改的机器类型的虚拟机。使用
gcloud compute instances set-machine-type
命令更改机器类型。gcloud compute instances set-machine-type VM_NAME \ --machine-type NEW_MACHINE_TYPE
将
NEW_MACHINE_TYPE
替换为虚拟机的新机器类型。机器类型可以是以下类型之一:使用
gcloud compute instances start
命令启动虚拟机:gcloud compute instances start VM_NAME
将
VM_NAME
替换为您更改的虚拟机的名称。
Java
Java
试用此示例之前,请按照《Compute Engine 快速入门:使用客户端库》中的 Java 设置说明进行操作。 如需了解详情,请参阅 Compute Engine Java API 参考文档。
如需向 Compute Engine 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
Python
Python
试用此示例之前,请按照《Compute Engine 快速入门:使用客户端库》中的 Python 设置说明进行操作。 如需了解详情,请参阅 Compute Engine Python API 参考文档。
如需向 Compute Engine 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
REST
使用
instances.stop
方法停止虚拟机:POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME/stop
请替换以下内容:
PROJECT_ID
:项目 IDZONE
:包含虚拟机的可用区VM_NAME
:包含要更改的机器类型的虚拟机
使用
instances.setMachineType
方法更改机器类型:POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME/setMachineType
在请求正文中,提供更新后的
machineType
:{ machineType: "zones/MACHINE_TYPE_ZONE/machineTypes/NEW_MACHINE_TYPE" }
替换以下内容:
使用
instances.start
方法启动虚拟机:POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME/start
请替换以下内容:
PROJECT_ID
:项目 IDZONE
:包含虚拟机的可用区VM_NAME
:您更改的虚拟机的名称
迁移到较小的机器类型
如果您弃用配备更多资源的机器类型而改用配备较少资源的机器类型(如弃用
e2-standard-8
机器类型而改用e2-standard-2
),可能会遇到硬件资源问题或性能限制,因为较小机器类型不如较大机器类型功能强大。请确保新的机器类型能够支持目前在虚拟机上运行的所有应用和服务,或者更新您的服务和应用以便在较小的机器类型上运行。在更改机器类型之前,请查阅合理容量建议。如需了解 Compute Engine 的容量建议,请参阅为虚拟机实例应用机器类型建议。
将虚拟机迁移到新的机器系列
满足要求后,您可以通过更改机器类型(例如从
m1-ultramem-160
更改为m3-ultramem-128
)来修改虚拟机以使用新一代机器系列中的机器类型。新一代机器类型和 Arm 机器类型可能不支持当前机器类型支持的功能和接口。在开始迁移过程之前,请查看准备迁移到新虚拟机中的要求和注意事项。
如需将虚拟机实例的机器类型更改为新一代机器类型,您可以使用以下任一方法。
创建新的虚拟机实例并迁移工作负载
在此过程中,您需要创建一个新的虚拟机实例,然后将工作负载迁移到新虚拟机。
如需详细了解如何完成此过程,请参阅将工作负载从现有虚拟机迁移到新虚拟机。
将机器类型更改为新机器类型
在此过程中,您需要验证当前虚拟机实例是否可以更新为使用新的机器类型,然后更改机器类型。
验证当前虚拟机实例是否使用新机器类型支持的操作系统版本。如果版本不受支持,请按照将工作负载从现有虚拟机迁移到新虚拟机中的说明操作。
如果您要将虚拟机的机器类型更改为 Arm 机器类型,请按照将工作负载从现有虚拟机迁移到新虚拟机中的说明操作。
如果当前虚拟机已挂接本地 SSD,请按照将工作负载从现有虚拟机迁移到新虚拟机中的说明操作。
验证您的应用和程序是否可以支持其他网络或存储接口,例如 gVNIC 或 NVMe。
- 如需将实例更新为使用 gVNIC,请参阅使用 Google 虚拟 NIC 以及队列分配和更改机器类型。
- 如需准备使用 NVMe 接口和驱动程序,请参阅选择接口。
- 如果虚拟机使用 Microsoft Windows,则必须先替换 2022 年 5 月之前创建的虚拟机上的 NVME 驱动程序。这适用于现有虚拟机中的启动磁盘以及用于创建虚拟机的任何快照或自定义映像。
查看更改虚拟机的机器类型的最佳实践。
按照更改机器类型中所述的过程操作。
后续步骤
- 了解机器类型建议。
- 了解代管式实例组。
- 了解可伸缩的弹性应用的模式。
如未另行说明,那么本页面中的内容已根据知识共享署名 4.0 许可获得了许可,并且代码示例已根据 Apache 2.0 许可获得了许可。有关详情,请参阅 Google 开发者网站政策。Java 是 Oracle 和/或其关联公司的注册商标。
最后更新时间 (UTC):2024-10-04。
[{ "type": "thumb-down", "id": "hardToUnderstand", "label":"Hard to understand" },{ "type": "thumb-down", "id": "incorrectInformationOrSampleCode", "label":"Incorrect information or sample code" },{ "type": "thumb-down", "id": "missingTheInformationSamplesINeed", "label":"Missing the information/samples I need" },{ "type": "thumb-down", "id": "translationIssue", "label":"翻译问题" },{ "type": "thumb-down", "id": "otherDown", "label":"其他" }] [{ "type": "thumb-up", "id": "easyToUnderstand", "label":"易于理解" },{ "type": "thumb-up", "id": "solvedMyProblem", "label":"解决了我的问题" },{ "type": "thumb-up", "id": "otherUp", "label":"其他" }]