9.2. 使用多个 Prism Element 的容错部署
默认情况下,安装程序会将 control plane 和计算机器安装到单个 Nutanix Prism Element (集群) 中。要改进 OpenShift Container Platform 集群的容错功能,您现在可以通过配置故障域来指定这些机器分布在多个 Nutanix 集群中。
故障域代表额外的 Prism Element 实例,在安装过程中和安装后可用于 OpenShift Container Platform 机器池。
9.2.1. 安装方法和故障域配置
OpenShift Container Platform 的安装方法决定了如何以及何时配置故障域:
如果使用安装程序置备的基础架构部署,您可以在部署集群前在安装配置文件中配置故障域。如需更多信息,请参阅配置故障域。
您还可以在部署集群后配置故障域。有关在安装后配置故障域的更多信息,请参阅在现有的 Nutanix 集群中添加故障域。
- 如果使用自己管理的基础架构(用户置备的基础架构)部署,则不需要额外的配置。部署集群后,您可以在故障域间手动分发 control plane 和计算机器。
9.2.2. 在现有的 Nutanix 集群中添加故障域
默认情况下,安装程序会将 control plane 和计算机器安装到单个 Nutanix Prism Element (集群) 中。部署 OpenShift Container Platform 集群后,您可以使用故障域在部署中添加额外的 Prism Element 实例来提高其容错功能。
故障域代表单个 Prism Element 实例,可以部署新的 control plane 和计算机器,并可分发现有的 control plane 和计算机器。
9.2.2.1. 故障域要求
在计划使用故障域时,请考虑以下要求:
- 所有 Nutanix Prism Element 实例都必须由同一 Prism Central 实例管理。不支持由多个 Prism Central 实例组成的部署。
- 组成 Prism Element 集群的机器必须位于同一以太网网络中,以便故障域能够相互通信。
- 每个 Prism Element 中都需要一个子网,将用作 OpenShift Container Platform 集群中的故障域。在定义这些子网时,它们必须共享相同的 IP 地址前缀 (CIDR),并且应包含 OpenShift Container Platform 集群使用的虚拟 IP 地址。
9.2.2.2. 在 Infrastructure CR 中添加故障域
您可以通过修改其 Infrastructure 自定义资源 (CR) (infrastructures.config.openshift.io
),将故障域添加到现有 Nutanix 集群。
建议您配置三个故障域以确保高可用性。
流程
运行以下命令来编辑 Infrastructure CR:
$ oc edit infrastructures.config.openshift.io cluster
配置故障域。
带有 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) 一个子网。
- 保存 CR 以应用更改。
9.2.2.3. 在故障域间分布 control plane
您可以通过修改 control plane 机器集自定义资源 (CR) 在 Nutanix 故障域之间分发 control plane。
先决条件
- 您已在集群的 Infrastructure 自定义资源 (CR) 中配置了故障域。
- control plane 机器集自定义资源 (CR) 处于 active 状态。
有关检查 control plane 机器集自定义资源状态的更多信息,请参阅"添加资源"。
流程
运行以下命令来编辑 control plane 机器集 CR:
$ oc edit controlplanemachineset.machine.openshift.io cluster -n openshift-machine-api
通过添加
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> # ...
- 保存您的更改。
默认情况下,control plane 机器集会自动将更改传播到 control plane 配置。如果集群被配置为使用 OnDelete
更新策略,您必须手动替换 control plane。如需更多信息,请参阅"附加资源"。
9.2.2.4. 在故障域间分布计算机器
您可以使用以下方法之一在 Nutanix 故障域间分发计算机器:
- 通过 编辑现有的计算机器集,您可以在 Nutanix 故障域间分发计算机器,作为最小配置更新。
- 替换现有计算机器集 可确保规格不可变,且所有机器都相同。
9.2.2.4.1. 编辑计算机器集以实施故障域
要使用现有计算机器集在 Nutanix 故障域之间分发计算机器,您可以使用您的配置更新计算机器集,然后使用扩展来替换现有的计算机器。
先决条件
- 您已在集群的 Infrastructure 自定义资源 (CR) 中配置了故障域。
流程
运行以下命令,以查看集群的 Infrastructure CR。
$ oc describe infrastructures.config.openshift.io cluster
-
对于每个故障域 (
platformSpec.nutanix.failureDomains
),请注意集群的 UUID、名称和子网对象 UUID。这些值需要将故障域添加到计算机器集中。 运行以下命令列出集群中的计算机器集:
$ 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
运行以下命令来编辑第一个计算机器集:
$ oc edit machineset <machine_set_name_1> -n openshift-machine-api
通过将以下内容添加到
spec.template.spec.providerSpec.value
小节中,将计算机器设置配置为使用第一个故障域:注意确保为
cluster
hesubnets
字段指定的值与集群的 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> # ...
-
注意
spec.replicas
的值,因为在扩展计算机器时需要它来应用更改。 - 保存您的更改。
运行以下命令,列出由更新的计算机器集管理的机器:
$ 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
对于由更新的计算机器集管理的每台机器,请运行以下命令设置
delete
注解:$ oc annotate machine/<machine_name_original_1> \ -n openshift-machine-api \ machine.openshift.io/delete-machine="true"
要使用新配置创建替换机器,请运行以下命令将计算机器设置为两倍:
$ oc scale --replicas=<twice_the_number_of_replicas> \1 machineset <machine_set_name_1> \ -n openshift-machine-api
- 1
- 例如,如果计算机器设置中的原始副本数为
2
,请将副本扩展到4
。
运行以下命令,列出由更新的计算机器集管理的机器:
$ oc get -n openshift-machine-api machines -l machine.openshift.io/cluster-api-machineset=<machine_set_name_1>
当新机器处于
Running
阶段时,您可以将计算机器设置为原始副本数。要删除使用旧配置创建的机器,请运行以下命令将计算机器设置为原始副本数:
$ oc scale --replicas=<original_number_of_replicas> \1 machineset <machine_set_name_1> \ -n openshift-machine-api
- 1
- 例如,如果计算机器设置中的原始副本数为
2
,请将副本扩展到2
。
- 根据需要,继续修改机器集以引用可用于部署的额外故障域。
其他资源
9.2.2.4.2. 替换计算机器集以实施故障域
要通过替换计算机器集来跨 Nutanix 故障域分发计算机器,您可以使用您的配置创建新的计算机器集,等待它创建的机器启动,然后删除旧的计算机器集。
先决条件
- 您已在集群的 Infrastructure 自定义资源 (CR) 中配置了故障域。
流程
运行以下命令,以查看集群的 Infrastructure CR。
$ oc describe infrastructures.config.openshift.io cluster
-
对于每个故障域 (
platformSpec.nutanix.failureDomains
),请注意集群的 UUID、名称和子网对象 UUID。这些值需要将故障域添加到计算机器集中。 运行以下命令列出集群中的计算机器集:
$ 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
- 请注意现有计算机器集的名称。
使用以下方法之一创建一个包含新计算机器设置自定义资源 (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 ...
通过更新或将以下内容添加到
<new_machine_set_name_1>.yaml
文件中的spec.template.spec.providerSpec.value
小节中,将新的计算机器集配置为使用第一个故障域。注意确保为
cluster
hesubnets
字段指定的值与集群的 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> # ...
- 保存您的更改。
运行以下命令来创建计算机器设置 CR:
$ oc create -f <new_machine_set_name_1>.yaml
- 根据需要,继续创建计算机器集以引用可用于部署的额外故障域。
通过为每个新计算机器集运行以下命令来列出由新计算机器集管理的机器:
$ 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
阶段时,您可以删除不包含故障域配置的旧计算机器集。当您确认新机器处于
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
其他资源