16.4. 部署单节点 OpenShift 集群


当使用基于镜像的安装预装了单节点 OpenShift 的主机时,技术人员可以在几分钟内轻松重新配置和部署主机。

对于具有 hub-and-spoke 架构的集群,要完成预安装主机的部署,您必须首先为每个主机在 hub 集群上定义特定于站点的配置资源。这些资源包含配置信息,如裸机主机的属性、身份验证详情和其他部署和网络信息。

Image Based Install (IBI) Operator 从这些资源创建一个配置 ISO,然后使用附加配置 ISO 启动主机。主机挂载配置 ISO 并运行重新配置过程。重新配置完成后,单节点 OpenShift 集群已就绪。

注意

您必须为每个裸机主机创建不同的配置资源。

请参阅以下高级别步骤,在带有 hub-and-spoke 架构的集群中部署预安装的主机:

  1. 在 hub 集群上安装 IBI Operator。
  2. 在 hub 集群中为每个主机创建特定于站点的配置资源。
  3. IBI Operator 从这些资源创建配置 ISO,并使用附加配置 ISO 启动目标主机。
  4. 主机挂载配置 ISO 并运行重新配置过程。重新配置完成后,单节点 OpenShift 集群已就绪。
注意

另外,您可以手动为集群部署预安装的主机,而无需使用 hub 集群。您必须定义 ImageBasedConfig 资源和安装清单,并将其作为 openshift-install 安装程序的输入。如需更多信息,请参阅"使用 openshift-install 程序部署单节点 OpenShift 集群"。

16.4.1.1. 安装 Image Based Install Operator

Image Based Install (IBI) Operator 是裸机主机上预安装的单节点 OpenShift 部署工作流的一部分。

注意

IBI Operator 是 MCE 版本 2.7 的 Kubernetes Operator 的多集群引擎的一部分。

先决条件

  • 以具有 cluster-admin 权限的用户身份登录。
  • 您已部署了 Red Hat Advanced Cluster Management (RHACM) hub 集群,或为 Kubernetes Operator 部署多集群引擎。
  • 您在"基于镜像安装的软件先决条件"部分中查看了所需的软件组件版本。

流程

  • 运行以下命令,将 MultiClusterEngine 资源中 image-based-install-operator 组件的 enabled 规格设置为 true

    $ oc patch multiclusterengines.multicluster.openshift.io multiclusterengine --type json \
    --patch '[{"op": "add", "path":"/spec/overrides/components/-", "value": {"name":"image-based-install-operator","enabled": true}}]'

验证

  • 运行以下命令,检查 Image Based Install Operator pod 是否正在运行:

    $ oc get pods -A | grep image-based

    输出示例

    multicluster-engine             image-based-install-operator-57fb8sc423-bxdj8             2/2     Running     0               5m

在 hub 集群中创建特定于站点的配置资源,以启动预安装主机的基于镜像的部署。

当您在 hub 集群中创建这些配置资源时,Image Based Install (IBI) Operator 会生成配置 ISO,并将其附加到目标主机以开始特定于站点的配置过程。配置过程完成后,单节点 OpenShift 集群已就绪。

注意

有关在 hub 集群中配置配置资源的更多信息,请参阅"用于部署预安装主机的集群配置资源"。

先决条件

  • 已使用基于镜像的安装,预安装了单节点 OpenShift 的主机。
  • 以具有 cluster-admin 权限的用户身份登录。
  • 您已部署了 Red Hat Advanced Cluster Management (RHACM) hub 集群,或部署了 multicluster engine for Kubernetes operator (MCE)。
  • 您已在 hub 集群上安装了 IBI Operator。
  • 您创建了 pull secret 以验证拉取请求。如需更多信息,请参阅"使用镜像 pull secret"。

流程

  1. 运行以下命令来创建 ibi-ns 命名空间:

    $ oc create namespace ibi-ns
  2. 为您的镜像 registry 创建 Secret 资源:

    1. 创建为镜像 registry 定义 Secret 资源的 YAML 文件:

      secret-image-registry.yaml 文件示例

      apiVersion: v1
      kind: Secret
      metadata:
        name: ibi-image-pull-secret
        namespace: ibi-ns
      stringData:
        .dockerconfigjson: <base64-docker-auth-code> 
      1
      
      type: kubernetes.io/dockerconfigjson

      1
      您必须提供 base64 编码的凭证详情。有关使用镜像 pull secret 的更多信息,请参阅"添加资源"部分。
    2. 运行以下命令,为您的镜像 registry 创建 Secret 资源:

      $ oc create -f secret-image-registry.yaml
  3. 可选:为主机配置静态网络:

    1. nmstate 格式创建一个包含静态网络配置的 Secret 资源:

      host-network-config-secret.yaml 文件示例

      apiVersion: v1
      kind: Secret
      metadata:
       name: host-network-config-secret 
      1
      
       namespace: ibi-ns
      type: Opaque
      stringData:
       nmstate: | 
      2
      
        interfaces:
          - name: ens1f0 
      3
      
            type: ethernet
            state: up
            ipv4:
              enabled: true
              address:
                - ip: 192.168.200.25
                  prefix-length: 24
              dhcp: false 
      4
      
            ipv6:
              enabled: false
        dns-resolver:
          config:
            server:
              - 192.168.15.47 
      5
      
              - 192.168.15.48
        routes:
          config: 
      6
      
            - destination: 0.0.0.0/0
              metric: 150
              next-hop-address: 192.168.200.254
              next-hop-interface: ens1f0
              table-id: 254

      1
      指定 Secret 资源的名称。
      2
      nmstate 格式定义静态网络配置。
      3
      指定主机上的接口名称。接口的名称必须与操作系统中显示的实际 NIC 名称匹配。要使用 MAC 地址进行 NIC 匹配,请将 identifier 字段设置为 mac-address
      4
      您必须指定 dhcp: false 以确保 nmstate 为接口分配静态 IP 地址。
      5
      指定系统将用于解析域名的一个或多个 DNS 服务器。
      6
      在本例中,默认路由通过 ens1f0 接口配置为下一个跃点 IP 地址 192.168.200.254
  4. 创建 BareMetalHostSecret 资源:

    1. 创建定义 BareMetalHostSecret 资源的 YAML 文件:

      ibi-bmh.yaml 文件示例

      apiVersion: metal3.io/v1alpha1
      kind: BareMetalHost
      metadata:
        name: ibi-bmh 
      1
      
        namespace: ibi-ns
      spec:
        online: false 
      2
      
        bootMACAddress: 00:a5:12:55:62:64 
      3
      
        bmc:
          address: redfish-virtualmedia+http://192.168.111.1:8000/redfish/v1/Systems/8a5babac-94d0-4c20-b282-50dc3a0a32b5 
      4
      
          credentialsName: ibi-bmh-bmc-secret 
      5
      
        preprovisioningNetworkDataName: host-network-config-secret 
      6
      
        automatedCleaningMode: disabled 
      7
      
        externallyProvisioned: true 
      8
      
      ---
      apiVersion: v1
      kind: Secret
      metadata:
        name: ibi-bmh-secret 
      9
      
        namespace: ibi-ns
      type: Opaque
      data:
        username: <user_name> 
      10
      
        password: <password> 
      11

      1
      指定 BareMetalHost 资源的名称。
      2
      指定主机是否应在线。
      3
      指定主机引导 MAC 地址。
      4
      指定 BMC 地址。您只能使用支持虚拟介质网络引导的裸机主机驱动程序,如 redfish-virtualmedia 和 idrac-virtualmedia。
      5
      指定裸机主机 Secret 资源的名称。
      6
      可选:如果您需要主机静态网络配置,请指定包含配置的 Secret 资源的名称。
      7
      您必须指定 automatedCleaningMode:disabled,以防止置备服务在磁盘检查过程中删除所有预安装工件,如 seed 镜像。
      8
      您必须指定 externallyProvisioned: true,才能启用主机从预安装的磁盘引导,而不是配置 ISO。
      9
      指定 Secret 资源的名称。
      10
      指定用户名。
      11
      指定密码。
    2. 运行以下命令来创建 BareMetalHostSecret 资源:

      $ oc create -f ibi-bmh.yaml
  5. 创建 ClusterImageSet 资源:

    1. 创建定义 ClusterImageSet 资源的 YAML 文件:

      ibi-cluster-image-set.yaml 文件示例

      apiVersion: hive.openshift.io/v1
      kind: ClusterImageSet
      metadata:
        name: ibi-img-version-arch 
      1
      
      spec:
        releaseImage: ibi.example.com:path/to/release/images:version-arch 
      2

      1
      指定 ClusterImageSet 资源的名称。
      2
      指定用于部署的发行镜像的地址。如果您在生成镜像期间使用不同的镜像 registry,请确保发行镜像的 OpenShift Container Platform 版本保持不变。
    2. 运行以下命令来创建 ClusterImageSet 资源:

      $ oc apply -f ibi-cluster-image-set.yaml
  6. 创建 ImageClusterInstall 资源:

    1. 创建定义 ImageClusterInstall 资源的 YAML 文件:

      ibi-image-cluster-install.yaml 文件示例

      apiVersion: extensions.hive.openshift.io/v1alpha1
      kind: ImageClusterInstall
      metadata:
        name: ibi-image-install 
      1
      
        namespace: ibi-ns
      spec:
        bareMetalHostRef:
          name: ibi-bmh 
      2
      
          namespace: ibi-ns
        clusterDeploymentRef:
          name: ibi-cluster-deployment 
      3
      
        hostname: ibi-host 
      4
      
        imageSetRef:
          name: ibi-img-version-arch 
      5
      
        machineNetwork: 10.0.0.0/24 
      6
      
        proxy: 
      7
      
          httpProxy: "http://proxy.example.com:8080"
          #httpsProxy: "http://proxy.example.com:8080"
          #noProxy: "no_proxy.example.com"

      1
      指定 ImageClusterInstall 资源的名称。
      2
      为基于镜像的安装指定您要针对的 BareMetalHost 资源。
      3
      指定要用于目标主机的镜像安装的 ClusterDeployment 资源的名称。
      4
      指定集群的主机名。
      5
      指定用来定义用于部署的容器镜像的 ClusterImageSet 资源的名称。
      6
      指定外部网络的公共 CIDR (Classless Inter-Domain Routing)。
      7
      可选:指定一个用于集群部署的代理。
      重要

      如果您的集群部署需要代理配置,您必须执行以下操作:

      • 从带有代理配置的 seed 集群创建 seed 镜像。代理配置不必相互匹配。
      • 在安装清单中配置 machineNetwork 字段。
    2. 运行以下命令来创建 ImageClusterInstall 资源:

      $ oc create -f ibi-image-cluster-install.yaml
  7. 创建 ClusterDeployment 资源:

    1. 创建定义 ClusterDeployment 资源的 YAML 文件:

      ibi-cluster-deployment.yaml 文件示例

      apiVersion: hive.openshift.io/v1
      kind: ClusterDeployment
      metadata:
        name: ibi-cluster-deployment 
      1
      
        namespace: ibi-ns 
      2
      
      spec:
        baseDomain: example.com 
      3
      
        clusterInstallRef:
          group: extensions.hive.openshift.io
          kind: ImageClusterInstall
          name: ibi-image-install 
      4
      
          version: v1alpha1
        clusterName: ibi-cluster 
      5
      
        platform:
          none: {}
        pullSecretRef:
          name: ibi-image-pull-secret 
      6

      1
      指定 ClusterDeployment 资源的名称。
      2
      指定 ClusterDeployment 资源的命名空间。
      3
      指定集群应属于的基域。
      4
      指定 ImageClusterInstall 的名称,在其中定义了用于目标主机的基于镜像安装的容器镜像。
      5
      为集群指定一个名称。
      6
      指定用于从镜像 registry 中拉取镜像的 secret。
    2. 运行以下命令来创建 ClusterDeployment 资源:

      $ oc apply -f ibi-cluster-deployment.yaml
  8. 创建 ManagedCluster 资源:

    1. 创建定义 ManagedCluster 资源的 YAML 文件:

      ibi-managed.yaml 文件示例

      apiVersion: cluster.open-cluster-management.io/v1
      kind: ManagedCluster
      metadata:
        name: sno-ibi 
      1
      
      spec:
        hubAcceptsClient: true 
      2

      1
      指定 ManagedCluster 资源的名称。
      2
      指定 true 以启用 RHACM 管理集群。
    2. 运行以下命令来创建 ManagedCluster 资源:

      $ oc apply -f ibi-managed.yaml

验证

  1. 运行以下命令,检查 hub 集群中 ImageClusterInstall 的状态,以监控目标主机安装的进度:

    $ oc get imageclusterinstall

    输出示例

    NAME       REQUIREMENTSMET           COMPLETED                     BAREMETALHOSTREF
    target-0   HostValidationSucceeded   ClusterInstallationSucceeded  ibi-bmh

    警告

    如果 ImageClusterInstall 资源被删除,IBI Operator 会重新附加 BareMetalHost 资源并重启机器。

  2. 安装完成后,您可以运行以下命令来检索 kubeconfig secret 以登录到受管集群:

    $ oc extract secret/<cluster_name>-admin-kubeconfig -n <cluster_namespace>  --to - > <directory>/<cluster_name>-kubeconfig
    • <cluster_name> 是集群的名称。
    • <cluster_namespace> 是集群的命名空间。
    • <directory> 是在其中创建文件的目录。

要在远程站点完成预安装主机的部署,您必须在 hub 集群中为每个裸机主机配置以下特定于站点的集群配置资源。

Expand
表 16.6. 集群配置资源参考
资源描述

Namespace

受管单节点 OpenShift 集群的命名空间。

BareMetalHost

描述物理主机及其属性,如置备和硬件配置。

裸机主机的 Secret

主机 BMC 的凭证。

裸机主机静态网络配置的 Secret

可选:描述目标主机的静态网络配置。

镜像 registry 的 Secret

镜像 registry 的凭证。镜像 registry 的 secret 必须是 kubernetes.io/dockerconfigjson 类型。

ImageClusterInstall

引用裸机主机、部署和镜像设置资源。

ClusterImageSet

描述用于集群的发行镜像。

ClusterDeployment

描述网络、身份验证和特定于平台的设置。

ManagedCluster

描述启用 Red Hat Advanced Cluster Management (RHACM) 来注册和管理的集群详情。

ConfigMap

可选:描述集群部署的额外配置,如为主机添加可信证书的捆绑包,以确保集群服务的可信通信。

16.4.1.2.2. ImageClusterInstall 资源 API 规格

以下内容描述了 ImageClusterInstall 资源的 API 规格。此资源是 Image Based Install Operator 的端点。

Expand
表 16.7. 所需的规格
规格类型描述

imageSetRef

string

指定为部署定义发行镜像的 ClusterImageSet 资源的名称。

hostname

string

指定集群的主机名。

sshKey

string

指定 SSH 密钥,以提供到目标主机的 SSH 访问。

Expand
表 16.8. 可选规格
规格类型描述

clusterDeploymentRef

string

指定要用于目标主机的镜像安装的 ClusterDeployment 资源的名称。

clusterMetadata

string

部署完成后,此规格会自动填充有关集群的元数据信息,包括用于登录到集群的 cluster-admin kubeconfig 凭证。

imageDigestSources

string

指定 release-image 内容的源或软件仓库,例如:

imageDigestSources: - mirrors: - "registry.example.com:5000/ocp4/openshift4" source: "quay.io/openshift-release-dev/ocp-release"

extraManifestsRefs

string

指定包含要应用到目标集群的额外清单的 ConfigMap 资源。

bareMetalHostRef

string

指定用于集群部署的 bareMetalHost 资源

machineNetwork

string

指定外部网络的公共 CIDR (Classless Inter-Domain Routing)。

proxy

string

指定集群的代理设置,例如:

proxy: httpProxy: "http://proxy.example.com:8080" httpsProxy: "http://proxy.example.com:8080" noProxy: "no_proxy.example.com"

caBundleRef

string

指定包含主机可信证书捆绑包的 ConfigMap 资源。

16.4.1.3. 额外清单的 ConfigMap 资源

您可以选择创建 ConfigMap 资源,为受管单节点 OpenShift 集群在基于镜像的部署中定义其他清单。

创建 ConfigMap 资源后,在 ImageClusterInstall 资源中引用它。在部署过程中,IBI Operator 在部署中包括额外的清单。

您可以使用 ConfigMap 资源在单节点 OpenShift 集群的基于镜像的部署中添加额外的清单。

以下示例将单根 I/O 虚拟化 (SR-IOV) 网络添加到部署中。

注意

额外清单的文件名不能超过 30 个字符。长的文件名可能会导致部署失败。

先决条件

  • 已使用基于镜像的安装,预安装了单节点 OpenShift 的主机。
  • 以具有 cluster-admin 权限的用户身份登录。

流程

  1. 创建 SriovNetworkNodePolicySriovNetwork 资源:

    1. 创建定义资源的 YAML 文件:

      sriov-extra-manifest.yaml 文件示例

      apiVersion: sriovnetwork.openshift.io/v1
      kind: SriovNetworkNodePolicy
      metadata:
        name: "example-sriov-node-policy"
        namespace: openshift-sriov-network-operator
      spec:
        deviceType: vfio-pci
        isRdma: false
        nicSelector:
          pfNames: [ens1f0]
        nodeSelector:
          node-role.kubernetes.io/master: ""
        mtu: 1500
        numVfs: 8
        priority: 99
        resourceName: example-sriov-node-policy
      ---
      apiVersion: sriovnetwork.openshift.io/v1
      kind: SriovNetwork
      metadata:
        name: "example-sriov-network"
        namespace: openshift-sriov-network-operator
      spec:
        ipam: |-
          {
          }
        linkState: auto
        networkNamespace: sriov-namespace
        resourceName: example-sriov-node-policy
        spoofChk: "on"
        trust: "off"

    2. 运行以下命令来创建 ConfigMap 资源:

      $ oc create configmap sr-iov-extra-manifest --from-file=sriov-extra-manifest.yaml -n ibi-ns 
      1
      1
      指定具有 ImageClusterInstall 资源的命名空间。

      输出示例

      configmap/sr-iov-extra-manifest created

      注意

      如果添加多个额外清单,且清单必须按照特定顺序应用,则必须为代表所需顺序的清单的文件名添加前缀。例如: 00-namespace.yaml,01-sriov-extra-manifest.yaml,等等。

  2. ImageClusterInstall 资源的 spec.extraManifestsRefs 字段中引用 ConfigMap 资源:

    #...
      spec:
        extraManifestsRefs:
        - name: sr-iov-extra-manifest
    #...

您可以使用 ConfigMap 资源将证书颁发机构(CA)捆绑包添加到主机,以确保集群服务的可信通信。

创建 ConfigMap 资源后,在 ImageClusterInstall 资源的 spec.caBundleRef 字段中引用它。

先决条件

  • 已使用基于镜像的安装,预安装了单节点 OpenShift 的主机。
  • 以具有 cluster-admin 权限的用户身份登录。

流程

  1. 创建名为 tls-ca-bundle.pem 的 CA 捆绑包文件:

    tls-ca-bundle.pem 文件示例

    -----BEGIN CERTIFICATE-----
    MIIDXTCCAkWgAwIBAgIJAKmjYKJbIyz3MA0GCSqGSIb3DQEBCwUAMEUxCzAJBgNV
    ...Custom CA certificate bundle...
    4WPl0Qb27Sb1xZyAsy1ww6MYb98EovazUSfjYr2EVF6ThcAPu4/sMxUV7He2J6Jd
    cA8SMRwpUbz3LXY=
    -----END CERTIFICATE-----

  2. 运行以下命令来创建 ConfigMap 对象:

    $ oc create configmap custom-ca --from-file=tls-ca-bundle.pem -n ibi-ns
    • custom-ca 指定 ConfigMap 资源的名称。
    • tls-ca-bundle.pem 定义 ConfigMap 资源中 data 条目的密钥。您需要包括一个带有 tls-ca-bundle.pem 键的 data 条目。
    • ibi-ns 指定具有 ImageClusterInstall 资源的命名空间。

      输出示例

      configmap/custom-ca created

  3. ImageClusterInstall 资源的 spec.caBundleRef 字段中引用 ConfigMap 资源:

    #...
      spec:
        caBundleRef:
          name: custom-ca
    #...
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

關於紅帽

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

让开源更具包容性

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

关于红帽文档

Legal Notice

Theme

© 2026 Red Hat
返回顶部