×

要为单节点 OpenShift 集群的基于镜像的安装做准备,您必须完成以下任务:

  • 使用生命周期代理创建种子镜像。

  • 验证所有软件组件是否满足所需版本。有关更多信息,请参见“基于镜像的安装和部署的软件先决条件”。

安装生命周期代理

使用生命周期代理从种子集群生成种子镜像。您可以使用 OpenShift CLI (oc) 或 Web 控制台安装生命周期代理。

使用 CLI 安装生命周期代理

您可以使用 OpenShift CLI (oc) 安装生命周期代理。

先决条件
  • 您已安装 OpenShift CLI (oc)。

  • 您已以具有 cluster-admin 权限的用户身份登录。

步骤
  1. 为生命周期代理创建一个 `Namespace` 对象 YAML 文件

    apiVersion: v1
    kind: Namespace
    metadata:
      name: openshift-lifecycle-agent
      annotations:
        workload.openshift.io/allowed: management
    1. 通过运行以下命令创建 `Namespace` CR

      $ oc create -f <namespace_filename>.yaml
  2. 为生命周期代理创建一个 `OperatorGroup` 对象 YAML 文件

    apiVersion: operators.coreos.com/v1
    kind: OperatorGroup
    metadata:
      name: openshift-lifecycle-agent
      namespace: openshift-lifecycle-agent
    spec:
      targetNamespaces:
      - openshift-lifecycle-agent
    1. 通过运行以下命令创建OperatorGroup CR

      $ oc create -f <operatorgroup_filename>.yaml
  3. 为生命周期代理创建Subscription CR

    apiVersion: operators.coreos.com/v1alpha1
    kind: Subscription
    metadata:
      name: openshift-lifecycle-agent-subscription
      namespace: openshift-lifecycle-agent
    spec:
      channel: "stable"
      name: lifecycle-agent
      source: redhat-operators
      sourceNamespace: openshift-marketplace
    1. 通过运行以下命令创建Subscription CR

      $ oc create -f <subscription_filename>.yaml
验证
  1. 要验证安装是否成功,请运行以下命令检查 CSV 资源

    $ oc get csv -n openshift-lifecycle-agent
    示例输出
    NAME                              DISPLAY                     VERSION               REPLACES                           PHASE
    lifecycle-agent.v4.17.0           Openshift Lifecycle Agent   4.17.0                Succeeded
  2. 运行以下命令验证生命周期代理是否已启动并运行

    $ oc get deploy -n openshift-lifecycle-agent
    示例输出
    NAME                                 READY   UP-TO-DATE   AVAILABLE   AGE
    lifecycle-agent-controller-manager   1/1     1            1           14s

使用 Web 控制台安装生命周期代理

您可以使用 OpenShift Container Platform Web 控制台安装生命周期代理。

先决条件
  • 您已以具有 cluster-admin 权限的用户身份登录。

步骤
  1. 在 OpenShift Container Platform Web 控制台中,导航到**Operators** → **OperatorHub**。

  2. 从可用 Operators 列表中搜索**生命周期代理**,然后单击**Install**。

  3. 在**Install Operator**页面上的**A specific namespace on the cluster**下,选择**openshift-lifecycle-agent**。

  4. 单击**Install**。

验证
  1. 确认安装成功

    1. 单击**Operators** → **Installed Operators**。

    2. 确保生命周期代理列在**openshift-lifecycle-agent**项目中,且**Status**为**InstallSucceeded**。

      在安装过程中,Operator 可能会显示**Failed**状态。如果安装稍后以**InstallSucceeded**消息成功,您可以忽略**Failed**消息。

如果 Operator 未成功安装

  1. 单击**Operators** → **Installed Operators**,并检查**Operator Subscriptions**和**Install Plans**选项卡中**Status**下的任何故障或错误。

  2. 单击**Workloads** → **Pods**,并检查**openshift-lifecycle-agent**项目中 Pod 的日志。

配置 ostree stateroots 之间的共享容器分区

您必须在安装时完成此过程。

MachineConfig应用于种子集群以创建单独的分区,并在预安装过程中将使用的两个ostree stateroots 之间共享/var/lib/containers分区。

步骤
  • 应用MachineConfig以创建单独的分区

    apiVersion: machineconfiguration.openshift.io/v1
    kind: MachineConfig
    metadata:
      labels:
        machineconfiguration.openshift.io/role: master
      name: 98-var-lib-containers-partitioned
    spec:
      config:
        ignition:
          version: 3.2.0
        storage:
          disks:
            - device: /dev/disk/by-path/pci-<root_disk> (1)
              partitions:
                - label: var-lib-containers
                  startMiB: <start_of_partition> (2)
                  sizeMiB: <partition_size> (3)
          filesystems:
            - device: /dev/disk/by-partlabel/var-lib-containers
              format: xfs
              mountOptions:
                - defaults
                - prjquota
              path: /var/lib/containers
              wipeFilesystem: true
        systemd:
          units:
            - contents: |-
                # Generated by Butane
                [Unit]
                Before=local-fs.target
                Requires=systemd-fsck@dev-disk-by\x2dpartlabel-var\x2dlib\x2dcontainers.service
                After=systemd-fsck@dev-disk-by\x2dpartlabel-var\x2dlib\x2dcontainers.service
    
                [Mount]
                Where=/var/lib/containers
                What=/dev/disk/by-partlabel/var-lib-containers
                Type=xfs
                Options=defaults,prjquota
    
                [Install]
                RequiredBy=local-fs.target
              enabled: true
              name: var-lib-containers.mount
    1 指定根磁盘。
    2 以 MiB 为单位指定分区的起始位置。如果值太小,安装将失败。
    3 为分区指定至少 500 GB 的最小大小,以确保预缓存映像有足够的磁盘空间。如果值太小,安装后的部署将失败。

种子映像配置

您可以从具有与您的裸机主机相同的硬件以及类似的目标集群配置的单节点 OpenShift 集群创建种子映像。但是,从种子集群生成的种子映像不能包含任何特定于集群的配置。

下表列出了您必须和必须不包含在种子映像中的组件、资源和配置

表 1. 种子映像配置
集群配置 包含在种子映像中

性能配置文件

目标集群的MachineConfig资源

IP 版本 [1]

一组 Day 2 Operators,包括生命周期代理和 OADP Operator

断开连接的注册表配置 [2]

有效的代理配置 [3]

FIPS 配置

主磁盘上用于容器存储的专用分区,其大小与目标集群匹配

本地卷

  • LSO 中LocalVolume使用的StorageClass

  • LSO 的LocalVolume

  • LVMS 的LVMCluster CR

  1. 此版本不支持双栈网络。

  2. 如果种子集群安装在断开连接的环境中,则目标集群也必须安装在断开连接的环境中。

  3. 种子集群和目标集群上的代理配置不必匹配。

使用 RAN DU 配置文件进行种子映像配置

下表列出了使用 RAN DU 配置文件时,您必须和必须不包含在种子映像中的组件、资源和配置

表 2. 使用 RAN DU 配置文件的种子映像配置
资源 包含在种子映像中

作为 Day 0 安装一部分应用的所有额外清单

所有 Day 2 Operator 订阅

DisableOLMPprof.yaml

TunedPerformancePatch.yaml

PerformanceProfile.yaml

SriovOperatorConfig.yaml

DisableSnoNetworkDiag.yaml

StorageClass.yaml

如果在StorageLV.yaml中使用,则为否

StorageLV.yaml

StorageLVMCluster.yaml

以下资源和配置列表可以作为额外清单应用,也可以使用 RHACM 策略应用

  • ClusterLogForwarder.yaml

  • ReduceMonitoringFootprint.yaml

  • SriovFecClusterConfig.yaml

  • PtpOperatorConfigForEvent.yaml

  • DefaultCatsrc.yaml

  • PtpConfig.yaml

  • SriovNetwork.yaml

如果您使用的是 GitOps ZTP,请使用 RHACM 策略启用这些资源,以确保可以在整个集群生命周期中应用配置更改。

使用生命周期代理生成种子映像

使用生命周期代理从托管集群生成种子映像。Operator 检查所需的系统配置,在生成种子映像之前执行任何必要的系统清理,并启动映像生成。种子映像生成包括以下任务

  • 停止集群 Operators

  • 准备种子映像配置

  • 生成并将种子映像推送到SeedGenerator CR 中指定的映像存储库

  • 恢复集群 Operators

  • 使种子集群证书过期

  • 为种子集群生成新证书

  • 恢复和更新种子集群上的SeedGenerator CR

先决条件
  • 种子集群上未安装 RHACM 和 Kubernetes Operator 的多集群引擎。

  • 您已在种子集群上配置了共享容器目录。

  • 您已在种子集群上安装了 OADP Operator 和生命周期代理的最低版本。

  • 确保在种子集群上未配置持久卷。

  • 如果使用本地存储 Operator,请确保种子集群上不存在LocalVolume CR。

  • 如果使用 LVM 存储,请确保种子集群上不存在LVMCluster CR。

  • 如果使用 OADP,请确保种子集群上不存在DataProtectionApplication CR。

步骤
  1. 将托管集群与中心分离,以删除种子集群中任何 RHACM 特定的资源,这些资源不应包含在种子镜像中。

    1. 运行以下命令手动分离种子集群:

      $ oc delete managedcluster sno-worker-example
      1. 等待托管集群被移除。集群移除后,创建正确的SeedGenerator CR。生命周期代理会清理 RHACM 工件。

    2. 如果您使用的是 GitOps ZTP,请从kustomization.yaml中移除种子集群的SiteConfig CR 来分离您的集群。

      1. 如果您拥有一个kustomization.yaml文件,其中引用了多个SiteConfig CR,请从kustomization.yaml中移除种子集群的SiteConfig CR。

        apiVersion: kustomize.config.k8s.io/v1beta1
        kind: Kustomization
        
        generators:
        #- example-seed-sno1.yaml
        - example-target-sno2.yaml
        - example-target-sno3.yaml
      2. 如果您拥有一个kustomization.yaml文件,其中引用了一个SiteConfig CR,请从kustomization.yaml中移除种子集群的SiteConfig CR,并添加generators: {}这一行。

        apiVersion: kustomize.config.k8s.io/v1beta1
        kind: Kustomization
        
        generators: {}
      3. 在您的 Git 仓库中提交kustomization.yaml的更改,并将更改推送到您的仓库。

        ArgoCD 管道会检测到这些更改并移除托管集群。

  2. 创建Secret对象,以便您可以将种子镜像推送到您的注册表。

    1. 运行以下命令创建身份验证文件:

      $ MY_USER=myuserid
      $ AUTHFILE=/tmp/my-auth.json
      $ podman login --authfile ${AUTHFILE} -u ${MY_USER} quay.io/${MY_USER}
      $ base64 -w 0 ${AUTHFILE} ; echo
    2. 将输出复制到openshift-lifecycle-agent命名空间中名为seedgenSecret YAML 文件中的seedAuth字段。

      apiVersion: v1
      kind: Secret
      metadata:
        name: seedgen (1)
        namespace: openshift-lifecycle-agent
      type: Opaque
      data:
        seedAuth: <encoded_AUTHFILE> (2)
      1 Secret资源必须具有name: seedgennamespace: openshift-lifecycle-agent字段。
      2 指定一个 base64 编码的 authfile,用于向注册表写入访问权限,以便推送生成的种子镜像。
    3. 运行以下命令应用Secret

      $ oc apply -f secretseedgenerator.yaml
  3. 创建SeedGenerator CR。

    apiVersion: lca.openshift.io/v1
    kind: SeedGenerator
    metadata:
      name: seedimage (1)
    spec:
      seedImage: <seed_container_image> (2)
    1 SeedGenerator CR 的名称必须为seedimage
    2 指定容器镜像 URL,例如quay.io/example/seed-container-image:<tag>。建议使用<seed_cluster_name>:<ocp_version>格式。
  4. 运行以下命令生成种子镜像:

    $ oc apply -f seedgenerator.yaml

    在生命周期代理生成种子镜像期间,集群会重启并失去 API 功能。应用SeedGenerator CR 会停止kubelet和 CRI-O 操作,然后开始镜像生成。

如果您想生成更多种子镜像,则必须使用您想要从中生成种子镜像的版本来配置新的种子集群。

验证
  • 集群恢复并可用后,您可以运行以下命令检查SeedGenerator CR 的状态:

    $ oc get seedgenerator -o yaml
    示例输出
    status:
      conditions:
      - lastTransitionTime: "2024-02-13T21:24:26Z"
        message: Seed Generation completed
        observedGeneration: 1
        reason: Completed
        status: "False"
        type: SeedGenInProgress
      - lastTransitionTime: "2024-02-13T21:24:26Z"
        message: Seed Generation completed
        observedGeneration: 1
        reason: Completed
        status: "True"
        type: SeedGenCompleted (1)
      observedGeneration: 1
    1 种子镜像生成已完成。