请阅读以下部分,了解各种配置、托管实例组 (MIG) 操作或实例生命周期事件如何影响有状态 MIG 中托管实例的保留状态:
自动修复功能如何处理保留状态
当虚拟机 (VM) 实例停止运行或运行状况不佳时,自动修复功能会重新创建虚拟机,并保持您已配置的项的保留状态:
- MIG 会保留有状态磁盘和 IP 地址,并在重新创建虚拟机时重新挂接这些磁盘。
- MIG 会保留实例配置中配置的有状态元数据,并在重新创建虚拟机时设置有状态元数据。
为了避免重新创建虚拟机实例的操作由于有状态启动磁盘损坏而失败,请将启动磁盘保持为无状态磁盘,以便自动修复功能可以使用原始映像从头开始重新创建该磁盘。
更新实例操作如何处理保留状态
更新实例时,MIG 会维护实例的保留状态(磁盘、IP 地址、元数据):
- 如果在更新过程中重新创建或重启虚拟机实例,则 MIG 会保留有状态磁盘和 IP 地址,并重新挂接这些磁盘。
- MIG 会保留实例配置中配置的有状态元数据,并在更新过程中在实例上设置有状态元数据。
设置新的实例模板时,您必须定义您的有状态政策中指定的所有磁盘。如果新的实例模板省略了有状态政策中定义的磁盘,则系统将不允许设置这样的模板。这有助于防止意外删除有状态磁盘。
如需在有状态政策中定义了有状态磁盘的情况下,从 MIG 中移除这些磁盘,请按照以下步骤操作:
- 从您的有状态政策中移除磁盘配置。
- (可选)如果您仍想保留这些磁盘,请将其与虚拟机实例分离。
- 发布不再定义这些磁盘的新实例模板。
您不能将有状态磁盘更新为新映像,因为在更新过程中必须保留这些磁盘,并且更新为新映像需要重新创建磁盘。
Google 建议您将启动磁盘以及包含二进制文件或临时文件的任何磁盘保持为无状态磁盘,同时将您的数据保留在有状态磁盘上。此类配置支持以下行为:
- 您可以轻松、自动地将启动磁盘以及包含二进制文件的磁盘更新为包含新版本和安全补丁程序的较新映像。您可以使用自动更新功能,也可以手动更新实例以重新创建此类无状态磁盘,同时将数据原封不动地保留在单独的有状态磁盘上。
- 将其他更新发布到实例时,您可以将数据保留在有状态磁盘上。
您可以将启动磁盘配置为有状态磁盘以发挥相应作用,例如,用于托管将二进制文件和数据保留在同一磁盘上的旧版应用。这样,您就可以将应用移动到 MIG,以便从自动修复功能中受益。但在这种情况下,您必须自行执行软件和操作系统更新,例如使用软件包管理器(如 Debian 系统上的 apt)更新各个软件包,或者使用配置管理工具来执行更新。
如果您仅配置了自定义实例名称,而没有配置有状态磁盘或元数据,则可以使用自动滚动更新功能。对于自动滚动更新,您必须将更新程序的替换政策设置为 RECREATE
。您无法使用 SUBSTITUTE
替换方法来自动更新有状态 MIG 中的实例,因为此方法会将现有的每个虚拟机替换为具有不同名称和保留状态的新虚拟机。
调整组大小功能如何影响保留状态
减小组大小
Google 不建议减小有状态 MIG 的大小,因为 MIG 会选择要删除的虚拟机实例,并且可能会选择您需要保留的虚拟机。您可以删除不再需要的特定实例,从而以受控方式移除 MIG 虚拟机实例。
如果您减小了 MIG 大小,则 MIG 会删除所有额外的虚拟机实例及其关联的保留状态。为了防止出现这种情况,您可以将 MIG 配置为在永久删除虚拟机实例时分离并保留有状态磁盘和 IP 地址。有状态元数据将随保留状态一并删除。如需了解详情,请参阅删除实例对保留状态有何影响。
增大组大小
增大有状态 MIG 的大小时,该组会基于当前实例模板并使用自动生成的名称(基本实例名称 + 后缀)来创建虚拟机。您可以在相应的托管实例的 preservedStateFromPolicy
中查看应用的有状态配置。在 MIG 创建实例后,您可以在这些实例的实例配置中定义有状态元数据和其他有状态磁盘或 IP 地址。
您可以通过手动创建实例来选择自定义实例名称并增大组大小,还可以通过为每个实例提供包含有状态元数据、IP 地址和磁盘的实例配置来引导实例的状态。
删除实例对保留状态有何影响
在以下情况中,MIG 中的虚拟机会被永久删除:
- 您减小了该组的大小,并且 MIG 选择了此虚拟机实例进行删除,或者
- 您删除了该组,或者
- 您从该 MIG 中明确地删除了该实例。
永久删除虚拟机后,MIG 还会删除相应的实例配置和托管实例(包括其保留状态配置)。
永久删除虚拟机会导致所有的有状态元数据键值对丢失。
通过在有状态政策或实例配置中为每个资源设置 autoDelete
标志,您可以配置系统在永久删除实例时要保留还是删除有状态磁盘和 IP 地址。该标志支持两个选项:
NEVER
:(默认值)MIG 绝不会删除磁盘。ON_PERMANENT_INSTANCE_DELETION
:MIG 会在实例被永久删除后删除磁盘。
在自动修复、更新或重新创建实例时,MIG 不会删除有状态资源。
在以下示例中,MIG 具有单个虚拟机 node-1
,该虚拟机具有实例配置定义的保留状态。保留状态包括两个磁盘(蓝色磁盘和绿色磁盘)和 id:xyz273
元数据。如果您将 MIG 的大小调整为零,则 MIG 会触发永久删除实例 node-1
的操作,从而产生以下结果:
- MIG 会删除托管实例及其保留状态配置。
- MIG 会删除实例的实例配置。
- MIG 会删除实际的虚拟机实例资源。
- 元数据
id:xyz273
会丢失,因为虚拟机实例及其保留状态配置已删除。 - 有状态的蓝色磁盘会被删除,因为实例配置针对该磁盘设置了
autoDelete: ON_PERMANENT_INSTANCE_DELETION
。 - 有状态的绿色磁盘会被分离,因为实例配置针对该磁盘设置了
autoDelete:NEVER
。
放弃实例对保留状态有何影响
当您从 MIG 中放弃虚拟机实例时,该虚拟机的状态(包括有状态元数据、IP 地址和磁盘)会保留在 MIG 外部的该实例上。由于该虚拟机不再由 MIG 托管,因此 MIG 会删除相应的实例配置和托管实例,包括该实例的保留状态配置。
在以下示例中,虚拟机 node-1
具有保留状态,该状态由有状态政策(蓝色磁盘)和实例配置(绿色磁盘和元数据 id:xyz273
)定义。如果您从 MIG 中放弃实例 node-1
,则其保留状态会发生以下情况:
- 独立虚拟机实例
node-1
会保留其状态:其所有磁盘会保持挂接状态,元数据id:xyz273
会在该虚拟机上保持设置状态。 - MIG 会删除托管实例及其保留状态配置。
- MIG 会删除实例的实例配置。
- 有状态政策会保持不变,因为它适用于 MIG 中的所有实例。
区域组如何处理保留状态
有状态的区域 MIG 处理其实例保留状态的方式与地区 MIG 基本相同,不同之处在于区域 MIG 会在多个地区中创建虚拟机实例:
- 创建实例时,区域 MIG 会在区域内的各个地区中均匀分布虚拟机,以便在出现地区级别的故障时最大限度地提高应用的可用性。
- 对于现有的实例,有状态的区域 MIG 无法自动地跨地区重新分布或移动现有的虚拟机,因为保留状态存储在特定地区中并且无法移动。因此,有状态区域 MIG 仅支持
NONE
这一实例重新分布类型设置。
反馈
我们希望了解有关有状态 MIG 的用例、挑战和反馈。请发送至 mig-discuss@google.com,与我们的团队分享您的反馈。
后续步骤
- 阅读有状态 MIG 的工作原理。
- 阅读配置有状态 MIG,了解如何通过在托管实例中保留实例名称、永久性磁盘和元数据来支持有状态工作负载。
- 详细了解托管实例组。
- 使用托管实例。