1.17. 使用托管的 control plane 集群(技术预览)

带有 multicluster engine operator 2.0 的 Red Hat Advanced Cluster Management for Kubernetes 版本 2.5 可以使用两个不同的 control plane 配置来部署 Red Hat OpenShift Container Platform 集群。独立配置使用多个专用虚拟机或物理机器来托管 OpenShift Container Platform control plane。您可以置备托管的 control plane,将 OpenShift Container Platform control plane 置备为托管服务集群中的 pod,而无需为每个 control-plane 专用物理机器。

注: 此功能还可在没有 Red Hat Advanced Cluster Management for Kubernetes 的情况下与多集群引擎 operator 2.0 一同使用。

对于 Red Hat Advanced Cluster Management,Amazon Web Services 作为技术预览提供。您可以托管 Red Hat OpenShift Container Platform 版本 4.10.7 及更新版本的 control plane。

control plane 作为单一命名空间中包含的 pod 运行,并与托管的 control plane 集群关联。当 OpenShift Container Platform 置备这种类型的托管集群时,它会置备一个独立于 control plane 的 worker 节点。

查看托管 control plane 集群的以下优点:

  • 通过删除对专用 control plane 节点的需求来降低成本
  • 引入 control plane 和工作负载的隔离,改进了隔离并减少可能需要更改的配置错误
  • 通过删除 control-plane 节点 bootstrap 的要求来显著减少集群置备时间
  • 支持 turn-key 部署或完全自定义的 OpenShift Container Platform 置备

在以下产品文档中,请参阅使用托管的 control plane 的更多信息:

1.17.1. 配置托管的 control plane

配置托管的 control plane 需要托管服务集群和一个托管的集群。通过在现有集群中部署 HyperShift Operator,您可以让该集群部署到托管服务集群中,并开始创建托管集群。

托管 control plane 是一个技术预览功能,因此相关组件默认是禁用的。通过编辑 multiclusterengine 自定义资源来启用该功能,将 spec.overrides.components[?(@.name=='hypershift-preview')] 设置为 true

输入以下命令来确保启用托管 control planes 功能:

oc patch mce multiclusterengine-sample--type=merge -p '{"spec":{"overrides":{"components":[{"name":"hypershift-preview","enabled": true}]}}}'

1.17.1.1. 配置托管服务集群

您可以通过将现有集群配置为充当托管服务集群来部署托管 control plane。托管的服务集群是托管 control plane 的 OpenShift Container Platform 集群,可以是 hub 集群或一个 OpenShift Container Platform 受管集群。

1.17.1.1.1. 先决条件

您必须有以下先决条件才能配置托管服务集群:

  • 至少一个由 Red Hat OpenShift Container Platform 管理的集群上安装 multicluster engine operator。在安装 Red Hat Advanced Cluster Management 版本 2.5 及更新的版本时,多集群引擎 Operator 会被自动安装,也可以在没有 Red Hat Advanced Cluster Management 作为 OpenShift Container Platform OperatorHub 中的 Operator 的情况下安装。
  • 如果您希望 Red Hat Advanced Cluster Management hub 集群作为托管服务集群,则必须通过完成以下步骤将 local-cluster 配置为您的托管服务集群:

    1. 创建名为 import-hub.yaml 的 YAML 文件,类似以下示例:

      apiVersion: cluster.open-cluster-management.io/v1
      kind: ManagedCluster
      metadata:
        labels:
          local-cluster: "true"
        name: local-cluster
      spec:
        hubAcceptsClient: true
        leaseDurationSeconds: 60
    2. 使用以下命令应用该文件:

      oc apply -f import-hub.yaml

    由自身管理的 hub 集群在集群列表中被指定为 local-cluster

1.17.1.1.2. 配置托管服务集群

在安装 multicluster engine operator 的集群上完成以下步骤,将 OpenShift Container Platform 受管集群启用为托管服务集群:

  1. 如果您计划在 AWS 上创建和管理托管集群,请为 HyperShift operator 创建一个名为 hypershift-operator-oidc-provider-s3-credentials 的 OIDC S3 凭证 secret。将 secret 保存到受管集群命名空间中,这是用作托管服务集群的受管集群的命名空间。如果您使用 local-cluster,请在 local-cluster 命名空间中创建 secret

    secret 必须包含 3 个字段。bucket 字段包含一个 S3 存储桶,它可以访问您的 HyperShift 集群的主机 OIDC 发现文档。credentials 字段是对文件的引用,其中包含可访问存储桶的默认配置集凭证。默认情况下,HyperShift 仅使用 default 配置集来运行 bucketregion 字段指定 S3 存储桶的区域。

    有关 secret 的更多信息,请参阅 HyperShift 文档中的 Getting started。以下示例显示了 AWS secret 模板示例:

    oc create secret generic hypershift-operator-oidc-provider-s3-credentials --from-file=credentials=$HOME/.aws/credentials --from-literal=bucket=<s3-bucket-for-hypershift>
    --from-literal=region=<region> -n <hypershift-hosting-service-cluster>

    注:不会自动启用 secret 的恢复备份。运行以下命令添加启用 hypershift-operator-oidc-provider-s3-credentials secret 的标签,以便为灾难恢复进行备份:

    oc label secret hypershift-operator-oidc-provider-s3-credentials -n <hypershift-hosting-service-cluster> cluster.open-cluster-management.io/backup=""
  2. 安装 HyperShift 附加组件。

    托管 HyperShift 操作器的集群是托管服务集群。此步骤使用 hypershift-addon 在受管集群上安装 HyperShift operator。

    1. 通过创建一个类似以下示例的文件来创建 ManagedClusterAddon HyperShift 附加组件:

      apiVersion: addon.open-cluster-management.io/v1alpha1
      kind: ManagedClusterAddOn
      metadata:
        name: hypershift-addon
        namespace: <managed-cluster-name>
      spec:
        installNamespace: open-cluster-management-agent-addon

      managed-cluster-name 替换为您要在其中安装 HyperShift 命名空间的受管集群的名称。如果要在 Red Hat Advanced Cluster Management hub 集群上安装,请使用 local-cluster 作为这个值。

    2. 运行以下命令来应用该文件:

      oc apply -f <filename>

      使用您创建的文件的名称替换 filename

  3. 运行以下命令确认已安装 hypershift-addon:

    oc get managedclusteraddons -n <hypershift-hosting-service-cluster> hypershift-addon

    当安装了附加组件时,输出类似以下示例:

    NAME               AVAILABLE   DEGRADED   PROGRESSING
    hypershift-addon   True

您的 HyperShift 附加组件已经安装,且托管服务集群可用于管理 HyperShift 集群。

1.17.1.2. 部署托管集群

安装 HyperShift operator 并将现有集群启用为托管服务集群后,您可以通过创建一个 HypershiftDeployment 自定义资源来置备 HyperShift 托管的集群。

  1. 使用控制台或文件添加将云供应商 secret 创建为凭证。您必须具有为集群创建基础架构资源的权限,如 VPC、子网和 NAT 网关。帐户也必须与您的客户机集群的帐户对应,其中您的 worker 处于活动状态。有关所需权限的更多信息,请参阅 HyperShift 文档中的创建 AWS 基础架构和 IAM 资源

    以下示例显示了 AWS 的格式:

    apiVersion: v1
    metadata:
      name: my-aws-cred
      namespace: default      # Where you create HypershiftDeployment resources
    type: Opaque
    kind: Secret
    stringData:
      ssh-publickey:          # Value
      ssh-privatekey:         # Value
      pullSecret:             # Value, required
      baseDomain:             # Value, required
      aws_secret_access_key:  # Value, required
      aws_access_key_id:      # Value, required
    • 要使用控制台创建此 secret,请通过访问导航菜单中的 Credentials 来创建步骤。
    • 要使用命令行创建 secret,请运行以下命令:

      oc create secret generic <my-secret> -n <hypershift-deployment-namespace> --from-literal=baseDomain='your.domain.com' --from-literal=aws_access_key_id='your-aws-access-key' --from-literal=aws_secret_access_key='your-aws-secret-key' --from-literal=pullSecret='your-quay-pull-secret' --from-literal=ssh-publickey='your-ssh-publickey' --from-literal=ssh-privatekey='your-ssh-privatekey'

      注:不会自动启用 secret 的恢复备份。运行以下命令来添加可备份 secret 的标签:

      oc label secret <my-secret> -n <hypershift-deployment-namespace> cluster.open-cluster-management.io/backup=""
  2. 在云供应商 secret 命名空间中创建 HypershiftDeployment 自定义资源文件。HypershiftDeployment 自定义资源在供应商帐户中创建基础架构,配置创建的基础架构计算容量,置备使用托管控制平面的 nodePools,并在托管服务集群中创建托管控制平面。

    1. 创建包含类似以下示例的信息的文件:

      apiVersion: cluster.open-cluster-management.io/v1alpha1
      kind: HypershiftDeployment
      metadata:
        name: <cluster>
        namespace: default
      spec:
        hostingCluster: <hosting-service-cluster>
        hostingNamespace: clusters
        hostedClusterSpec:
          networking:
            machineCIDR: 10.0.0.0/16    # Default
            networkType: OpenShiftSDN
            podCIDR: 10.132.0.0/14      # Default
            serviceCIDR: 172.31.0.0/16  # Default
          platform:
            type: AWS
          pullSecret:
            name: <cluster>-pull-secret    # This secret is created by the controller
          release:
            image: quay.io/openshift-release-dev/ocp-release:4.10.15-x86_64  # Default
          services:
          - service: APIServer
            servicePublishingStrategy:
              type: LoadBalancer
          - service: OAuthServer
            servicePublishingStrategy:
              type: Route
          - service: Konnectivity
            servicePublishingStrategy:
              type: Route
          - service: Ignition
            servicePublishingStrategy:
              type: Route
          sshKey: {}
        nodePools:
        - name: <cluster>
          spec:
            clusterName: <cluster>
            management:
              autoRepair: false
              replace:
                rollingUpdate:
                  maxSurge: 1
                  maxUnavailable: 0
                strategy: RollingUpdate
              upgradeType: Replace
            platform:
              aws:
                instanceType: m5.large
              type: AWS
            release:
              image: quay.io/openshift-release-dev/ocp-release:4.10.15-x86_64 # Default
            replicas: 2
        infrastructure:
          cloudProvider:
            name: <my-secret>
          configure: True
          platform:
            aws:
              region: <region>

      cluster 替换为集群的名称。

      hosting-service-cluster 替换为托管 HyperShift operator 的集群的名称。

      my-secret 替换为用于访问您的云供应商的 secret。

      region 替换为云供应商的区域。

    2. 输入以下命令应用该文件:

      oc apply -f <filename>

      您可以参考 API 的字段定义,以确保它们正确。

  3. 运行以下命令,检查 HypershiftDeployment 状态:

    oc get hypershiftdeployment -n default hypershift-demo -w
  4. 在创建了托管集群后,它会自动导入到 hub。您可以在 Red Hat Advanced Cluster Management 控制台中查看集群列表或运行以下命令来验证它:

    oc get managedcluster <hypershiftDeployment.Spec.infraID>

1.17.1.3. 访问托管服务集群

现在,您可以访问集群。访问 secret 存储在 hypershift-hosting-service-cluster 命名空间中。此命名空间与托管服务集群的名称相同。了解以下格式:

  • kubeconfig secret: <hypershiftDeployment.Spec.hostingNamespace>-<hypershiftDeployment.Name>-admin-kubeconfig (clusters-hypershift-demo-admin-kubeconfig)
  • kubeadmin password secret: <hypershiftDeployment.Spec.hostingNamespace>-<hypershiftDeployment.Name>-kubeadmin-password (clusters-hypershift-demo-kubeadmin-password)

1.17.2. 禁用托管的 control plane 资源

禁用托管的 control plane 集群功能时,您必须销毁 HyperShift 受管集群并卸载 HyperShift Operator。

1.17.2.1. 销毁 HyperShift 托管的集群

要销毁 HyperShift 托管集群,请运行以下命令删除 HypershiftDeployment 资源:

oc delete -f <HypershiftDeployment_yaml_file_name>

或者

oc delete hd -n <HypershiftDeployment_namespace> <HypershiftDeployment_resource_name>

1.17.2.2. 卸载 HyperShift Operator

要从管理或托管服务集群中卸载 HyperShift Operator,请运行以下命令从管理集群中删除 hypershift-addon ManagedClusterAddon

oc delete managedclusteraddon -n <hypershift-management-cluster> hypershift-addon