1.7. 托管 control plane(技术预览)

使用 multicluster engine operator 集群管理,您可以使用两个不同的 control plane 配置部署 OpenShift Container Platform 集群:独立或托管的 control plane。独立配置使用专用虚拟机或物理机器来托管 OpenShift Container Platform control plane。使用 OpenShift Container Platform 托管 control plane,您可以在托管集群中创建 pod 作为 control plane,而无需为每个 control plane 专用物理机器。

为 OpenShift Container Platform 托管 control plane 作为 Amazon Web Services (AWS)和裸机上的技术预览功能提供。您可以在 OpenShift Container Platform 版本 4.10.7 及更高版本中托管 control plane。

注: 在托管 control plane 的同一平台上运行 hub 集群和 worker。

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.7.1. 在 AWS 上配置托管集群(技术预览)

要配置托管的 control plane,您需要托管集群和一个托管的集群。通过使用 hypershift-addon 受管集群附加组件在现有受管集群上部署 HyperShift operator,您可以将该集群启用为托管集群,并开始创建托管集群。

multicluster engine operator 2.2 仅支持默认的 local-cluster 和 hub 集群作为托管集群。

托管 control plane 是一个技术预览功能,因此相关组件默认是禁用的。

您可以通过将现有集群配置为充当托管集群来部署托管 control plane。托管集群是托管 control plane 的 Red Hat OpenShift Container Platform 集群。Red Hat Advanced Cluster Management 2.7 可以使用 hub 集群(也称为 local-cluster )作为托管集群。请参阅以下主题以了解如何将 local-cluster 配置为托管集群。

最佳实践: 确保在托管 control plane 的同一平台上运行 hub 集群和 worker。

1.7.1.1. 先决条件

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

  • Kubernetes operator 2.2 及更新版本的多集群引擎安装在 OpenShift Container Platform 集群中。安装 Red Hat Advanced Cluster Management 时会自动安装 multicluster engine operator。在没有 Red Hat Advanced Cluster Management 作为来自 OpenShift Container Platform OperatorHub 的 Operator 的情况下,也可以安装 multicluster engine operator。
  • multicluster engine operator 必须至少有一个受管 OpenShift Container Platform 集群。local-cluster 在多集群引擎 operator 2.2 及更新的版本中自动导入。有关 local-cluster 的更多信息,请参阅高级配置。您可以运行以下命令来检查 hub 集群的状态:

    oc get managedclusters local-cluster
  • 托管集群至少有 3 个 worker 节点来运行 HyperShift Operator。
  • AWS 命令行界面。

1.7.1.2. 创建 Amazon Web Services S3 存储桶和 S3 OIDC secret

如果您计划在 AWS 上创建和管理托管集群,请完成以下步骤:

  1. 创建一个 S3 存储桶,其具有集群托管 OIDC 发现文档的公共访问权限。

    • 要在 us-east-1 区域中创建存储桶,请输入以下代码:

      BUCKET_NAME=<your_bucket_name>
      aws s3api create-bucket --bucket $BUCKET_NAME
      aws s3api delete-public-access-block --bucket $BUCKET_NAME
      echo '{
          "Version": "2012-10-17",
          "Statement": [
              {
                  "Effect": "Allow",
                  "Principal": "*",
                  "Action": "s3:GetObject",
                  "Resource": "arn:aws:s3:::${BUCKET_NAME}/*"
              }
          ]
      }' | envsubst > policy.json
      aws s3api put-bucket-policy --bucket $BUCKET_NAME --policy file://policy.json
    • 要在 us-east-1 区域以外的区域中创建存储桶,请输入以下代码:

      BUCKET_NAME=your-bucket-name
      REGION=us-east-2
      aws s3api create-bucket --bucket $BUCKET_NAME \
        --create-bucket-configuration LocationConstraint=$REGION \
        --region $REGION
      aws s3api delete-public-access-block --bucket $BUCKET_NAME
      echo '{
          "Version": "2012-10-17",
          "Statement": [
              {
                  "Effect": "Allow",
                  "Principal": "*",
                  "Action": "s3:GetObject",
                  "Resource": "arn:aws:s3:::${BUCKET_NAME}/*"
              }
          ]
      }' | envsubst > policy.json
      aws s3api put-bucket-policy --bucket $BUCKET_NAME --policy file://policy.json
  2. 为 HyperShift Operator 创建名为 hypershift-operator-oidc-provider-s3-credentials 的 OIDC S3 secret。
  3. 将 secret 保存到 local-cluster 命名空间中。
  4. 请参阅下表来验证 secret 是否包含以下字段:

    字段名称描述

    bucket

    包含对 HyperShift 集群托管 OIDC 发现文档的公共访问权限的 S3 存储桶。

    credentials

    对包含可以访问存储桶的 default 配置集凭证的文件的引用。默认情况下,HyperShift 仅使用 default 配置集来运行 bucket

    region

    指定 S3 存储桶的区域。

    以下示例显示了 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 local-cluster

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

    oc label secret hypershift-operator-oidc-provider-s3-credentials -n local-cluster cluster.open-cluster-management.io/backup=true

1.7.1.3. 创建可路由的公共区

要访问客户机集群中的应用程序,必须路由公共区。如果 public 区域存在,请跳过这一步。否则,公共区将影响现有功能。

运行以下命令为集群 DNS 记录创建一个公共区:

BASE_DOMAIN=www.example.com
aws route53 create-hosted-zone --name $BASE_DOMAIN --caller-reference $(whoami)-$(date --rfc-3339=date)

1.7.1.4. 启用外部 DNS

如果您计划使用服务级别 DNS (外部 DNS)置备托管的 control plane 集群,请完成以下步骤:

  1. 为 HyperShift Operator 创建一个 AWS 凭证 secret,并在 local-cluster 命名空间中将其命名为 hypershift-operator-external-dns-credentials
  2. 请参阅下表来验证 secret 是否包含所需字段:

    字段名称描述可选或必需的

    provider

    管理服务级别 DNS 区的 DNS 提供程序。

    必需

    domain-filter

    服务级别域。

    必需

    credentials

    支持所有外部 DNS 类型的凭据文件。

    使用 AWS 密钥时的可选

    aws-access-key-id

    凭证访问密钥 id。

    使用 AWS DNS 服务时的可选

    aws-secret-access-key

    凭证访问密钥 secret。

    使用 AWS DNS 服务时的可选

    如需更多信息,请参阅 HyperShift 文档中的 外部 DNS。以下示例显示了 hypershift-operator-external-dns-credentials secret 模板示例:

    oc create secret generic hypershift-operator-external-dns-credentials --from-literal=provider=aws --from-literal=domain-filter=service.my.domain.com --from-file=credentials=<credentials-file> -n local-cluster

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

    oc label secret hypershift-operator-external-dns-credentials -n local-cluster cluster.open-cluster-management.io/backup=""

1.7.1.6. 启用托管的 control plane 功能

托管的 control plane 功能默认禁用。启用该功能还会自动启用 hypershift-addon 受管集群附加组件。您可以运行以下命令来启用该功能:

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

运行以下命令,以验证 MultiClusterEngine 自定义资源中是否启用了 hypershift-previewhypershift-local-hosting 功能。

oc get mce multiclusterengine -o yaml
apiVersion: multicluster.openshift.io/v1
kind: MultiClusterEngine
metadata:
  name: multiclusterengine
spec:
  overrides:
    components:
    - name: hypershift-preview
      enabled: true
    - name: hypershift-local-hosting
      enabled: true
1.7.1.6.1. 为 local-cluster 手动启用 hypershift-addon 受管集群附加组件

启用托管的 control plane 功能会自动启用 hypershift-addon 受管集群附加组件。如果您需要手动启用 hypershift-addon 受管集群附加组件,请完成以下步骤,使用 hypershift-addonlocal-cluster 上安装 HyperShift Operator:

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

    apiVersion: addon.open-cluster-management.io/v1alpha1
    kind: ManagedClusterAddOn
    metadata:
      name: hypershift-addon
      namespace: local-cluster
    spec:
      installNamespace: open-cluster-management-agent-addon
  2. 运行以下命令来应用该文件:

    oc apply -f <filename>

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

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

    oc get managedclusteraddons -n local-cluster hypershift-addon
  4. 如果安装了附加组件,输出类似以下示例:

    NAME               AVAILABLE   DEGRADED   PROGRESSING
    hypershift-addon   True

您的 HyperShift 附加组件已安装,托管集群可用于创建和管理 HyperShift 集群。

1.7.1.7. 安装托管的 control plane CLI

托管的 control plane (HyperShift) CLI 用于创建和管理 OpenShift Container Platform 托管 control plane 集群。启用托管的 control plane 功能后,您可以通过完成以下步骤来安装托管的 control plane CLI:

  1. 在 OpenShift Container Platform 控制台中点 Help 图标 &gt; Command Line Tools
  2. 为您的平台点 Download hypershift CLI

    注: 下载只有在启用了 hypershift-preview 功能时才可见。

  3. 运行以下命令来解包下载的归档:

    tar xvzf hypershift.tar.gz
  4. 运行以下命令使二进制文件可执行:

    chmod +x hypershift
  5. 运行以下命令,将二进制文件移到路径的目录中:

    sudo mv hypershift /usr/local/bin/.

现在,您可以使用 hypershift create cluster 命令来创建和管理托管集群。使用以下命令列出可用的参数:

hypershift create cluster aws --help

1.7.1.8. 其他资源

1.7.2. 在 AWS 上管理托管的 control plane 集群(技术预览)

您可以使用 multicluster engine for Kubernetes operator 控制台创建 Red Hat OpenShift Container Platform 托管的集群。托管 control plane 在 Amazon Web Services (AWS)上作为技术预览提供。如果在 AWS 上使用托管的 control plane,您可以使用控制台创建托管集群,也可以使用控制台或 CLI 导入托管集群。

1.7.2.1. 先决条件

您必须先配置托管的 control plane,然后才能创建托管的 control plane 集群。如需更多信息,请参阅配置托管的 control plane (技术预览)。

1.7.2.2. 使用控制台在 AWS 上创建托管的 control plane 集群

要从多集群引擎 operator 控制台创建托管的 control plane 集群,请进入到 Infrastructure > Clusters。在 Clusters 页面中,点 Create cluster > Amazon Web Services > Hosted 并完成控制台中的步骤。

注: 在到达控制台后,使用提供的基本信息来在命令行中创建集群。

1.7.2.3. 使用命令行在 AWS 上部署托管集群

设置 HyperShift 命令行界面并将 local-cluster 启用为托管集群后,您可以通过完成以下步骤在 AWS 上部署托管集群:

  1. 按如下方式设置环境变量,根据需要将变量替换为您的凭证:

    export REGION=us-east-1
    export CLUSTER_NAME=clc-name-hs1
    export INFRA_ID=clc-name-hs1
    export BASE_DOMAIN=dev09.red-chesterfield.com
    export AWS_CREDS=$HOME/name-aws
    export PULL_SECRET=/Users/username/pull-secret.txt
    export BUCKET_NAME=acmqe-hypershift
    export BUCKET_REGION=us-east-1
  2. 验证 CLUSTER_NAMEINFRA_ID 是否有相同的值,否则集群可能无法在 Kubernetes operator 控制台的多集群引擎中显示。要查看每个变量的描述,请运行以下命令

    hypershift create cluster aws --help
  3. 验证您是否已登录到 hub 集群。
  4. 运行以下命令来创建托管集群:

    hypershift create cluster aws \
        --name $CLUSTER_NAME \
        --infra-id $INFRA_ID \
        --aws-creds $AWS_CREDS \
        --pull-secret $PULL_SECRET \
        --region $REGION \
        --generate-ssh \
        --node-pool-replicas 3 \
        --namespace <hypershift-hosting-service-cluster>

    注: 默认情况下,所有 HostedClusterNodePool 自定义资源都是在 集群 命名空间中创建的。如果指定了 --namespace <namespace& gt; 参数,则会在您选择的命名空间中创建 HostedClusterNodePool 自定义资源。

  5. 您可以运行以下命令来检查托管集群的状态:

    oc get hostedclusters -n <hypershift-hosting-service-cluster>

1.7.2.4. 在 AWS 上导入托管的 control plane 集群

您可以使用控制台导入托管的 control plane 集群。

  1. 进入 Infrastructure > Clusters 并选择您要导入的托管集群。
  2. Import hosted cluster

    注: 对于 发现的 托管集群,您还可以从控制台导入,但集群必须处于可升级状态。如果托管集群没有处于可升级状态,则在集群中导入会被禁用,因为托管的 control plane 不可用。点 Import 开始进程。当集群接收更新时,状态为 Importing,然后变为 Ready

您还可以通过完成以下步骤,使用 CLI 在 AWS 上导入托管的 control plane 集群:

  1. 运行以下命令,在 HostedCluster 自定义资源中添加注解:

    oc edit hostedcluster <cluster_name> -n clusters

    <cluster_name > 替换为托管集群的名称。

  2. 运行以下命令,将注解添加到 HostedCluster 自定义资源中:

    cluster.open-cluster-management.io/hypershiftdeployment: local-cluster/<cluster_name>
    cluster.open-cluster-management.io/managedcluster-name: <cluster_name>

    <cluster_name > 替换为托管集群的名称。

  3. 使用以下示例 YAML 文件创建 ManagedCluster 资源:

    apiVersion: cluster.open-cluster-management.io/v1
    kind: ManagedCluster
    metadata:
      annotations:
        import.open-cluster-management.io/hosting-cluster-name: local-cluster
        import.open-cluster-management.io/klusterlet-deploy-mode: Hosted
        open-cluster-management/created-via: other
      labels:
        cloud: auto-detect
        cluster.open-cluster-management.io/clusterset: default
        name: <cluster_name>
        vendor: OpenShift
      name: <cluster_name>
    spec:
      hubAcceptsClient: true
      leaseDurationSeconds: 60

    <cluster_name > 替换为托管集群的名称。

  4. 运行以下命令以应用资源:

    oc apply -f <file_name>

    将 <file_name> 替换为您在上一步中创建的 YAML 文件名。

  5. 使用以下示例 YAML 文件创建 KlusterletAddonConfig 资源。这只适用于 Red Hat Advanced Cluster Management。如果您只安装了 multicluster engine operator,请跳过这一步:

    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: true
      iamPolicyController:
        enabled: true
      policyController:
        enabled: true
      searchCollector:
        enabled: false

    <cluster_name > 替换为托管集群的名称。

  6. 运行以下命令以应用资源:

    oc apply -f <file_name>

    将 <file_name> 替换为您在上一步中创建的 YAML 文件名。

  7. 导入过程完成后,您的托管集群会在控制台中可见。您还可以运行以下命令来检查托管集群的状态:

    oc get managedcluster <cluster_name>

1.7.2.5. 访问 AWS 上的托管集群

托管 control plane 集群的访问 secret 存储在 hypershift-management-cluster 命名空间中。了解以下 secret 名称格式:

  • kubeconfig secret: & lt;hostingNamespace>-<name>-admin-kubeconfig (clusters-hypershift-demo-admin-kubeconfig)
  • kubeadmin password secret: & lt;hostingNamespace>-<name>-kubeadmin-password (clusters-hypershift-demo-kubeadmin-password)

1.7.2.6. 销毁 AWS 上的托管集群

要销毁托管的集群及其受管集群资源,请完成以下步骤:

  1. 运行以下命令来删除托管集群及其后端资源:

    hypershift destroy cluster aws --name <cluster_name> --infra-id <infra_id> --aws-creds <aws-credentials> --base-domain <base_domain> --destroy-cloud-resources

    根据需要替换名称。

  2. 运行以下命令,删除 multicluster engine operator 上的受管集群资源:

    oc delete managedcluster <cluster_name>

    cluster_name 替换为集群的名称。

1.7.3. 在裸机上配置托管集群(技术预览)

要配置托管的 control plane,您需要一个 hosting(进行托管)的集群和一个 hosted(被托管)的集群。您可以使用 hypershift 附加组件将受管集群启用为托管集群,以将 HyperShift Operator 部署到该集群中。然后,您可以开始创建托管集群。

multicluster engine operator 2.2 仅支持默认的 local-cluster 和 hub 集群作为托管集群。

托管 control plane 是一个技术预览功能,因此相关组件默认是禁用的。

您可以通过将集群配置为充当托管集群来部署托管 control plane。托管的集群是托管 control plane 的 OpenShift Container Platform 集群。

在 Red Hat Advanced Cluster Management 2.7 中,您可以使用受管 hub 集群(也称为 local-cluster ),作为托管集群。

重要:

  • 在托管 control plane 的同一平台上运行 hub 集群和 worker。
  • 要在裸机上置备托管的 control plane,您可以使用 Agent 平台。Agent 平台使用中央基础架构管理服务将 worker 节点添加到托管集群。
  • 每个裸机主机都必须使用中央基础架构管理提供的发现镜像启动。您可以使用 Cluster-Baremetal-Operator 手动启动主机或通过自动化启动主机。每个主机启动后,它运行一个 Agent 进程来发现主机详情并完成安装。Agent 自定义资源代表每个主机。
  • 当使用 Agent 平台创建托管集群时,HyperShift 在托管的 control plane 命名空间中安装 Agent Cluster API 供应商。
  • 当您扩展节点池时,会创建一个机器。Cluster API 供应商找到一个经过批准的代理,正在传递验证,当前没有被使用,并满足节点池规格中指定的要求。您可以通过检查其状态和条件来监控代理的安装。
  • 当您缩减节点池时,代理会从对应的集群中绑定。在重复使用集群前,您必须使用 Discovery 镜像更新节点数量来重启它们。

1.7.3.1. 先决条件

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

  • 您需要 multicluster engine for Kubernetes operator 2.2 及之后的版本安装在 OpenShift Container Platform 集群中。安装 Red Hat Advanced Cluster Management 时会自动安装 multicluster engine operator。您还可以在没有 Red Hat Advanced Cluster Management 作为 OpenShift Container Platform OperatorHub 的 Operator 的情况下安装 multicluster engine operator。
  • 您需要 multicluster engine operator,必须至少有一个受管 OpenShift Container Platform 集群。local-cluster 在多集群引擎 operator 2.2 及更新的版本中自动导入。有关 local-cluster 的更多信息,请参阅高级配置。您可以运行以下命令来检查 hub 集群的状态:

    oc get managedclusters local-cluster
  • 您需要至少 3 个 worker 节点的托管集群来运行 HyperShift Operator。
  • 您必须启用托管的 control plane 功能。如需更多信息,请参阅启用托管的 control plane 功能

1.7.3.2. 配置 DNS

托管集群的 API 服务器作为 NodePort 服务公开。必须存在 api.${HOSTED_CLUSTER_NAME}.${BASEDOMAIN} 的 DNS 条目,指向可访问 API 服务器的目的地。

DNS 条目可以像一个记录一样简单,指向运行托管 control plane 的受管集群中的一个节点。该条目也可以指向部署的负载均衡器,以将传入的流量重定向到 Ingress pod。

请参见以下 DNS 配置示例:

api.example.krnl.es.    IN A 192.168.122.20
api.example.krnl.es.    IN A 192.168.122.21
api.example.krnl.es.    IN A 192.168.122.22
api-int.example.krnl.es.    IN A 192.168.122.20
api-int.example.krnl.es.    IN A 192.168.122.21
api-int.example.krnl.es.    IN A 192.168.122.22
`*`.apps.example.krnl.es. IN A 192.168.122.23

1.7.3.3. 其他资源

1.7.4. 在裸机上管理托管的 control plane 集群(技术预览)

您可以使用 Kubernetes operator 的多集群引擎来创建和管理 Red Hat OpenShift Container Platform 托管的集群。托管 control plane 在 Amazon Web Services (AWS)和裸机上作为技术预览提供。

1.7.4.1. 先决条件

您必须先为裸机配置托管的 control plane,然后才能创建托管的 control plane 集群。如需更多信息 ,请参阅在裸机上配置托管集群(技术预览)。

1.7.4.2. 使用控制台在裸机代理上创建托管的 control plane 集群

要从多集群引擎 operator 控制台创建托管的 control plane 集群,请进入到 Infrastructure > Clusters。在 Clusters 页面中,点 Create cluster > Host Inventory > Hosted control plane,并完成控制台中的步骤。

重要: 当您创建集群时,多集群引擎 operator 控制器为集群及其资源创建一个命名空间。确保只在该命名空间中包含该集群实例的资源。销毁集群会删除命名空间和所有资源。

如果要将集群添加到现有的集群集中,则需要在集群设置上具有正确的权限来添加它。如果在创建集群时没有 cluster-admin 权限,则必须选择一个具有 clusterset-admin 权限的集群集。如果您在指定的集群集中没有正确的权限,集群创建会失败。如果您没有任何集群设置选项,请联络您的集群管理员,为您提供 clusterset-admin 权限。

每个受管集群都必须与受管集群集关联。如果您没有将受管集群分配给 ManagedClusterSet,则会自动添加到 default 受管集群集中。

发行镜像标识用于创建集群的 OpenShift Container Platform 镜像的版本。托管的 control plane 集群必须使用其中一个提供的发行镜像。

基础架构环境中提供的代理信息会自动添加到代理字段中。您可以使用现有信息,覆盖它,或者添加信息(如果要启用代理)。以下列表包含创建代理所需的信息:

  • HTTP 代理 URL:用作 HTTP 流量的代理的 URL。
  • HTTPS 代理 URL:用于 HTTPS 流量的安全代理 URL。如果没有提供值,则使用相同的值 HTTP Proxy URL,用于 HTTPHTTPS
  • 无代理域:应当绕过代理的以逗号分隔的域列表。使用一个句点 (.) 开始的域名,包含该域中的所有子域。添加一个星号 * 以绕过所有目的地的代理。
  • Additional trust bundle:访问镜像 registry 所需的证书文件内容。

注: 您必须运行随集群提供的集群详情的 oc 命令,以导入集群。创建集群时,它不会使用 Red Hat Advanced Cluster Management 管理自动配置。

1.7.4.3. 使用命令行在裸机上创建托管集群

验证您是否为集群配置了默认存储类。否则,可能会以待处理的 PVC 结束。

  1. 输入以下命令:

    export CLUSTERS_NAMESPACE="clusters"
    export HOSTED_CLUSTER_NAME="example"
    export HOSTED_CONTROL_PLANE_NAMESPACE="${CLUSTERS_NAMESPACE}-${HOSTED_CLUSTER_NAME}"
    export BASEDOMAIN="krnl.es"
    export PULL_SECRET_FILE=$PWD/pull-secret
    export MACHINE_CIDR=192.168.122.0/24
    # Typically the namespace is created by the hypershift-operator
    # but agent cluster creation generates a capi-provider role that
    # needs the namespace to already exist
    oc create ns ${HOSTED_CONTROL_PLANE_NAMESPACE}
    
    hypershift create cluster agent \
        --name=${HOSTED_CLUSTER_NAME} \
        --pull-secret=${PULL_SECRET_FILE} \
        --agent-namespace=${HOSTED_CONTROL_PLANE_NAMESPACE} \
        --base-domain=${BASEDOMAIN} \
        --api-server-address=api.${HOSTED_CLUSTER_NAME}.${BASEDOMAIN} \
  2. 片刻后,输入以下命令验证托管的 control plane pod 是否正在运行:

    oc -n ${HOSTED_CONTROL_PLANE_NAMESPACE} get pods

    输出示例

    NAME                                             READY   STATUS    RESTARTS   AGE
    capi-provider-7dcf5fc4c4-nr9sq                   1/1     Running   0          4m32s
    catalog-operator-6cd867cc7-phb2q                 2/2     Running   0          2m50s
    certified-operators-catalog-884c756c4-zdt64      1/1     Running   0          2m51s
    cluster-api-f75d86f8c-56wfz                      1/1     Running   0          4m32s
    cluster-autoscaler-7977864686-2rz4c              1/1     Running   0          4m13s
    cluster-network-operator-754cf4ffd6-lwfm2        1/1     Running   0          2m51s
    cluster-policy-controller-784f995d5-7cbrz        1/1     Running   0          2m51s
    cluster-version-operator-5c68f7f4f8-lqzcm        1/1     Running   0          2m51s
    community-operators-catalog-58599d96cd-vpj2v     1/1     Running   0          2m51s
    control-plane-operator-f6b4c8465-4k5dh           1/1     Running   0          4m32s
    etcd-0                                           1/1     Running   0          4m13s
    hosted-cluster-config-operator-c4776f89f-dt46j   1/1     Running   0          2m51s
    ignition-server-7cd8676fc5-hjx29                 1/1     Running   0          4m22s
    ingress-operator-75484cdc8c-zhdz5                1/2     Running   0          2m51s
    konnectivity-agent-c5485c9df-jsm9s               1/1     Running   0          4m13s
    konnectivity-server-85dc754888-7z8vm             1/1     Running   0          4m13s
    kube-apiserver-db5fb5549-zlvpq                   3/3     Running   0          4m13s
    kube-controller-manager-5fbf7b7b7b-mrtjj         1/1     Running   0          90s
    kube-scheduler-776c59d757-kfhv6                  1/1     Running   0          3m12s
    machine-approver-c6b947895-lkdbk                 1/1     Running   0          4m13s
    oauth-openshift-787b87cff6-trvd6                 2/2     Running   0          87s
    olm-operator-69c4657864-hxwzk                    2/2     Running   0          2m50s
    openshift-apiserver-67f9d9c5c7-c9bmv             2/2     Running   0          89s
    openshift-controller-manager-5899fc8778-q89xh    1/1     Running   0          2m51s
    openshift-oauth-apiserver-569c78c4d-568v8        1/1     Running   0          2m52s
    packageserver-ddfffb8d7-wlz6l                    2/2     Running   0          2m50s
    redhat-marketplace-catalog-7dd77d896-jtxkd       1/1     Running   0          2m51s
    redhat-operators-catalog-d66b5c965-qwhn7         1/1     Running   0          2m51s

1.7.4.4. 创建 InfraEnv

InfraEnv 是启动实时 ISO 的主机可以加入为代理的环境。在这种情况下,代理会在与您托管的 control plane 相同的命名空间中创建。

  1. 要创建 InfraEnv,请输入以下命令:

    export SSH_PUB_KEY=$(cat $HOME/.ssh/id_rsa.pub)
    
    envsubst <<"EOF" | oc apply -f -
    apiVersion: agent-install.openshift.io/v1beta1
    kind: InfraEnv
    metadata:
      name: ${HOSTED_CLUSTER_NAME}
      namespace: ${HOSTED_CONTROL_PLANE_NAMESPACE}
    spec:
      pullSecretRef:
        name: pull-secret
      sshAuthorizedKey: ${SSH_PUB_KEY}
    EOF
  2. 要生成允许虚拟机或裸机作为代理加入的 live ISO,请输入以下命令:

    oc -n ${HOSTED_CONTROL_PLANE_NAMESPACE} get InfraEnv ${HOSTED_CLUSTER_NAME} -ojsonpath="{.status.isoDownloadURL}"

1.7.4.5. 添加代理

您可以通过手动将机器配置为使用 live ISO 或使用 Metal3 来添加代理。

  • 要手动添加代理,请按照以下步骤执行:

    1. 下载 live ISO,并使用它来启动节点(裸机或虚拟机)。在启动时,节点与 Assisted Service 通信,并注册为与 InfraEnv 相同的命名空间中的代理。
    2. 创建每个代理后,您可以选择在 spec 中设置 install_disk_idhostname。然后,批准它以指示代理可供使用。

      oc -n ${HOSTED_CONTROL_PLANE_NAMESPACE} get agents

      输出示例

      NAME                                   CLUSTER   APPROVED   ROLE          STAGE
      86f7ac75-4fc4-4b36-8130-40fa12602218                        auto-assign
      e57a637f-745b-496e-971d-1abbf03341ba                        auto-assign

      oc -n ${HOSTED_CONTROL_PLANE_NAMESPACE} patch agent 86f7ac75-4fc4-4b36-8130-40fa12602218 -p '{"spec":{"installation_disk_id":"/dev/sda","approved":true,"hostname":"worker-0.example.krnl.es"}}' --type merge
      
      oc -n ${HOSTED_CONTROL_PLANE_NAMESPACE} patch agent 23d0c614-2caa-43f5-b7d3-0b3564688baa -p '{"spec":{"installation_disk_id":"/dev/sda","approved":true,"hostname":"worker-1.example.krnl.es"}}' --type merge
      oc -n ${HOSTED_CONTROL_PLANE_NAMESPACE} get agents

      输出示例

      NAME                                   CLUSTER   APPROVED   ROLE          STAGE
      86f7ac75-4fc4-4b36-8130-40fa12602218             true       auto-assign
      e57a637f-745b-496e-971d-1abbf03341ba             true       auto-assign

  • 要使用 Metal3 添加代理,请按照以下步骤操作:

    1. 使用 Assisted Service 创建自定义 ISO 和 Baremetal Operator 来执行安装。

      重要: 因为 BareMetalHost 对象是在裸机 Operator 命名空间外创建的,所以您必须将 Operator 配置为监视所有命名空间。

      oc patch provisioning provisioning-configuration --type merge -p '{"spec":{"watchAllNamespaces": true }}'

      metal3 pod 在 openshift-machine-api 命名空间中重启。

    2. 等待 metal3 pod 再次就绪:

      until oc wait -n openshift-machine-api $(oc get pods -n openshift-machine-api -l baremetal.openshift.io/cluster-baremetal-operator=metal3-state -o name) --for condition=containersready --timeout 10s >/dev/null 2>&1 ; do sleep 1 ; done
    3. 创建 BareMetalHost 对象。您需要配置几个启动裸机节点所需的变量。

      • BMC_USERNAME:连接到 BMC 的用户名。
      • BMC_PASSWORD :连接到 BMC 的密码。
      • BMC_IP: Metal3 用来连接到 BMC 的 IP。
      • WORKER_NAME : BaremetalHost 对象的名称(该值也用作主机名)
      • BOOT_MAC_ADDRESS :连接到 MachineNetwork 的 NIC 的 MAC 地址。
      • UUID :Redfish UUID,通常为 1。如果您使用 sushy-tools,这个值是一个较长的 UUID。如果您使用 iDrac,则该值为 System.Embedded.1。您可能需要与供应商进行检查。
      • Red HatFISH_SCHEME: 要使用的 Redfish 供应商。如果您使用使用标准 Redfish 实现的硬件,您可以将此值设置为 redfish-virtualmedia. iDRAC 使用 idrac-virtualmedia。iLO5 使用 ilo5-virtualmedia。您可能需要与供应商进行检查。
      • Red HatFISH: Redfish 连接端点。

        export BMC_USERNAME=$(echo -n "root" | base64 -w0)
        export BMC_PASSWORD=$(echo -n "calvin" | base64 -w0)
        export BMC_IP="192.168.124.228"
        export WORKER_NAME="ocp-worker-0"
        export BOOT_MAC_ADDRESS="aa:bb:cc:dd:ee:ff"
        export UUID="1"
        export REDFISH_SCHEME="redfish-virtualmedia"
        export REDFISH="${REDFISH_SCHEME}://${BMC_IP}/redfish/v1/Systems/${UUID}"
    4. 按照以下步骤创建 BareMetalHost

      1. 创建 BMC Secret:

        oc apply -f -
        apiVersion: v1
        data:
          password: ${BMC_PASSWORD}
          username: ${BMC_USERNAME}
        kind: Secret
        metadata:
          name: ${WORKER_NAME}-bmc-secret
          namespace: ${HOSTED_CONTROL_PLANE_NAMESPACE}
        type: Opaque
      2. 创建 BMH:

        注: infraenvs.agent-install.openshift.io 标签用于指定用于启动 BMH 的 InfraEnvbmac.agent-install.openshift.io/hostname 标签用于手动设置主机名。

        如果要手动指定安装磁盘,您可以使用 BMH 规格中的 rootDeviceHints。如果没有提供 rootDeviceHints,代理会选择最适合安装要求的安装磁盘。有关 rootDeviceHints 的更多信息,请参阅 BareMetalHost 文档中的 rootDeviceHints 部分。

        oc apply -f -
        apiVersion: metal3.io/v1alpha1
        kind: BareMetalHost
        metadata:
          name: ${WORKER_NAME}
          namespace: ${HOSTED_CONTROL_PLANE_NAMESPACE}
          labels:
            infraenvs.agent-install.openshift.io: ${HOSTED_CLUSTER_NAME}
          annotations:
            inspect.metal3.io: disabled
            bmac.agent-install.openshift.io/hostname: ${WORKER_NAME}
        spec:
          automatedCleaningMode: disabled
          bmc:
            disableCertificateVerification: True
            address: ${REDFISH}
            credentialsName: ${WORKER_NAME}-bmc-secret
          bootMACAddress: ${BOOT_MAC_ADDRESS}
          online: true

        代理被自动批准。如果没有批准,请确认 bootMACAddress 正确。

        置备 BMH:

        oc -n ${HOSTED_CONTROL_PLANE_NAMESPACE} get bmh

        输出示例

        NAME           STATE          CONSUMER   ONLINE   ERROR   AGE
        ocp-worker-0   provisioning              true             2m50s

        BMH 最终达到 置备状态

        oc -n ${HOSTED_CONTROL_PLANE_NAMESPACE} get bmh

        输出示例

        NAME           STATE          CONSUMER   ONLINE   ERROR   AGE
        ocp-worker-0   provisioned               true             72s

        provisioned 意味着节点被配置为从 virtualCD 正确启动。显示代理需要一些时间:

        oc -n ${HOSTED_CONTROL_PLANE_NAMESPACE} get agent

        输出示例

        NAME                                   CLUSTER   APPROVED   ROLE          STAGE
        4dac1ab2-7dd5-4894-a220-6a3473b67ee6             true       auto-assign

        代理被自动批准。

      3. 对其他两个节点重复此过程:

        oc -n ${HOSTED_CONTROL_PLANE_NAMESPACE} get agent

        输出示例

        NAME                                   CLUSTER   APPROVED   ROLE          STAGE
        4dac1ab2-7dd5-4894-a220-6a3473b67ee6             true       auto-assign
        d9198891-39f4-4930-a679-65fb142b108b             true       auto-assign
        da503cf1-a347-44f2-875c-4960ddb04091             true       auto-assign

1.7.4.6. 访问托管集群

托管 control plane 正在运行,代理已准备好加入托管集群。在代理加入托管集群前,您需要访问托管集群。

  1. 输入以下命令生成 kubeconfig :

    hypershift create kubeconfig --namespace ${CLUSTERS_NAMESPACE} --name ${HOSTED_CLUSTER_NAME} > ${HOSTED_CLUSTER_NAME}.kubeconfig

    如果访问集群,您可以看到您没有任何节点,并且 ClusterVersion 正在尝试协调 Red Hat OpenShift Container Platform 发行版本:

    oc --kubeconfig ${HOSTED_CLUSTER_NAME}.kubeconfig get clusterversion,nodes

    输出示例

    NAME                                         VERSION   AVAILABLE   PROGRESSING   SINCE   STATUS
    clusterversion.config.openshift.io/version             False       True          8m6s    Unable to apply 4.12z: some cluster operators have not yet rolled out

    要让集群正在运行,您需要向其添加节点。

1.7.4.7. 扩展 NodePool 对象

您可以通过扩展 NodePool 对象将节点添加到托管集群。

  1. 将 NodePool 对象扩展到两个节点:

    oc -n ${CLUSTERS_NAMESPACE} scale nodepool ${NODEPOOL_NAME} --replicas 2

    ClusterAPI 代理供应商随机选择两个代理,然后分配给托管集群。这些代理通过不同的状态,最后将托管集群作为 OpenShift Container Platform 节点加入。状态的变化过程是从 bindingdiscoveringinsufficientinstallinginstalling-in-progressadded-to-existing-cluster

    oc -n ${HOSTED_CONTROL_PLANE_NAMESPACE} get agent

    输出示例

    NAME                                   CLUSTER         APPROVED   ROLE          STAGE
    4dac1ab2-7dd5-4894-a220-6a3473b67ee6   hypercluster1   true       auto-assign
    d9198891-39f4-4930-a679-65fb142b108b                   true       auto-assign
    da503cf1-a347-44f2-875c-4960ddb04091   hypercluster1   true       auto-assign
    
    oc -n ${HOSTED_CONTROL_PLANE_NAMESPACE} get agent -o jsonpath='{range .items[*]}BMH: {@.metadata.labels.agent-install\.openshift\.io/bmh} Agent: {@.metadata.name} State: {@.status.debugInfo.state}{"\n"}{end}'
    
    BMH: ocp-worker-2 Agent: 4dac1ab2-7dd5-4894-a220-6a3473b67ee6 State: binding
    BMH: ocp-worker-0 Agent: d9198891-39f4-4930-a679-65fb142b108b State: known-unbound
    BMH: ocp-worker-1 Agent: da503cf1-a347-44f2-875c-4960ddb04091 State: insufficient

  2. 代理到达 add -to-existing-cluster 状态后,验证您可以看到 OpenShift Container Platform 节点:

    oc --kubeconfig ${HOSTED_CLUSTER_NAME}.kubeconfig get nodes

    输出示例

    NAME           STATUS   ROLES    AGE     VERSION
    ocp-worker-1   Ready    worker   5m41s   v1.24.0+3882f8f
    ocp-worker-2   Ready    worker   6m3s    v1.24.0+3882f8f

    clusteroperators 开始通过将工作负载添加到节点来协调。您还可以看到扩展 NodePool 对象时创建了两台机器:

    oc -n ${HOSTED_CONTROL_PLANE_NAMESPACE} get machines

    输出示例

    NAME                            CLUSTER               NODENAME       PROVIDERID                                     PHASE     AGE   VERSION
    hypercluster1-c96b6f675-m5vch   hypercluster1-b2qhl   ocp-worker-1   agent://da503cf1-a347-44f2-875c-4960ddb04091   Running   15m   4.12z
    hypercluster1-c96b6f675-tl42p   hypercluster1-b2qhl   ocp-worker-2   agent://4dac1ab2-7dd5-4894-a220-6a3473b67ee6   Running   15m   4.12z

    clusterversion 协调最终到达缺少 Ingress 和 Console 集群 Operator 的点:

    oc --kubeconfig ${HOSTED_CLUSTER_NAME}.kubeconfig get clusterversion,co
    
    NAME                                         VERSION   AVAILABLE   PROGRESSING   SINCE   STATUS
    clusterversion.config.openshift.io/version             False       True          40m     Unable to apply 4.12z: the cluster operator console has not yet successfully rolled out
    
    NAME                                                                           VERSION   AVAILABLE   PROGRESSING   DEGRADED   SINCE   MESSAGE
    clusteroperator.config.openshift.io/console                                    4.12z    False       False         False      11m     RouteHealthAvailable: failed to GET route (https://console-openshift-console.apps.hypercluster1.domain.com): Get "https://console-openshift-console.apps.hypercluster1.domain.com": dial tcp 10.19.3.29:443: connect: connection refused
    clusteroperator.config.openshift.io/csi-snapshot-controller                    4.12z    True        False         False      10m
    clusteroperator.config.openshift.io/dns                                        4.12z    True        False         False      9m16s
    clusteroperator.config.openshift.io/image-registry                             4.12z    True        False         False      9m5s
    clusteroperator.config.openshift.io/ingress                                    4.12z    True        False         True       39m     The "default" ingress controller reports Degraded=True: DegradedConditions: One or more other status conditions indicate a degraded state: CanaryChecksSucceeding=False (CanaryChecksRepetitiveFailures: Canary route checks for the default ingress controller are failing)
    clusteroperator.config.openshift.io/insights                                   4.12z    True        False         False      11m
    clusteroperator.config.openshift.io/kube-apiserver                             4.12z    True        False         False      40m
    clusteroperator.config.openshift.io/kube-controller-manager                    4.12z    True        False         False      40m
    clusteroperator.config.openshift.io/kube-scheduler                             4.12z    True        False         False      40m
    clusteroperator.config.openshift.io/kube-storage-version-migrator              4.12z    True        False         False      10m
    clusteroperator.config.openshift.io/monitoring                                 4.12z    True        False         False      7m38s
    clusteroperator.config.openshift.io/network                                    4.12z    True        False         False      11m
    clusteroperator.config.openshift.io/openshift-apiserver                        4.12z    True        False         False      40m
    clusteroperator.config.openshift.io/openshift-controller-manager               4.12z    True        False         False      40m
    clusteroperator.config.openshift.io/openshift-samples                          4.12z    True        False         False      8m54s
    clusteroperator.config.openshift.io/operator-lifecycle-manager                 4.12z    True        False         False      40m
    clusteroperator.config.openshift.io/operator-lifecycle-manager-catalog         4.12z    True        False         False      40m
    clusteroperator.config.openshift.io/operator-lifecycle-manager-packageserver   4.12z    True        False         False      40m
    clusteroperator.config.openshift.io/service-ca                                 4.12z    True        False         False      11m
    clusteroperator.config.openshift.io/storage                                    4.12z    True        False         False      11m

1.7.4.8. 处理入口

每个 OpenShift Container Platform 集群都会设置有一个默认的应用程序入口控制器,该控制器预期关联有外部 DNS 记录。例如,如果您创建一个名为 example 的 HyperShift 集群,其基域为 krnl.es,您可以预期通配符域 *.apps.example.krnl.es 可以被路由。

您可以为 If apps 设置负载均衡器和通配符 DNS 记录。此过程需要部署 MetalLB,配置路由到入口部署的新负载均衡器服务,并将通配符 DNS 条目分配给负载均衡器 IP 地址。

  1. 设置 MetalLB,以便在创建 LoadBalancer 类型的服务时,MetalLB 为该服务添加外部 IP 地址。

    cat <<"EOF" | oc --kubeconfig ${HOSTED_CLUSTER_NAME}.kubeconfig apply -f -
    ---
    apiVersion: v1
    kind: Namespace
    metadata:
      name: metallb
      labels:
        openshift.io/cluster-monitoring: "true"
      annotations:
        workload.openshift.io/allowed: management
    ---
    apiVersion: operators.coreos.com/v1
    kind: OperatorGroup
    metadata:
      name: metallb-operator-operatorgroup
      namespace: metallb
    ---
    apiVersion: operators.coreos.com/v1alpha1
    kind: Subscription
    metadata:
      name: metallb-operator
      namespace: metallb
    spec:
      channel: "stable"
      name: metallb-operator
      source: redhat-operators
      sourceNamespace: openshift-marketplace
  2. Operator 运行后,创建 MetalLB 实例:

    cat <<"EOF" | oc --kubeconfig ${HOSTED_CLUSTER_NAME}.kubeconfig apply -f -
    apiVersion: metallb.io/v1beta1
    kind: MetalLB
    metadata:
      name: metallb
      namespace: metallb
    EOF
  3. 通过创建具有单个 IP 地址的 IPAddressPool 来配置 MetalLB Operator。此 IP 地址必须与集群节点使用的网络位于同一个子网中。

    重要: 更改 INGRESS_IP 环境变量以匹配您的环境地址。

    export INGRESS_IP=192.168.122.23
    
    envsubst <<"EOF" | oc --kubeconfig ${HOSTED_CLUSTER_NAME}.kubeconfig apply -f -
    apiVersion: metallb.io/v1beta1
    kind: IPAddressPool
    metadata:
      name: ingress-public-ip
      namespace: metallb
    spec:
      protocol: layer2
      autoAssign: false
      addresses:
        - ${INGRESS_IP}-${INGRESS_IP}
    ---
    apiVersion: metallb.io/v1beta1
    kind: L2Advertisement
    metadata:
      name: ingress-public-ip
      namespace: metallb
    spec:
      ipAddressPools:
        - ingress-public-ip
    EOF
  4. 按照以下步骤,通过 MetalLB 公开 OpenShift Container Platform Router:

    1. 设置将入口流量路由到入口部署的 LoadBalancer 服务。

      cat <<"EOF" | oc --kubeconfig ${HOSTED_CLUSTER_NAME}.kubeconfig apply -f -
      kind: Service
      apiVersion: v1
      metadata:
        annotations:
          metallb.universe.tf/address-pool: ingress-public-ip
        name: metallb-ingress
        namespace: openshift-ingress
      spec:
        ports:
          - name: http
            protocol: TCP
            port: 80
            targetPort: 80
          - name: https
            protocol: TCP
            port: 443
            targetPort: 443
        selector:
          ingresscontroller.operator.openshift.io/deployment-ingresscontroller: default
        type: LoadBalancer
      EOF
    2. 输入以下命令访问 OpenShift Container Platform 控制台:

      curl -kI https://console-openshift-console.apps.example.krnl.es
      
      HTTP/1.1 200 OK
    3. 检查 clusterversionclusteroperator 值,以验证一切是否正在运行。输入以下命令:

      oc --kubeconfig ${HOSTED_CLUSTER_NAME}.kubeconfig get clusterversion,co

      输出示例

      NAME                                         VERSION   AVAILABLE   PROGRESSING   SINCE   STATUS
      clusterversion.config.openshift.io/version   4.12z    True        False         3m32s   Cluster version is 4.12z
      
      NAME                                                                           VERSION   AVAILABLE   PROGRESSING   DEGRADED   SINCE   MESSAGE
      clusteroperator.config.openshift.io/console                                    4.12z    True        False         False      3m50s
      clusteroperator.config.openshift.io/csi-snapshot-controller                    4.12z    True        False         False      25m
      clusteroperator.config.openshift.io/dns                                        4.12z    True        False         False      23m
      clusteroperator.config.openshift.io/image-registry                             4.12z    True        False         False      23m
      clusteroperator.config.openshift.io/ingress                                    4.12z    True        False         False      53m
      clusteroperator.config.openshift.io/insights                                   4.12z    True        False         False      25m
      clusteroperator.config.openshift.io/kube-apiserver                             4.12z    True        False         False      54m
      clusteroperator.config.openshift.io/kube-controller-manager                    4.12z    True        False         False      54m
      clusteroperator.config.openshift.io/kube-scheduler                             4.12z    True        False         False      54m
      clusteroperator.config.openshift.io/kube-storage-version-migrator              4.12z    True        False         False      25m
      clusteroperator.config.openshift.io/monitoring                                 4.12z    True        False         False      21m
      clusteroperator.config.openshift.io/network                                    4.12z    True        False         False      25m
      clusteroperator.config.openshift.io/openshift-apiserver                        4.12z    True        False         False      54m
      clusteroperator.config.openshift.io/openshift-controller-manager               4.12z    True        False         False      54m
      clusteroperator.config.openshift.io/openshift-samples                          4.12z    True        False         False      23m
      clusteroperator.config.openshift.io/operator-lifecycle-manager                 4.12z    True        False         False      54m
      clusteroperator.config.openshift.io/operator-lifecycle-manager-catalog         4.12z    True        False         False      54m
      clusteroperator.config.openshift.io/operator-lifecycle-manager-packageserver   4.12z    True        False         False      54m
      clusteroperator.config.openshift.io/service-ca                                 4.12z    True        False         False      25m
      clusteroperator.config.openshift.io/storage                                    4.12z    True        False         False      25m

1.7.4.9. 为托管集群启用节点自动扩展

当托管集群和备用代理中需要更多容量时,您可以启用自动扩展来安装新代理。

  1. 要启用自动扩展,请输入以下命令。在这种情况下,最少的节点数量为 2,最大数量为 5。

    oc -n ${CLUSTERS_NAMESPACE} patch nodepool ${HOSTED_CLUSTER_NAME} --type=json -p '[{"op": "remove", "path": "/spec/replicas"},{"op":"add", "path": "/spec/autoScaling", "value": { "max": 5, "min": 2 }}]'

    如果 10 分钟通过不需要额外容量,则代理将停用,并再次放在备用队列中。

  2. 创建需要新节点的工作负载。

    cat <<EOF | oc --kubeconfig ${HOSTED_CLUSTER_NAME}.kubeconfig apply -f -
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      creationTimestamp: null
      labels:
        app: reversewords
      name: reversewords
      namespace: default
    spec:
      replicas: 40
      selector:
        matchLabels:
          app: reversewords
      strategy: {}
      template:
        metadata:
          creationTimestamp: null
          labels:
            app: reversewords
      spec:
        containers:
        - image: quay.io/mavazque/reversewords:latest
          name: reversewords
          resources:
            requests:
              memory: 2Gi
    status: {}
    EOF
  3. 输入以下命令验证剩余的代理是否已部署。在本例中,置备备用代理 d9198891-39f4-4930-a679-65fb142b108b

    oc -n ${HOSTED_CONTROL_PLANE_NAMESPACE} get agent -o jsonpath='{range .items[*]}BMH: {@.metadata.labels.agent-install\.openshift\.io/bmh} Agent: {@.metadata.name} State: {@.status.debugInfo.state}{"\n"}{end}'

    输出示例

    BMH: ocp-worker-2 Agent: 4dac1ab2-7dd5-4894-a220-6a3473b67ee6 State: added-to-existing-cluster
    BMH: ocp-worker-0 Agent: d9198891-39f4-4930-a679-65fb142b108b State: installing-in-progress
    BMH: ocp-worker-1 Agent: da503cf1-a347-44f2-875c-4960ddb04091 State: added-to-existing-cluster

  4. 如果输入以下命令来检查节点,则输出中会显示新节点。在本例中,ocp-worker-0 添加到集群中:

    oc --kubeconfig ${HOSTED_CLUSTER_NAME}.kubeconfig get nodes

    输出示例

    NAME           STATUS   ROLES    AGE   VERSION
    ocp-worker-0   Ready    worker   35s   v1.24.0+3882f8f
    ocp-worker-1   Ready    worker   40m   v1.24.0+3882f8f
    ocp-worker-2   Ready    worker   41m   v1.24.0+3882f8f

  5. 要删除节点,请输入以下命令删除工作负载:

    oc --kubeconfig ${HOSTED_CLUSTER_NAME}.kubeconfig -n default delete deployment reversewords
  6. 输入以下命令等待 10 分钟,并确认节点已被删除:

    oc --kubeconfig ${HOSTED_CLUSTER_NAME}.kubeconfig get nodes

    输出示例

    NAME           STATUS   ROLES    AGE   VERSION
    ocp-worker-1   Ready    worker   51m   v1.24.0+3882f8f
    ocp-worker-2   Ready    worker   52m   v1.24.0+3882f8f

    oc -n ${HOSTED_CONTROL_PLANE_NAMESPACE} get agent -o jsonpath='{range .items[*]}BMH: {@.metadata.labels.agent-install\.openshift\.io/bmh} Agent: {@.metadata.name} State: {@.status.debugInfo.state}{"\n"}{end}'
    
    BMH: ocp-worker-2 Agent: 4dac1ab2-7dd5-4894-a220-6a3473b67ee6 State: added-to-existing-cluster
    BMH: ocp-worker-0 Agent: d9198891-39f4-4930-a679-65fb142b108b State: known-unbound
    BMH: ocp-worker-1 Agent: da503cf1-a347-44f2-875c-4960ddb04091 State: added-to-existing-cluster

1.7.4.10. 验证托管集群创建

部署过程完成后,您可以验证托管集群是否已成功创建。在创建托管集群后,按照以下步骤操作。

  1. 输入 extract 命令获取新托管集群的 kubeconfig :

    oc extract -n kni21 secret/kni21-admin-kubeconfig --to=- > kubeconfig-kni21
    # kubeconfig
  2. 使用 kubeconfig 查看托管集群的集群 Operator。输入以下命令:

    oc get co --kubeconfig=kubeconfig-kni21

    输出示例

    NAME                                       VERSION   AVAILABLE   PROGRESSING   DEGRADED   SINCE   MESSAGE
    console                                    4.10.26   True        False         False      2m38s
    csi-snapshot-controller                    4.10.26   True        False         False      4m3s
    dns                                        4.10.26   True        False         False      2m52s
    image-registry                             4.10.26   True        False         False      2m8s
    ingress                                    4.10.26   True        False         False      22m
    kube-apiserver                             4.10.26   True        False         False      23m
    kube-controller-manager                    4.10.26   True        False         False      23m
    kube-scheduler                             4.10.26   True        False         False      23m
    kube-storage-version-migrator              4.10.26   True        False         False      4m52s
    monitoring                                 4.10.26   True        False         False      69s
    network                                    4.10.26   True        False         False      4m3s
    node-tuning                                4.10.26   True        False         False      2m22s
    openshift-apiserver                        4.10.26   True        False         False      23m
    openshift-controller-manager               4.10.26   True        False         False      23m
    openshift-samples                          4.10.26   True        False         False      2m15s
    operator-lifecycle-manager                 4.10.26   True        False         False      22m
    operator-lifecycle-manager-catalog         4.10.26   True        False         False      23m
    operator-lifecycle-manager-packageserver   4.10.26   True        False         False      23m
    service-ca                                 4.10.26   True        False         False      4m41s
    storage                                    4.10.26   True        False         False      4m43s

  3. 您还可以输入以下命令查看托管集群中运行的 pod:

    oc get pods -A --kubeconfig=kubeconfig-kni21

    输出示例

    NAMESPACE                                          NAME                                                      READY   STATUS             RESTARTS        AGE
    kube-system                                        konnectivity-agent-khlqv                                  0/1     Running            0               3m52s
    kube-system                                        konnectivity-agent-nrbvw                                  0/1     Running            0               4m24s
    kube-system                                        konnectivity-agent-s5p7g                                  0/1     Running            0               4m14s
    kube-system                                        kube-apiserver-proxy-asus3-vm1.kni.schmaustech.com        1/1     Running            0               5m56s
    kube-system                                        kube-apiserver-proxy-asus3-vm2.kni.schmaustech.com        1/1     Running            0               6m37s
    kube-system                                        kube-apiserver-proxy-asus3-vm3.kni.schmaustech.com        1/1     Running            0               6m17s
    openshift-cluster-node-tuning-operator             cluster-node-tuning-operator-798fcd89dc-9cf2k             1/1     Running            0               20m
    openshift-cluster-node-tuning-operator             tuned-dhw5p                                               1/1     Running            0               109s
    openshift-cluster-node-tuning-operator             tuned-dlp8f                                               1/1     Running            0               110s
    openshift-cluster-node-tuning-operator             tuned-l569k                                               1/1     Running            0               109s
    openshift-cluster-samples-operator                 cluster-samples-operator-6b5bcb9dff-kpnbc                 2/2     Running            0               20m
    openshift-cluster-storage-operator                 cluster-storage-operator-5f784969f5-vwzgz                 1/1     Running            1 (113s ago)    20m
    openshift-cluster-storage-operator                 csi-snapshot-controller-6b7687b7d9-7nrfw                  1/1     Running            0               3m8s
    openshift-cluster-storage-operator                 csi-snapshot-controller-6b7687b7d9-csksg                  1/1     Running            0               3m9s
    openshift-cluster-storage-operator                 csi-snapshot-controller-operator-7f4d9fc5b8-hkvrk         1/1     Running            0               20m
    openshift-cluster-storage-operator                 csi-snapshot-webhook-6759b5dc8b-7qltn                     1/1     Running            0               3m12s
    openshift-cluster-storage-operator                 csi-snapshot-webhook-6759b5dc8b-f8bqk                     1/1     Running            0               3m12s
    openshift-console-operator                         console-operator-8675b58c4c-flc5p                         1/1     Running            1 (96s ago)     20m
    openshift-console                                  console-5cbf6c7969-6gk6z                                  1/1     Running            0               119s
    openshift-console                                  downloads-7bcd756565-6wj5j                                1/1     Running            0               4m3s
    openshift-dns-operator                             dns-operator-77d755cd8c-xjfbn                             2/2     Running            0               21m
    openshift-dns                                      dns-default-jwjkz                                         2/2     Running            0               113s
    openshift-dns                                      dns-default-kfqnh                                         2/2     Running            0               113s
    openshift-dns                                      dns-default-xlqsm                                         2/2     Running            0               113s
    openshift-dns                                      node-resolver-jzxnd                                       1/1     Running            0               110s
    openshift-dns                                      node-resolver-xqdr5                                       1/1     Running            0               110s
    openshift-dns                                      node-resolver-zl6h4                                       1/1     Running            0               110s
    openshift-image-registry                           cluster-image-registry-operator-64fcfdbf5-r7d5t           1/1     Running            0               20m
    openshift-image-registry                           image-registry-7fdfd99d68-t9pq9                           1/1     Running            0               53s
    openshift-image-registry                           node-ca-hkfnr                                             1/1     Running            0               56s
    openshift-image-registry                           node-ca-vlsdl                                             1/1     Running            0               56s
    openshift-image-registry                           node-ca-xqnsw                                             1/1     Running            0               56s
    openshift-ingress-canary                           ingress-canary-86z6r                                      1/1     Running            0               4m13s
    openshift-ingress-canary                           ingress-canary-8jhxk                                      1/1     Running            0               3m52s
    openshift-ingress-canary                           ingress-canary-cv45h                                      1/1     Running            0               4m24s
    openshift-ingress                                  router-default-6bb8944f66-z2lxr                           1/1     Running            0               20m
    openshift-kube-storage-version-migrator-operator   kube-storage-version-migrator-operator-56b57b4844-p9zgp   1/1     Running            1 (2m16s ago)   20m
    openshift-kube-storage-version-migrator            migrator-58bb4d89d5-5sl9w                                 1/1     Running            0               3m30s
    openshift-monitoring                               alertmanager-main-0                                       6/6     Running            0               100s
    openshift-monitoring                               cluster-monitoring-operator-5bc5885cd4-dwbc4              2/2     Running            0               20m
    openshift-monitoring                               grafana-78f798868c-wd84p                                  3/3     Running            0               94s
    openshift-monitoring                               kube-state-metrics-58b8f97f6c-6kp4v                       3/3     Running            0               104s
    openshift-monitoring                               node-exporter-ll7cp                                       2/2     Running            0               103s
    openshift-monitoring                               node-exporter-tgsqg                                       2/2     Running            0               103s
    openshift-monitoring                               node-exporter-z99gr                                       2/2     Running            0               103s
    openshift-monitoring                               openshift-state-metrics-677b9fb74f-qqp6g                  3/3     Running            0               104s
    openshift-monitoring                               prometheus-adapter-f69fff5f9-7tdn9                        0/1     Running            0               17s
    openshift-monitoring                               prometheus-k8s-0                                          6/6     Running            0               93s
    openshift-monitoring                               prometheus-operator-6b9d4fd9bd-tqfcx                      2/2     Running            0               2m2s
    openshift-monitoring                               telemeter-client-74d599658c-wqw5j                         3/3     Running            0               101s
    openshift-monitoring                               thanos-querier-64c8757854-z4lll                           6/6     Running            0               98s
    openshift-multus                                   multus-additional-cni-plugins-cqst9                       1/1     Running            0               6m14s
    openshift-multus                                   multus-additional-cni-plugins-dbmkj                       1/1     Running            0               5m56s
    openshift-multus                                   multus-additional-cni-plugins-kcwl9                       1/1     Running            0               6m14s
    openshift-multus                                   multus-admission-controller-22cmb                         2/2     Running            0               3m52s
    openshift-multus                                   multus-admission-controller-256tn                         2/2     Running            0               4m13s
    openshift-multus                                   multus-admission-controller-mz9jm                         2/2     Running            0               4m24s
    openshift-multus                                   multus-bxgvr                                              1/1     Running            0               6m14s
    openshift-multus                                   multus-dmkdc                                              1/1     Running            0               6m14s
    openshift-multus                                   multus-gqw2f                                              1/1     Running            0               5m56s
    openshift-multus                                   network-metrics-daemon-6cx4x                              2/2     Running            0               5m56s
    openshift-multus                                   network-metrics-daemon-gz4jp                              2/2     Running            0               6m13s
    openshift-multus                                   network-metrics-daemon-jq9j4                              2/2     Running            0               6m13s
    openshift-network-diagnostics                      network-check-source-8497dc8f86-cn4nm                     1/1     Running            0               5m59s
    openshift-network-diagnostics                      network-check-target-d8db9                                1/1     Running            0               5m58s
    openshift-network-diagnostics                      network-check-target-jdbv8                                1/1     Running            0               5m58s
    openshift-network-diagnostics                      network-check-target-zzmdv                                1/1     Running            0               5m55s
    openshift-network-operator                         network-operator-f5b48cd67-x5dcz                          1/1     Running            0               21m
    openshift-sdn                                      sdn-452r2                                                 2/2     Running            0               5m56s
    openshift-sdn                                      sdn-68g69                                                 2/2     Running            0               6m
    openshift-sdn                                      sdn-controller-4v5mv                                      2/2     Running            0               5m56s
    openshift-sdn                                      sdn-controller-crscc                                      2/2     Running            0               6m1s
    openshift-sdn                                      sdn-controller-fxtn9                                      2/2     Running            0               6m1s
    openshift-sdn                                      sdn-n5jm5                                                 2/2     Running            0               6m
    openshift-service-ca-operator                      service-ca-operator-5bf7f9d958-vnqcg                      1/1     Running            1 (2m ago)      20m
    openshift-service-ca                               service-ca-6c54d7944b-v5mrw                               1/1     Running            0               3m8s

1.7.4.11. 在裸机上销毁托管集群

您可以使用控制台销毁裸机托管集群。完成以下步骤以在裸机上销毁托管集群:

  1. 在控制台中,进入到 Infrastructure > Clusters
  2. Clusters 页面中,选择要销毁的集群。
  3. Actions 菜单中,选择 Destroy 集群 来删除集群。

1.7.4.12. 其他资源

1.7.5. 禁用托管的 control plane 功能

您可以卸载 HyperShift Operator 并禁用托管的 control plane。禁用托管的 control plane 集群功能时,您必须销毁托管集群以及 multicluster engine operator 上的受管集群资源,如 管理托管的 control plane 集群 主题 中所述。

1.7.5.1. 卸载 HyperShift Operator

要卸载 HyperShift Operator 并从 local-cluster 禁用 hypershift-addon,请完成以下步骤:

  1. 运行以下命令,以确保没有托管集群正在运行:

    oc get hostedcluster -A

    重要: 如果托管集群正在运行,则 HyperShift Operator 不会卸载,即使 hypershift-addon 被禁用。

  2. 运行以下命令来禁用 hypershift-addon

    oc patch mce multiclusterengine --type=merge -p '{"spec":{"overrides":{"components":[{"name":"hypershift-local-hosting","enabled": false}]}}}'

    提示: 在禁用 hypershift-addon 后,您还可以从 multicluster engine operator 控制台为 local-cluster 禁用 hypershift-addon

1.7.5.2. 禁用托管的 control plane 功能

在禁用托管的 control plane 功能前,您必须首先卸载 HyperShift Operator。运行以下命令来禁用托管的 control plane 功能:

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

您可以运行以下命令来验证 MultiClusterEngine 自定义资源中禁用了 hypershift-previewhypershift-local-hosting 功能:

oc get mce multiclusterengine -o yaml

请参阅以下示例,其中 hypershift-previewhypershift-local-hostingenabled: 标记设为 false

apiVersion: multicluster.openshift.io/v1
kind: MultiClusterEngine
metadata:
  name: multiclusterengine
spec:
  overrides:
    components:
    - name: hypershift-preview
      enabled: false
    - name: hypershift-local-hosting
      enabled: false

1.7.5.3. 其他资源