4.12. 在断开连接的环境中构建执行环境
为 Ansible Automation Platform 创建执行环境是一个常见任务,它在断开连接的环境中工作不同。https://docs.redhat.com/en/documentation/red_hat_ansible_automation_platform/2.4/html/creating_and_consuming_execution_environments/index在构建自定义执行环境时,ansible-builder 工具默认为从互联网上以下位置下载内容:
- Red Hat Automation hub (console.redhat.com)或 Ansible Galaxy (galaxy.ansible.com)用于添加到执行环境镜像的任何 Ansible 内容集合。
- PyPI (pypi.org),适用于作为集合依赖项所需的任何 python 软件包。
- RPM 存储库,如 RHEL 或 UBI 软件仓库(cdn.redhat.com),用于在执行环境镜像中添加或更新 RPM (如果需要)。
- registry.redhat.io 用于访问基本容器镜像。
在断开连接的环境中构建执行环境镜像需要从这些位置镜像内容。如需有关 将集合从 Ansible Galaxy 或自动化中心导入到私有自动化中心 的信息,请参阅将集合导入到私有自动化中心。
传送到断开连接的网络后,可以使用 Web 服务器或 Nexus 等工件存储库提供镜像 PyPI 内容。RHEL 和 UBI 存储库内容可以从面向互联网的 Red Hat Satellite 服务器导出,复制到断开连接的环境中,然后导入到断开连接的 Satellite 中,以便它可用于构建自定义执行环境。详情请查看 Air-Gapped Scenario 中的 ISS 导出同步。
默认基础容器镜像 ee-minimal-rhel8 用于创建自定义执行环境镜像,并包含在捆绑的安装程序中。在安装时,此镜像添加到私有自动化中心。如果需要不同的基础容器镜像,如 ee-minimal-rhel9,则必须将其导入到断开连接的网络中,并添加到私有自动化中心容器 registry 中。
断开连接的网络上所有先决条件后,可以使用 ansible-builder 命令来创建自定义执行环境镜像。
4.12.1. 安装 Ansible Builder RPM 复制链接链接已复制到粘贴板!
在要构建自定义虚拟环境的 RHEL 系统上,您将使用环境中已存在的 Satellite 服务器安装 Ansible Builder RPM。此方法是首选的,因为执行环境镜像可以根据需要使用来自预先存在的 Satellite 的任何 RHEL 内容。
流程
从 Ansible Automation Platform 存储库安装 Ansible Builder RPM。
- 将 RHEL 系统订阅到断开连接的网络上的 Satellite。
-
附加 Ansible Automation Platform 订阅并启用 Ansible Automation Platform 存储库。存储库名称是
ansible-automation-platform-2.4-for-rhel-8-x86_64-rpms或ansible-automation-platform-2.4-for-rhel-9-x86_64-rpms,具体取决于底层系统中使用的 RHEL 版本。 - 安装 Ansible Builder RPM。Ansible Builder RPM 的版本必须是 3.0.0 或更高版本,才能使以下示例正常工作。
从 Ansible Automation Platform 安装捆绑包安装 Ansible Builder RPM。如果您的断开连接的网络中没有 Satellite 服务器,请使用此方法。
- 解压缩 Ansible Automation Platform 安装捆绑包。
- 从包含的内容安装 Ansible Builder RPM 及其依赖项。
根据所使用的安装捆绑包版本,特定版本可能稍有不同。
4.12.2. 创建自定义执行环境定义 复制链接链接已复制到粘贴板!
安装 Ansible Builder RPM 后,请按照以下步骤创建自定义执行环境。
为创建自定义执行环境时使用的构建工件创建一个目录。所有使用以下步骤创建的新文件都将在此目录中创建。
mkdir $HOME/custom-ee $HOME/custom-ee/files cd $HOME/custom-ee/
$ mkdir $HOME/custom-ee $HOME/custom-ee/files $ cd $HOME/custom-ee/Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建一个
execution-environment.yml文件,该文件定义自定义执行环境的要求。注意需要执行环境定义格式的版本 3,因此请确保
execution-environment.yml文件包含version: 3,然后再继续。- 覆盖基础镜像以指向私有自动化中心中可用的最小执行环境。
-
定义额外的构建文件,以指向构建过程中要使用的任何断开连接的内容源。您的自定义
execution-environment.yml文件应类似以下示例:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在
files/子目录下创建一个ansible.cfg文件,指向您的私有自动化中心。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在
files/子目录下创建一个pip.conf文件,指向内部 PyPI 镜像(Web 服务器或 Nexus):cat files/pip.conf [global] index-url = https://<pypi_mirror_fqdn>/ trusted-host = <pypi_mirror_fqdn>
$ cat files/pip.conf [global] index-url = https://<pypi_mirror_fqdn>/ trusted-host = <pypi_mirror_fqdn>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 可选:如果您使用
bindep.txt文件来添加 RPM,请在文件/子目录中创建一个,指向断开连接的 Satellite 或其他托管 RPM 存储库的位置。如果此步骤是必需的,请取消与custom.repo文件custom.repo文件对应的execution-environment.yml示例中的步骤。以下示例是 UBI 仓库。也可以将其他本地仓库添加到此文件中。URL 路径可能需要根据镜像内容位于 web 服务器上的位置进行更改。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 添加用于为私有自动化中心 web 服务器证书签名的 CA 证书。如果私有自动化中心使用安装程序提供的自签名证书:
-
从您的私有自动化中心中复制
/etc/pulp/certs/pulp_webserver.crt,并将其命名为hub-ca.crt。 -
将
hub-ca.crt文件添加到files/子目录中。
-
从您的私有自动化中心中复制
如果私有自动化中心使用由证书颁发机构签名的用户提供的证书:
-
复制该 CA 证书并将其命名为
hub-ca.crt。 -
将
hub-ca.crt文件添加到files/子目录中。
-
复制该 CA 证书并将其命名为
完成预付步骤后,使用自定义执行环境镜像所需的内容创建 python
requirements.txt和 Ansible 集合requirements.yml文件。注意任何所需的集合都必须已上传到您的私有自动化中心。
custom-ee/目录下应存在以下文件,其中bindep.txt和files/custom.repo是可选的:
4.12.3. 构建自定义执行环境 复制链接链接已复制到粘贴板!
在创建新的自定义执行环境前,需要来自私有 hub 的 API 令牌来下载内容。
执行以下步骤生成令牌:
- 登录到您的私有自动化中心。
- 从左侧菜单中选择"集合"。
- 在菜单的 "Collections" 部分下选择"API 令牌"。
具有令牌后,设置以下环境变量以便 Ansible Builder 可以访问令牌:
export ANSIBLE_GALAXY_SERVER_PRIVATE_HUB_TOKEN=<your_token>
$ export ANSIBLE_GALAXY_SERVER_PRIVATE_HUB_TOKEN=<your_token>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用以下命令创建自定义执行环境:
cd $HOME/custom-ee ansible-builder build -f execution-environment.yml -t private-hub.example.com/custom-ee:latest -v 3
$ cd $HOME/custom-ee $ ansible-builder build -f execution-environment.yml -t private-hub.example.com/custom-ee:latest -v 3Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意如果构建失败,并显示私有 hub 证书由未知颁发机构签名的错误,您可以通过运行以下命令将所需的镜像拉取到本地镜像缓存中:
podman pull private-hub.example.com/ee-minimal-rhel8:latest --tls-verify=false
$ podman pull private-hub.example.com/ee-minimal-rhel8:latest --tls-verify=falseCopy to Clipboard Copied! Toggle word wrap Toggle overflow 另外,您可以将私有 hub CA 证书添加到 podman 证书存储中:
sudo mkdir /etc/containers/certs.d/private-hub.example.com sudo cp $HOME/custom-ee/files/hub-ca.crt /etc/containers/certs.d/private-hub.example.com
$ sudo mkdir /etc/containers/certs.d/private-hub.example.com $ sudo cp $HOME/custom-ee/files/hub-ca.crt /etc/containers/certs.d/private-hub.example.comCopy to Clipboard Copied! Toggle word wrap Toggle overflow
4.12.4. 将自定义执行环境上传到私有自动化中心 复制链接链接已复制到粘贴板!
在新的执行环境镜像可用于自动化作业前,必须将其上传到私有自动化中心。
首先,验证执行环境镜像是否可以在本地 podman 缓存中看到:
podman images --format "table {{.ID}} {{.Repository}} {{.Tag}}"
$ podman images --format "table {{.ID}} {{.Repository}} {{.Tag}}"
IMAGE ID REPOSITORY TAG
b38e3299a65e private-hub.example.com/custom-ee latest
8e38be53b486 private-hub.example.com/ee-minimal-rhel8 latest
然后,登录到私有自动化中心的容器 registry 并推送镜像使其可用于作业模板和工作流:
podman login private-hub.example.com -u admin podman push private-hub.example.com/custom-ee:latest
$ podman login private-hub.example.com -u admin
Password:
Login Succeeded!
$ podman push private-hub.example.com/custom-ee:latest