×

默认情况下,安装程序将控制平面和计算机器安装到单个Nutanix Prism Element(集群)中。为了提高OpenShift Container Platform集群的容错能力,您可以指定将这些机器分布在多个Nutanix集群中,方法是配置故障域。

故障域表示在安装期间和之后可用于OpenShift Container Platform机器池的附加Prism Element实例。

安装方法和故障域配置

OpenShift Container Platform安装方法决定了如何以及何时配置故障域。

  • 如果使用安装程序预置的基础架构进行部署,则可以在部署集群之前在安装配置文件中配置故障域。有关更多信息,请参见配置故障域

    您也可以在集群部署后配置故障域。有关部署后配置故障域的更多信息,请参见向现有Nutanix集群添加故障域

  • 如果使用您管理的基础架构(用户预置的基础架构)进行部署,则无需其他配置。集群部署后,您可以手动跨故障域分配控制平面和计算机器。

向现有Nutanix集群添加故障域

默认情况下,安装程序将控制平面和计算机器安装到单个Nutanix Prism Element(集群)中。部署OpenShift Container Platform集群后,您可以通过使用故障域向部署添加其他Prism Element实例来提高其容错能力。

故障域表示可以部署新的控制平面和计算机器以及可以分配现有控制平面和计算机器的单个Prism Element实例。

故障域要求

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

  • 所有Nutanix Prism Element实例都必须由同一Prism Central实例管理。不支持由多个Prism Central实例组成的部署。

  • 构成Prism Element集群的机器必须位于同一个以太网网络上,以便故障域能够相互通信。

  • 每个将用作OpenShift Container Platform集群中故障域的Prism Element都需要一个子网。定义这些子网时,它们必须共享相同的IP地址前缀(CIDR),并且应包含OpenShift Container Platform集群使用的虚拟IP地址。

向基础设施CR添加故障域

您可以通过修改其基础设施自定义资源 (CR) (infrastructures.config.openshift.io) 来向现有的Nutanix集群添加故障域。

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

步骤
  1. 运行以下命令编辑基础设施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以应用更改。

跨故障域分配控制平面

您可以通过修改控制平面机器集自定义资源 (CR) 来跨Nutanix故障域分配控制平面。

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

  • 控制平面机器集自定义资源 (CR) 处于活动状态。

有关检查控制平面机器集自定义资源状态的更多信息,请参阅“附加资源”。

步骤
  1. 运行以下命令来编辑控制平面机器集 CR

    $ oc edit controlplanemachineset.machine.openshift.io cluster -n openshift-machine-api
  2. 通过添加spec.template.machines_v1beta1_machine_openshift_io.failureDomains 节来配置控制平面机器集以使用故障域。

    具有 Nutanix 故障域的控制平面机器集示例
    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. 保存您的更改。

默认情况下,控制平面机器集会自动将更改传播到您的控制平面配置。如果集群配置为使用OnDelete 更新策略,则必须手动替换您的控制平面。有关更多信息,请参阅“附加资源”。

跨故障域分配计算机器

您可以通过以下方式之一跨 Nutanix 故障域分配计算机器

编辑计算机器集以实现故障域

要使用现有的计算机器集跨 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 节来配置计算机器集以使用第一个故障域。

    请确保您为clustersubnets 字段指定的值与集群 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. 根据需要,继续修改机器集以引用部署可用的其他故障域。

附加资源

替换计算机器集以实现故障域

要通过替换计算机器集跨 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 节来配置新的计算机器集以使用第一个故障域。

    请确保您为clustersubnets 字段指定的值与集群 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