1.11. 集群 API


集群 API 提供声明 API,以简化 Kubernetes 集群的置备、升级和管理。多集群引擎 operator 安装核心 Cluster API 组件以及多个基础架构和 bootstrap 供应商,以支持不同的用例和平台。了解如何在独立多集群引擎 operator 或 Red Hat Advanced Cluster Management 中使用 Cluster API。请参见以下进程:

1.11.1. 使用 Cluster API 安装受管集群

您可以使用 metal3 基础架构供应商和 OpenShift Container Platform 支持的 bootstrap 和 control plane 供应商使用 Cluster API 安装 OpenShift Container Platform 受管集群。

  • ControlPlane 资源定义 control plane 属性。
  • ClusterInfrastructure 定义集群级别的基础架构详情。

先决条件

  • 您需要 Red Hat Advanced Cluster Management 安装中的 MultiClusterEngine 资源,或 multicluster engine operator 独立安装。
  • 以下 API 基域必须指向静态 API VIP: api.<cluster_name>.<base_domain >。
  • 以下应用程序基域必须指向 Ingress VIP 的静态 IP 地址:.< apps.<cluster_name>.<base_domain >。
  • 您需要集群的内部 API 端点: api-int.<baseDomain&gt;。

1.11.1.1. 使用 Cluster API 置备工作负载

  1. 启用置备工作负载所需的服务。默认情况下启用 assisted-service。默认情况下,禁用 cluster-api-provider-metal3cluster-api-provider-openshift-assisted。确保启用了所有三个服务 : true。运行以下命令编辑资源:

    oc edit multiclusterengines.multicluster.openshift.io -n multicluster-engine
    Copy to Clipboard Toggle word wrap
  2. assisted-service 组件、cluster-api-provider-metal3 组件和 cluster-api-provider-openshift-assisted 组件的 .spec.overrides 中设置 enabled: true。请参阅以下 configOverrides 值:

        - configOverrides: {}
          enabled: true
          name: assisted-service
        - configOverrides: {}
          enabled: true
          name: cluster-api
    ...
        - configOverrides: {}
          enabled: true
          name: cluster-api-provider-metal3
        - configOverrides: {}
          enabled: true
          name: cluster-api-provider-openshift-assisted
    Copy to Clipboard Toggle word wrap
  3. 启用中央基础架构管理服务。请参阅启用中央基础架构管理服务
  4. 使用 clusterNetwork 规格、controlPlaneRef 规格和 infrastructureRef 规格配置集群资源。请参阅以下 集群资源

    apiVersion: cluster.x-k8s.io/v1beta1
    kind: Cluster
    metadata:
      name: <cluster-name>
      namespace: <cluster-namespace>
    spec:
      clusterNetwork:
        pods:
          cidrBlocks:
            - 172.18.0.0/20
        services:
          cidrBlocks:
            - 10.96.0.0/12
      controlPlaneRef: 
    1
    
        apiVersion: controlplane.cluster.x-k8s.io/v1alpha2
        kind: OpenshiftAssistedControlPlane
        name:  <cluster-name>
        namespace:  <cluster-namespace>
      infrastructureRef: 
    2
    
        apiVersion: infrastructure.cluster.x-k8s.io/v1beta1
        kind: Metal3Cluster
        name: <cluster-name>
        namespace: <cluster-namespace>
    Copy to Clipboard Toggle word wrap
    1
    OpenshiftAssistedControlPlane 是 control plane。
    2
    Metal3Cluster 是基础架构。
  5. 运行以下命令来应用 YAML 内容:

    oc apply -f <filename>.yaml
    Copy to Clipboard Toggle word wrap
  6. 配置 OpenshiftAssistedControlPlane 资源,其中包含 distributionVersionapiVIP 和 SSH 密钥。在 distributionVersion 字段中指定 OpenShift Container Platform 版本。

    注: distributionVersion 的值与 OpenShift Container Platform Releases 中的镜像匹配。请参阅以下 YAML 资源:

    apiVersion: controlplane.cluster.x-k8s.io/v1alpha2
    kind: OpenshiftAssistedControlPlane
    metadata:
      name: <cluster-name>
      namespace: <cluster-namespace>
      annotations: {}
    spec: 
    1
    
      openshiftAssistedConfigSpec:
        sshAuthorizedKey: "{{ ssh_authorized_key }}"
        nodeRegistration:
          kubeletExtraLabels:
          - 'metal3.io/uuid="${METADATA_UUID}"'
      distributionVersion: <4.x.0>
      config:
        apiVIPs:
        - 192.168.222.40
        ingressVIPs:
        - 192.168.222.41
        baseDomain: lab.home
        pullSecretRef:
          name: "pull-secret"
        sshAuthorizedKey: "{{ ssh_authorized_key }}" 
    2
    
      machineTemplate:
        infrastructureRef:
          apiVersion: infrastructure.cluster.x-k8s.io/v1beta1
          kind: Metal3MachineTemplate
          name: <cluster-name-control-plane>
          namespace: <cluster-namespace>
      replicas: 3
    Copy to Clipboard Toggle word wrap
    1
    .spec.openshiftAssistedConfigSpec.sshAuthorizedKey 用于访问 引导 阶段的节点,也称为 发现阶段
    2
    .spec.config.sshAuthorizedKey 用于访问置备的 OpenShift Container Platform 节点。
  7. 应用 YAML 文件。运行以下命令:

    oc apply -f <filename>.yaml
    Copy to Clipboard Toggle word wrap
  8. 如果没有 pull secret,则需要创建一个 pull secret,以便集群从容器 registry 中拉取镜像。完成以下步骤以创建 pull secret:
  9. 创建 YAML 文件以拉取镜像。请参阅以下名为 pull-secret.yaml 的文件示例:

    apiVersion: v1
    kind: Secret
    metadata: 
    1
    
      name: pull-secret
      namespace: <cluster-namespace>
    data: 
    2
    
      .dockerconfigjson: <encoded_docker_configuration>
    type: kubernetes.io/dockerconfigjson
    Copy to Clipboard Toggle word wrap
    1
    确保 &lt ;cluster-namespace& gt; 值与目标命名空间匹配。
    2
    将 base64 编码的配置文件指定为 < encoded_docker_configuration > 的值。
  10. 运行以下命令以应用该文件:

    oc apply -f pull-secret.yaml
    Copy to Clipboard Toggle word wrap
  11. 配置 Metal3Cluster 基础架构资源,其中包含与 baremetal 上部署集群相关的信息。

    apiVersion: infrastructure.cluster.x-k8s.io/v1beta1
    kind: Metal3Cluster
    metadata:
      name: <cluster-name>
      namespace: <cluster-namespace>
    spec:
      controlPlaneEndpoint:
        host: <cluster-name>.lab.home 
    1
    
        port: 6443
      noCloudProvider: true
    Copy to Clipboard Toggle word wrap
    1
    主机 是带有 Cluster 资源的 clusterName 的 < clusterName & gt;.<baseDomain>* 值,baseDomainOpenshiftAssistedControlPlane 资源中定义。
  12. 应用该文件。运行以下命令:

    oc apply -f <filename>.yaml
    Copy to Clipboard Toggle word wrap
  13. 为从 OpenshiftAssistedControlPlane 资源引用的 control plane 节点配置 Metal3MachineTemplate 资源。请参见以下 YAML 示例:

    apiVersion: infrastructure.cluster.x-k8s.io/v1beta1
    kind: Metal3MachineTemplate
    metadata:
      name: <cluster-name>
      namespace: <cluster-namespace>
    spec:
      nodeReuse: false
      template:
        spec:
          automatedCleaningMode: disabled
          dataTemplate:
            name: <cluster-name-template>
          image: 
    1
    
            checksum: https://mirror.openshift.com/pub/openshift-v4/x86_64/dependencies/rhcos/4.19/4.19.0/sha256sum.txt
            checksumType: sha256
            url: https://mirror.openshift.com/pub/openshift-v4/x86_64/dependencies/rhcos/4.19/4.19.0/rhcos-4.19.0-x86_64-nutanix.x86_64.qcow2
            format: qcow2
    ---
    apiVersion: infrastructure.cluster.x-k8s.io/v1beta1
    kind: Metal3DataTemplate
    metadata:
       name: <cluster-name-template>
       namespace: <cluster-namespace>
    spec:
       clusterName: <cluster-name> 
    2
    Copy to Clipboard Toggle word wrap
    1
    镜像与 OpenShift Container Platform Releases 中的 distributionVersion 值和版本匹配。
    2
    clusterName 设置为在 Cluster 资源中相同的值
  14. 应用该文件。运行以下命令:

    oc apply -f <filename>.yaml
    Copy to Clipboard Toggle word wrap
  15. 使用 MachineDeployment 资源配置 worker 节点,该资源引用 Metal3MachineTemplate。请参阅以下 YAML 示例:

    apiVersion: cluster.x-k8s.io/v1beta1
    kind: MachineDeployment
    metadata:
      name: <cluster-name-worker>
      namespace: <cluster-namespace>
      labels:
        cluster.x-k8s.io/cluster-name: <cluster-name>
    spec:
      clusterName: <cluster-name>
      replicas: 2
      selector:
        matchLabels:
          cluster.x-k8s.io/cluster-name: <cluster-name>
      template:
        metadata:
          labels:
            cluster.x-k8s.io/cluster-name: <cluster-name>
        spec:
          clusterName: <cluster-name>
          bootstrap: 
    1
    
            configRef:
              name: <cluster-name-worker>
              apiVersion: bootstrap.cluster.x-k8s.io/v1alpha1
              kind: OpenshiftAssistedConfigTemplate
          infrastructureRef: 
    2
    
            name: <cluster-name-workers-2>
            apiVersion: infrastructure.cluster.x-k8s.io/v1alpha3
            kind: Metal3MachineTemplate
    Copy to Clipboard Toggle word wrap
    1
    在下一个资源中也会引用 bootstrap 配置来安装。
    2
    基础架构引用指向要调配的资源。
  16. 应用该文件。运行以下命令:

    oc apply -f <filename>.yaml
    Copy to Clipboard Toggle word wrap
  17. 创建 MachineDeployment 中引用的 OpenshiftAssistedConfigTemplate 资源。以下 YAML 为 worker 节点定义 bootstrap 配置,用于使用 Assisted Installer 注册节点:

    apiVersion: bootstrap.cluster.x-k8s.io/v1alpha1
    kind: OpenshiftAssistedConfigTemplate
    metadata:
      name: <cluster-name-worker>
      namespace: <cluster-namespace>
      labels:
        cluster.x-k8s.io/cluster-name: cluster-name
    spec:
      template:
        spec:
          nodeRegistration:
            kubeletExtraLabels:
              - 'metal3.io/uuid="${METADATA_UUID}"'
    1
    
          sshAuthorizedKey: "{{ ssh_authorized_key }}" 
    2
    Copy to Clipboard Toggle word wrap
    1
    kubeletExtraLabels 无法从这个值中改变。
    2
    输入您的 sshAuthorizedKey
  18. 创建 MachineDeployment 资源中引用的 Metal3MachineTemplate。请参见以下示例:

    apiVersion: infrastructure.cluster.x-k8s.io/v1beta1
    kind: Metal3MachineTemplate
    metadata:
       name: <cluster-name-workers-2>
       namespace: <cluster-namespace>
    spec:
       nodeReuse: false
       template:
          spec:
             automatedCleaningMode: metadata
             dataTemplate:
                name: <cluster-name-workers-template>
          image:
            checksum: https://mirror.openshift.com/pub/openshift-v4/x86_64/dependencies/rhcos/4.19/4.19.0/sha256sum.txt
            checksumType: sha256
            url: https://mirror.openshift.com/pub/openshift-v4/x86_64/dependencies/rhcos/4.19/4.19.0/rhcos-4.19.0-x86_64-nutanix.x86_64.qcow2
            format: qcow2
    ---
    apiVersion: infrastructure.cluster.x-k8s.io/v1beta1
    kind: Metal3DataTemplate
    metadata:
       name: <cluster-name-workers-template>
       namespace: <cluster-namespace>
    spec:
       clusterName: <cluster-name>
    Copy to Clipboard Toggle word wrap
  19. 运行以下命令来保存 YAML 文件并置备集群:

    oc apply -f <filename>.yaml
    Copy to Clipboard Toggle word wrap
  20. 验证集群置备状态。

    1. 运行 oc get cluster --namespace <cluster-namespace> <cluster-name> -o yaml 以检查您的集群资源状态。

      请参见以下输出和状态:

      status:
        conditions:
        - lastTransitionTime: "2025-06-25T11:23:38Z"
          status: "True"
          type: Ready
        - lastTransitionTime: "2025-06-25T11:23:38Z"
          status: "True"
          type: ControlPlaneReady
        - lastTransitionTime: "2025-06-25T10:37:03Z"
          status: "True"
          type: InfrastructureReady
      Copy to Clipboard Toggle word wrap
    2. 运行 oc get metal3cluster --namespace <cluster-namespace> <cluster-name> -o yaml 命令检查集群基础架构状态。

      请参见以下输出和状态:

      status:
        conditions:
        - lastTransitionTime: "2025-06-25T10:37:03Z"
          status: "True"
          type: Ready
        - lastTransitionTime: "2025-06-25T10:37:03Z"
          status: "True"
          type: BaremetalInfrastructureReady
      Copy to Clipboard Toggle word wrap
    3. 运行 oc get openshiftassistedcontrolplane --namespace <cluster-namespace> <cluster-name> -o yaml 命令检查 control plane 状态。

      请参见以下输出和状态:

      status:
        conditions:
        - lastTransitionTime: "2025-06-25T11:23:38Z"
          status: "True"
          type: Ready
        - lastTransitionTime: "2025-06-25T11:23:38Z"
          status: "True"
          type: ControlPlaneReady
        - lastTransitionTime: "2025-06-25T10:45:48Z"
          status: "True"
          type: KubeconfigAvailable
        - lastTransitionTime: "2025-06-25T10:38:25Z"
          status: "True"
          type: MachinesCreated
        - lastTransitionTime: "2025-06-25T11:10:54Z"
          status: "True"
          type: MachinesReady
        - lastTransitionTime: "2025-06-25T11:23:38Z"
          status: "True"
          type: UpgradeCompleted
      Copy to Clipboard Toggle word wrap
    4. 运行 oc get machinedeployment --namespace <cluster-namespace> <cluster-name> -o yaml 命令检查机器部署状态。

      请参见以下输出和状态:

      status:
        conditions:
        - lastTransitionTime: "2025-06-25T11:10:29Z"
          status: "True"
          type: Ready
        - lastTransitionTime: "2025-06-25T11:10:29Z"
          status: "True"
          type: Available
        - lastTransitionTime: "2025-06-25T11:10:29Z"
          status: "True"
          type: MachineSetReady
      Copy to Clipboard Toggle word wrap
    5. 运行 kubectl get machine -l cluster.x-k8s.io/cluster-name=cluster-name -n test-capi -o yaml 命令检查您的机器。

      请参见以下输出和状态:

     status:
        conditions:
        - lastTransitionTime: "2025-06-25T11:09:57Z"
      	status: "True"
      	type: Ready
        - lastTransitionTime: "2025-06-25T10:38:20Z"
      	status: "True"
      	type: BootstrapReady
        - lastTransitionTime: "2025-06-25T11:09:57Z"
      	status: "True"
      	type: InfrastructureReady
        - lastTransitionTime: "2025-06-25T11:10:29Z"
      	status: "True"
      	type: NodeHealthy
    Copy to Clipboard Toggle word wrap
  21. 访问集群。

    1. 运行以下命令来获取 kubeconfig 文件:

      oc get secret -n test-capi  cluster-name-admin-kubeconfig -o json | jq -r .data.kubeconfig | base64 --decode > kubeconfig
      Copy to Clipboard Toggle word wrap
    2. 运行以下命令使用 kubeconfig 文件来访问集群:
    export KUBECONFIG=$(realpath kubeconfig)
    oc get nodes
    Copy to Clipboard Toggle word wrap

您可以通过自动导入使用 Cluster API 置备的集群来节省时间。

需要的访问权限:集群管理员

先决条件

  • 您需要 Red Hat Advanced Cluster Management 安装中的 MultiClusterEngine 资源,或 multicluster engine operator 独立安装。

1.11.2.1. 准备您的 hub 集群

在使用 Cluster API 自动导入置备的集群前,您必须完成以下步骤:

  1. 通过添加以下 YAML 文件示例,在 ClusterManager 资源中启用 ClusterImporter 功能门:

    apiVersion: operator.open-cluster-management.io/v1
    kind: ClusterManager
    metadata:
      name: cluster-manager
    spec:
      registrationConfiguration:
        featureGates:
        - feature: ClusterImporter
          mode: Enable
    Copy to Clipboard Toggle word wrap
  2. 通过将 clusterImportConfig 设置为 true,将导入控制器配置为创建集群导入配置 secret。ConfigMap 资源可能类似以下 YAML 文件示例:

    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: import-controller-config
      namespace: multicluster-engine
    data:
      clusterImportConfig: "true"
    Copy to Clipboard Toggle word wrap
    1. 如果您还没有 ConfigMap 资源,请运行以下命令来应用更改。将 <filename > 替换为您的文件名:

      oc apply -f <filename>.yaml
      Copy to Clipboard Toggle word wrap
    2. 如果您已经有一个 ConfigMap 资源,请运行以下命令来应用更改:
    oc patch configmap import-controller-config -n multicluster-engine --type merge -p '{"data":{"clusterImportConfig":"true"}}'
    Copy to Clipboard Toggle word wrap
  3. 将 Cluster API Manager 权限绑定到导入控制器服务帐户。添加以下 YAML 文件示例:

    apiVersion: rbac.authorization.k8s.io/v1
    kind: ClusterRoleBinding
    metadata:
      name: cluster-manager-registration-capi
    roleRef:
      apiGroup: rbac.authorization.k8s.io
      kind: ClusterRole
      name: capi-manager-role
    subjects:
    - kind: ServiceAccount
      name: registration-controller-sa
      namespace: open-cluster-management-hub
    Copy to Clipboard Toggle word wrap
  4. 运行以下命令以应用更改。将 <filename > 替换为您的文件名:

    oc apply -f <filename>.yaml
    Copy to Clipboard Toggle word wrap

1.11.2.2. 创建 ManagedCluster 资源

要启用自动导入,创建一个带有与 Cluster API 集群相同的名称和命名空间的 ManagedCluster 资源。完成以下步骤:

  1. 通过添加以下 YAML 示例来创建 ManagedCluster 资源。将 Cluster API 集群的名称添加到 name 参数中:

    apiVersion: cluster.open-cluster-management.io/v1
    kind: ManagedCluster
    metadata:
      name: <clusterapi_cluster_name>
    spec:
      hubAcceptsClient: true
    Copy to Clipboard Toggle word wrap
  2. 运行以下命令以应用更改。将 <filename > 替换为您的文件名:

    oc apply -f <filename>.yaml
    Copy to Clipboard Toggle word wrap

在使用 Cluster API 部署受管集群时,您可以使用 Identity and Access Management (IAM)角色切换到使用 Cluster API 角色。如果您使用 Amazon Web Services (AWS)凭证创建了受管集群,您可以从 AWS 凭证切换到 IAM 角色,以使用 cluster-api-provider-aws 创建带有托管 control plane 集群的 Red Hat OpenShift Service on AWS,而无需在受管集群中存储 AWS 凭证。

需要的访问权限:集群管理员

先决条件

  • 您需要一个使用 AWS 凭证创建的带有托管 control plane bootstrap 集群的 Red Hat OpenShift Container Platform 或 Red Hat OpenShift Service on AWS。您可以使用临时凭证。请参阅 AWS 文档中的 请求临时安全凭证 以了解更多信息。
  • 您需要在 bootstrap 集群上安装 Red Hat Advanced Cluster Management for Kubernetes。
  • 在启用 Cluster API 和 Cluster API Provider AWS 前,您需要禁用 HyperShift 组件。

流程

完成以下步骤:

  1. 编辑 MultiClusterEngine 资源。运行以下命令:

    oc edit multiclusterengine engine
    Copy to Clipboard Toggle word wrap
  2. 禁用 hypershifthypershift-local-hosting 组件,并启用 cluster-apicluster-api-provider-aws 组件。请参见以下示例:

    - configOverrides: {}
      enabled: false
      name: hypershift
    - configOverrides: {}
      enabled: false
      name: hypershift-local-hosting
    - configOverrides: {}
      enabled: true
      name: cluster-api
    - configOverrides: {}
      enabled: true
      name: cluster-api-provider-aws
    Copy to Clipboard Toggle word wrap
  3. 验证 Cluster API 和 Cluster API Provider AWS 部署是否正在运行。运行以下命令:

    oc get deploy -n multicluster-engine
    Copy to Clipboard Toggle word wrap

    输出可能类似以下示例:

    NAME                                  READY   UP-TO-DATE   AVAILABLE   AGE
    capa-controller-manager               1/1     1            1           12d
    capi-controller-manager               1/1     1            1           12d
    Copy to Clipboard Toggle word wrap
  4. 暂停 MultiClusterEngine 自定义资源,以便 Cluster API Provider AWS 控制器服务帐户可以更新。运行以下命令:

    oc annotate mce multiclusterengine installer.multicluster.openshift.io/pause=true
    Copy to Clipboard Toggle word wrap
  5. 检索 OpenID Connect (OIDC)供应商详情。运行以下命令:

    export OIDC_PROVIDER=$(oc get authentication.config.openshift.io cluster -ojson | jq -r .spec.serviceAccountIssuer | sed 's/https:\/\///')
    Copy to Clipboard Toggle word wrap
  6. 设置 AWS 帐户 ID。运行以下命令。更改帐户 ID 值:

    export AWS_ACCOUNT_ID={YOUR_AWS_ACCOUNT_ID}
    Copy to Clipboard Toggle word wrap
  7. capa-controller-manager IAM 角色创建信任策略文件。运行以下命令:

    cat ./trust.json
    Copy to Clipboard Toggle word wrap
  8. 通过在文件中添加以下内容,定义允许谁假定关联的 IAM 角色:

    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Effect": "Allow",
          "Principal": {
            "Federated": "arn:aws:iam::${AWS_ACCOUNT_ID}:oidc-provider/${OIDC_PROVIDER}"
          },
          "Action": "sts:AssumeRoleWithWebIdentity",
          "Condition": {
            "StringEquals": {
              "${OIDC_PROVIDER}:sub": "system:serviceaccount:multicluster-engine:capa-controller-manager"
            }
          }
        }
      ]
    }
    Copy to Clipboard Toggle word wrap
  9. 创建 IAM 角色并附加所需的 AWS 策略。运行以下命令:

    aws iam create-role --role-name "capa-manager-role" --assume-role-policy-document file://trust.json --description "IAM role for CAPA to assume"
    
    aws iam attach-role-policy --role-name capa-manager-role --policy-arn arn:aws:iam::aws:policy/AWSCloudFormationFullAccess
    
    aws iam attach-role-policy --role-name capa-manager-role --policy-arn arn:aws:iam::aws:policy/AmazonVPCFullAccess
    Copy to Clipboard Toggle word wrap
  10. 检索 IAM 角色 Amazon Resource Name (ARN)。运行以下命令:

    export APP_IAM_ROLE_ARN=$(aws iam get-role --role-name=capa-manager-role --query Role.Arn --output text)
    
    export IRSA_ROLE_ARN=eks.amazonaws.com/role-arn=$APP_IAM_ROLE_ARN
    Copy to Clipboard Toggle word wrap
  11. 使用 IAM 角色 ARN 注解服务帐户。运行以下命令:

    oc annotate serviceaccount -n multicluster-engine capa-controller-manager $IRSA_ROLE_ARN
    Copy to Clipboard Toggle word wrap
  12. 重启 Cluster API Provider AWS 部署。运行以下命令:

    oc rollout restart deployment capa-controller-manager -n multicluster-engine
    Copy to Clipboard Toggle word wrap

带有托管 control plane 集群的 Red Hat OpenShift Service on AWS 是一个部署模型,其中集群 control plane 在 Red Hat Amazon Web Services (AWS)帐户中托管并管理。完成以下主题中的步骤,使用 Cluster API 在带有托管 control plane 集群的 AWS 上创建 Red Hat OpenShift Service。

需要的访问权限:集群管理员

先决条件

1.11.4.1. 创建一个服务帐户

在使用托管的 control plane 集群创建 Red Hat OpenShift Service on AWS 之前,您需要服务帐户。如果您有服务帐户,则不需要完成本节。

流程

完成以下步骤:

  1. 通过导航到控制台中的 Identity & Access Management > Service Accounts 来创建服务帐户。
  2. Create service account 按钮。
  3. 对于您创建的每个新服务帐户,请使用 ROSA CLI 激活帐户。

    1. 登录到您的新服务帐户。运行以下命令。根据需要替换值:

      rosa login --client-id <your-client-id> --client-secret <your-client-secret>
      Copy to Clipboard Toggle word wrap
    2. 激活您的服务帐户。运行以下命令:
    rosa whoami
    Copy to Clipboard Toggle word wrap

1.11.4.2. 设置 AWS 凭证

在使用托管的 control plane 集群创建 Red Hat OpenShift Service on AWS 前,您需要设置 AWS 凭证。完成以下步骤:

  1. 如果您没有在 AWS 中使用多因素身份验证,请使用您创建的 AWS 访问密钥设置 AWS 凭证。运行以下命令。根据需要替换值:

    echo '[default]
    aws_access_key_id = <your-access-key>
    aws_secret_access_key = <your-secret-access-key>
    region = us-east-1
    ' | base64 -w 0
    Copy to Clipboard Toggle word wrap
  2. 如果您在 AWS 中使用多因素身份验证,请运行以下命令。根据需要替换值:

    echo '[default]
    aws_access_key_id = <your-access-key>
    aws_secret_access_key = <your-secret-access-key>
    aws_session_token= <your-aws-session-token>
    region = us-east-1
    ' | base64 -w 0
    Copy to Clipboard Toggle word wrap
  3. 更新 capa-manager-bootstrap-credentials secret。

    1. 复制上一命令的输出,并将输出添加到 capa-manager-bootstrap-credentials secret。运行以下命令来编辑 secret:

      oc edit secret -n multicluster-engine capa-manager-bootstrap-credentials
      Copy to Clipboard Toggle word wrap
    2. 将您的输出添加到 credentials 字段中。请参见以下示例:

      apiVersion: v1
      data:
        credentials: <your-aws-credentials>
      kind: Secret
      metadata:
      	name: capa-manager-bootstrap-credentials
      	namespace: multicluster-engine
      Copy to Clipboard Toggle word wrap

      可选: 如果要将 AWS IAM 角色与服务帐户搭配使用,以验证 capa-controller-manager,请参阅附加资源部分,并完成 在集群 API 受管集群(技术预览)上的 AWS 凭证切换到 IAM 角色 的步骤。

  4. 重新启动 capa-controller-manager 部署。运行以下命令:

    oc rollout restart deployment capa-controller-manager -n multicluster-engine
    Copy to Clipboard Toggle word wrap

1.11.4.3. 对 OpenShift Cluster Manager 进行身份验证

AWS 控制器的 Cluster API Provider 需要 OpenShift Cluster Manager 凭证,以便在带有托管 control plane 的 AWS 上置备 Red Hat OpenShift Service。完成以下步骤:

  1. 使用您创建的服务帐户凭证在目标命名空间中创建 Kubernetes secret。ROSAControlPlane 资源在置备过程中引用此 secret。运行以下命令。根据需要替换值:

    oc create namespace <your-rosa-hcp-namespace>
      oc -n <your-rosa-hcp-namespace> create secret generic rosa-creds-secret \
        --from-literal=ocmClientID='....' \
        --from-literal=ocmClientSecret='eyJhbGciOiJIUzI1NiIsI....' \
        --from-literal=ocmApiUrl='https://api.openshift.com'
    Copy to Clipboard Toggle word wrap
  2. 可选: 您可以通过调用 secret rosa-creds-secret 并在 multicluster-engine 命名空间中创建 secret,而无需从 ROSAControlPlane 资源引用它。运行以下命令:

    oc -n multicluster-engine create secret generic rosa-creds-secret \
      --from-literal=ocmClientID='....' \
      --from-literal=ocmClientSecret='eyJhbGciOiJIUzI1NiIsI....' \
      --from-literal=ocmApiUrl='https://api.openshift.com'
    Copy to Clipboard Toggle word wrap

创建服务帐户后,设置 AWS 凭证并验证 OpenShift Cluster Manager 凭证,请完成以下步骤,使用托管的 control plane 集群在 AWS 上创建 Red Hat OpenShift Service on AWS:

  1. 创建 AWSClusterControllerIdentity 资源。请参阅以下 YAML 文件示例:

    apiVersion: infrastructure.cluster.x-k8s.io/v1beta2
    kind: AWSClusterControllerIdentity
    metadata:
      name: "default"
    spec:
      allowedNamespaces: {}
    Copy to Clipboard Toggle word wrap
  2. 创建 ROSARoleConfig 资源。请参阅以下 YAML 文件示例:

    apiVersion: infrastructure.cluster.x-k8s.io/v1beta2
    kind: ROSARoleConfig
    metadata:
      name: "role-config"
      namespace: "ns-rosa-hcp"
    spec:
      accountRoleConfig:
        prefix: "rosa"
        version: "4.20.0"
      operatorRoleConfig:
        prefix: "rosa"
      credentialsSecretRef:
        name: rosa-creds-secret
      oidcProviderType: Managed
    Copy to Clipboard Toggle word wrap
  3. 创建 ROSANetwork 资源。请参阅以下 YAML 文件示例:

    apiVersion: infrastructure.cluster.x-k8s.io/v1beta2
    kind: ROSANetwork
    metadata:
      name: "rosa-vpc"
      namespace: "ns-rosa-hcp"
      spec:
        region: "us-west-2"
        stackName: "rosa-hcp-net"
        availabilityZones:
        - "us-west-2a"
        - "us-west-2b"
        - "us-west-2c"
        cidrBlock: 10.0.0.0/16
        identityRef:
          kind: AWSClusterControllerIdentity
          name: default
    Copy to Clipboard Toggle word wrap
  4. 验证是否已创建 ROSARoleConfig 资源。检查 ROSARoleConfig 状态是否包含 accountRolesRefoidcIDoidcProviderARNoperatorRolesRef。运行以下命令:

    oc get rosaroleconfig  -n ns-rosa-hcp role-config -o yaml
    Copy to Clipboard Toggle word wrap
  5. 验证是否已创建 ROSANetwork 资源。ROSANetwork 状态包含创建的子网。运行以下命令:

    oc get rosanetwork -n ns-rosa-hcp rosa-vpc -o yaml
    Copy to Clipboard Toggle word wrap
  6. ROSAControlPlane 资源创建所需的自定义资源。

    1. 使用以下 YAML 文件内容创建 ManagedCluster 资源:

      apiVersion: cluster.open-cluster-management.io/v1
      kind: ManagedCluster
      metadata:
        name: rosa-hcp-1
        spec:
          hubAcceptsClient: true
      Copy to Clipboard Toggle word wrap
    2. 使用以下 YAML 文件内容创建集群资源:

      apiVersion: cluster.x-k8s.io/v1beta1
      kind: Cluster
      metadata:
        name: "rosa-hcp-1"
        namespace: "ns-rosa-hcp"
        spec:
          clusterNetwork:
            pods:
              cidrBlocks: ["192.168.0.0/16"]
          infrastructureRef:
            apiVersion: infrastructure.cluster.x-k8s.io/v1beta2
            kind: ROSACluster
            name: "rosa-hcp-1"
            namespace: "ns-rosa-hcp"
          controlPlaneRef:
            apiVersion: controlplane.cluster.x-k8s.io/v1beta2
            kind: ROSAControlPlane
            name: "rosa-cp-1"
            namespace: "ns-rosa-hcp"
      Copy to Clipboard Toggle word wrap
  7. 使用以下 YAML 文件内容创建 ROSACluster 资源:

    apiVersion: infrastructure.cluster.x-k8s.io/v1beta2
    kind: ROSACluster
    metadata:
      name: "rosa-hcp-1"
      namespace: "ns-rosa-hcp"
      spec: {}
    Copy to Clipboard Toggle word wrap
  8. 使用以下 YAML 文件内容创建 ROSAControlPlane 资源。确保 区域 与用于创建 ROSANetwork 资源的 AWS 区域匹配:

    apiVersion: controlplane.cluster.x-k8s.io/v1beta2
    kind: ROSAControlPlane
    metadata:
      name: "rosa-cp-1"
      namespace: "ns-rosa-hcp"
      spec:
        credentialsSecretRef:
          name: rosa-creds-secret
        rosaClusterName: rosa-hcp-1
        domainPrefix: rosa-hcp
        rosaRoleConfigRef:
          name: role-config
        version: "4.20.0"
        region: "us-west-2"
        rosaNetworkRef:
          name: "rosa-vpc"
        network:
          machineCIDR: "10.0.0.0/16"
          podCIDR: "10.128.0.0/14"
          serviceCIDR: "172.30.0.0/16"
        defaultMachinePoolSpec:
          instanceType: "m5.xlarge"
          autoscaling:
            maxReplicas: 6
            minReplicas: 3
        additionalTags:
          env: "demo"
          profile: "hcp"
    Copy to Clipboard Toggle word wrap
  9. 检查 ROSAControlPlane 状态。运行以下命令。确保 READY 列为 true

    oc get ROSAControlPlane rosa-cp-1 -n ns-rosa-hcp
    Copy to Clipboard Toggle word wrap

    注: 带有托管 control plane 集群的 Red Hat OpenShift Service on AWS 可能需要最多 40 分钟才能完全置备。

  10. 完成 ROSAControlPlane 资源置备后,验证是否已创建 ROSAMachinePool。运行以下命令:

    oc get ROSAMachinePool -n ns-rosa-hcp
    Copy to Clipboard Toggle word wrap

    可能显示以下输出:

    NAMESPACE     NAME        READY   REPLICAS
    ns-rosa-hcp   workers-0   true    1
    ns-rosa-hcp   workers-1   true    1
    ns-rosa-hcp   workers-2   true    1
    Copy to Clipboard Toggle word wrap

    注: 默认可用的 ROSAMachinePools 计数基于分配的可用区。

1.11.4.5. 其他资源

删除 ROSAControlPlane 会在带有托管 control plane 集群的 AWS 上取消置备 Red Hat OpenShift Service。完成此过程需要 30 到 50 分钟。关联的 ROSAMachinePool 资源会被自动删除。

需要的访问权限:集群管理员

先决条件

  • 您有一个带有 Cluster API 的托管 control plane 集群的 Red Hat OpenShift Service on AWS。

流程

  1. 删除 ROSAControlPlane 自定义资源和匹配的集群自定义资源。运行以下命令。根据需要替换值:

    oc delete -n ns-rosa-hcp cluster/rosa-hcp-1 rosacontrolplane/rosa-cp-1
    Copy to Clipboard Toggle word wrap
  2. ROSAControlPlane 删除完成后,删除 ROSARoleConfigROSANetwork 资源。
返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

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

關於紅帽

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

Theme

© 2025 Red Hat