×

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

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

基于镜像的安装 (IBI) 运算符会根据这些资源创建配置 ISO,然后在附加了配置 ISO 的情况下启动主机。主机挂载配置 ISO 并运行重新配置过程。重新配置完成后,单节点 OpenShift 集群即可使用。

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

请参阅以下高级步骤,以在具有中心和辐条架构的集群中部署预安装的主机

  1. 在中心集群上安装 IBI 运算符。

  2. 为每个主机在中心集群中创建特定于站点的配置资源。

  3. IBI 运算符会根据这些资源创建配置 ISO,并在附加了配置 ISO 的情况下启动目标主机。

  4. 主机挂载配置 ISO 并运行重新配置过程。重新配置完成后,单节点 OpenShift 集群即可使用。

或者,您可以手动部署集群的预安装主机,无需使用 hub 集群。您必须定义一个ImageBasedConfig资源和一个安装清单,并将这些作为输入提供给openshift-install安装程序。更多信息,请参见“使用openshift-install程序部署单节点 OpenShift 集群”。

安装基于镜像的安装操作符

基于镜像的安装 (IBI) 操作符是裸机主机上预安装单节点 OpenShift 基于镜像部署工作流程的一部分。

IBI 操作符是 MCE 2.7 版本及以上版本的 Kubernetes 操作符多集群引擎的一部分。

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

  • 您已部署 Red Hat Advanced Cluster Management (RHACM) hub 集群,或者您已部署 Kubernetes 操作符的多集群引擎。

  • 您已在“基于镜像安装的软件先决条件”部分中查看了所需软件组件的版本。

步骤
  • 通过运行以下命令,将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}}]'
验证
  • 通过运行以下命令检查基于镜像的安装操作符 pod 是否正在运行

    $ oc get pods -A | grep image-based
    示例输出
    multicluster-engine             image-based-install-operator-57fb8sc423-bxdj8             2/2     Running     0               5m

使用 IBI 操作符部署托管的单节点 OpenShift 集群

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

当您在 hub 集群中创建这些配置资源时,基于镜像的安装 (IBI) 操作符会生成一个配置 ISO 并将其附加到目标主机,以开始特定于站点的配置过程。配置过程完成后,单节点 OpenShift 集群就准备就绪了。

有关必须在 hub 集群中配置的配置资源的更多信息,请参见“部署预安装主机的集群配置资源”。

先决条件
  • 您使用基于镜像的安装预安装了具有单节点 OpenShift 的主机。

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

  • 您已部署 Red Hat Advanced Cluster Management (RHACM) hub 集群,或者您已部署 Kubernetes 操作符的多集群引擎 (MCE)。

  • 您已在 hub 集群上安装了 IBI 操作符。

  • 您已创建了一个 pull 密钥来验证 pull 请求。更多信息,请参见“使用镜像 pull 密钥”。

步骤
  1. 通过运行以下命令创建ibi-ns命名空间

    $ oc create namespace ibi-ns
  2. 为您的镜像注册表创建Secret资源

    1. 创建一个 YAML 文件,该文件定义了您的镜像注册表的Secret资源

      示例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 密钥的更多信息,请参见“其他资源”部分。
    2. 通过运行以下命令创建您的镜像注册表的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 指定主机上接口的名称。接口的名称必须与操作系统中显示的实际网卡名称匹配。要使用您的 MAC 地址进行网卡匹配,请将identifier字段设置为mac-address
      4 您必须指定dhcp: false以确保nmstate将静态 IP 地址分配给接口。
      5 指定系统将用于解析域名的一个或多个 DNS 服务器。
      6 在此示例中,默认路由通过ens1f0接口配置到下一跳 IP 地址192.168.200.254
  4. 创建BareMetalHostSecret资源

    1. 创建一个 YAML 文件,该文件定义了BareMetalHostSecret资源

      示例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以防止预配服务在磁盘检查期间删除所有预安装工件,例如种子镜像。
      8 您必须指定externallyProvisioned: true以使主机能够从预安装磁盘启动,而不是从配置 ISO 启动。
      9 指定Secret资源的名称。
      10 指定用户名。
      11 指定密码。
    2. 通过运行以下命令创建BareMetalHostSecret资源

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

    1. 创建一个 YAML 文件,该文件定义了ClusterImageSet资源

      示例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 指定要用于部署的发布镜像的地址。如果您使用的镜像注册表与种子镜像生成过程中使用的镜像注册表不同,请确保发布镜像的 OpenShift Container Platform 版本保持不变。
    2. 通过运行以下命令创建ClusterImageSet资源

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

    1. 创建一个 YAML 文件,该文件定义了ImageClusterInstall资源

      示例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(无类别域间路由)。
      7 可选:指定要用于集群部署的代理。

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

      • 从具有代理配置的种子集群创建种子镜像。代理配置不必匹配。

      • 在您的安装清单中配置machineNetwork字段。

    2. 通过运行以下命令创建ImageClusterInstall资源

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

    1. 创建一个 YAML 文件,该文件定义了ClusterDeployment资源

      示例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 指定用于从您的镜像注册表拉取镜像的密钥。
    2. 通过运行以下命令创建ClusterDeployment资源

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

    1. 创建一个YAML文件,该文件定义ManagedCluster资源

      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. 通过运行以下命令检查中心集群中ImageClusterInstall的状态,以监控目标主机安装的进度

    $ oc get imageclusterinstall
    示例输出
    NAME       REQUIREMENTSMET           COMPLETED                     BAREMETALHOSTREF
    target-0   HostValidationSucceeded   ClusterInstallationSucceeded  ibi-bmh

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

  2. 安装完成后,您可以通过运行以下命令检索kubeconfig密钥以登录到托管集群

    $ oc extract secret/<cluster_name>-admin-kubeconfig -n <cluster_namespace>  --to - > <directory>/<cluster_name>-kubeconfig
    • <cluster_name>是集群的名称。

    • <cluster_namespace>是集群的命名空间。

    • <directory>是要在其中创建文件的目录。

用于部署预安装主机的集群配置资源

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

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

命名空间

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

BareMetalHost

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

裸机主机的Secret

主机BMC的凭据。

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

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

镜像注册表的Secret

镜像注册表的凭据。镜像注册表的密钥必须为kubernetes.io/dockerconfigjson类型。

ImageClusterInstall

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

ClusterImageSet

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

ClusterDeployment

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

ManagedCluster

描述集群详细信息,以启用Red Hat Advanced Cluster Management (RHACM) 进行注册和管理。

ConfigMap

可选:描述集群部署的其他配置,例如添加一组受信任的证书,以确保主机与集群服务的受信任通信。

ImageClusterInstall资源API规范

以下内容描述了ImageClusterInstall资源的API规范。此资源是基于镜像安装操作符的端点。

表2. 必需的规范
规范 类型 描述

imageSetRef

字符串

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

主机名

字符串

指定集群的主机名。

sshKey

字符串

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

表3. 可选规范
规范 类型 描述

clusterDeploymentRef

字符串

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

clusterMetadata

字符串

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

imageDigestSources

字符串

指定发行版镜像内容的来源或存储库,例如

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

extraManifestsRefs

字符串

指定包含要应用于目标集群的其他清单的ConfigMap资源。

bareMetalHostRef

字符串

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

machineNetwork

字符串

指定外部网络的公共 CIDR(无类别域间路由)。

proxy

字符串

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

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

caBundleRef

字符串

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

用于额外清单的ConfigMap资源

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

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

创建ConfigMap资源以在基于镜像的部署中添加额外清单

您可以使用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
  2. ImageClusterInstall资源的spec.extraManifestsRefs字段中引用ConfigMap资源

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

创建ConfigMap资源以在基于镜像的部署中添加CA捆绑包

您可以使用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
    #...