映像构建和管理

1. 映像构建概述

SUSE Manager 允许系统管理员构建容器和操作系统映像,并将结果推送到映像存储区。工作流程如下:

过程:构建和推送映像
  1. 定义映像存储区

  2. 定义一个映像配置文件并将其与源(git 储存库或目录)相关联

  3. 构建映像

  4. 将映像推送到映像存储区

SUSE Manager 支持两种不同的构建类型:Dockerfile 和 Kiwi 映像系统。

Kiwi 构建类型用于构建系统映像、虚拟映像和其他映像。Kiwi 构建类型的映像存储区预定义为文件系统目录,其路径为服务器上的 /srv/www/os-images。SUSE Manager 通过 HTTPS 从 //<服务器 FQDN>/os-images/ 提供映像存储区。映像存储区位置是唯一的,不可自定义。

映像存储在 /srv/www/os-image/ORGANIZATION-ID 中。

2. 容器映像

image building

2.1. 要求

容器功能适用于运行 SUSE Linux Enterprise Server 12 或更高版本的 Salt 客户端。在开始之前,请确保您的环境满足以下要求:

  • 一个包含 Dockerfile 和配置脚本的已发布 git 储存库。该储存库可以是公用或专用的,应托管在 GitHub、GitLab 或 BitBucket 上。

  • 一个正确配置的映像存储区,例如 Docker 注册表。

    有关容器的详细信息,请参见 https://documentation.suse.com/container/all/html/Container-guide/

2.2. 创建构建主机

要使用 SUSE Manager 构建映像,您需要创建并配置一个构建主机。容器构建主机是运行 SUSE Linux Enterprise 12 或更高版本的 Salt 客户端。本节将指导您完成构建主机的初始配置。

构建主机上的操作系统必须与目标映像上的操作系统匹配。

例如,在运行 SUSE Linux Enterprise Server 15(SP2 或更高版本)操作系统版本的构建主机上构建基于 SUSE Linux Enterprise Server 15 的映像。在运行 SUSE Linux Enterprise Server 12 SP5 或 SUSE Linux Enterprise Server 12 SP4 操作系统版本的构建主机上构建基于 SUSE Linux Enterprise Server 12 的映像。

不支持跨体系结构构建。

在 SUSE Manager Web UI 中,执行以下步骤以配置构建主机:

过程:构建主机
  1. 系统  概览页面中选择要指定为构建主机的 Salt 客户端。

  2. 在所选客户端的系统细节页面中指派容器模块。转到软件  软件通道并启用容器模块(例如 SLE-Module-Containers15-PoolSLE-Module-Containers15-Updates)。单击 更改订阅 以确认。

  3. 系统细节  属性页面中,从附加系统类型列表中启用容器构建主机,然后单击 更新属性 以确认。

  4. 通过应用 Highstate 安装所有必需的软件包。在系统细节页面中选择状态  Highstate,然后单击应用 Highstate。或者,从 SUSE Manager Server 命令行应用 Highstate:

    salt '$your_client' state.highstate

2.3. 为容器创建激活密钥

使用 SUSE Manager 构建的容器使用在构建映像时作为储存库关联到激活密钥的通道。本节将指导您为此目的创建一个临时激活密钥。

要构建容器,需要一个与通道关联的激活密钥,但该通道不能是 SUSE Manager Default

systems create activation key
过程:创建激活密钥
  1. 选择系统  激活密钥

  2. 单击 创建密钥

  3. 输入说明密钥名称。使用下拉菜单选择要与此密钥关联的基础通道

  4. 单击 创建激活密钥 确认。

有关详细信息,请参见 激活密钥

2.4. 创建映像存储区

构建的所有映像将推送到映像存储区。本节包含有关创建映像存储区的信息。

images image stores
过程:创建映像存储区
  1. 选择映像  存储区

  2. 单击创建以创建新存储。

    images image stores create
  3. 标签字段中定义映像存储区的名称。

  4. 通过填写 URI 字段提供映像注册表的路径,该路径用作容器注册表主机(无论是内部还是外部)的完全限定域名 (FQDN)。

    registry.example.com
  5. 注册表 URI 还可用于指定已被使用的注册表中的映像存储区。

    registry.example.com:5000/myregistry/myproject
  6. 单击 创建 以添加新的映像存储区。

2.5. 创建映像配置文件

所有容器映像都是使用包含构建说明的映像配置文件构建的。本节包含有关使用 SUSE Manager Web UI 创建映像配置文件的信息。

images image profiles
过程:创建映像配置文件
  1. 要创建映像配置文件,请选择映像  配置文件,然后单击 创建

    images image create profile
  2. 通过填写标签字段提供映像配置文件的名称。

    如果您的容器映像标记采用类似于 myproject/myimage 的格式,请确保您的映像存储区注册表 URI 包含 /myproject 后缀。

  3. 使用 Dockerfile 作为映像类型

  4. 使用下拉菜单从目标映像存储区字段中选择您的注册表。

  5. 路径字段中,键入 GitHub、GitLab 或 BitBucket 储存库 URL。该 URL 应该是 http、https 或令牌身份验证 URL。使用以下格式之一:

    GitHub 路径选项
    • GitHub 单用户项目储存库

      https://github.com/USER/project.git#branchname:folder
    • GitHub 组织项目储存库

      https://github.com/ORG/project.git#branchname:folder
    • GitHub 令牌身份验证

      如果您的 git 储存库是专用的,请修改配置文件的 URL 以包含身份验证。使用以下 URL 格式通过 GitHub 令牌进行身份验证:

      https://USER:<身份验证令牌>@github.com/USER/project.git#master:/container/
    • GitLab 单用户项目储存库

      https://gitlab.example.com/USER/project.git#master:/container/
    • GitLab 组项目储存库

      https://gitlab.example.com/GROUP/project.git#master:/container/
    • GitLab 令牌身份验证

      如果您的 git 储存库是专用的且不可公开访问,则需要修改配置文件的 git URL 以包含身份验证。使用以下 URL 格式通过 GitLab 令牌进行身份验证:

      https://gitlab-ci-token:<身份验证令牌>@gitlab.example.com/USER/project.git#master:/container/

      如果您未指定 git 分支,则默认会使用 master 分支。如果未指定 folder,则映像源(Dockerfile 源)预期位于 GitHub 或 GitLab checkout 分支的根目录中。

  6. 选择一个激活密钥。激活密钥可确保将使用配置文件的映像指派到正确的通道和软件包。

    将激活密钥与映像配置文件关联后,可以确保使用该配置文件的任何映像都会使用正确的软件通道以及该通道中的任何软件包。

  7. 单击 创建 按钮。

示例 Dockerfile 源

https://github.com/SUSE/manager-build-profiles 上发布了可重复使用的映像配置文件

ARG 参数确保构建的映像与 SUSE Manager 提供的所需储存库相关联。ARG 参数还可用于构建不同于构建主机本身所用 SUSE Linux Enterprise Server 版本的 SUSE Linux Enterprise Server 映像版本。

例如:ARG repo 参数以及指向储存库文件的 echo 命令创建正确的路径,然后将其注入到所需通道版本的储存库文件中。

储存库由您指派到映像配置文件的激活密钥决定。

FROM registry.example.com/sles12sp2
MAINTAINER Tux Administrator "tux@example.com"

### 开始:这些行需要与 {productname} 配合使用

ARG repo
ARG cert

# 添加正确的证书
RUN echo "$cert" > /etc/pki/trust/anchors/RHN-ORG-TRUSTED-SSL-CERT.pem

# 更新证书信任存储
RUN update-ca-certificates

# 将储存库路径添加到映像
RUN echo "$repo" > /etc/zypp/repos.d/susemanager:dockerbuild.repo

### 结束:这些行需要与 {productname} 配合使用

# 添加打包脚本
ADD add_packages.sh /root/add_packages.sh

# 运行打包脚本
RUN /root/add_packages.sh

# 构建后从映像中去除储存库路径
RUN rm -f /etc/zypp/repos.d/susemanager:dockerbuild.repo

2.5.1. 使用自定义信息键-值对作为 Docker buildargs

您可以指派自定义信息键-值对,以将信息挂接到映像配置文件。此外,这些键-值对将作为 buildargs 传递给 Docker 构建命令。

有关可用自定义信息键和创建其他信息键的详细信息,请参见 自定义系统信息

2.6. 构建映像

可通过两种方式构建映像。可以在左侧导航栏中选择映像  构建,或单击映像  配置文件列表中的构建图标。

images image build
过程:构建映像
  1. 选择映像  构建

  2. 如果您不想使用默认的最新版本(仅与容器相关),而要使用其他版本,请添加不同的标记名称。

  3. 选择构建配置文件构建主机

    请注意构建字段右侧的配置文件摘要。在您选择构建配置文件后,有关所选配置文件的详细信息将显示在此区域中。

  4. 要安排构建,请单击 构建 按钮。

2.7. 导入映像

您可以导入和检查任意映像。在左侧导航栏中选择映像  映像列表。填写导入对话框的文本框。处理完成后,导入的映像将列在映像列表页面上。

过程:导入映像
  1. 映像  映像列表中,单击 导入 打开导入映像对话框。

  2. 导入映像对话框中填写以下字段:

    映像存储区

    要从中拉取映像进行检查的注册表。

    映像名称

    注册表中映像的名称。

    映像版本

    注册表中映像的版本。

    构建主机

    用于拉取和检查映像的构建主机。

    激活密钥

    激活密钥,它提供用于检查映像的软件通道的路径。

  3. 单击 导入 以确认。

随即会在数据库中创建映像项,并在 SUSE Manager 上安排检查映像操作。

处理完成后,您可以在映像列表中找到已导入的映像。它在构建列中显示了一个不同的图标,指示该映像已导入。也可以在映像的概览选项卡上看到已导入映像的状态图标。

2.8. 查错

下面是处理映像时存在的一些已知问题:

  • 用于访问注册表或 git 储存库的 HTTPS 证书应通过自定义状态文件部署到客户端。

  • 目前不支持使用 Docker 进行 SSH git 访问。

3. 操作系统映像

操作系统映像由 Kiwi 映像系统构建。输出映像可自定义,可以是 PXE、QCOW2、LiveCD 或其他类型的映像。

有关 Kiwi 构建系统的详细信息,请参见 Kiwi 文档

3.1. 要求

Kiwi 映像构建功能适用于运行 SUSE Linux Enterprise Server 12 和 SUSE Linux Enterprise Server 11 的 Salt 客户端。

必须可在以下位置之一访问 Kiwi 映像配置文件和配置脚本:

  • Git 储存库

  • HTTP 托管 tarball

  • 本地构建主机目录

有关 git 提供的完整 Kiwi 储存库的示例,请参见 https://github.com/SUSE/manager-build-profiles/tree/master/OSImage

对于运行使用 Kiwi 构建的操作系统映像的主机,至少需要提供 1 GB RAM。具体所需磁盘空间取决于映像的实际大小。有关详细信息,请参见底层系统的文档。

构建主机必须是 Salt 客户端。不要将构建主机安装为传统客户端。

3.2. 创建构建主机

要使用 SUSE Manager 构建各种映像,请创建并配置一个构建主机。操作系统映像构建主机是在 SUSE Linux Enterprise Server 15(SP2 或更高版本)或SUSE Linux Enterprise Server 12(SP4 或更高版本)上运行的 Salt 客户端。

此过程将指导您完成构建主机的初始配置。

构建主机上的操作系统必须与目标映像上的操作系统匹配。

例如,在运行 SUSE Linux Enterprise Server 15(SP2 或更高版本)操作系统版本的构建主机上构建基于 SUSE Linux Enterprise Server 15 的映像。在运行 SUSE Linux Enterprise Server 12 SP5 或 SUSE Linux Enterprise Server 12 SP4 操作系统版本的构建主机上构建基于 SUSE Linux Enterprise Server 12 的映像。

无法实现跨体系结构的构建。例如,必须在运行 SUSE Linux Enterprise Server 15 SP3 的 Raspberry PI(aarch64 体系结构)构建主机上构建 Raspberry PI SUSE Linux Enterprise Server 15 SP3 映像。

过程:在 SUSE Manager Web UI 中配置构建主机
  1. 系统  概览页面中选择要指定为构建主机的客户端。

  2. 导航到系统细节  属性选项卡,为附加系统类型启用操作系统映像构建主机。单击 更新属性 确认。

    os image build host
  3. 导航到系统细节  软件  软件通道,根据构建主机版本启用所需的软件通道。

    • SUSE Linux Enterprise Server 12 构建主机需要 SUSE Manager 客户端工具(SLE-Manager-Tools12-PoolSLE-Manager-Tools12-Updates)。

    • SUSE Linux Enterprise Server 15 构建主机需要 SUSE Linux Enterprise Server 模块 SLE-Module-DevTools15-SP4-PoolSLE-Module-DevTools15-SP4-Updates。配置日程安排,然后单击 确认

  4. 通过应用 Highstate 安装 Kiwi 和所有必需的软件包。在系统细节页面中选择状态  Highstate,然后单击 应用 Highstate。或者,从 SUSE Manager Server 命令行应用 Highstate:

    salt '$your_client' state.highstate

3.2.1. SUSE Manager Web 服务器公共证书 RPM

构建主机置备将 SUSE Manager 证书 RPM 复制到构建主机。此证书用于访问 SUSE Manager 提供的储存库。

该证书由 mgr-package-rpm-certificate-osimage 打包脚本打包在 RPM 中。在全新安装 SUSE Manager 期间会自动调用该打包脚本。

当您升级 spacewalk-certs-tools 软件包时,升级方案会使用默认值调用该打包脚本。但是,如果证书路径已更改或不可用,请在升级过程完成后使用 --ca-cert-full-path <证书路径> 手动调用该打包脚本。

3.2.2. 打包脚本调用示例

/usr/sbin/mgr-package-rpm-certificate-osimage --ca-cert-full-path /root/ssl-build/RHN-ORG-TRUSTED-SSL-CERT

包含证书的 RPM 软件包存储在 Salt 可访问的目录中,例如:

/usr/share/susemanager/salt/images/rhn-org-trusted-ssl-cert-osimage-1.0-1.noarch.rpm

包含证书的 RPM 软件包在本地构建主机储存库中提供:

/var/lib/Kiwi/repo

在构建源中指定包含 SUSE Manager SSL 证书的 RPM 软件包,并确保您的 Kiwi 配置包含 rhn-org-trusted-ssl-cert-osimage 作为 bootstrap 部分中必需的软件包。

Listing 1. config.xml
...
  <packages type="bootstrap">
    ...
    <package name="rhn-org-trusted-ssl-cert-osimage" bootinclude="true"/>
  </packages>
...

3.3. 为操作系统映像创建激活密钥

创建与通道(在构建映像时操作系统映像可将其用作储存库)关联的激活密钥。

必须提供激活密钥才能构建操作系统映像。

要构建操作系统映像,需要一个与通道关联的激活密钥,但该通道不能是 SUSE Manager Default

systems create activation key
过程:创建激活密钥
  1. 在 Web UI 中,选择系统  激活密钥

  2. 单击创建密钥

  3. 输入说明密钥名称,并使用下拉框选择要与该密钥关联的基础通道

  4. 单击 创建激活密钥 确认。

有关详细信息,请参见 激活密钥

3.4. 创建映像存储区

操作系统映像可能需要大量存储空间。因此,我们建议将操作系统映像存储区放在其自身所在的分区上或 Btrfs 子卷上,并与根分区分开。默认情况下,映像存储区位于 /srv/www/os-images

目前不支持 Kiwi 构建类型的用于构建系统映像、虚拟映像和其他映像的映像存储区。

映像始终存储在 /srv/www/os-images/<组织 ID> 中,可通过 HTTP/HTTPS https://<SUSE Manager 主机>/os-images/<组织 ID> 访问。

3.5. 创建映像配置文件

使用 Web UI 管理映像配置文件。

images image profiles
过程:创建映像配置文件
  1. 要创建映像配置文件,请在映像  配置文件中选择,然后单击 创建

    images image create profile kiwi
  2. 标签字段中,提供映像配置文件的名称。

  3. 使用 Kiwi 作为映像类型

  4. 系统会自动选择映像存储区。

  5. 输入指向包含 Kiwi 配置文件的目录的配置 URL

    1. git URI

    2. HTTPS tarball

    3. 构建主机本地目录的路径

  6. 根据需要输入 Kiwi 选项。如果 Kiwi 配置文件指定了多个配置文件,请使用 --profile <名称> 选择活动配置文件。 有关其他选项,请参见 Kiwi 文档。

  7. 选择一个激活密钥。激活密钥可确保将使用配置文件的映像指派到正确的通道和软件包。

    将激活密钥与映像配置文件相关联,以确保映像配置文件使用正确的软件通道和任何软件包。

  8. 单击 创建 按钮确认。

    源格式选项
    • 指向储存库的 git/HTTP(S) URL

      指向要构建的映像的源所在 git 储存库的 URL。根据储存库的布局,该 URL 可能是:

      https://github.com/SUSE/manager-build-profiles

      可以在 URL 中的 # 字符后面指定一个分支。此示例使用了 master 分支:

      https://github.com/SUSE/manager-build-profiles#master

      可以在 : 字符后面指定包含映像源的目录。此示例使用了 OSImage/POS_Image-JeOS6

      https://github.com/SUSE/manager-build-profiles#master:OSImage/POS_Image-JeOS6
    • 指向 tarball 的 HTTP(S) URL

      指向托管在 Web 服务器上的 tar 存档(压缩或未压缩)的 URL。

      https://myimagesourceserver.example.org/MyKiwiImage.tar.gz
    • 构建主机上的目录的路径

      输入包含 Kiwi 构建系统源的目录的路径。此目录必须在选定的构建主机上存在。

      /var/lib/Kiwi/MyKiwiImage

3.5.1. Kiwi 源的示例

Kiwi 源至少包含 config.xml。通常其中还有 config.shimages.sh。源还可以包含要安装在 root 子目录下的最终映像中的文件。

有关 Kiwi 构建系统的信息,请参见 Kiwi 文档

SUSE 在 SUSE/manager-build-profiles 公共 GitHub 储存库中提供了功能齐备的映像源的示例。

Listing 2. JeOS config.xml 示例
<?xml version="1.0" encoding="utf-8"?>

<image schemaversion="6.1" name="POS_Image_JeOS6">
    <description type="system">
        <author>Admin User</author>
        <contact>noemail@example.com</contact>
        <specification>SUSE Linux Enterprise 12 SP3 JeOS</specification>
    </description>
    <preferences>
        <version>6.0.0</version>
        <packagemanager>zypper</packagemanager>
        <bootsplash-theme>SLE</bootsplash-theme>
        <bootloader-theme>SLE</bootloader-theme>

        <locale>en_US</locale>
        <keytable>us.map.gz</keytable>
        <timezone>Europe/Berlin</timezone>
        <hwclock>utc</hwclock>

        <rpm-excludedocs>true</rpm-excludedocs>
        <type boot="saltboot/suse-SLES12" bootloader="grub2" checkprebuilt="true" compressed="false" filesystem="ext3" fsmountoptions="acl" fsnocheck="true" image="pxe" kernelcmdline="quiet"></type>
    </preferences>
    <!--    CUSTOM REPOSITORY
    <repository type="rpm-dir">
      <source path="this://repo"/>
    </repository>
    -->
    <packages type="image">
        <package name="patterns-sles-Minimal"/>
        <package name="aaa_base-extras"/> <!-- wouldn't be SUSE without that ;-) -->
        <package name="kernel-default"/>
        <package name="salt-minion"/>
        ...
    </packages>
    <packages type="bootstrap">
        ...
        <package name="sles-release"/>
        <!-- this certificate package is required to access {productname} repositories
             and is provided by {productname} automatically -->
        <package name="rhn-org-trusted-ssl-cert-osimage" bootinclude="true"/>

    </packages>
    <packages type="delete">
        <package name="mtools"/>
        <package name="initviocons"/>
        ...
    </packages>
</image>

3.6. 构建映像

可以使用 Web UI 以两种方式构建映像。选择映像  构建,或单击映像  配置文件列表中的构建图标。

images image build
过程:构建映像
  1. 选择映像  构建

  2. 如果您不想使用默认的最新版本(仅适用于容器),而要使用其他版本,请添加不同的标记名称。

  3. 选择映像配置文件构建主机

    构建字段右侧会显示配置文件摘要。在您选择构建配置文件后,有关所选配置文件的详细信息将显示在此处。

  4. 要安排构建,请单击 构建 按钮。

在映像构建过程中,构建服务器无法运行任何形式的自动挂载程序。如果适用,请确保不要以 root 身份运行 Gnome 会话。如果某个自动挂载程序正在运行,则映像构建可以成功完成,但映像的校验和将会不同,从而导致失败。

成功构建映像后,检查阶段随即开始。在检查阶段,SUSE Manager 会收集有关映像的信息:

  • 映像中安装的软件包列表

  • 映像的校验和

  • 映像类型和其他映像细节

如果构建的映像类型是 PXE,则还会生成一个 Salt pillar。映像 pillar 存储在数据库中,Salt 子系统可以访问有关生成的映像的细节。细节包括映像文件所在位置和提供映像文件的位置、映像校验和、网络引导所需的信息,等等。

生成的 pillar 可供所有连接的客户端使用。

3.7. 查错

构建映像需要完成几个相关的步骤。如果构建失败,调查 Salt 状态结果和构建日志可能有助于确定失败原因。构建失败时,可以执行以下检查:

  • 构建主机是否可以访问构建源

  • 构建主机和 SUSE Manager 服务器上是否为映像提供了足够的磁盘空间

  • 激活密钥是否关联了正确的通道

  • 使用的构建源是否有效

  • 包含 SUSE Manager 公共证书的 RPM 软件包是否是最新的,并已在路径 /usr/share/susemanager/salt/images/rhn-org-trusted-ssl-cert-osimage-1.0-1.noarch.rpm 下提供。有关如何刷新公共证书 RPM 的详细信息,请参见 创建构建主机

3.8. 限制

本节包含使用映像时存在的一些已知问题。

  • 用于访问 HTTP 源或 git 储存库的 HTTPS 证书应通过自定义状态文件部署到客户端,或手动进行配置。

  • 不支持导入基于 Kiwi 的映像。

4. 构建的映像列表

要列出可用的已构建映像,请选择映像  映像列表。此时会显示所有映像的列表。

images list images

显示的映像相关数据包括映像的名称版本修订版和构建状态。还可以查看映像更新状态,以及可能适用于该映像的补丁和软件包更新列表。

对于操作系统映像,名称版本字段值源自 Kiwi 源,在成功完成构建后会更新。在构建期间或构建失败后,这些字段会根据配置文件名称显示一个临时名称。

修订版会在每次成功构建后自动递增。对于操作系统映像,多个修订版可以在存储中共存。

对于容器映像,存储中只会保存最新版本。有关旧修订版(软件包、补丁等)的信息将会保留,可以使用显示过时项复选框列出这些修订版。

单击映像上的 细节 按钮会显示一个详细视图。详细视图包含相关补丁的确切列表、映像中安装的所有软件包的列表和构建日志。

单击 删除 按钮会从列表中删除映像。同时还会删除操作系统映像存储区中关联的 pillar 和文件,以及过时的修订版。

仅当构建后的检查状态为成功时,才会显示补丁和软件包列表。