2.2. 为存储驱动程序添加软件依赖项
Red Hat OpenStack Services on OpenShift (RHOSO) openstack-cinder 和 openstack-manila 服务在由红帽构建的 Linux 容器中执行。这些容器镜像包括支持大量驱动程序的必要软件。但是,一些驱动程序需要未包含在 RHOSO 容器镜像中的附加软件组件。这些通常是由合作伙伴提供的 python 模块,它们不适用于红帽的容器镜像。RHOSO 容器镜像中完全包含的驱动程序被视为"树状",而不是具有外部软件依赖项的驱动程序。
在集成流程的早期,合作伙伴必须确定其驱动程序是否具有外部软件依赖性。只有在驱动程序有外部依赖项时,才会应用以下信息:
当合作伙伴的驱动程序具有外部软件依赖项时,合作伙伴必须提供容器镜像,以便在红帽的 RHOSO 容器镜像之上添加额外的层。
- RHOSO 的合作伙伴容器镜像与适用于基于 director 的 RHOSP 的合作伙伴容器镜像类似。
- 提供合作伙伴容器镜像的目的是满足合作伙伴驱动程序所需的外部软件依赖项。您不能使用容器镜像来部署合作伙伴驱动程序的修改版本或与底层 RHOSO 容器镜像中提供的驱动程序不同的驱动程序版本。
- 合作伙伴负责生成容器镜像,并且镜像必须在红帽 OpenStack 认证之前通过容器镜像认证流程。本指南后续部分中提供了有关如何认证容器镜像的详细信息。注意:容器镜像认证与 Red Hat OpenStack 认证不同。容器镜像必须进行单独的认证流程,才能在 红帽生态系统目录 中提供。
在合作伙伴的存储驱动程序通过 Red Hat OpenStack 认证后,合作伙伴负责为 RHOSO 版本的每个后续次要更新生成经过认证的容器镜像。
- 对于每个次发行版本的 RHOSO 18 更新,合作伙伴必须为更新的版本生成更新的容器镜像,并在红帽生态系统目录中发布更新的容器镜像。
- 旧的 RHOSO 18 次要更新的容器镜像必须保留在红帽生态系统目录中。这样可确保不使用最新 RHOSO 版本的客户仍然可以访问为其 RHOSO 版本构建的合作伙伴容器镜像。
2.2.1. 构建合作伙伴容器镜像 复制链接链接已复制到粘贴板!
如果存储驱动程序有不是由红帽相应的容器镜像提供的外部软件依赖项,则合作伙伴必须提供红帽认证的容器镜像。例如,cinder-volume 服务,其中包含许多块存储后端的合作伙伴驱动程序。当合作伙伴的驱动程序具有外部软件依赖项时,它们必须提供 cinder-volume 容器镜像来层红帽 RHOSO cinder-volume 容器镜像之上的软件。
创建用于生成容器镜像的
Containerfile:以下示例显示了用于生成
cinder-volume容器镜像的示例Containerfile或Dockerfile,其中包含合作伙伴的openstack-cinder驱动程序所需的外部软件依赖项。可以调整示例来生成manila-share容器镜像,其中包含合作伙伴的openstack-manila驱动程序所需的外部软件依赖项。FROM registry.redhat.io/rhoso/openstack-cinder-volume-rhel9:18.01 LABEL name="rhoso18/openstack-cinder-volume-partnerX-plugin" \ maintainer="maintainer@partnerX.com" \ vendor="PartnerX" \ summary="RHOSO 18.0 cinder-volume PartnerX PluginY" \ description="RHOSO 18.0 cinder-volume PartnerX PluginY"2 # Switch to root to install software dependencies USER root # Enable a repo to install a package3 COPY vendorX.repo /etc/yum.repos.d/vendorX.repo RUN dnf clean all && dnf install -y vendorX-plugin # Install a package over the network4 RUN dnf install -y http://vendorX.com/partnerX-plugin.rpm # Install a local package5 COPY partnerX-plugin.rpm /tmp RUN dnf install -y /tmp/partnerX-plugin.rpm && \ rm -f /tmp/partnerX-plugin.rpm # Install a python package from PyPI6 RUN curl -OL https://bootstrap.pypa.io/get-pip.py && \ python3 get-pip.py --no-setuptools --no-wheel && \ pip3 install partnerX-plugin && \ rm -f get-pip.py # Add required license as text file(s) in /licenses directory # (GPL, MIT, APACHE, Partner End User Agreement, etc) RUN mkdir /licenses COPY licensing.txt /licenses # Switch to cinder user USER cinder- 1
- 使用 FROM 子句指定红帽的 RHOSO 基础镜像,本例中为 cinder-volume 服务。18.0 标签指定当前的最新版本。要根据特定的次版本生成镜像,请修改标签以指定该发行版本,如 18.0.1,或 openstack-cinder-volume-rhel9:*18.0.1*。对于 RHOSO 18 GA,请使用 URL:
registry.redhat.io/rhoso/openstack-cinder-volume-rhel9:18.0。 - 2
- 示例
Containerfile中的标签覆盖基础镜像中的对应标签,以唯一标识合作伙伴的镜像。 - 3
- 您可以通过此方法安装软件依赖项,或方法安装 4、5 或 6。
- 4
- 您可以通过此方法安装软件依赖项,或者方法 3、5 或 6。
- 5
- 您可以通过此方法安装软件依赖项,或者方法 3、4 或 6。
- 6
- 您可以通过此方法安装软件依赖项,或者方法 3、4 或 5。
构建、标签和上传容器镜像:
您可以使用
podman build或buildah build命令来构建容器镜像。有关合作伙伴如何选择注册表并为 认证提供访问令牌的更多信息,请参阅红帽软件认证工作流指南。标记镜像,使其与对应的 RHOSO 18 基础镜像匹配。例如,当基础镜像版本 18.0.0 时,合作伙伴的镜像也会标记为版本 18.0.0。
您还可以在文件存储服务中使用上述示例流程
openstack-manila。确保使用正确的 RHOSOopenstack-manila-share基础镜像来代替openstack-cinder-volume基础镜像。认证和发布容器镜像:
有关如何认证容器镜像的详情,请参考 Red Hat Enterprise Linux Software Certification Policy Guide 和 Red Hat Software Certification Workflow Guide。您可以在 红帽生态系统目录 中发布容器镜像。
2.2.2. 维护合作伙伴容器镜像和镜像标签 复制链接链接已复制到粘贴板!
当合作伙伴认证其存储解决方案时,如果解决方案中包含容器镜像,则合作伙伴负责每次更改底层 RHOSO 容器镜像时重建该镜像。每个 RHOSO 维护版本都会发生这种情况,但也可能会在 RHOSO 容器镜像更新以解决 CVE 时发生。
例如,如果合作伙伴根据 RHOSO 18.0.1 认证其解决方案,则合作伙伴的容器镜像需要两个标签:
- 18.0.1 表示特定的版本。
- 18.0 表示这是与 RHOSO 18 相关的最新版本。
之后,当红帽发布 18.0.2 版本时,合作伙伴必须重建其镜像并更新镜像和标签:
- 新镜像的标签为 18.0.2。
- 旧的 18.0.1 镜像必须保留在 红帽生态系统目录 中。合作伙伴不得删除旧镜像。
- 从旧的 18.0.1 镜像中删除 18.0 标签,并将其添加到新的 18.0.2 镜像中。
2.2.3. 部署合作伙伴容器镜像 复制链接链接已复制到粘贴板!
使用基于 director 的 Red Hat Openstack Platform (RHOSP),尽管后端数量,您只能指定单个 cinder-volume 容器镜像。但是,在 OpenShift (RHOSO)上的 Red Hat OpenStack Services 中,您可以为每个后端自定义容器镜像,并在单个 RHOSO 部署中配置多存储后端。您可以使用 OpenStackVersion CR 覆盖任何服务的容器镜像。
在以下示例中,您可以使用 OpenStackVersion CR 配置 cinder-volume 和 manila-share 后端:
-
两个
cinder-volume后端名为backend_x1和backend_x2,以使用一个存储厂商的自定义容器镜像(partner_x) -
一个
cinder-volume后端,名为backend_y,以使用第二个存储供应商(partner_y)的自定义容器镜像。 -
名为
backend_z的manila-share后端使用第三个存储厂商的自定义容器镜像(partner_y)
示例:
apiVersion: core.openstack.org/v1beta1
kind: OpenStackVersion
metadata:
name: openstack
spec:
customContainerImages:
cinderVolumeImages:
<backend_x1>: registry.connect.redhat.com/<partner_x>/<cinder-volume_partner_x_plugin>
<backend_x2>: registry.connect.redhat.com/<partner_x>/<cinder-volume_partner_x_plugin>
<backend_y>: registry.connect.redhat.com/<partner_y>/<cinder-volume_partner_y_plugin>
manilaShareImages:
<backend_z>: registry.connect.redhat.com/<partner_z>/<manila-share_partner_z_plugin>
-
&
lt;backend_x1>,<backend_x2> , <backend_y> , 和 <backend_z> 值代表存储后端的名称。 -
当合作伙伴的容器镜像注册时,
<> 值代表合作伙伴的容器 registry 命名空间。;partner_x>、<partner_y> 和 <partner_z -
&
lt;cinder-volume_partner_x_plugin> , <cinder-volume_partner_y_plugin> , 和 <manila-share_partner_z_plugin> 值代表合作伙伴的镜像的名称。
有关部署合作伙伴容器镜像时使用的值的更多信息,请参阅合作伙伴的文档。