第 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 要求 中的说明进行操作。