如何准备 MAAS 来在 OpenStack 上提供图像?

如何准备 MAAS 来在 OpenStack 上提供图像?

我有Openstack 已准备好使用 MAAS,如何使用 Ubuntu 镜像准备云以便可以使用 Juju 部署它?

答案1

使用 Simplestreams 为 Juju 和 OpenStack 准备 MAAS

当 Juju 引导云时,它需要两条关键信息:

  1. 启动新的计算实例时使用的图像的 uuid。
  2. 下载工具 tarball 正确版本的 URL。

这些必要信息以名为“simplestreams”的 json 元数据格式存储。对于受支持的公共云服务(如 Amazon Web Services、HP Cloud、Azure 等),最终用户无需采取任何行动。但是,那些设置私有云或想要改变工作方式(例如使用不同的 Ubuntu 映像)的人,在了解其工作原理后,可以创建自己的元数据。

simplestreams 格式用于以结构化方式描述相关项目。请参阅 Launchpad 项目lp:简单流。下面我们将讨论 Juju 如何确定使用哪些元数据,以及如何创建自己的图像和工具并让 Juju 使用它们而不是默认值。

基本工作流程

无论是图片还是工具,Juju 都会使用搜索路径来尝试查找合适的元数据。路径组成部分(按查找顺序)包括:

  1. 用户提供的位置(由tools-metadata-urlimage-metadata-url配置设置指定)。
  2. 环境的云存储。
  3. 提供商特定位置(例如,如果在 Openstack 上,则为 keystone 端点)。
  4. 包含受支持公共云的元数据的 Web 位置 -https://streams.canonical.com

元数据可以是内联签名的,也可以是未签名的。我们使用“.sjson”扩展名来指示元数据文件是否已签名。首先在路径中的每个位置搜索已签名的元数据,如果没有找到,则在移动到下一个路径位置之前尝试未签名的元数据。

Juju 附带公钥,用于验证从以下位置获取的图像和工具元数据的完整性:https://streams.canonical.com。因此,开箱即用,Juju 可以使用签名元数据与任何受支持的公共云“协同工作”。设置私有云(例如 Openstack)的元数据需要使用 Juju 附带的工具生成元数据。

图像元数据内容

图片元数据使用“image-ids”的简单流内容类型。产品 ID 的格式如下:

com.ubuntu.cloud:server:<series_version>:<arch> 

例如:

com.ubuntu.cloud:server:14.04:amd64 

未发布的图像(例如测试版、每日版等)具有如下产品 ID:

com.ubuntu.cloud.daily:server:13.10:amd64

元数据索引和产品文件必须位于以下目录树中(相对于与每个路径组件关联的 URL):

<path_url>
  |-streams
      |-v1
         |-index.(s)json
         |-product-foo.(s)json
         |-product-bar.(s)json

索引文件必须命名为“index.(s)json”(sjson 代表signed)。各个产品文件根据索引文件所含的 Path 值命名。

工具元数据使用“content-download”的简单流内容类型。产品 ID 的格式如下:

"com.ubuntu.juju:<series_version>:<arch>"

例如:

"com.ubuntu.juju:12.04:amd64"

元数据索引和产品文件需要位于以下目录树中(相对于与每个路径组件关联的 URL)。此外,还需要 Juju 需要下载的工具 tarball。

  |-streams
  |   |-v1
  |      |-index.(s)json
  |      |-product-foo.(s)json
  |      |-product-bar.(s)json
  |
  |-releases
      |-tools-abc.tar.gz
      |-tools-def.tar.gz
      |-tools-xyz.tar.gz

索引文件必须命名为“index.(s)json”(sjson 代表已签名)。产品文件和工具 tarball 名称应与索引/产品文件中的内容一致。

配置

对于受支持的公有云,无需额外配置;一切开箱即用。但是,出于测试目的或对于不受支持的云部署,Juju 需要知道在哪里找到工具以及运行哪个映像。即使对于所有必需元数据都可用的受支持的公有云,用户也可以将自己的元数据放入搜索路径中以覆盖云提供的元数据。

用户指定的 URL

这些最初在文件中指定.juju/environments.yaml(然后在环境引导时随后复制到 jenv 文件中)。对于图像,使用image-metadata-url;对于工具,使用tools-metadata-url。URL 可以指向云中世界可读的容器/存储桶、http 服务器提供的地址,甚至是云中运行的所有节点实例都可以访问的共享目录。

假设 Apache http 服务器的基本 URL 为,提供对和 处https://juju-metadata信息的访问。Juju 环境 yaml 文件可以包含以下条目(一个或两个):<base>/images<base>/tools

tools-metadata-url: https://juju-metadata/tools 
image-metadata-url: https://juju-metadata/images

每个位置所需的文件按照前面描述的目录布局。对于共享目录,请使用以下形式的 URL file:///sharedpath

云储存

如果在用户指定的 URL 中未找到匹配的元数据,则搜索环境的云存储。这里不需要用户配置 - 所有 Juju 环境都设置了云存储,用于存储状态信息、charm 等。云存储设置取决于提供商;对于 Amazon 和 Openstack 云,存储由“control-bucket”值定义,对于 Azure,“storage-account-name”值是相关的。

云存储内部的(可选)目录结构如下:

  |-tools
  |   |-streams
  |       |-v1
  |   |-releases
  |
  |-images
      |-streams
          |-v1

当然,如果只需要自定义图像元数据,则不需要工具目录,反之亦然。

请注意,如果使用该选项运行 juju bootstrap --upload-tools,则工具和元数据将根据上述结构放置。这就是为什么这些工具可供 Juju 使用的原因。

提供商特定存储

提供商可能会允许其他位置来搜索元数据和工具。对于 OpenStack,Keystone 端点可以由云管理员创建。这些定义如下:

juju-tools 工具元数据内容中上述的值product-streams 图像元数据内容中上述 <path_url> 的值

其他提供商可能也能够指定位置,但具体实施方式会有所不同。

这是用于搜索图像和工具元数据的默认位置,如果在上述任何位置均未找到匹配项,则使用此位置。无需用户配置。

部署私有云时主要有两个问题:

  1. 图像 ID 将特定于云。
  2. 外部互联网访问经常被阻止

问题 1 意味着需要生成并提供图像 ID 元数据。

问题 2 意味着工具需要在本地进行镜像才能访问。

Juju 工具可帮助生成和验证镜像和工具元数据。对于工具,最简单的方法通常是镜像https://streams.canonical.com/tools。但是,镜像元数据不能简单地镜像,因为镜像 ID 取自云存储提供商,因此需要使用下面描述的命令生成和验证镜像元数据。

使用帮助命令可以查看可用的 Juju 元数据工具:

juju help metadata

总体工作流程是:

  • 生成图像元数据
  • 将图像元数据复制到元数据搜索路径中的某个位置
  • (可选)将工具镜像到元数据搜索路径中的某个位置
  • 可选地,配置 tools-metadata-url 和/或 image-metadata-url
图像元数据

使用生成图像元数据

juju metadata generate-image -d <metadata_dir>

至少,上述命令需要知道要使用的图像 ID 和要写入文件的目录。

其他必需参数(如区域、系列、架构等)取自当前 Juju 环境(或使用 -e 选项指定的环境)。这些参数也可以在命令行上覆盖。

图像元数据命令可以针对不同的区域、系列和架构多次运行,并且会不断添加到元数据文件中。添加所有必需的图像 ID 后,可以将索引和产品 json 文件上传到 Juju 元数据搜索路径中的某个位置。根据配置部分,这可能是设置image-metadata-url或云存储等指定的位置。

例子:

  1. 图片元数据 URL

    • 上传内容至http://somelocation
    • 将 image-metadata-url 设置为http://somelocation/images
  2. 云储存

如果运行时不带参数,验证命令将从当前 Juju 环境(或由 -e 指定)获取所有必需的详细信息,并输出用于启动实例的图像 ID。或者,可以在命令行上指定系列、区域、架构等来覆盖环境配置中的值。

工具元数据

通常,工具和相关元数据都是从 镜像而来https://streams.canonical.com/tools。但是,也可以手动为自定义构建的工具 tarball 生成元数据。

首先,创建相关工具的 tarball 并将其放置在如下结构的目录中:

<tools_dir>/tools/releases/

现在通过运行以下命令为工具生成相关元数据:

juju generate-tools -d <tools_dir>

最后,可以将内容上传到 Juju 元数据搜索路径中的某个位置。根据配置部分,这可能是由 tools-metadata-url 设置或云的存储路径设置等指定的位置。

例子:

  1. 工具元数据 URL

    • 将工具目录的内容上传到http://somelocation
    • 将 tools-metadata-url 设置为http://somelocation/tools
  2. 云储存

直接将内容上传到环境的云存储

与图像元数据一样,验证命令用于确保 Juju 可以使用工具:

juju metadata validate-tools

同样的注释也适用。运行不带参数的验证工具以使用 Juju 环境中的详细信息,或根据需要在命令行上覆盖值。juju help metadata validate-tools有关更多详细信息,请参阅。

下一步:

相关内容