17.5. 使用 ZTP 手动安装单节点 OpenShift 集群

您可以使用 Red Hat Advanced Cluster Management (RHACM) 和支持的服务部署受管单节点 OpenShift 集群。

注意

如果要创建多个受管集群,请参阅使用 ZTP 部署边缘站点中描述的 SiteConfig 方法。

重要

目标裸机主机必须满足 vDU 应用程序工作负载的推荐集群配置中列出的网络、固件和硬件要求。

17.5.1. 手动生成 ZTP 安装和配置 CR

使用 ztp-site-generate 容器的 generator 入口点,根据 SiteConfigPolicyGenTemplate CR 为集群生成站点安装和配置自定义资源 (CR)。

先决条件

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

流程

  1. 运行以下命令来创建输出文件夹:

    $ mkdir -p ./out
  2. ztp-site-generate 容器镜像导出 argocd 目录:

    $ podman run --log-driver=none --rm registry.redhat.io/openshift4/ztp-site-generate-rhel8:v4.12 extract /home/ztp --tar | tar x -C ./out

    ./out 目录包含 out/argocd/example/ 文件夹中的参考 PolicyGenTemplateSiteConfig CR。

    输出示例

    out
     └── argocd
          └── example
               ├── policygentemplates
               │     ├── common-ranGen.yaml
               │     ├── example-sno-site.yaml
               │     ├── group-du-sno-ranGen.yaml
               │     ├── group-du-sno-validator-ranGen.yaml
               │     ├── kustomization.yaml
               │     └── ns.yaml
               └── siteconfig
                      ├── example-sno.yaml
                      ├── KlusterletAddonConfigOverride.yaml
                      └── kustomization.yaml

  3. 为站点安装 CR 创建输出文件夹:

    $ mkdir -p ./site-install
  4. 为您要安装的集群类型修改示例 SiteConfig CR。将 example-sno.yaml 复制到 site-1-sno.yaml,并修改 CR 以匹配您要安装的站点和裸机主机的详情,例如:

    单节点 OpenShift 集群 SiteConfig CR 示例

    apiVersion: ran.openshift.io/v1
    kind: SiteConfig
    metadata:
      name: "<site_name>"
      namespace: "<site_name>"
    spec:
      baseDomain: "example.com"
      pullSecretRef:
        name: "assisted-deployment-pull-secret" 1
      clusterImageSetNameRef: "openshift-4.12" 2
      sshPublicKey: "ssh-rsa AAAA..." 3
      clusters:
      - clusterName: "<site_name>"
        networkType: "OVNKubernetes"
        clusterLabels: 4
          common: true
          group-du-sno: ""
          sites : "<site_name>"
        clusterNetwork:
          - cidr: 1001:1::/48
            hostPrefix: 64
        machineNetwork:
          - cidr: 1111:2222:3333:4444::/64
        serviceNetwork:
          - 1001:2::/112
        additionalNTPSources:
          - 1111:2222:3333:4444::2
        #crTemplates:
        #  KlusterletAddonConfig: "KlusterletAddonConfigOverride.yaml" 5
        nodes:
          - hostName: "example-node.example.com" 6
            role: "master"
            bmcAddress: idrac-virtualmedia://<out_of_band_ip>/<system_id>/ 7
            bmcCredentialsName:
              name: "bmh-secret" 8
            bootMACAddress: "AA:BB:CC:DD:EE:11"
            bootMode: "UEFI" 9
            rootDeviceHints:
              wwn: "0x11111000000asd123"
            cpuset: "0-1,52-53"  10
            nodeNetwork: 11
              interfaces:
                - name: eno1
                  macAddress: "AA:BB:CC:DD:EE:11"
              config:
                interfaces:
                  - name: eno1
                    type: ethernet
                    state: up
                    ipv4:
                      enabled: false
                    ipv6: 12
                      enabled: true
                      address:
                      - ip: 1111:2222:3333:4444::aaaa:1
                        prefix-length: 64
                dns-resolver:
                  config:
                    search:
                    - example.com
                    server:
                    - 1111:2222:3333:4444::2
                routes:
                  config:
                  - destination: ::/0
                    next-hop-interface: eno1
                    next-hop-address: 1111:2222:3333:4444::1
                    table-id: 254

    1
    使用与 SiteConfig CR 相同的命名空间创建 assisted-deployment-pull-secret CR。
    2
    clusterImageSetNameRef 定义 hub 集群中可用的镜像集。要查看 hub 集群上支持的版本列表,请运行 oc get clusterimagesets
    3
    配置用于访问集群的 SSH 公钥。
    4
    集群标签必须与您定义的 PolicyGenTemplate CR 中的 bindingRules 字段对应。例如,policygentemplates/common-ranGen.yaml 应用到所有带有 common: true 设置的集群,policygentemplates/group-du-sno-ranGen.yaml 应用到所有带有 group-du-sno: "" 设置的所有集群。
    5
    可选。KlusterletAddonConfig 下的 CR specifed 用于覆盖为集群创建的默认 KlusterletAddonConfig
    6
    对于单节点部署,请定义一个主机。对于三节点部署,请定义三个主机。对于标准部署,使用 role: master 定义三个主机,使用 role: worker 定义两个或更多主机。
    7
    用于访问主机的 BMC 地址。适用于所有集群类型。
    8
    使用主机 BMC 凭证单独创建的 bmh-secret CR 的名称。在创建 bmh-secret CR 时,请使用与置备主机的 SiteConfig CR 相同的命名空间。
    9
    配置主机的引导模式。默认值为 UEFI。使用 UEFISecureBoot 在主机上启用安全引导。
    10
    cpuset 应该与用于工作负载分区的集群 PerformanceProfile CR .spec.cpu.reserved 字段中设置的值匹配。
    11
    指定节点的网络设置。
    12
    配置主机的 IPv6 地址。对于带有静态 IP 地址的单节点 OpenShift 集群,特定于节点的 API 和 Ingress IP 应该相同。
  5. 运行以下命令,通过处理修改后的 SiteConfig CR site-1-sno.yaml 来生成 day-0 安装 CR:

    $ podman run -it --rm -v `pwd`/out/argocd/example/siteconfig:/resources:Z -v `pwd`/site-install:/output:Z,U registry.redhat.io/openshift4/ztp-site-generate-rhel8:v4.12.1 generator install site-1-sno.yaml /output

    输出示例

    site-install
    └── site-1-sno
        ├── site-1_agentclusterinstall_example-sno.yaml
        ├── site-1-sno_baremetalhost_example-node1.example.com.yaml
        ├── site-1-sno_clusterdeployment_example-sno.yaml
        ├── site-1-sno_configmap_example-sno.yaml
        ├── site-1-sno_infraenv_example-sno.yaml
        ├── site-1-sno_klusterletaddonconfig_example-sno.yaml
        ├── site-1-sno_machineconfig_02-master-workload-partitioning.yaml
        ├── site-1-sno_machineconfig_predefined-extra-manifests-master.yaml
        ├── site-1-sno_machineconfig_predefined-extra-manifests-worker.yaml
        ├── site-1-sno_managedcluster_example-sno.yaml
        ├── site-1-sno_namespace_example-sno.yaml
        └── site-1-sno_nmstateconfig_example-node1.example.com.yaml

  6. 可选:使用 -E 选项处理参考 SiteConfig CR,只为特定集群类型生成 day-0 MachineConfig 安装 CR。例如,运行以下命令:

    1. MachineConfig CR 创建输出文件夹:

      $ mkdir -p ./site-machineconfig
    2. 生成 MachineConfig 安装 CR:

      $ podman run -it --rm -v `pwd`/out/argocd/example/siteconfig:/resources:Z -v `pwd`/site-machineconfig:/output:Z,U registry.redhat.io/openshift4/ztp-site-generate-rhel8:v4.12.1 generator install -E site-1-sno.yaml /output

      输出示例

      site-machineconfig
      └── site-1-sno
          ├── site-1-sno_machineconfig_02-master-workload-partitioning.yaml
          ├── site-1-sno_machineconfig_predefined-extra-manifests-master.yaml
          └── site-1-sno_machineconfig_predefined-extra-manifests-worker.yaml

  7. 使用上一步中的参考 PolicyGenTemplate CR 生成并导出 day-2 配置 CR。运行以下命令:

    1. 为 day-2 CR 创建输出文件夹:

      $ mkdir -p ./ref
    2. 生成并导出第 2 天配置 CR:

      $ podman run -it --rm -v `pwd`/out/argocd/example/policygentemplates:/resources:Z -v `pwd`/ref:/output:Z,U registry.redhat.io/openshift4/ztp-site-generate-rhel8:v4.12.1 generator config -N . /output

      该命令在 ./ref 文件夹中为单节点 OpenShift、三节点集群和标准集群生成示例组和特定于站点的 PolicyGenTemplate CR。

      输出示例

      ref
       └── customResource
            ├── common
            ├── example-multinode-site
            ├── example-sno
            ├── group-du-3node
            ├── group-du-3node-validator
            │    └── Multiple-validatorCRs
            ├── group-du-sno
            ├── group-du-sno-validator
            ├── group-du-standard
            └── group-du-standard-validator
                 └── Multiple-validatorCRs

  8. 使用生成的 CR 作为安装集群的 CR 的基础。您可以将安装 CR 应用到 hub 集群,如 "Installing a single managed cluster" 所述。配置 CR 可以在集群安装后应用到集群。

17.5.2. 创建受管裸机主机 secret

将受管裸机主机所需的 Secret 自定义资源 (CR) 添加到 hub 集群。您需要 ZTP 管道的 secret 来访问 Baseboard Management Controller (BMC) 和支持的安装程序服务的 secret,以便从 registry 中拉取集群安装镜像。

注意

secret 按名称从 SiteConfig CR 引用。命名空间必须与 SiteConfig 命名空间匹配。

流程

  1. 创建一个 YAML secret 文件,其中包含主机 Baseboard Management Controller (BMC) 和安装 OpenShift 和所有附加组件集群 Operator 所需的凭证:

    1. 将以下 YAML 保存为文件 example-sno-secret.yaml

      apiVersion: v1
      kind: Secret
      metadata:
        name: example-sno-bmc-secret
        namespace: example-sno 1
      data: 2
        password: <base64_password>
        username: <base64_username>
      type: Opaque
      ---
      apiVersion: v1
      kind: Secret
      metadata:
        name: pull-secret
        namespace: example-sno  3
      data:
        .dockerconfigjson: <pull_secret> 4
      type: kubernetes.io/dockerconfigjson
      1
      必须与相关 SiteConfig CR 中配置的命名空间匹配
      2
      passwordusername 的 base64 编码值
      3
      必须与相关 SiteConfig CR 中配置的命名空间匹配
      4
      Base64 编码的 pull secret
  2. 将到 example-sno-secret.yaml 的相对路径添加用于安装集群的 kustomization.yaml 文件中。

17.5.3. 使用 GitOps ZTP 为手动安装配置 Discovery ISO 内核参数

GitOps ZTP 工作流使用 Discovery ISO 作为托管裸机主机的 OpenShift Container Platform 安装过程的一部分。您可以编辑 InfraEnv 资源来为 Discovery ISO 指定内核参数。这对具有特定环境要求的集群安装非常有用。例如,为发现 ISO 配置 rd.net.timeout.carrier 内核参数以促进集群的静态网络,或者在在安装过程中下载根文件系统前接收 DHCP 地址。

注意

在 OpenShift Container Platform 4.12 中,您只能添加内核参数。您不能替换或删除内核参数。

先决条件

  • 已安装 OpenShift CLI(oc)。
  • 已以具有 cluster-admin 权限的用户身份登录到 hub 集群。
  • 您已手动生成安装和配置自定义资源(CR)。

流程

  1. 编辑 InfraEnv CR 中的 spec.kernelArguments 规格以配置内核参数:
apiVersion: agent-install.openshift.io/v1beta1
kind: InfraEnv
metadata:
  name: <cluster_name>
  namespace: <cluster_name>
spec:
  kernelArguments:
    - operation: append 1
      value: audit=0 2
    - operation: append
      value: trace=1
  clusterRef:
    name: <cluster_name>
    namespace: <cluster_name>
  pullSecretRef:
    name: pull-secret
1
指定添加内核参数的 append 操作。
2
指定您要配置的内核参数。这个示例配置了 audit 内核参数和 trace 内核参数。
注意

SiteConfig CR 生成 InfraEnv 资源,作为 day-0 安装 CR 的一部分。

验证

要验证是否应用了内核参数,在 Discovery 镜像验证 OpenShift Container Platform 是否准备好安装后,您可以在安装过程开始前通过 SSH 连接到目标主机。此时,您可以在 /proc/cmdline 文件中查看发现 ISO 的内核参数。

  1. 使用目标主机开始 SSH 会话:

    $ ssh -i /path/to/privatekey core@<host_name>
  2. 使用以下命令查看系统的内核参数:

    $ cat /proc/cmdline

17.5.4. 安装单个受管集群

您可以使用辅助服务和 Red Hat Advanced Cluster Management (RHACM) 手动部署单个受管集群。

先决条件

  • 已安装 OpenShift CLI(oc)。
  • 已以具有 cluster-admin 权限的用户身份登录到 hub 集群。
  • 您已创建了基板管理控制器(BMC) Secret 和镜像 pull-secret Secret 自定义资源 (CR)。详情请参阅"创建受管裸机主机 secret"。
  • 您的目标裸机主机满足受管集群的网络和硬件要求。

步骤

  1. 为要部署的每个特定集群版本创建一个 ClusterImageSet,如 clusterImageSet-4.12.yamlClusterImageSet 具有以下格式:

    apiVersion: hive.openshift.io/v1
    kind: ClusterImageSet
    metadata:
      name: openshift-4.12.0 1
    spec:
       releaseImage: quay.io/openshift-release-dev/ocp-release:4.12.0-x86_64 2
    1
    要部署的描述性版本。
    2
    指定要部署并决定操作系统镜像的 releaseImage 版本。发现 ISO 基于由 releaseImage 设置的镜像版本,如果准确版本不可用,则为最新版本。
  2. 应用 clusterImageSet CR:

    $ oc apply -f clusterImageSet-4.12.yaml
  3. cluster-namespace.yaml 文件中创建 Namespace CR:

    apiVersion: v1
    kind: Namespace
    metadata:
         name: <cluster_name> 1
         labels:
            name: <cluster_name> 2
    1 2
    要置备的受管集群的名称。
  4. 运行以下命令来应用 Namespace CR:

    $ oc apply -f cluster-namespace.yaml
  5. 应用从 ztp-site-generate 容器中提取的生成的 day-0 CR,并自定义以满足您的要求:

    $ oc apply -R ./site-install/site-sno-1

17.5.5. 监控受管集群安装状态

通过检查集群状态,确保集群置备成功。

先决条件

  • 所有自定义资源都已配置并置备,在受管集群的 hub 上创建 Agent 自定义资源。

流程

  1. 检查受管集群的状态:

    $ oc get managedcluster

    True 表示受管集群已就绪。

  2. 检查代理状态:

    $ oc get agent -n <cluster_name>
  3. 使用 describe 命令,提供代理条件的深入描述。支持的状态包括 BackendErrorInputErrorValidationsFailingInFailedAgentIsConnected。这些状态与 AgentAgentClusterInstall 自定义资源相关。

    $ oc describe agent -n <cluster_name>
  4. 检查集群置备状态:

    $ oc get agentclusterinstall -n <cluster_name>
  5. 使用 describe 命令提供集群置备状态的深入描述:

    $ oc describe agentclusterinstall -n <cluster_name>
  6. 检查受管集群的附加服务的状态:

    $ oc get managedclusteraddon -n <cluster_name>
  7. 检索受管集群的 kubeconfig 文件的身份验证信息:

    $ oc get secret -n <cluster_name> <cluster_name>-admin-kubeconfig -o jsonpath={.data.kubeconfig} | base64 -d > <directory>/<cluster_name>-kubeconfig

17.5.6. 受管集群故障排除

使用这个流程诊断受管集群中可能出现的任何安装问题。

流程

  1. 检查受管集群的状态:

    $ oc get managedcluster

    输出示例

    NAME            HUB ACCEPTED   MANAGED CLUSTER URLS   JOINED   AVAILABLE   AGE
    SNO-cluster     true                                   True     True      2d19h

    如果 AVAILABLE 列中的状态为 True,受管集群由 hub 管理。

    如果 AVAILABLE 列中的状态为 Unknown,则受管集群不会由 hub 管理。使用以下步骤继续检查 以了解更多信息。

  2. 检查 AgentClusterInstall 安装状态:

    $ oc get clusterdeployment -n <cluster_name>

    输出示例

    NAME        PLATFORM            REGION   CLUSTERTYPE   INSTALLED    INFRAID    VERSION  POWERSTATE AGE
    Sno0026    agent-baremetal                               false                          Initialized
    2d14h

    如果 INSTALLED 列中的状态为 false,则安装会失败。

  3. 如果安装失败,请输入以下命令查看 AgentClusterInstall 资源的状态:

    $ oc describe agentclusterinstall -n <cluster_name> <cluster_name>
  4. 解决错误并重置集群:

    1. 删除集群的受管集群资源:

      $ oc delete managedcluster <cluster_name>
    2. 删除集群的命名空间:

      $ oc delete namespace <cluster_name>

      这会删除为此集群创建的所有命名空间范围自定义资源。您必须等待 ManagedCluster CR 删除完成,然后才能继续。

    3. 为受管集群重新创建自定义资源。

17.5.7. RHACM 生成的集群安装 CR 参考

Red Hat Advanced Cluster Management (RHACM)支持在每个站点的 SiteConfig CR 上部署 OpenShift Container Platform,以及带有特定安装自定义资源 (CR) 的 OpenShift Container Platform。

注意

每个受管集群都有自己的命名空间,除 ManagedClusterClusterImageSet 以外的所有安装 CR 都位于该命名空间中。ManagedClusterClusterImageSet 是集群范围的,而不是命名空间范围的。命名空间和 CR 名称与集群名称匹配。

下表列出了在使用您配置的 SiteConfig CR 安装集群时 RHACM 辅助服务自动应用的安装 CR。

表 17.5. 由 RHACM 生成的集群安装 CR

CR描述使用方法

BareMetalHost

包含目标裸机主机 Baseboard Management Controller(BMC)的连接信息。

提供对 BMC 的访问,以使用 Redfish 协议在目标服务器上加载和启动发现镜像。

InfraEnv

包含在目标裸机主机上安装 OpenShift Container Platform 的信息。

ClusterDeployment 一起使用,为受管集群生成发现 ISO。

AgentClusterInstall

指定管理集群配置的详情,如网络和 control plane 节点的数量。安装完成后,显示集群 kubeconfig 和凭证。

指定受管集群配置信息,并在安装集群期间提供状态。

ClusterDeployment

引用要使用的 AgentClusterInstall CR。

InfraEnv 一起使用,为受管集群生成发现 ISO。

NMStateConfig

提供网络配置信息,如 MAC 地址到 IP 映射、DNS 服务器、默认路由和其他网络设置。

为受管集群的 Kube API 服务器设置静态 IP 地址。

Agent

包含有关目标裸机主机的硬件信息。

当目标机器的发现镜像引导时,在 hub 上自动创建。

ManagedCluster

当集群由 hub 管理时,必须导入并已知的集群。此 Kubernetes 对象提供该接口。

hub 使用这个资源来管理和显示受管集群的状态。

KlusterletAddonConfig

包含要部署到 ManagedCluster 资源的 hub 提供的服务列表。

告知 hub 部署到 ManagedCluster 资源的附加组件服务。

Namespace

hub 上已存在的 ManagedCluster 资源的逻辑空间。每个站点都是唯一的。

将资源传播到 ManagedCluster

Secret

创建两个 CR:BMC SecretImage Pull Secret

  • BMC Secret 使用其用户名和密码向目标裸机主机进行身份验证。
  • Image Pull Secret 包含目标裸机主机中安装的 OpenShift Container Platform 镜像的身份验证信息。

ClusterImageSet

包含 OpenShift Container Platform 镜像信息,如存储库和镜像名称。

传递给资源以提供 OpenShift Container Platform 镜像。