构建 CentOS 7.9 离线 yum 源¶
使用场景介绍¶
当工作节点的内核版本与全局服务集群的控制节点内核版本或 OS 类型不一致时,需要用户手动构建离线 yum 源。
本文介绍如何构建离线 yum 源, 并在安装 Gpu Operator 时,通过 RepoConfig.ConfigMapName
参数来使用。
前提条件¶
- 用户已经在平台上安装了 v0.12.0 及以上版本的 addon 离线包。
- 准备一个能够和待部署 GPU Operator 的集群网络能够联通的文件服务器,如 nginx 或 minio。
- 准备一个能够访问互联网、待部署 GPU Operator 的集群和文件服务器的节点, 且节点上已经完成 Docker 的安装。
操作步骤¶
本文以内核版本为 3.10.0-1160.95.1.el7.x86_64
的 CentOS 7.9 节点为例,介绍如何构建 GPU operator 离线包的 yum 源。
检查集群节点的 OS 和内核版本¶
分别在全局服务集群的控制节点和待部署 GPU Operator 的节点执行如下命令,若两个节点的 OS 和内核版本一致则无需构建 yum 源, 可参考离线安装 GPU Operator 文档直接安装;若两个节点的 OS 或内核版本不一致,请执行下一步。
-
执行如下命令,查看集群下待部署 GPU Operator 节点的发行版名称和版本号。
预期输出如下:
输出结果为当前节点内核版本
CentOS 7.9
。 -
执行如下命令,查看集群下待部署 GPU Operator 节点的内核版本。
预期输出如下:
Linux localhost.localdomain 3.10.0-1160.95.1.el7.x86_64 #1 SMP Mon Oct 19 16:18:59 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux
输出结果为当前节点内核版本
3.10.0-1160.el7.x86_64
。
制作离线 yum 源¶
在一个能够访问互联网和文件服务器的节点上进行操作。
-
在一个能够访问互联网和文件服务器的节点上执行如下命令新建一个名为 yum.sh 的脚本文件。
然后按下 i 键进入插入模式,输入以下内容:
export TARGET_KERNEL_VERSION=$1 cat >> run.sh << \EOF #! /bin/bash echo "start install kernel repo" echo ${KERNEL_VERSION} mkdir centos-base if [ "$OS" -eq 7 ]; then yum install --downloadonly --downloaddir=./centos-base perl yum install --downloadonly --downloaddir=./centos-base elfutils-libelf.x86_64 yum install --downloadonly --downloaddir=./redhat-base elfutils-libelf-devel.x86_64 yum install --downloadonly --downloaddir=./centos-base kernel-headers-${KERNEL_VERSION}.el7.x86_64 yum install --downloadonly --downloaddir=./centos-base kernel-devel-${KERNEL_VERSION}.el7.x86_64 yum install --downloadonly --downloaddir=./centos-base kernel-${KERNEL_VERSION}.el7.x86_64 yum install -y --downloadonly --downloaddir=./centos-base groff-base elif [ "$OS" -eq 8 ]; then yum install --downloadonly --downloaddir=./centos-base perl yum install --downloadonly --downloaddir=./centos-base elfutils-libelf.x86_64 yum install --downloadonly --downloaddir=./redhat-base elfutils-libelf-devel.x86_64 yum install --downloadonly --downloaddir=./centos-base kernel-headers-${KERNEL_VERSION}.el8.x86_64 yum install --downloadonly --downloaddir=./centos-base kernel-devel-${KERNEL_VERSION}.el8.x86_64 yum install --downloadonly --downloaddir=./centos-base kernel-${KERNEL_VERSION}.el8.x86_64 yum install -y --downloadonly --downloaddir=./centos-base groff-base else echo "Error os version" fi createrepo centos-base/ ls -lh centos-base/ tar -zcf centos-base.tar.gz centos-base/ echo "end install kernel repo" EOF cat >> Dockerfile << EOF FROM centos:7 ENV KERNEL_VERSION="" ENV OS=7 RUN yum install -y createrepo COPY run.sh . ENTRYPOINT ["/bin/bash","run.sh"] EOF docker build -t test:v1 -f Dockerfile . docker run -e KERNEL_VERSION=$TARGET_KERNEL_VERSION --name centos7.9 test:v1 docker cp centos7.9:/centos-base.tar.gz . tar -xzf centos-base.tar.gz
按下 esc 键退出插入模式,然后输入 __ :wq__ 保存并退出。
-
运行 yum.sh 文件:
TARGET_KERNEL_VERSION
参数用于指定集群节点的内核版本,注意:发行版标识符(如 __ .el7.x86_64 __ )无需输入。 例如:
至此,您已经生成了内核为 3.10.0-1160.95.1.el7.x86_64 的离线的 yum 源: centos-base 。
上传离线 yum 源到文件服务器¶
在一个能够访问互联网和文件服务器的节点上进行操作。主要用于将上一步中生成的 yum 源上传到可以被待部署 GPU Operator 的集群进行访问的文件服务器中。 文件服务器可以为 Nginx 、 Minio 或其它支持 Http 协议的文件服务器。
本操作示例采用的是算丰 AI 算力平台火种节点内置的 Minio 作为文件服务器,Minio 相关信息如下:
- 访问地址:
http://10.5.14.200:9000(一般为{火种节点 IP} + {9000 端口})
- 登录用户名:rootuser
-
登录密码:rootpass123
-
在节点当前路径下,执行如下命令将节点本地 mc 命令行工具和 minio 服务器建立链接。
预期输出如下:
mc 命令行工具是 Minio 文件服务器提供的客户端命令行工具,详情请参考: MinIO Client。
-
在节点当前路径下,新建一个名为 centos-base 的存储桶(bucket)。
预期输出如下:
-
将存储桶 centos-base 的访问策略设置为允许公开下载。以便在后期安装 GPU-operator 时能够被访问。
预期输出如下:
-
在节点当前路径下,将步骤二生成的离线 yum 源文件 centos-base 复制到 minio 服务器的 minio/centos-base 存储桶中。
在集群创建配置项用来保存 yum 源信息¶
在待部署 GPU Operator 集群的控制节点上进行操作。
-
执行如下命令创建名为 CentOS-Base.repo 的文件,用来指定 yum 源存储的配置信息。
# 文件名称必须为 CentOS-Base.repo,否则安装 gpu-operator 时无法被识别 cat > CentOS-Base.repo << EOF [extension-0] baseurl = http://10.5.14.200:9000/centos-base/centos-base #步骤三中,放置 yum 源的文件服务器地址 gpgcheck = 0 name = kubean extension 0 [extension-1] baseurl = http://10.5.14.200:9000/centos-base/centos-base #步骤三中,放置 yum 源的文件服务器地址 gpgcheck = 0 name = kubean extension 1 EOF
-
基于创建的 CentOS-Base.repo 文件,在 gpu-operator 命名空间下,创建名为 local-repo-config 的配置文件:
kubectl create configmap local-repo-config -n gpu-operator --from-file=CentOS-Base.repo=/etc/yum.repos.d/extension.repo
预期输出如下:
local-repo-config 配置文件用于在安装 gpu-operator 时,提供
RepoConfig.ConfigMapName
参数的值,配置文件名称用户可自定义。 -
查看 local-repo-config 的配置文件的内容:
预期输出如下:
apiVersion: v1 data: CentOS-Base.repo: "[extension-0]\nbaseurl = http://10.6.232.5:32618/centos-base#步骤二中,放置 yum 源的文件服务器路径\ngpgcheck = 0\nname = kubean extension 0\n \n[extension-1]\nbaseurl = http://10.6.232.5:32618/centos-base #步骤二中,放置 yum 源的文件服务器路径\ngpgcheck = 0\nname = kubean extension 1\n" kind: ConfigMap metadata: creationTimestamp: "2023-10-18T01:59:02Z" name: local-repo-config namespace: gpu-operator resourceVersion: "59445080" uid: c5f0ebab-046f-442c-b932-f9003e014387
至此,您已成功为待部署 GPU Operator 的集群创建了离线 yum 源配置文件。
通过在离线安装 GPU Operator 时通过 RepoConfig.ConfigMapName
参数来使用。