镜像共享

镜像生产者和消费者都是 OpenStack 用户,或者项目。镜像生产者创建和共享镜像给镜像消费者,允许消费者在启动服务器时使用共享的镜像。生产者通过将消费者添加为该镜像的成员来共享镜像。然后,消费者通过更改镜像成员状态来接受或拒绝镜像。接受后,镜像会出现在消费者的镜像列表中。只要消费者是镜像的成员,即使镜像成员状态如何,只要消费者知道镜像 ID,就可以使用该镜像。

注意

在 OpenStack Image API 中,镜像成员状态具有三个目的

  • 成员状态控制镜像是否出现在消费者的镜像列表中。如果镜像成员状态为 accepted,则镜像会出现在消费者的镜像列表中。否则,镜像不会出现在镜像列表中。只要消费者知道镜像 ID,镜像仍然可以使用。

  • 成员状态可用于过滤消费者的镜像列表。

  • 成员状态让生产者知道消费者是否已查看并处理了共享的镜像。如果状态为 acceptedrejected,则消费者肯定已查看共享的镜像。如果状态为 pending,则消费者可能不知道镜像已被共享。

镜像生产者和消费者在镜像共享方面具有不同的能力和责任,如下列表所示。

  • 镜像生产者可以向镜像添加成员,或从镜像中删除成员,但他们不能修改镜像成员的成员状态。

  • 镜像生产者和消费者查看镜像成员的状态。在列出镜像成员时,生产者会看到所有镜像成员,而消费者只会看到自己。

  • 镜像消费者可以更改自己的成员状态,但他们不能添加或删除自己作为镜像成员。

  • 只要消费者知道镜像 ID,镜像消费者就可以从镜像生产者共享的任何镜像启动,无论成员状态如何。

共享镜像

以下过程是镜像创建后镜像共享的工作流程。

镜像生产者和消费者之间的通信,例如本示例中描述的通信,必须独立于 OpenStack Image API 进行安排。消费者和生产者可以使用电子邮件、电话、Twitter 或其他渠道发送通知。

  1. 生产者发布特定镜像的可用性,供消费者审核。

  2. 潜在的消费者向生产者提供消费者的项目 ID。可选地,生产者可能会请求消费者的电子邮件地址以用于通知目的,但这超出了 API 的范围。

  3. 生产者使用 Create image member API 操作与消费者共享镜像。

  4. 可选地,生产者会通知消费者镜像已共享,并提供镜像的 ID (UUID)。

  5. 如果消费者希望镜像出现在镜像列表中,则消费者使用 OpenStack Image API 通过使用 Update image member API 操作将镜像成员状态更改为 accepted

  6. 如果消费者随后希望隐藏镜像,则消费者使用 OpenStack Image API 通过使用 Update image member API 操作将镜像成员状态更改为 rejected。如果消费者希望隐藏镜像,但愿意接受生产者提醒镜像可用,则消费者使用 OpenStack Image API 通过使用 Update image member API 操作将镜像成员状态改回 pending