19.13. 创建自定义资源以安装单个受管集群

此流程告诉您如何手动创建和部署单个受管集群。如果您要创建多个集群(可能是数百个),请使用"为多个受管集群创建 ZTP 自定义资源"中所述的 SiteConfig 方法。

先决条件

  • 启用辅助安装程序服务.
  • 确保网络连接:

    • hub 中的容器必须能够访问目标裸机主机的 Baseboard Management Controller(BMC)地址。
    • 受管集群必须能够解析并访问 hub 的 API hostname*.app hostname。hub API 和 *.app 主机名示例:

      console-openshift-console.apps.hub-cluster.internal.domain.com
      api.hub-cluster.internal.domain.com
    • hub 必须能够解析并访问受管集群的 API 和 *.app 主机名。以下是受管集群 API 和 *.app 主机名的示例:

      console-openshift-console.apps.sno-managed-cluster-1.internal.domain.com
      api.sno-managed-cluster-1.internal.domain.com
    • 可以从目标裸机主机访问的 DNS 服务器。
  • 受管集群的目标裸机主机,至少具有以下硬件:

    • 4 个 CPU 或 8 个 vCPU
    • 32 GiB RAM
    • root 文件系统 120 GiB 磁盘
  • 在断开连接的环境中工作时,发行镜像需要被镜像(mirror)。使用这个命令镜像镜像:

    oc adm release mirror -a <pull_secret.json>
    --from=quay.io/openshift-release-dev/ocp-release:{{ mirror_version_spoke_release }}
    --to={{ provisioner_cluster_registry }}/ocp4 --to-release-image={{
    provisioner_cluster_registry }}/ocp4:{{ mirror_version_spoke_release }}
  • 您已将用于生成 spoke 集群 ISO 的 ISO 和 rootfs 镜像到 HTTP 服务器,并配置用于从中拉取镜像的设置。

    镜像必须与 ClusterImageSet 的版本匹配。若要部署 4.9.0 版本,需要将 rootfs 和 ISO 设置为 4.9.0。

流程

  1. 为每个需要部署的特定集群版本创建一个 ClusterImageSetClusterImageSet 具有以下格式:

    apiVersion: hive.openshift.io/v1
    kind: ClusterImageSet
    metadata:
      name: openshift-4.9.0-rc.0 1
    spec:
       releaseImage: quay.io/openshift-release-dev/ocp-release:4.9.0-x86_64 2
    1
    要部署的描述性版本。
    2
    指向要部署的特定发行镜像。
  2. 为受管集群创建 Namespace 定义:

    apiVersion: v1
    kind: Namespace
    metadata:
         name: <cluster_name> 1
         labels:
            name: <cluster_name> 2
    1 2
    要置备的受管集群的名称。
  3. 创建 BMC Secret 自定义资源:

    apiVersion: v1
    data:
      password: <bmc_password> 1
      username: <bmc_username> 2
    kind: Secret
    metadata:
      name: <cluster_name>-bmc-secret
      namespace: <cluster_name>
    type: Opaque
    1
    目标裸机主机的密码。必须经过 base-64 编码。
    2
    目标裸机主机的用户名。必须经过 base-64 编码。
  4. 创建 Image Pull Secret 自定义资源:

    apiVersion: v1
    data:
      .dockerconfigjson: <pull_secret> 1
    kind: Secret
    metadata:
      name: assisted-deployment-pull-secret
      namespace: <cluster_name>
    type: kubernetes.io/dockerconfigjson
    1
    OpenShift Container Platform pull secret。必须经过 base-64 编码。
  5. 创建 AgentClusterInstall 自定义资源:

    apiVersion: extensions.hive.openshift.io/v1beta1
    kind: AgentClusterInstall
    metadata:
      # Only include the annotation if using OVN, otherwise omit the annotation
      annotations:
        agent-install.openshift.io/install-config-overrides: '{"networking":{"networkType":"OVNKubernetes"}}'
      name: <cluster_name>
      namespace: <cluster_name>
    spec:
      clusterDeploymentRef:
        name: <cluster_name>
      imageSetRef:
        name: <cluster_image_set> 1
      networking:
        clusterNetwork:
        - cidr: <cluster_network_cidr> 2
          hostPrefix: 23
        machineNetwork:
        - cidr: <machine_network_cidr> 3
        serviceNetwork:
        - <service_network_cidr> 4
      provisionRequirements:
        controlPlaneAgents: 1
        workerAgents: 0
      sshPublicKey: <public_key> 5
    1
    用于在裸机主机上安装 OpenShift Container Platform 的 ClusterImageSet 自定义资源的名称。
    2
    CIDR 标记中的 IPv4 或 IPv6 地址块,用于集群节点之间的通信。
    3
    用于目标裸机主机外部通信的 IPv4 或 IPv6 地址块。另外,在置备 DU 单节点集群时也用来决定 API 和 Ingress VIP 地址。
    4
    使用 CIDR 标记的 IPv4 或 IPv6 地址块,用于集群服务内部通信。
    5
    以纯文本方式输入。安装完成后,您可以使用公钥 SSH 到节点。
    注意

    如果要在此时为受管集群配置静态 IP,请参阅本文档中的步骤为受管集群配置静态 IP 地址。

  6. 创建 ClusterDeployment 自定义资源:

    apiVersion: hive.openshift.io/v1
    kind: ClusterDeployment
    metadata:
      name: <cluster_name>
      namespace: <cluster_name>
    spec:
      baseDomain: <base_domain> 1
      clusterInstallRef:
        group: extensions.hive.openshift.io
        kind: AgentClusterInstall
        name: <cluster_name>
        version: v1beta1
      clusterName: <cluster_name>
      platform:
        agentBareMetal:
          agentSelector:
            matchLabels:
              cluster-name: <cluster_name>
      pullSecretRef:
        name: assisted-deployment-pull-secret
    1
    受管集群的基域。
  7. 创建 KlusterletAddonConfig 自定义资源:

    apiVersion: agent.open-cluster-management.io/v1
    kind: KlusterletAddonConfig
    metadata:
      name: <cluster_name>
      namespace: <cluster_name>
    spec:
      clusterName: <cluster_name>
      clusterNamespace: <cluster_name>
      clusterLabels:
        cloud: auto-detect
        vendor: auto-detect
      applicationManager:
        enabled: true
      certPolicyController:
        enabled: false
      iamPolicyController:
        enabled: false
      policyController:
        enabled: true
      searchCollector:
        enabled: false 1
    1
    设置为 true 以启用 KlusterletAddonConfig 或 false 来禁用 KlusterletAddonConfig。禁用 searchCollector
  8. 创建 ManagedCluster 自定义资源:

    apiVersion: cluster.open-cluster-management.io/v1
    kind: ManagedCluster
    metadata:
      name: <cluster_name>
    spec:
      hubAcceptsClient: true
  9. 创建 InfraEnv 自定义资源:

    apiVersion: agent-install.openshift.io/v1beta1
    kind: InfraEnv
    metadata:
      name: <cluster_name>
      namespace: <cluster_name>
    spec:
      clusterRef:
        name: <cluster_name>
        namespace: <cluster_name>
      sshAuthorizedKey: <public_key> 1
      agentLabels: 2
        location: "<label-name>"
      pullSecretRef:
        name: assisted-deployment-pull-secret
    1
    以纯文本方式输入。从 ISO 引导时,您可以使用公钥 SSH 到目标裸机主机。
    2
    设置要匹配的标签。代理引导时应用标签。
  10. 创建 BareMetalHost 自定义资源:

    apiVersion: metal3.io/v1alpha1
    kind: BareMetalHost
    metadata:
      name: <cluster_name>
      namespace: <cluster_name>
      annotations:
        inspect.metal3.io: disabled
      labels:
        infraenvs.agent-install.openshift.io: "<cluster_name>"
    spec:
      bootMode: "UEFI"
      bmc:
        address: <bmc_address> 1
        disableCertificateVerification: true
        credentialsName: <cluster_name>-bmc-secret
      bootMACAddress: <mac_address> 2
      automatedCleaningMode: disabled
      online: true
    1
    目标裸机主机中安装 ISO 的基板管理控制台地址。
    2
    目标裸机主机的 MAC 地址。

    另外,您可以添加 bmac.agent-install.openshift.io/hostname: <host-name> 作为注解,以设置受管集群的主机名。如果您没有添加注解,则主机名将默认为 DHCP 服务器或本地主机的主机名。

  11. 创建自定义资源后,将生成的自定义资源的整个目录推送到您为存储自定义资源创建的 Git 存储库。

后续步骤

要置备其他集群,请对每个集群重复此步骤。

19.13.1. 为受管集群配置静态 IP 地址

另外,在创建 AgentClusterInstall 自定义资源后,您可以为受管集群配置静态 IP 地址。

注意

您必须先创建此自定义资源,然后才能创建 ClusterDeployment 自定义资源。

先决条件

  • 部署并配置 AgentClusterInstall 自定义资源。

流程

  1. 创建 NMStateConfig 自定义资源:

    apiVersion: agent-install.openshift.io/v1beta1
    kind: NMStateConfig
    metadata:
     name: <cluster_name>
     namespace: <cluster_name>
     labels:
       sno-cluster-<cluster-name>: <cluster_name>
    spec:
     config:
       interfaces:
         - name: eth0
           type: ethernet
           state: up
           ipv4:
             enabled: true
             address:
               - ip: <ip_address> 1
                 prefix-length: <public_network_prefix> 2
             dhcp: false
       dns-resolver:
         config:
           server:
             - <dns_resolver> 3
       routes:
         config:
           - destination: 0.0.0.0/0
             next-hop-address: <gateway> 4
             next-hop-interface: eth0
             table-id: 254
     interfaces:
       - name: "eth0" 5
         macAddress: <mac_address> 6
    1
    目标裸机主机的静态 IP 地址。
    2
    目标裸机主机的静态 IP 地址子网前缀。
    3
    目标裸机主机的 DNS 服务器。
    4
    目标裸机主机的网关。
    5
    必须与 interfaces 部分中指定的名称匹配。
    6
    接口的 mac 地址。
  2. 在创建 BareMetalHost 自定义资源时,请确保其 mac 地址与 NMStateConfig 目标裸机主机中的 mac 地址匹配。
  3. 在创建 InfraEnv 自定义资源时,引用 InfraEnv 自定义资源中的 NMStateConfig 自定义资源中的标签:

    apiVersion: agent-install.openshift.io/v1beta1
    kind: InfraEnv
    metadata:
      name: <cluster_name>
      namespace: <cluster_name>
    spec:
      clusterRef:
        name: <cluster_name>
        namespace: <cluster_name>
      sshAuthorizedKey: <public_key>
      agentLabels: 1
        location: "<label-name>"
      pullSecretRef:
        name: assisted-deployment-pull-secret
      nmStateConfigLabelSelector:
        matchLabels:
          sno-cluster-<cluster-name>: <cluster_name> # Match this label
    1
    设置要匹配的标签。代理引导时应用标签。

19.13.2. 用于置备集群的自动发现镜像 ISO 流程

创建自定义资源后,会自动执行以下操作:

  1. 在目标机器上生成并启动发现镜像 ISO 文件。
  2. 当 ISO 文件成功在目标机器上启动时,它会报告目标计算机的硬件信息。
  3. 在所有主机被发现后,会安装 OpenShift Container Platform。
  4. 当 OpenShift Container Platform 完成安装后,hub 在目标集群上安装 klusterlet 服务。
  5. 请求的附加组件服务安装在目标集群中。

当在受管集群的 hub 上创建 Agent 自定义资源时,发现镜像 ISO 过程会完成。

19.13.3. 检查受管集群状态

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

先决条件

  • 所有自定义资源都已配置并置备,在受管集群的 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

19.13.4. 为断开连接的环境配置受管集群

完成前面的步骤后,按照以下步骤为断开连接的环境配置受管集群。

先决条件

  • 断开连接的 Red Hat Advanced Cluster Management (RHACM) 2.3 安装。
  • 在 HTTPD 服务器上托管 rootfsiso 镜像。

流程

  1. 创建包含镜像 registry 配置的 ConfigMap

    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: assisted-installer-mirror-config
      namespace: assisted-installer
      labels:
        app: assisted-service
    data:
      ca-bundle.crt: <certificate> 1
      registries.conf: |  2
        unqualified-search-registries = ["registry.access.redhat.com", "docker.io"]
    
        [[registry]]
          location = <mirror_registry_url>  3
          insecure = false
          mirror-by-digest-only = true
    1
    创建镜像 registry 时使用的镜像 registry 证书。
    2
    镜像 registry 的配置。
    3
    镜像 registry 的 URL。

    这会更新 AgentServiceConfig 自定义资源中的 mirrorRegistryRef,如下所示:

    输出示例

    apiVersion: agent-install.openshift.io/v1beta1
    kind: AgentServiceConfig
    metadata:
      name: agent
      namespace: assisted-installer
    spec:
      databaseStorage:
        volumeName: <db_pv_name>
        accessModes:
        - ReadWriteOnce
        resources:
          requests:
            storage: <db_storage_size>
      filesystemStorage:
        volumeName: <fs_pv_name>
        accessModes:
        - ReadWriteOnce
        resources:
          requests:
            storage: <fs_storage_size>
      mirrorRegistryRef:
        name: 'assisted-installer-mirror-config'
      osImages:
        - openshiftVersion: <ocp_version>
          rootfs: <rootfs_url> 1
          url: <iso_url> 2

    1 2
    必须与 HTTPD 服务器的 URL 匹配。
  2. 对于断开连接的安装,您必须部署可通过断开连接的网络访问的 NTP 时钟。您可以配置 chrony 作为服务器,编辑 /etc/chrony.conf 文件,并添加以下允许的 IPv6 范围:

    # Allow NTP client access from local network.
    #allow 192.168.0.0/16
    local stratum 10
    bindcmdaddress ::
    allow 2620:52:0:1310::/64

19.13.5. 为断开连接的环境配置 IPv6 地址

另外,当创建 AgentClusterInstall 自定义资源时,也可以为受管集群配置 IPv6 地址。

流程

  1. AgentClusterInstall 自定义资源中,修改 IPv6 地址的 clusterNetworkserviceNetwork

    apiVersion: extensions.hive.openshift.io/v1beta1
    kind: AgentClusterInstall
    metadata:
      # Only include the annotation if using OVN, otherwise omit the annotation
      annotations:
        agent-install.openshift.io/install-config-overrides: '{"networking":{"networkType":"OVNKubernetes"}}'
      name: <cluster_name>
      namespace: <cluster_name>
    spec:
      clusterDeploymentRef:
        name: <cluster_name>
      imageSetRef:
        name: <cluster_image_set>
      networking:
        clusterNetwork:
        - cidr: "fd01::/48"
          hostPrefix: 64
        machineNetwork:
        - cidr: <machine_network_cidr>
        serviceNetwork:
        - "fd02::/112"
      provisionRequirements:
        controlPlaneAgents: 1
        workerAgents: 0
      sshPublicKey: <public_key>
  2. 使用您定义的 IPv6 地址更新 NMStateConfig 自定义资源。

19.13.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. 为受管集群重新创建自定义资源。