2.2. 从您自己的镜像创建自定义镜像
您可以构建自己的自定义镜像。但是,您必须确保您的镜像与 OpenShift 和 OpenShift AI 兼容。
其他资源
- OpenShift Container Platform Images 文档中的常规容器镜像指南部分。
- Red Hat Universal Base Image: https://catalog.redhat.com/software/base-images
- Red Hat Ecosystem Catalog: https://catalog.redhat.com/
2.2.1. 创建您自己的工作台镜像的基本指南 复制链接链接已复制到粘贴板!
以下基本指南提供了在构建自己的自定义工作台镜像时需要考虑的信息。
设计您的镜像以使用 USER 1001 运行
在 OpenShift 中,容器将使用随机 UID 和 GID 0
运行。确保您的镜像与这些用户和组要求兼容,特别是在您需要写入目录时。最佳实践是设计您的镜像,以使用 USER 1001
运行。
避免将工件放在 $HOME 中
附加到工作台的持久性卷将挂载到 /opt/app-root/src
上。此位置也是 $HOME
的位置。因此,不要将任何文件或其他资源放在 $HOME
中,因为它们不会在部署工作台(并挂载持久性卷)后可见。
指定 API 端点
OpenShift 就绪度和存活度探测将查询 /api
端点。对于 Jupyter IDE,这是默认端点。对于其他 IDE,您必须实现 /api
端点。
2.2.2. 创建您自己的工作台镜像的高级指南 复制链接链接已复制到粘贴板!
以下指南提供了在构建自己的自定义工作台镜像时需要考虑的信息。
最小化镜像大小
工作台镜像使用"层化"文件系统。每次您在工作台镜像文件中使用 COPY 或 RUN 命令时,都会创建一个新层。工件不会被删除。当您删除工件时,例如,文件在下一个层中"掩码"。因此,在创建工作台镜像文件时请考虑以下准则。
避免使用
dnf update
命令。-
如果您从持续更新的镜像(如 Red Hat Catalog 中的
ubi9/python-39
)开始,您可能不需要使用dnf update
命令。这个命令获取新的元数据,更新可能不会影响的文件,并增加工作台镜像的大小。 -
指向基础镜像的较新版本,而不是对旧版本执行
dnf 更新
。
-
如果您从持续更新的镜像(如 Red Hat Catalog 中的
-
组
RUN
命令.通过在每行末尾添加&& \
来串联您的命令。 - 如果需要编译代码(如库或应用程序)才能包含在自定义镜像中,实施多阶段构建,以避免在最终镜像中包含构建工件。也就是说,在中间镜像中编译库或应用程序,然后将结果复制到最终镜像,留下了您不想包含的工件。
设置文件和目录的访问权限
将文件和文件夹的所有权设置为
1001:0
(user "default", group "0"),例如:COPY --chown=1001:0 os-packages.txt ./
COPY --chown=1001:0 os-packages.txt ./
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在 OpenShift 上,每个容器都位于标准命名空间中(除非您修改安全性)。容器使用具有随机用户 ID (uid)且组 ID (gid)的用户运行,组 ID 为 0。
因此,您要写入的所有文件夹以及镜像中的所有文件都必须被具有随机用户 ID (uid)的用户访问。另外,您可以设置对任何用户的访问,如下例所示:
COPY --chmod=775 os-packages.txt ./
COPY --chmod=775 os-packages.txt ./
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用
/opt/app-root/src
构建镜像,作为您要保留的数据的默认位置,例如:WORKDIR /opt/app-root/src
WORKDIR /opt/app-root/src
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 当用户从 OpenShift AI Applications
Enabled 页面启动工作台时,用户的"personal"卷被挂载到 /opt/app-root/src
。由于此位置不可配置,因此在构建自定义镜像时,您必须为持久性数据指定此默认位置。修复相应的权限,以在 OpenShift 环境中支持 PIP (Python 软件包的软件包管理器)。在您的自定义镜像中添加以下命令(如果需要,将
python3.9
更改为您使用的 Python 版本):chmod -R g+w /opt/app-root/lib/python3.9/site-packages && \ fix-permissions /opt/app-root -P
chmod -R g+w /opt/app-root/lib/python3.9/site-packages && \ fix-permissions /opt/app-root -P
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 您的工作台镜像中的服务必须在
${NB_PREFIX}/api
上回答,否则 OpenShift 存活度/就绪探测将失败,并删除工作台镜像的 pod。NB_PREFIX
环境变量指定容器要侦听的 URL 路径。以下是 Nginx 配置示例:
location = ${NB_PREFIX}/api { return 302 /healthz; access_log off; }
location = ${NB_PREFIX}/api { return 302 /healthz; access_log off; }
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要使空闲剔除正常工作,
${NB_PREFIX}/api/kernels
URL 必须返回专门格式化的 JSON 有效负载,如下例所示:以下是 Nginx 配置示例:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 返回的 JSON 有效负载应该是:
{"id":"rstudio","name":"rstudio","last_activity":(time in ISO8601 format),"execution_state":"busy","connections": 1}
{"id":"rstudio","name":"rstudio","last_activity":(time in ISO8601 format),"execution_state":"busy","connections": 1}
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
启用 CodeReady Builder (CRB)和 Extra Packages for Enterprise Linux (EPEL)
CRB 和 EPEL 是提供标准 Red Hat Enterprise Linux (RHEL)或通用基础镜像(UBI)安装中没有的软件包的软件仓库。它们对安装某些软件很有用,如 RStudio。
在 UBI9 镜像上,CRB 默认启用。要在基于 UBI9- 的镜像上启用 EPEL,请运行以下命令:
RUN yum install -y https://download.fedoraproject.org/pub/epel/epel-release-latest-9.noarch.rpm
RUN yum install -y https://download.fedoraproject.org/pub/epel/epel-release-latest-9.noarch.rpm
要在基于 Centos Stream 9 的镜像上启用 CRB 和 EPEL,请运行以下命令:
RUN yum install -y yum-utils && \ yum-config-manager --enable crb && \ yum install -y https://download.fedoraproject.org/pub/epel/epel-release-latest-9.noarch.rpm
RUN yum install -y yum-utils && \
yum-config-manager --enable crb && \
yum install -y https://download.fedoraproject.org/pub/epel/epel-release-latest-9.noarch.rpm
添加 Elyra 兼容性
Red Hat OpenShift AI 版本 2.9 及更新的版本支持数据科学项目 V2 (由 odh-elyra
软件包提供)。以前的 OpenShift AI 版本支持数据科学管道 V1 (由 elyra
软件包提供)。
如果您希望自定义镜像支持数据科学管道 V2,您必须满足以下要求:
包含
odh-
软件包,以便与 Data Science 管道 V2 (而不是 elyra 软件包)提供支持,例如:elyra
USER 1001 RUN pip install odh-elyra
USER 1001 RUN pip install odh-elyra
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 如果要自动包含数据科学管道配置,作为运行时配置,请在导入自定义工作台镜像时添加注解。