第 5 章 配置容器注册表详细信息
容器化的 overcloud 需要访问含有所需容器镜像的注册表。Red Hat OpenStack Platform 支持以下注册表类型:
- 远程注册表
-
overcloud 直接从
registry.access.redhat.com提取容器镜像。 - 本地注册表
-
在 undercloud 中创建本地注册表,将镜像与
registry.access.redhat.com同步,overcloud 即可从 undercloud 提取容器镜像。 - Satellite 服务器
- 通过 Red Hat Satellite 6 服务器来管理容器镜像的应用程序生命周期并发布镜像。overcloud 从 Satellite 服务器提取镜像。
从列表中选择一种方法并继续配置注册表详细信息。
一些额外功能使用的服务需要额外的容器镜像。通过环境文件可以启用这些服务。要纳入这些额外的容器,可通过 openstack overcloud container image prepare 命令并使用-e 选项来添加每个环境文件。如需有关环境文件的更多信息,请参阅 第 6.8 节 “在 overcloud 创建中包括环境文件”。
5.1. 远程注册表
红帽将 overcloud 容器镜像托管在 registry.access.redhat.com 中。从远程注册表提取镜像是最简单的方法,因为注册表已经建好,您只需知道要提取的镜像的 URL 和命名空间即可。但是在 overcloud 创建过程中,overcloud 节点都要从远程存储库提取镜像,这会堵塞外部连接。如果这造成问题,可采用以下方法之一:
- 设置本地注册表:第 5.2 节 “本地注册表”
- 将镜像托管在 Red Hat Satellite 6 上:第 5.3 节 “Satellite 服务器”
要在 overcloud 部署中直接从 registry.access.redhat.com 提取镜像,需要有环境文件指定镜像参数。以下命令可自动创建该环境文件:
找到最新镜像的标签:
$ source ~/stackrc (undercloud) $ openstack overcloud container image tag discover \ --image registry.access.redhat.com/rhosp12/openstack-base:latest \ --tag-from-label version-release
此命令的结果将作为以下命令中
<TAG>的值。创建环境文件:
(undercloud) $ openstack overcloud container image prepare \ --namespace=registry.access.redhat.com/rhosp12 \ --prefix=openstack- \ --tag=<TAG> \ -e <SERVICE ENVIRONMENT FILE> \ --env-file=/home/stack/templates/overcloud_images.yaml
使用
-e选项来逐一纳入额外服务及其容器的环境文件。如果使用 Ceph Storage,需要包括以下额外参数:
... -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-2-rhel7 \ --set ceph_tag=latest ...
-
这将创建
overcloud_images.yaml环境文件,其中包含 undercloud 上的镜像位置。需要将该文件包括在部署中。
注册表配置现在已经完成。继续按照 第 6 章 使用 CLI 工具配置基本的 overcloud 要求 中的说明进行操作。
5.2. 本地注册表
您可以在 undercloud 上配置本地注册表来保存 overcloud 容器镜像。这种方法从 registry.access.redhat.com 逐个提取每个镜像。而在 overcloud 创建过程中,overcloud 节点将从 undercloud 提取相关镜像。这会使容器镜像产生的网络流量保持在内部网络中,不会堵塞外部网络连接,从而加速部署过程。
要将镜像从 registry.access.redhat.com 提取到本地注册表,安以下过程操作:
找到最新镜像的标签:
$ source ~/stackrc (undercloud) $ openstack overcloud container image tag discover \ --image registry.access.redhat.com/rhosp12/openstack-base:latest \ --tag-from-label version-release
此命令的结果将在以下命令中作为
<TAG>的值。创建模板以便将镜像提取到本地注册表:
(undercloud) $ openstack overcloud container image prepare \ --namespace=registry.access.redhat.com/rhosp12 \ --prefix=openstack- \ --tag=<TAG> \ -e <SERVICE ENVIRONMENT FILE> \ > /home/stack/templates/container_images.yaml
使用
-e选项来逐一纳入额外服务及其容器的环境文件。如果使用 Ceph Storage,需要包括以下额外参数:
... -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-2-rhel7 \ --set ceph_tag=latest ...
注意此版本的
openstack overcloud container image prepare命令针对registry.access.redhat.com上的注册表来生成镜像列表,以便导入至 undercloud。命令中使用的值不同于后面步骤中的openstack overcloud container image prepare命令。这将创建名为
container_images.yaml的文件,其中包含容器镜像信息。然后使用container_images.yaml文件提取镜像:(undercloud) $ sudo openstack overcloud container image upload \ --verbose --config-file \ /home/stack/templates/container_images.yaml
提取所需镜像需要花费一定时间,具体取决于网络速度及 undercloud 磁盘情况。
注意容器镜像大约占用 10 GB 磁盘空间。
创建模板以使用本地注册表中的镜像:
(undercloud) $ openstack overcloud container image prepare \ --namespace=192.168.24.1:8787/rhosp12 \ --prefix=openstack- \ --tag=<TAG> \ -e <SERVICE ENVIRONMENT FILE> \ --env-file=/home/stack/templates/overcloud_images.yaml
使用
-e选项来逐一纳入额外服务及其容器的环境文件。如果使用 Ceph Storage,需要包括以下额外参数:
... -e /usr/share/openstack-tripleo-heat-templates/environments/ceph-ansible/ceph-ansible.yaml \ --set ceph_namespace=192.168.24.1:8787/rhceph \ --set ceph_image=rhceph-2-rhel7 \ --set ceph_tag=latest ...
注意此版本的
openstack overcloud container image prepare命令针对 undercloud 上的注册表来生成镜像列表,以便用于 overcloud。命令中使用的值不同于前一步骤中的openstack overcloud container image prepare命令。-
这将创建
overcloud_images.yaml环境文件,其中包含 undercloud 上的镜像位置。需要将该文件包括在部署中。
注册表配置现在已经完成。继续按照 第 6 章 使用 CLI 工具配置基本的 overcloud 要求 中的说明进行操作。
5.3. Satellite 服务器
Red Hat Satellite 6 中的一个已知问题会阻止名称超过 30 个字符的容器镜像进行同步(更多信息请参阅 BZ#1424689)。在将来推出的 Satellite 6.2 次要版本中将修复此问题。旨在短期内帮助克服此问题的热修复程序也正在开发,很快将会推出。
Red Hat Satellite 6 提供了注册表同步功能。通过该功能可将多个镜像提取到 Satellite 服务器中,作为应用程序生命周期的一部分加以管理。Satellite 也可以作为注册表供其他启用容器功能的系统使用。如需了解更多有关管理容器镜像的详细信息,请参阅 Red Hat Satellite 6 Content Management Guide 中的 "Managing Container Images"。
以下操作过程示例中使用了 Red Hat Satellite 6 的 hammer 命令行工具和一个名为 ACME 的示例组织。请将该组织替换为您自己 Satellite 6 中的组织。
要将镜像从 registry.access.redhat.com 提取到本地注册表,安以下过程操作:
创建模板以便将镜像提取到本地注册表:
$ source ~/stackrc (undercloud) $ openstack overcloud container image prepare \ --namespace=rhosp12 \ --prefix=openstack- \ -e <SERVICE ENVIRONMENT FILE> \ > /home/stack/templates/container_images.yaml
使用
-e选项来逐一纳入额外服务及其容器的环境文件。如果使用 Ceph Storage,需要包括以下额外参数:
... -e /usr/share/openstack-tripleo-heat-templates/environments/ceph-ansible/ceph-ansible.yaml \ --set ceph_namespace=rhceph \ --set ceph_image=rhceph-2-rhel7 --set ceph_tag=latest ...
注意此版本的
openstack overcloud container image prepare命令针对registry.access.redhat.com上的注册表来生成镜像列表。命令中使用的值不同于后面步骤中的openstack overcloud container image prepare命令。-
这将创建名为
container_images.yaml的文件,其中包含容器镜像信息。您将使用此文件将容器镜像同步至 Satellite 6 服务器。 从
container_images.yaml文件中删除不需要的信息:(undercloud) $ sed -i "s/- imagename: //g" templates/container_images.yaml (undercloud) $ sed -i "s/:.*//g" templates/container_images.yaml (undercloud) $ sed -i "1d" templates/container_images.yaml
这样就得到了要提取到 Satellite 服务器中的镜像列表。
-
将
container_images.yaml文件复制到包含 Satellite 6hammer工具的系统中。或者按照 Hammer CLI Guide 中的说明将hammer工具安装到 undercloud。 运行以下
hammer命令,为您的 Satellite 组织创建新产品 (OSP12 Containers)。$ hammer product create \ --organization "ACME" \ --name "OSP12 Containers"
该定制产品将会包含我们的镜像。
为产品添加基本容器镜像:
$ hammer repository create \ --organization "ACME" \ --product "OSP12 Containers" \ --content-type docker \ --url https://registry.access.redhat.com \ --docker-upstream-name rhosp12/openstack-base \ --name base
添加
container_images.yaml文件中的 overcloud 容器镜像。$ while read IMAGE; do \ IMAGENAME=$(echo $IMAGE | cut -d"/" -f2 | sed "s/openstack-//g" | sed "s/:.*//g") ; \ hammer repository create \ --organization "ACME" \ --product "OSP12 Containers" \ --content-type docker \ --url https://registry.access.redhat.com \ --docker-upstream-name $IMAGE \ --name $IMAGENAME ; done < container_images.yaml
同步容器镜像:
$ hammer product synchronize \ --organization "ACME" \ --name "OSP12 Containers"
等待 Satellite 服务器完成同步。
注意根据具体配置情况,
hammer可能会询问您的 Satellite 服务器用户名和密码。您可以使用配置文件将hammer配置为自动登录。请参阅 Hammer CLI Guide 中的 "Authentication" 小节。检查
base镜像中的标签:$ hammer docker tag list --repository "base" \ --organization "ACME" \ --product "OSP12 Containers"
这将显示 OpenStack Platform 容器镜像的标签。选择一个标签并记下供后面步骤使用。
返回到 undercloud 并为 Satellite 服务器上的镜像生成环境文件。这会用到以下数据:
-
--namespace- Satellite 服务器上注册表的 URL 和端口。Red Hat Satellite 上的默认注册表端口是 5000。例如,--namespace=satellite6.example.com:5000。 -
--prefix=- 前缀基于 Satellite 6 中托管容器的组织和产品名称。例如,如果组织名称是ACME,前缀将是acme-osp12_containers-。 -
--tag=<TAG>- 先前记下的 OpenStack Platform 容器镜像标签。 -e- 使用此选项可纳入 overcloud 额外服务的每个环境文件。以下是生成环境文件的命令示例:
(undercloud) $ openstack overcloud container image prepare \ --namespace=satellite6.example.com:5000 \ --prefix=acme-osp12_containers- \ --tag=<TAG> \ -e <SERVICE ENVIRONMENT FILE> \ --env-file=/home/stack/templates/overcloud_images.yaml
如果使用 Ceph Storage,则需要以下的额外参数:
-
--set ceph_namespace- Satellite 服务器上 Ceph Storage 镜像注册表的 URL 和端口。这应该与--namespace相同。 -
--set ceph_image- Satellite 服务器上 Ceph Storage 镜像的名称。与 OpenStack Platform 镜像遵循相同的命名规范。例如:acme-osp12_containers-rhceph-2-rhel7。 --set ceph_tag- Ceph Storage 容器镜像标签。设置为latest。例如:
... -e /usr/share/openstack-tripleo-heat-templates/environments/ceph-ansible/ceph-ansible.yaml \ --set ceph_namespace=satellite6.example.com:5000 \ --set ceph_image=acme-osp12_containers-rhceph-2-rhel7 \ --set ceph_tag=latest ...
注意此版本的
openstack overcloud container image prepare命令针对 Satellite 服务器。命令中使用的值不同于上一步骤中的openstack overcloud container image prepare命令。
-
-
这将创建
overcloud_images.yaml环境文件,其中包含 Satellite 服务器上的镜像位置。需要将该文件包括在您的部署中。
注册表配置现在已经完成。继续按照 第 6 章 使用 CLI 工具配置基本的 overcloud 要求 中的说明进行操作。

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.