16.2. 为单节点 OpenShift 集群准备基于镜像的安装


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

  • 使用 Lifecycle Agent 创建 seed 镜像。
  • 验证所有软件组件是否都满足所需的版本。如需更多信息,请参阅"基于镜像的安装和部署软件先决条件"。

16.2.1. 安装生命周期代理

使用 Lifecycle Agent 从 seed 集群生成 seed 镜像。您可以使用 OpenShift CLI (oc)或 Web 控制台安装 Lifecycle Agent。

16.2.1.1. 使用 CLI 安装生命周期代理

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

先决条件

  • 已安装 OpenShift CLI(oc)。
  • 您已以具有 cluster-admin 权限的用户身份登录。

流程

  1. 为 Lifecycle Agent 创建 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. 为 Lifecycle Agent 创建 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. 运行以下命令验证 Lifecycle Agent 是否正在运行:

    $ oc get deploy -n openshift-lifecycle-agent

    输出示例

    NAME                                 READY   UP-TO-DATE   AVAILABLE   AGE
    lifecycle-agent-controller-manager   1/1     1            1           14s

16.2.1.2. 使用 Web 控制台安装 Lifecycle Agent

您可以使用 OpenShift Container Platform Web 控制台安装 Lifecycle Agent。

先决条件

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

流程

  1. 在 OpenShift Container Platform Web 控制台中导航至 Operators OperatorHub
  2. 从可用的 Operator 列表中选择 Lifecycle Agent,然后点 Install
  3. Install Operator 页面中,在 A specific namespace on the cluster 下选择 openshift-lifecycle-agent
  4. Install

验证

  1. 确认安装成功:

    1. Operators Installed Operators
    2. 确保 openshift-lifecycle-agent 项目中列出的 Lifecycle Agent 的 StatusInstallSucceeded

      注意

      在安装过程中,Operator 可能会显示 Failed 状态。如果安装过程结束后有 InstallSucceeded 信息,您可以忽略这个 Failed 信息。

如果 Operator 没有成功安装:

  1. Operators Installed Operators,检查 Operator SubscriptionsInstall Plans 选项卡中的 Status 是否有任何错误。
  2. Workloads Pods,在 openshift-lifecycle-agent 项目中检查 pod 的日志。

16.2.2. 在 ostree stateroot 之间配置共享容器分区

重要

您必须在安装时完成这个步骤。

MachineConfig 应用到 seed 集群,以创建独立分区,并在预安装过程中使用的两个 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 分区指定最小大小,以确保为 precached 镜像有足够的磁盘空间。如果值太小,则安装后部署将失败。

16.2.3. seed 镜像配置

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

下表列出了您必须且不得包含在 seed 镜像中的组件、资源和配置:

表 16.2. seed 镜像配置
集群配置在 seed 镜像中包括

性能配置集

目标集群的 MachineConfig 资源

IP 版本 [1]

第 2 天 Operator 集,包括 Lifecycle Agent 和 OADP Operator

断开连接的 registry 配置 [2]

有效的代理配置 [3]

FIPS 配置

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

本地卷

  • LocalVolume 中使用 StorageClass 用于 LSO
  • LocalVolume 用于 LSO
  • 用于 LVMS 的 LVMCluster CR

  1. 这个版本不支持双栈网络。
  2. 如果在断开连接的环境中安装了 seed 集群,则目标集群还必须在断开连接的环境中安装。
  3. seed 和目标集群的代理配置不必相互匹配。

16.2.3.1. 使用 RAN DU 配置集的 seed 镜像配置

下表列出了在使用 RAN DU 配置集时必须且不得包含在 seed 镜像中的组件、资源和配置:

表 16.3. 使用 RAN DU 配置集的 seed 镜像配置
资源在 seed 镜像中包括

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

所有第 2 天 Operator 订阅

DisableOLMPprof.yaml

TunedPerformancePatch.yaml

PerformanceProfile.yaml

SriovOperatorConfig.yaml

DisableSnoNetworkDiag.yaml

StorageClass.yaml

No,如果在 StorageLV.yaml中使用它

StorageLV.yaml

StorageLVMCluster.yaml

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

  • ClusterLogForwarder.yaml
  • ReduceMonitoringFootprint.yaml
  • SriovFecClusterConfig.yaml
  • PtpOperatorConfigForEvent.yaml
  • DefaultCatsrc.yaml
  • PtpConfig.yaml
  • SriovNetwork.yaml
重要

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

16.2.4. 使用生命周期代理生成 seed 镜像

使用 Lifecycle Agent 从受管集群生成 seed 镜像。Operator 会检查所需的系统配置,在生成 seed 镜像前执行任何必要的系统清理,并启动镜像生成。seed 镜像生成包括以下任务:

  • 停止集群 Operator
  • 准备 seed 镜像配置
  • 生成并推送 seed Generator CR 中指定的镜像存储库
  • 恢复集群 Operator
  • 使 seed 集群证书过期
  • 为 seed 集群生成新证书
  • 在 seed 集群中恢复和更新 SeedGenerator CR

先决条件

  • 在 seed 集群中没有安装 Kubernetes Operator 的 RHACM 和多集群引擎。
  • 您已在 seed 集群中配置了共享目录。
  • 您已在 seed 集群中安装 OADP Operator 的最低版本和 Lifecycle Agent。
  • 确保在 seed 集群中没有配置持久性卷。
  • 如果使用 Local Storage Operator,请确保 seed 集群中不存在 LocalVolume CR。
  • 如果使用 LVM 存储,请确保在 seed 集群中不存在 LVMCluster CR。
  • 如果使用 OADP,请确保 seed 集群中不存在 DataProtectionApplication CR。

流程

  1. 从 hub 中分离受管集群,从 seed 集群中删除任何不能位于 seed 镜像中的任何 RHACM 特定资源:

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

      $ oc delete managedcluster sno-worker-example
      1. 等待受管集群被删除。删除集群后,创建正确的 SeedGenerator CR。Lifecycle Agent 清理 RHACM 工件。
    2. 如果使用 GitOps ZTP,请通过从 kustomization.yaml 中删除 seed 集群的 SiteConfig CR 来分离集群:

      1. 如果您有一个引用多个 SiteConfig CR 的 kustomization.yaml 文件,请从 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. 如果您有一个引用一个 SiteConfig CR 的 kustomization.yaml,请从 kustomization.yaml 中删除您看到的集群 SiteConfig CR,并添加 generators: {} 行:

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

        ArgoCD 管道检测到更改并删除受管集群。

  2. 创建 Secret 对象,以便您可以将 seed 镜像推送到 registry。

    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
      指定用于推送生成的 seed 镜像的 write-access 到 registry 的 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. 运行以下命令来生成 seed 镜像:

    $ oc apply -f seedgenerator.yaml
    重要

    当 Lifecycle Agent 生成 seed 镜像时,集群会重启并丢失 API 功能。应用 SeedGenerator CR 会停止 kubelet 和 CRI-O 操作,然后启动镜像生成。

如果要生成更多 seed 镜像,则必须使用您要从中生成 seed 镜像的版本置备一个新的 seed 集群。

验证

  • 集群恢复并可用后,您可以通过运行以下命令来检查 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
    seed 镜像生成已完成。
Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.