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

Jor*_*tro 5 juju openstack maas

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

Jor*_*tro 9

使用 Simplestreams 为 Juju 和 OpenStack 准备 MAAS

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

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

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

simplestreams 格式用于以结构方式描述相关项。请参阅 Launchpad 项目lp:simplestreams。下面我们将讨论 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 将使用签名元数据与任何受支持的公共云“Just Work”。为私有(例如 Openstack)云设置元数据需要使用 Juju 附带的工具生成元数据。

图像元数据内容

图像元数据使用“图像 ID”的 simplestreams 内容类型。产品 id 的构成如下:

com.ubuntu.cloud:server:<series_version>:<arch> 
Run Code Online (Sandbox Code Playgroud)

例如:

com.ubuntu.cloud:server:14.04:amd64 
Run Code Online (Sandbox Code Playgroud)

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

com.ubuntu.cloud.daily:server:13.10:amd64
Run Code Online (Sandbox Code Playgroud)

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

<path_url>
  |-streams
      |-v1
         |-index.(s)json
         |-product-foo.(s)json
         |-product-bar.(s)json
Run Code Online (Sandbox Code Playgroud)

索引文件必须命名为“index.(s)json”(sjson 表示已签名)。各种产品文件是根据索引文件中包含的 Path 值命名的。

工具元数据使用“内容下载”的 simplestreams 内容类型。产品 id 的构成如下:

"com.ubuntu.juju:<series_version>:<arch>"
Run Code Online (Sandbox Code Playgroud)

例如:

"com.ubuntu.juju:12.04:amd64"
Run Code Online (Sandbox Code Playgroud)

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

  |-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
Run Code Online (Sandbox Code Playgroud)

索引文件必须命名为“index.(s)json”(sjson 表示已签名)。产品文件和工具 tarball 名称与索引/产品文件中的任何内容相匹配。

配置

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

用户指定的 URL

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

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

tools-metadata-url: https://juju-metadata/tools 
image-metadata-url: https://juju-metadata/images
Run Code Online (Sandbox Code Playgroud)

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

云储存

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

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

  |-tools
  |   |-streams
  |       |-v1
  |   |-releases
  |
  |-images
      |-streams
          |-v1
Run Code Online (Sandbox Code Playgroud)

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

请注意,如果 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 是从云存储提供商处获取的,因此需要使用下面描述的命令生成和验证。

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

juju help metadata
Run Code Online (Sandbox Code Playgroud)

整体工作流程是:

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

使用生成图像元数据

juju metadata generate-image -d <metadata_dir>
Run Code Online (Sandbox Code Playgroud)

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

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

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

例子:

  1. 图像元数据网址

    • 上传内容到 http://somelocation
    • 将图像元数据 url 设置为 http://somelocation/images
  2. 云储存

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

工具元数据

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

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

<tools_dir>/tools/releases/
Run Code Online (Sandbox Code Playgroud)

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

juju generate-tools -d <tools_dir>
Run Code Online (Sandbox Code Playgroud)

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

例子:

  1. 工具元数据网址

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

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

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

juju metadata validate-tools
Run Code Online (Sandbox Code Playgroud)

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

下一步: