2.2. 在现有的 Nutanix 集群中添加故障域


默认情况下,安装程序会将 control plane 和计算机器安装到单个 Nutanix Prism Element (集群) 中。部署 OpenShift Container Platform 集群后,您可以使用故障域在部署中添加额外的 Prism Element 实例来提高其容错功能。

故障域代表单个 Prism Element 实例,可以部署新的 control plane 和计算机器,并可分发现有的 control plane 和计算机器。

2.2.1. 故障域要求

在计划使用故障域时,请考虑以下要求:

  • 所有 Nutanix Prism Element 实例都必须由同一 Prism Central 实例管理。不支持由多个 Prism Central 实例组成的部署。
  • 组成 Prism Element 集群的机器必须位于同一以太网网络中,以便故障域能够相互通信。
  • 每个 Prism Element 中都需要一个子网,将用作 OpenShift Container Platform 集群中的故障域。在定义这些子网时,它们必须共享相同的 IP 地址前缀 (CIDR),并且应包含 OpenShift Container Platform 集群使用的虚拟 IP 地址。

2.2.2. 在 Infrastructure CR 中添加故障域

您可以通过修改其 Infrastructure 自定义资源 (CR) (infrastructures.config.openshift.io),将故障域添加到现有 Nutanix 集群。

提示

建议您配置三个故障域以确保高可用性。

流程

  1. 运行以下命令来编辑 Infrastructure CR:

    $ oc edit infrastructures.config.openshift.io cluster
  2. 配置故障域。

    带有 Nutanix 故障域的基础架构 CR 示例

    spec:
      cloudConfig:
        key: config
        name: cloud-provider-config
    #...
      platformSpec:
        nutanix:
          failureDomains:
          - cluster:
             type: UUID
             uuid: <uuid>
            name: <failure_domain_name>
            subnets:
            - type: UUID
              uuid: <network_uuid>
          - cluster:
             type: UUID
             uuid: <uuid>
            name: <failure_domain_name>
            subnets:
            - type: UUID
              uuid: <network_uuid>
          - cluster:
              type: UUID
              uuid: <uuid>
            name: <failure_domain_name>
            subnets:
            - type: UUID
              uuid: <network_uuid>
    # ...

    其中:

    <uuid>
    指定 Prism Element 的通用唯一标识符 (UUID)。
    <failure_domain_name>
    指定故障域的唯一名称。名称的长度不能超过 64 个字符,可以包括小写字母、数字和短划线 (-)。短划线不能是名称的第一个或最后一个。
    <network_uuid>
    指定 Prism Element 子网对象的 UUID。子网的 IP 地址前缀 (CIDR) 应包含 OpenShift Container Platform 集群使用的虚拟 IP 地址。在 OpenShift Container Platform 集群中,只支持每个故障域 (Prism Element) 一个子网。
  3. 保存 CR 以应用更改。

2.2.3. 在故障域间分布 control plane

您可以通过修改 control plane 机器集自定义资源 (CR) 在 Nutanix 故障域之间分发 control plane。

先决条件

  • 您已在集群的 Infrastructure 自定义资源 (CR) 中配置了故障域。
  • control plane 机器集自定义资源 (CR) 处于 active 状态。

有关检查 control plane 机器集自定义资源状态的更多信息,请参阅"添加资源"。

流程

  1. 运行以下命令来编辑 control plane 机器集 CR:

    $ oc edit controlplanemachineset.machine.openshift.io cluster -n openshift-machine-api
  2. 通过添加 spec.template.machines_v1beta1_machine_openshift_io.failureDomains 小节,将 control plane 机器集配置为使用故障域。

    使用 Nutanix 故障域的 control plane 机器集示例

    apiVersion: machine.openshift.io/v1
    kind: ControlPlaneMachineSet
      metadata:
        creationTimestamp: null
        labels:
          machine.openshift.io/cluster-api-cluster: <cluster_name>
        name: cluster
        namespace: openshift-machine-api
    spec:
    # ...
      template:
        machineType: machines_v1beta1_machine_openshift_io
        machines_v1beta1_machine_openshift_io:
          failureDomains:
            platform: Nutanix
            nutanix:
            - name: <failure_domain_name_1>
            - name: <failure_domain_name_2>
            - name: <failure_domain_name_3>
    # ...

  3. 保存您的更改。

默认情况下,control plane 机器集会自动将更改传播到 control plane 配置。如果集群被配置为使用 OnDelete 更新策略,您必须手动替换 control plane。如需更多信息,请参阅"附加资源"。

2.2.4. 在故障域间分布计算机器

您可以使用以下方法之一在 Nutanix 故障域间分发计算机器:

2.2.4.1. 编辑计算机器集以实施故障域

要使用现有计算机器集在 Nutanix 故障域之间分发计算机器,您可以使用您的配置更新计算机器集,然后使用扩展来替换现有的计算机器。

先决条件

  • 您已在集群的 Infrastructure 自定义资源 (CR) 中配置了故障域。

流程

  1. 运行以下命令,以查看集群的 Infrastructure CR。

    $ oc describe infrastructures.config.openshift.io cluster
  2. 对于每个故障域 (platformSpec.nutanix.failureDomains),请注意集群的 UUID、名称和子网对象 UUID。这些值需要将故障域添加到计算机器集中。
  3. 运行以下命令列出集群中的计算机器集:

    $ oc get machinesets -n openshift-machine-api

    输出示例

    NAME                   DESIRED   CURRENT   READY   AVAILABLE   AGE
    <machine_set_name_1>   1         1         1       1           55m
    <machine_set_name_2>   1         1         1       1           55m

  4. 运行以下命令来编辑第一个计算机器集:

    $ oc edit machineset <machine_set_name_1> -n openshift-machine-api
  5. 通过将以下内容添加到 spec.template.spec.providerSpec.value 小节中,将计算机器设置配置为使用第一个故障域:

    注意

    确保为 cluster he subnets 字段指定的值与集群的 Infrastructure CR 中的 failureDomains 小节中配置的值匹配。

    使用 Nutanix 故障域的计算机器集示例

    apiVersion: machine.openshift.io/v1
    kind: MachineSet
    metadata:
      creationTimestamp: null
      labels:
        machine.openshift.io/cluster-api-cluster: <cluster_name>
      name: <machine_set_name_1>
      namespace: openshift-machine-api
    spec:
      replicas: 2
    # ...
      template:
        spec:
    # ...
          providerSpec:
            value:
              apiVersion: machine.openshift.io/v1
              failureDomain:
                name: <failure_domain_name_1>
              cluster:
                type: uuid
                uuid: <prism_element_uuid_1>
              subnets:
              - type: uuid
                uuid: <prism_element_network_uuid_1>
    # ...

  6. 注意 spec.replicas 的值,因为在扩展计算机器时需要它来应用更改。
  7. 保存您的更改。
  8. 运行以下命令,列出由更新的计算机器集管理的机器:

    $ oc get -n openshift-machine-api machines \
      -l machine.openshift.io/cluster-api-machineset=<machine_set_name_1>

    输出示例

    NAME                        PHASE     TYPE   REGION    ZONE                 AGE
    <machine_name_original_1>   Running   AHV    Unnamed   Development-STS   4h
    <machine_name_original_2>   Running   AHV    Unnamed   Development-STS   4h

  9. 对于由更新的计算机器集管理的每台机器,请运行以下命令设置 delete 注解:

    $ oc annotate machine/<machine_name_original_1> \
      -n openshift-machine-api \
      machine.openshift.io/delete-machine="true"
  10. 要使用新配置创建替换机器,请运行以下命令将计算机器设置为两倍:

    $ oc scale --replicas=<twice_the_number_of_replicas> \1
      machineset <machine_set_name_1> \
      -n openshift-machine-api
    1
    例如,如果计算机器设置中的原始副本数为 2,请将副本扩展到 4
  11. 运行以下命令,列出由更新的计算机器集管理的机器:

    $ oc get -n openshift-machine-api machines -l machine.openshift.io/cluster-api-machineset=<machine_set_name_1>

    当新机器处于 Running 阶段时,您可以将计算机器设置为原始副本数。

  12. 要删除使用旧配置创建的机器,请运行以下命令将计算机器设置为原始副本数:

    $ oc scale --replicas=<original_number_of_replicas> \1
      machineset <machine_set_name_1> \
      -n openshift-machine-api
    1
    例如,如果计算机器设置中的原始副本数为 2,请将副本扩展到 2
  13. 根据需要,继续修改机器集以引用可用于部署的额外故障域。

其他资源

2.2.4.2. 替换计算机器集以实施故障域

要通过替换计算机器集来跨 Nutanix 故障域分发计算机器,您可以使用您的配置创建新的计算机器集,等待它创建的机器启动,然后删除旧的计算机器集。

先决条件

  • 您已在集群的 Infrastructure 自定义资源 (CR) 中配置了故障域。

流程

  1. 运行以下命令,以查看集群的 Infrastructure CR。

    $ oc describe infrastructures.config.openshift.io cluster
  2. 对于每个故障域 (platformSpec.nutanix.failureDomains),请注意集群的 UUID、名称和子网对象 UUID。这些值需要将故障域添加到计算机器集中。
  3. 运行以下命令列出集群中的计算机器集:

    $ oc get machinesets -n openshift-machine-api

    输出示例

    NAME                            DESIRED   CURRENT   READY   AVAILABLE   AGE
    <original_machine_set_name_1>   1         1         1       1           55m
    <original_machine_set_name_2>   1         1         1       1           55m

  4. 请注意现有计算机器集的名称。
  5. 使用以下方法之一创建一个包含新计算机器设置自定义资源 (CR) 的 YAML 文件:

    • 运行以下命令,将现有计算机器集配置复制到新文件中:

      $ oc get machineset <original_machine_set_name_1> \
        -n openshift-machine-api -o yaml > <new_machine_set_name_1>.yaml

      您可以使用首选文本编辑器编辑此 YAML 文件。

    • 使用您的首选文本编辑器创建名为 <new_machine_set_name_1>.yaml 的空白 YAML 文件,并包含新计算机器集所需的值。

      如果您不确定为特定字段设置哪个值,您可以通过运行以下命令来查看现有计算机器集 CR 的值:

      $ oc get machineset <original_machine_set_name_1> \
        -n openshift-machine-api -o yaml

      输出示例

      apiVersion: machine.openshift.io/v1beta1
      kind: MachineSet
      metadata:
        labels:
          machine.openshift.io/cluster-api-cluster: <infrastructure_id> 1
        name: <infrastructure_id>-<role> 2
        namespace: openshift-machine-api
      spec:
        replicas: 1
        selector:
          matchLabels:
            machine.openshift.io/cluster-api-cluster: <infrastructure_id>
            machine.openshift.io/cluster-api-machineset: <infrastructure_id>-<role>
        template:
          metadata:
            labels:
              machine.openshift.io/cluster-api-cluster: <infrastructure_id>
              machine.openshift.io/cluster-api-machine-role: <role>
              machine.openshift.io/cluster-api-machine-type: <role>
              machine.openshift.io/cluster-api-machineset: <infrastructure_id>-<role>
          spec:
            providerSpec: 3
              ...

      1
      集群基础架构 ID。
      2
      默认节点标签。
      注意

      对于具有用户置备的基础架构的集群,计算机器集只能使用 workerinfra 角色创建机器。

      3
      计算机器设置 CR 的 <providerSpec> 部分中的值是特定于平台的。有关 CR 中的 <providerSpec> 参数的更多信息,请参阅您的供应商计算机器设置 CR 配置示例。
  6. 通过更新或将以下内容添加到 <new_machine_set_name_1>.yaml 文件中的 spec.template.spec.providerSpec.value 小节中,将新的计算机器集配置为使用第一个故障域。

    注意

    确保为 cluster he subnets 字段指定的值与集群的 Infrastructure CR 中的 failureDomains 小节中配置的值匹配。

    使用 Nutanix 故障域的计算机器集示例

    apiVersion: machine.openshift.io/v1
    kind: MachineSet
    metadata:
      creationTimestamp: null
      labels:
        machine.openshift.io/cluster-api-cluster: <cluster_name>
      name: <new_machine_set_name_1>
      namespace: openshift-machine-api
    spec:
      replicas: 2
    # ...
      template:
        spec:
    # ...
          providerSpec:
            value:
              apiVersion: machine.openshift.io/v1
              failureDomain:
                name: <failure_domain_name_1>
              cluster:
                type: uuid
                uuid: <prism_element_uuid_1>
              subnets:
              - type: uuid
                uuid: <prism_element_network_uuid_1>
    # ...

  7. 保存您的更改。
  8. 运行以下命令来创建计算机器设置 CR:

    $ oc create -f <new_machine_set_name_1>.yaml
  9. 根据需要,继续创建计算机器集以引用可用于部署的额外故障域。
  10. 通过为每个新计算机器集运行以下命令来列出由新计算机器集管理的机器:

    $ oc get -n openshift-machine-api machines -l machine.openshift.io/cluster-api-machineset=<new_machine_set_name_1>

    输出示例

    NAME                             PHASE          TYPE   REGION    ZONE                 AGE
    <machine_from_new_1>             Provisioned    AHV    Unnamed   Development-STS   25s
    <machine_from_new_2>             Provisioning   AHV    Unnamed   Development-STS   25s

    当新机器处于 Running 阶段时,您可以删除不包含故障域配置的旧计算机器集。

  11. 当您确认新机器处于 Running 阶段时,通过为每个机器运行以下命令来删除旧计算机器集:

    $ oc delete machineset <original_machine_set_name_1> -n openshift-machine-api

验证

  • 要验证没有更新的配置的计算机器集已被删除,请运行以下命令列出集群中的计算机器集:

    $ oc get machinesets -n openshift-machine-api

    输出示例

    NAME                       DESIRED   CURRENT   READY   AVAILABLE   AGE
    <new_machine_set_name_1>   1         1         1       1           4m12s
    <new_machine_set_name_2>   1         1         1       1           4m12s

  • 要验证没有更新配置的计算机器是否已删除,请运行以下命令列出集群中的机器:

    $ oc get -n openshift-machine-api machines

    删除过程中的输出示例

    NAME                        PHASE           TYPE     REGION      ZONE                 AGE
    <machine_from_new_1>        Running         AHV      Unnamed     Development-STS   5m41s
    <machine_from_new_2>        Running         AHV      Unnamed     Development-STS   5m41s
    <machine_from_original_1>   Deleting        AHV      Unnamed     Development-STS   4h
    <machine_from_original_2>   Deleting        AHV      Unnamed     Development-STS   4h

    删除完成后的输出示例

    NAME                        PHASE           TYPE     REGION      ZONE                 AGE
    <machine_from_new_1>        Running         AHV      Unnamed     Development-STS   6m30s
    <machine_from_new_2>        Running         AHV      Unnamed     Development-STS   6m30s

  • 要验证由新计算机器集创建的机器是否具有正确的配置,请运行以下命令检查 CR 中的相关字段是否有新机器:

    $ oc describe machine <machine_from_new_1> -n openshift-machine-api
Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

© 2024 Red Hat, Inc.