我有Openstack 已准备好使用 MAAS,如何使用 Ubuntu 镜像准备云以便可以使用 Juju 部署它?
答案1
使用 Simplestreams 为 Juju 和 OpenStack 准备 MAAS
当 Juju 引导云时,它需要两条关键信息:
- 启动新的计算实例时使用的图像的 uuid。
- 下载工具 tarball 正确版本的 URL。
这些必要信息以名为“simplestreams”的 json 元数据格式存储。对于受支持的公共云服务(如 Amazon Web Services、HP Cloud、Azure 等),最终用户无需采取任何行动。但是,那些设置私有云或想要改变工作方式(例如使用不同的 Ubuntu 映像)的人,在了解其工作原理后,可以创建自己的元数据。
simplestreams 格式用于以结构化方式描述相关项目。请参阅 Launchpad 项目lp:简单流。下面我们将讨论 Juju 如何确定使用哪些元数据,以及如何创建自己的图像和工具并让 Juju 使用它们而不是默认值。
基本工作流程
无论是图片还是工具,Juju 都会使用搜索路径来尝试查找合适的元数据。路径组成部分(按查找顺序)包括:
- 用户提供的位置(由
tools-metadata-url
或image-metadata-url
配置设置指定)。 - 环境的云存储。
- 提供商特定位置(例如,如果在 Openstack 上,则为 keystone 端点)。
- 包含受支持公共云的元数据的 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> 的值
其他提供商可能也能够指定位置,但具体实施方式会有所不同。
这是用于搜索图像和工具元数据的默认位置,如果在上述任何位置均未找到匹配项,则使用此位置。无需用户配置。
部署私有云时主要有两个问题:
- 图像 ID 将特定于云。
- 外部互联网访问经常被阻止
问题 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
或云存储等指定的位置。
例子:
图片元数据 URL
- 上传内容至
http://somelocation
- 将 image-metadata-url 设置为
http://somelocation/images
- 上传内容至
云储存
如果运行时不带参数,验证命令将从当前 Juju 环境(或由 -e 指定)获取所有必需的详细信息,并输出用于启动实例的图像 ID。或者,可以在命令行上指定系列、区域、架构等来覆盖环境配置中的值。
工具元数据通常,工具和相关元数据都是从 镜像而来https://streams.canonical.com/tools
。但是,也可以手动为自定义构建的工具 tarball 生成元数据。
首先,创建相关工具的 tarball 并将其放置在如下结构的目录中:
<tools_dir>/tools/releases/
现在通过运行以下命令为工具生成相关元数据:
juju generate-tools -d <tools_dir>
最后,可以将内容上传到 Juju 元数据搜索路径中的某个位置。根据配置部分,这可能是由 tools-metadata-url 设置或云的存储路径设置等指定的位置。
例子:
工具元数据 URL
- 将工具目录的内容上传到
http://somelocation
- 将 tools-metadata-url 设置为
http://somelocation/tools
- 将工具目录的内容上传到
云储存
直接将内容上传到环境的云存储
与图像元数据一样,验证命令用于确保 Juju 可以使用工具:
juju metadata validate-tools
同样的注释也适用。运行不带参数的验证工具以使用 Juju 环境中的详细信息,或根据需要在命令行上覆盖值。juju help metadata validate-tools
有关更多详细信息,请参阅。
下一步: