第 5 章 配置容器镜像源
容器化 overcloud 需要访问含有所需容器镜像的 registry。本章将介绍如何配置 register 和 overcloud 来为 Red Hat OpenStack Platform 提供容器镜像。
- 本指南就如何配置 overcloud 以使用注册表提供了多个用例。请参阅第 5.1 节 “Registry”,以了解这些方法的相关说明。
- 我们建议您了解镜像准备命令的使用方法。请参阅第 5.2 节 “容器镜像准备命令的使用”,以了解更多信息。
- 要开始通过最常用的方法来准备容器镜像来源,请参阅第 5.5 节 “使用 undercloud 作为本地 registry”。
5.1. Registry
Red Hat OpenStack Platform 支持以下 register 类型:
- 远程注册表
-
overcloud 会直接从
registry.access.redhat.com中提取容器镜像。这是最简单的一种初始配置生成方法。但是,每个 overcloud 节点都会直接从 Red Hat Container Catalog 中提取所有的镜像,这可能会导致网络拥塞并影响部署速度。此外,所有 overcloud 节点都需要通过互联网来访问 Red Hat Container Catalog。 - 本地注册表
-
您可以在 undercloud 上创建本地 register,并从
registry.access.redhat.com同步镜像;overcloud 则会从 undercloud 提取容器镜像。此方法允许您在内部存储 register,这样可以加快部署速度并缓解网络拥塞。但是,undercloud 只能用作基础 register,而且只能为容器镜像提供有限的生命周期管理。 - Satellite 服务器
- 通过 Red Hat Satellite 6 服务器,可管理容器镜像的整个应用生命周期并发布镜像。overcloud 会从 Satellite 服务器提取镜像。此方法提供了一个可用于存储、管理和部署 Red Hat OpenStack Platform 容器的企业级解决方案。
从列表中选择一种方法并继续配置注册表详细信息。
5.2. 容器镜像准备命令的使用
本节介绍了 openstack overcloud container image prepare 命令的使用方法,包括该命令的各个选项的相关概念信息。
为 Overcloud 生成容器镜像环境文件
openstack overcloud container image prepare 命令的主要用途之一就是创建列有 overcloud 所用镜像的环境文件。您可以将这个文件用于 overcloud 部署命令,如 openstack overcloud deploy。openstack overcloud container image prepare 命令会使用以下选项来实现这一功能:
--output-env-file- 定义所生成的环境文件的名称。
以下片段是该文件所含内容的示例:
parameter_defaults: DockerAodhApiImage: registry.access.redhat.com/rhosp13/openstack-aodh-api:latest DockerAodhConfigImage: registry.access.redhat.com/rhosp13/openstack-aodh-api:latest ...
为导入方法生成容器镜像列表
如果想将 OpenStack Platform 容器镜像导入到其他 registry 源中,您可以生成一个镜像列表。列表的语法主要用于将容器镜像导入到 undercloud 上的容器 registry 中,但是您可以修改该列表的格式,以使其适用于其他导入方法,如 Red Hat Satellite 6。
openstack overcloud container image prepare 命令会使用以下选项来实现这一功能:
--output-images-file- 为导入列表定义所生成文件的名称。
下面是该文件所含内容的示例:
container_images: - imagename: registry.access.redhat.com/rhosp13/openstack-aodh-api:latest - imagename: registry.access.redhat.com/rhosp13/openstack-aodh-evaluator:latest ...
为容器镜像设置命名空间
--output-env-file 和 --output-images-file 选项都需要一个命名空间,才能生成所得到的镜像位置。openstack overcloud container image prepare 命令会使用以下选项来设置要提取的容器镜像的源位置:
--namespace- 定义容器镜像的命名空间。它的值通常是一个包含目录的主机名或 IP 地址。
--prefix- 定义要加在镜像名称前面的前缀。
所以,director 会按照以下格式来生成镜像名称:
-
[命名空间]/[前缀][镜像名称]
设置容器镜像标签
默认情况下,openstack overcloud container image prepare 命令会为每一个容器镜像都使用 latest 标签。但是,您可以使用以下任一选项为镜像版本选择特定的标签:
--tag-from-label- 使用指定容器镜像标签的值来为每一个镜像查找带有版本的标签。
--tag-
为所有镜像设置特定标签。所有 OpenStack Platform 容器镜像会使用同一个标签来实现版本同步。当与
--tag-from-label搭配使用时,即可从这个标签入手,以查找带有版本的标签。
5.3. 适用于其他服务的容器镜像
director 只会为核心 OpenStack Platform 服务准备容器镜像。某些其他功能所用的服务需要额外的容器镜像。这些服务可以通过环境文件来启用。openstack overcloud container image prepare 命令会使用以下选项来纳入环境文件和相应的容器镜像:
-e- 纳入环境文件以启用额额外的容器镜像。
下表提供了一个示例列表,其中列有需要使用容器镜像的其他服务以及相应的环境文件在 /usr/share/openstack-tripleo-heat-templates 目录中所处的位置。
| 服务 | 环境文件 |
|---|---|
|
Ceph 存储 |
|
|
Collectd |
|
|
Congress |
|
|
Fluentd |
|
|
OpenStack Bare Metal(ironic) |
|
|
OpenStack Data Processing (sahara) |
|
|
OpenStack EC2-API |
|
|
OpenStack Key Manager (barbican) |
|
|
OpenStack Load Balancing-as-a-Service (octavia) |
|
|
OpenStack Shared File System Storage (manila) |
|
|
Sensu |
|
后面的几个章节会就如何纳入额外服务提供一些示例。
Ceph 存储
如果要使用 overcloud 来部署 Red Hat Ceph Storage 集群,则需纳入 /usr/share/openstack-tripleo-heat-templates/environments/ceph-ansible/ceph-ansible.yaml 环境文件。这个文件可在 overcloud 中启用可组合的容器化服务;但是,director 需要确认这些服务都已启用,才会开始准备相关的镜像。
除了这个环境文件之外,您还需要定义 Ceph Storage 容器的位置,这个位置有别于 OpenStack Platform 服务所在的位置。请使用 --set 选项来设置特定于 Ceph Storage 的以下参数:
--set ceph_namespace-
定义 Ceph Storage 容器镜像的命名空间。它的功能与
--namespace选项类似。 --set ceph_image-
定义 Ceph Storage 容器镜像的名称。通常,它的值为
rhceph-3-rhel7。 --set ceph_tag-
定义用于 Ceph Storage 容器镜像的标签。它的功能与
--tag选项类似。如果指定了--tag-from-label,则可从这个标签入手,以查找带有版本的标签。
以下片段是一个有关如何在容器镜像文件中纳入 Ceph Storage 的示例:
$ openstack overcloud container image prepare \
...
-e /usr/share/openstack-tripleo-heat-templates/environments/ceph-ansible/ceph-ansible.yaml \
--set ceph_namespace=registry.access.redhat.com/rhceph \
--set ceph_image=rhceph-3-rhel7 \
--tag-from-label {version}-{release} \
...OpenStack Bare Metal(ironic)
如果要在 overcloud 中部署 OpenStack Bare Metal (ironic),只需纳入 /usr/share/openstack-tripleo-heat-templates/environments/services-docker/ironic.yaml 环境文件,以便 director 准备相应的镜像。以下片段是一个有关如何纳入这个环境文件的示例:
$ openstack overcloud container image prepare \ ... -e /usr/share/openstack-tripleo-heat-templates/environments/services-docker/ironic.yaml \ ...
OpenStack Data Processing (sahara)
如果要在 overcloud 中部署 OpenStack Data Processing (sahara),则需纳入 /usr/share/openstack-tripleo-heat-templates/environments/services-docker/sahara.yaml 环境文件,以便 director 准备相应的镜像。以下片段是一个有关如何纳入这个环境文件的示例:
$ openstack overcloud container image prepare \ ... -e /usr/share/openstack-tripleo-heat-templates/environments/services-docker/sahara.yaml \ ...
5.4. 使用 Red Hat registry 作为远程 registry 源
红帽将 overcloud 容器镜像托管在 registry.access.redhat.com 中。从远程注册表提取镜像是最简单的方法,因为注册表已经建好,您只需知道要提取的镜像的 URL 和命名空间即可。但是在 overcloud 创建过程中,overcloud 节点都要从远程软件仓库提取镜像,这会堵塞外部连接。如果这造成问题,可采用以下方法之一:
- 设置本地 registry
- 将镜像托管在 Red Hat Satellite 6 上
步骤
要在 overcloud 部署中直接从
registry.access.redhat.com提取镜像,则需使用环境文件来指定镜像参数。以下命令可自动创建此类环境文件:(undercloud) $ openstack overcloud container image prepare \ --namespace=registry.access.redhat.com/rhosp13 \ --prefix=openstack- \ --tag-from-label {version}-{release} \ --output-env-file=/home/stack/templates/overcloud_images.yaml-
使用
-e选项可为可选服务纳入任意环境文件。 -
如果正在使用 Ceph Storage,请额外纳入以下参数,以定义 Ceph Storage 容器镜像的位置:
--set ceph_namespace、--set ceph_image、--set ceph_tag。
-
使用
-
这将创建
overcloud_images.yaml环境文件,其中包含 undercloud 上的镜像位置。需要将该文件包括在部署中。
5.5. 使用 undercloud 作为本地 registry
您可以在 undercloud 上配置本地 registry,以存储 overcloud 容器镜像。此方法会涉及以下操作:
-
director 会从
registry.access.redhat.com中逐一提取每个镜像。 - director 会创建 overcloud。
- 在 overcloud 的创建过程中,节点会从 undercloud 中提取相关镜像。
这会使容器镜像产生的网络流量保持在内部网络中,不会堵塞外部网络连接,从而加速部署过程。
步骤
查找本地 undercloud registry 的地址。该地址的模式如下所示:
<REGISTRY IP ADDRESS>:8787
请使用您先前在
undercloud.conf文件中通过local_ip参数所设置的 undercloud IP 地址。以下命令假设该地址为192.168.24.1:8787。创建模板以将镜像上传到本地 registry,并创建环境文件以引用这些镜像:
(undercloud) $ openstack overcloud container image prepare \ --namespace=registry.access.redhat.com/rhosp13 \ --push-destination=192.168.24.1:8787 \ --prefix=openstack- \ --tag-from-label {version}-{release} \ --output-env-file=/home/stack/templates/overcloud_images.yaml \ --output-images-file /home/stack/local_registry_images.yaml-
使用
-e选项可为可选服务纳入任意环境文件。 -
如果正在使用 Ceph Storage,请额外纳入以下参数,以定义 Ceph Storage 容器镜像的位置:
--set ceph_namespace、--set ceph_image、--set ceph_tag。
-
使用
这样会创建两个文件:
-
local_registry_images.yaml,包含来自远程来源的容器镜像信息。请使用这个文件将 Red Hat Container Registry (registry.access.redhat.com) 中的镜像提取到 undercloud。 overcloud_images.yaml,包含镜像文件在 undercloud 上所处的最终位置。需将该文件纳入到您的部署中。请检查这两个文件是否都存在。
-
将
registry.access.redhat.com中的容器镜像提取到 undercloud。(undercloud) $ sudo openstack overcloud container image upload \ --config-file /home/stack/local_registry_images.yaml \ --verbose
提取所需镜像需要花费一定时间,具体取决于网络速度及 undercloud 磁盘情况。
注意容器镜像大约占用 10 GB 磁盘空间。
registry 配置现在已经完成。
5.6. 使用 Satellite 服务器作为 registry
Red Hat Satellite 6 提供了注册表同步功能。通过该功能可将多个镜像提取到 Satellite 服务器中,作为应用程序生命周期的一部分加以管理。Satellite 也可以作为注册表供其他启用容器功能的系统使用。如需了解更多有关管理容器镜像的详细信息,请参阅 Red Hat Satellite 6 Content Management Guide 中的 "Managing Container Images"。
以下操作过程示例中使用了 Red Hat Satellite 6 的 hammer 命令行工具和一个名为 ACME 的示例组织。请将该组织替换为您自己 Satellite 6 中的组织。
步骤
创建模板以便将镜像提取到本地注册表:
$ source ~/stackrc (undercloud) $ openstack overcloud container image prepare \ --namespace=rhosp13 \ --prefix=openstack- \ --output-images-file /home/stack/satellite_images \
-
使用
-e选项可为可选服务纳入任意环境文件。 -
如果正在使用 Ceph Storage,请额外纳入以下参数,以定义 Ceph Storage 容器镜像的位置:
--set ceph_namespace、--set ceph_image、--set ceph_tag。
注意此版本的
openstack overcloud container image prepare命令针对registry.access.redhat.com上的 registry 来生成镜像列表。命令中使用的值不同于后面步骤中的openstack overcloud container image prepare命令。-
使用
-
这将创建名为
satellite_images的文件,其中包含容器镜像信息。您将使用此文件将容器镜像同步至 Satellite 6 服务器。 从
satellite_images文件中移除特定于 YAML 的信息,然后将其转换为仅包含镜像列表的平面文件。以下sed命令可以实现上述操作:(undercloud) $ awk -F ':' '{if (NR!=1) {gsub("[[:space:]]", ""); print $2}}' ~/satellite_images > ~/satellite_images_names这样就得到了要提取到 Satellite 服务器中的镜像列表。
-
将
satellite_images_names文件复制到包含 Satellite 6hammer工具的系统中。或者按照 Hammer CLI Guide 中的说明将hammer工具安装到 undercloud。 运行以下
hammer命令,为您的 Satellite 组织创建新产品 (OSP13 Containers):$ hammer product create \ --organization "ACME" \ --name "OSP13 Containers"
该定制产品将会包含我们的镜像。
为产品添加基本容器镜像:
$ hammer repository create \ --organization "ACME" \ --product "OSP13 Containers" \ --content-type docker \ --url https://registry.access.redhat.com \ --docker-upstream-name rhosp13/openstack-base \ --name base
添加
satellite_images文件中的 overcloud 容器镜像。$ while read IMAGE; do \ IMAGENAME=$(echo $IMAGE | cut -d"/" -f2 | sed "s/openstack-//g" | sed "s/:.*//g") ; \ hammer repository create \ --organization "ACME" \ --product "OSP13 Containers" \ --content-type docker \ --url https://registry.access.redhat.com \ --docker-upstream-name $IMAGE \ --name $IMAGENAME ; done < satellite_images_names
同步容器镜像:
$ hammer product synchronize \ --organization "ACME" \ --name "OSP13 Containers"
等待 Satellite 服务器完成同步。
注意根据具体配置情况,
hammer可能会询问您的 Satellite 服务器用户名和密码。您可以使用配置文件将hammer配置为自动登录。请参阅 Hammer CLI Guide 中的“Authentication”部分。- 如果 Satellite 6 服务器使用了内容视图,请创建新的内容视图版本以纳入这些镜像。
检查
base镜像中的标签:$ hammer docker tag list --repository "base" \ --organization "ACME" \ --product "OSP13 Containers"
这会显示 OpenStack Platform 容器镜像的标签。
返回到 undercloud 并为 Satellite 服务器上的镜像生成环境文件。以下是用于生成环境文件的命令示例:
(undercloud) $ openstack overcloud container image prepare \ --namespace=satellite6.example.com:5000 \ --prefix=acme-osp13_containers- \ --tag-from-label {version}-{release} \ --output-env-file=/home/stack/templates/overcloud_images.yaml注意此版本的
openstack overcloud container image prepare命令针对 Satellite 服务器。命令中使用的值不同于上一步骤中的openstack overcloud container image prepare命令。在运行这个命令时,请纳入以下数据:
-
--namespace- Satellite 服务器上注册表的 URL 和端口。Red Hat Satellite 上的默认注册表端口是 5000。例如,--namespace=satellite6.example.com:5000。 --prefix=- 前缀基于 Satellite 6 规范。它的值取决于您是否使用了内容视图:-
如果您使用了内容视图,则前缀的结构为
[组织]-[环境]-[内容视图]-[产品]-。例如:acme-production-myosp13-osp13_containers-。 -
如果不使用内容视图,则前缀的结构为
[组织]-[产品]-。例如:acme-osp13_containers-。
-
如果您使用了内容视图,则前缀的结构为
-
--tag-from-label {version}-{release}- 识别各个镜像的最新标签。 -
-e- 为可选服务纳入任意环境文件。 --set ceph_namespace、--set ceph_image、--set ceph_tag- 如果正在使用 Ceph Storage,请额外纳入这些参数以定义 Ceph Storage 容器镜像的位置。请注意,ceph_image现包含特定于 Satellite 的前缀。这个前缀与--prefix选项的值相同。例如:--set ceph_image=acme-osp13_containers-rhceph-3-rhel7
这可确保 overcloud 使用符合 Satellite 命名规范的 Ceph 容器镜像。
-
-
这将创建
overcloud_images.yaml环境文件,其中包含 Satellite 服务器上的镜像位置。需要将该文件包括在您的部署中。
registry 配置现在已经完成。
5.7. 后续步骤
现在,您已经拥有一个包含容器镜像来源列表的 overcloud_images.yaml 环境文件。请将该文件纳入到日后的所有部署操作中。

Where did the comment section go?
Red Hat's documentation publication system recently went through an upgrade to enable speedier, more mobile-friendly content. We decided to re-evaluate our commenting platform to ensure that it meets your expectations and serves as an optimal feedback mechanism. During this redesign, we invite your input on providing feedback on Red Hat documentation via the discussion platform.