第 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 节点都要从远程存储库提取镜像,这会堵塞外部连接。如果这造成问题,可采用以下方法之一:

要在 overcloud 部署中直接从 registry.access.redhat.com 提取镜像,需要有环境文件指定镜像参数。以下命令可自动创建该环境文件:

  1. 找到最新镜像的标签:

    $ source ~/stackrc
    (undercloud) $ openstack overcloud container image tag discover \
      --image registry.access.redhat.com/rhosp12/openstack-base:latest \
      --tag-from-label version-release

    此命令的结果将作为以下命令中 <TAG> 的值。

  2. 创建环境文件:

    (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
      ...
  3. 这将创建 overcloud_images.yaml 环境文件,其中包含 undercloud 上的镜像位置。需要将该文件包括在部署中。

注册表配置现在已经完成。继续按照 第 6 章 使用 CLI 工具配置基本的 overcloud 要求 中的说明进行操作。

5.2. 本地注册表

您可以在 undercloud 上配置本地注册表来保存 overcloud 容器镜像。这种方法从 registry.access.redhat.com 逐个提取每个镜像。而在 overcloud 创建过程中,overcloud 节点将从 undercloud 提取相关镜像。这会使容器镜像产生的网络流量保持在内部网络中,不会堵塞外部网络连接,从而加速部署过程。

要将镜像从 registry.access.redhat.com 提取到本地注册表,安以下过程操作:

  1. 找到最新镜像的标签:

    $ source ~/stackrc
    (undercloud) $ openstack overcloud container image tag discover \
      --image registry.access.redhat.com/rhosp12/openstack-base:latest \
      --tag-from-label version-release

    此命令的结果将在以下命令中作为 <TAG> 的值。

  2. 创建模板以便将镜像提取到本地注册表:

    (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 命令。

  3. 这将创建名为 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 磁盘空间。

  4. 创建模板以使用本地注册表中的镜像:

    (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 命令。

  5. 这将创建 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 提取到本地注册表,安以下过程操作:

  1. 创建模板以便将镜像提取到本地注册表:

    $ 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 命令。

  2. 这将创建名为 container_images.yaml 的文件,其中包含容器镜像信息。您将使用此文件将容器镜像同步至 Satellite 6 服务器。
  3. 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 服务器中的镜像列表。

  4. container_images.yaml 文件复制到包含 Satellite 6 hammer 工具的系统中。或者按照 Hammer CLI Guide 中的说明将 hammer 工具安装到 undercloud。
  5. 运行以下 hammer 命令,为您的 Satellite 组织创建新产品 (OSP12 Containers)。

    $ hammer product create \
      --organization "ACME" \
      --name "OSP12 Containers"

    该定制产品将会包含我们的镜像。

  6. 为产品添加基本容器镜像:

    $ 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
  7. 添加 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
  8. 同步容器镜像:

    $ hammer product synchronize \
      --organization "ACME" \
      --name "OSP12 Containers"

    等待 Satellite 服务器完成同步。

    注意

    根据具体配置情况,hammer 可能会询问您的 Satellite 服务器用户名和密码。您可以使用配置文件将 hammer 配置为自动登录。请参阅 Hammer CLI Guide 中的 "Authentication" 小节。

  9. 检查 base 镜像中的标签:

    $ hammer docker tag list --repository "base" \
      --organization "ACME" \
      --product "OSP12 Containers"

    这将显示 OpenStack Platform 容器镜像的标签。选择一个标签并记下供后面步骤使用。

  10. 返回到 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 命令。

  11. 这将创建 overcloud_images.yaml 环境文件,其中包含 Satellite 服务器上的镜像位置。需要将该文件包括在您的部署中。

注册表配置现在已经完成。继续按照 第 6 章 使用 CLI 工具配置基本的 overcloud 要求 中的说明进行操作。