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

我已准备好使用MAAS的Openstack ,如何使用Ubuntu映像准备云,以便我可以使用Juju进行部署?

使用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附带公钥,用于validation从https://streams.canonical.com获得的图像和工具元数据的完整性。 因此,开箱即用,Juju将使用已签名的元数据与任何支持的公共云“正常工作”。 为私有(例如Openstack)云设置元数据需要使用Juju附带的工具生成元数据。

图像元数据内容

图像元数据使用简单流内容类型的“图像ID”。 产品ID形成如下:

 com.ubuntu.cloud:server:: 

例如:

 com.ubuntu.cloud:server:14.04:amd64 

未发布的图片(例如beta,每日等)都有以下产品ID:

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

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

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

索引文件必须被称为“index。(s)json”(sjson for signed)。 各种产品文件根据索引文件中包含的Path值命名。

工具元数据使用简单流内容类型的“内容下载”。 产品ID形成如下:

 "com.ubuntu.juju::" 

例如:

 "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 for signed)。 产品文件和工具tarball名称匹配索引/产品文件中的任何内容。

组态

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

用户指定的URL

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

假设Apache http服务器具有基本URL https://juju-metadata ,可以访问/images/tools 。 Juju环境yaml文件可以包含以下条目(一个或两个):

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

每个位置中的所需文件是根据前面描述的目录布局。 对于共享目录,请使用格式为file:///sharedpath

云储存

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

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

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

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

请注意,如果使用--upload-tools选项运行juju引导程序,则会根据上述结构放置工具和元数据。 这就是为什么这些工具可供Juju使用。

提供商特定存储

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

juju-工具元数据中的上述工具元数据内容产品 – 如上所述在图像元数据内容中流式传输

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

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

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

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

问题1意味着需要生成图像ID元数据并使其可用。

问题2意味着需要在本地镜像工具以使其可访问。

存在Juju工具以帮助生成和validation图像和工具元数据。 对于工具,通常只需镜像https://streams.canonical.com/tools 。 但是,图像元数据不能简单地镜像,因为图像ID是从云存储提供程序获取的,因此需要使用下面描述的命令生成和validation。

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

 juju help metadata 

整个工作流程是:

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

图像元数据

使用生成图像元数据

 juju metadata generate-image -d  

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

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

image metadata命令可以使用不同的区域,系列,体系结构多次运行,并且它将继续添加到元数据文件中。 添加完所有必需的图像ID后,可以将索引和产品json文件上载到Juju元数据搜索路径中的某个位置。 根据“配置”部分,这可能是由image-metadata-url设置或云的存储等指定的某处。

例子:

  1. 图像元数据URL

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

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

工具元数据

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

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

 /tools/releases/ 

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

 juju generate-tools -d  

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

例子:

  1. 工具 – 元数据url

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

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

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

 juju metadata validate-tools 

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

下一步:

  • 如何使用Juju部署OpenStack云?