Red Hat Training
A Red Hat training course is available for Red Hat OpenStack Platform
第 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
环境文件。请将该文件纳入到日后的所有部署操作中。