10.4. 在 vSphere 上为集群指定多个主机组
您可以配置 infrastructures.config.openshift.io 配置资源,为在 VMware vSphere 实例上运行的 OpenShift Container Platform 集群指定多个主机组。如果您的 vSphere 实例在扩展集群配置中,且您的 ESXi 主机和存储分布到多个物理数据中心中,则需要此项。如果您还没有在安装时为 OpenShift Container Platform 集群配置主机组,或者使用额外的主机组更新 OpenShift Container Platform 集群。
OpenShift zones 支持 vSphere 主机组只是一个技术预览功能。技术预览功能不受红帽产品服务等级协议(SLA)支持,且功能可能并不完整。红帽不推荐在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。
有关红帽技术预览功能支持范围的更多信息,请参阅以下链接:
先决条件
ESXi 主机分组到主机组中,它们通过 VM-host 关联性规则链接到对应的虚拟机(VM)组。详情请查看以下示例
govc命令:# This example shows the correct configuration for a cluster with two host groups: # Create host groups: govc cluster.group.create -name <host_group_1> -host govc cluster.group.create -name <host_group_2> -host # Create VM groups: govc cluster.group.create -name <vm_group_1> -vm govc cluster.group.create -name <vm_group_2> -vm # Create VM-host affinity rules: govc cluster.rule.create -name <rule_1> -enable -vm-host -vm-group <vm_group_1> -host-affine-group <host_group_1> govc cluster.rule.create -name <rule_2> -enable -vm-host -vm-group <vm_group_2> -host-affine-group <host_group_2> # Add ESXi hosts to host groups: govc cluster.group.change -name <host_group_1> <esxi_host_1_ip> govc cluster.group.change -name <host_group_2> <esxi_host_2_ip>-
openshift-region和openshift-zone标签类别在 vCenter 服务器上创建。 -
Compute 集群有来自
openshift-region标签类别的标签。 -
主机组中的 ESXi 主机具有
openshift-zone标签类别的标签。 -
Host.Inventory.EditCluster特权在 vSphere vCenter 集群对象上被授予。 -
TechPreviewNoUpgrade功能集已启用。如需更多信息,请参阅"使用功能门启用功能"。
流程
编辑 OpenShift Container Platform 集群的基础架构设置。
要将现有基础架构设置复制到文件中,请运行以下命令:
$ oc get infrastructures.config.openshift.io cluster -o yaml > <name_of_infrastructure_file>.yaml编辑您的基础架构文件,使其包含 vSphere 集群中每个主机组的故障域。有关此配置示例,请参考以下 YAML 文件。确保将括号中的值(
< >)替换为您的值:apiVersion: config.openshift.io/v1 kind: Infrastructure metadata: name: cluster spec: cloudConfig: key: config name: cloud-provider-config platformSpec: type: VSphere vsphere: apiServerInternalIPs: - <internal_ip_of_api_server> failureDomains: - name: <unique_name_for_failure_domain_1> region: <cluster_1_region_tag> server: <vcenter_server_ip_address> zoneAffinity: type: HostGroup hostGroup: vmGroup: <name_of_vm_group_1> hostGroup: <name_of_host_group_1> vmHostRule: <name_of_vm_host_affinity_rule_1> regionAffinity: type: ComputeCluster topology: computeCluster: /<data_center_1>/host/<cluster_1> datacenter: <data_center_1> datastore: /<data_center_1>/datastore/<datastore_1> networks: - VM Network resourcePool: /<data_center_1>/host/<cluster_1>/Resources template: /<data_center_1>/vm/<vm_template> zone: <host_group_1_tag> - name: <unique_name_for_failure_domain_2> region: <cluster_1_region_tag> server: <vcenter_server_ip_address> zoneAffinity: type: HostGroup hostGroup: vmGroup: <name_of_vm_group_2> hostGroup: <name_of_host_group_2> vmHostRule: <name_of_vm_host_affinity_rule_2> regionAffinity: type: ComputeCluster topology: computeCluster: /<data_center_1>/host/<cluster_1> datacenter: <data_center_1> datastore: /<data_center_1>/datastore/<datastore_1> networks: - VM Network resourcePool: /<data_center_1>/host/<cluster_1>/Resources template: /<data_center_1>/vm/<vm_template> zone: <host_group_2_tag> # ...要使用这些更改对集群进行更新,请运行以下命令:
$ oc replace -f <name_of_infrastructure_file>.yaml
通过完成以下步骤,使用新的故障域更新
ControlPlaneMachineSet自定义资源(CR):运行以下命令来编辑
ControlPlaneMachineSetCR:$ oc edit controlplanemachinesets.machine.openshift.io -n openshift-machine-api cluster编辑
failureDomains参数,如下例所示:spec: replicas: 3 selector: matchLabels: machine.openshift.io/cluster-api-cluster: jdoe3-whb8l machine.openshift.io/cluster-api-machine-role: master machine.openshift.io/cluster-api-machine-type: master state: Active strategy: type: RollingUpdate template: machineType: machines_v1beta1_machine_openshift_io machines_v1beta1_machine_openshift_io: failureDomains: platform: VSphere vsphere: - name: <failure_domain_1_name> - name: <failure_domain_2_name> # ...在继续操作前,验证您的 control plane 节点已完成更新。要做到这一点,请运行以下命令:
$ oc get controlplanemachinesets.machine.openshift.io -n openshift-machine-api
为您的故障域创建新的
MachineSetCR。要检索现有
MachineSetCR 的配置以用作模板,请运行以下命令:$ oc get machinesets.machine.openshift.io -n openshift-machine-api <existing_machine_set> -o yaml > machineset-<failure_domain_name>.yaml根据需要复制模板,为基础架构文件中定义的每个故障域创建
MachineSetCR 文件。请参考以下示例:apiVersion: machine.openshift.io/v1beta1 kind: MachineSet metadata: labels: machine.openshift.io/cluster-api-cluster: <infrastructure_id> name: <machineset_name> namespace: openshift-machine-api spec: replicas: 0 selector: matchLabels: machine.openshift.io/cluster-api-cluster: <infrastructure_id> machine.openshift.io/cluster-api-machineset: <machineset_name> template: metadata: labels: machine.openshift.io/cluster-api-cluster: <infrastructure_id> machine.openshift.io/cluster-api-machine-role: worker machine.openshift.io/cluster-api-machine-type: worker machine.openshift.io/cluster-api-machineset: <machineset_name> spec: lifecycleHooks: {} metadata: {} providerSpec: value: apiVersion: machine.openshift.io/v1beta1 credentialsSecret: name: vsphere-cloud-credentials diskGiB: <disk_GiB> kind: VSphereMachineProviderSpec memoryMiB: <memory_in_MiB> metadata: creationTimestamp: null network: devices: - networkName: VM Network numCPUs: <number_of_cpus> numCoresPerSocket: <number_of_cores_per_socket> snapshot: "" template: <template_name> userDataSecret: name: worker-user-data workspace: datacenter: <data_center_1> datastore: /<data_center_1>/datastore/<datastore_1> folder: /<data_center_1>/vm/<folder> resourcePool: /<data_center_1>/host/<cluster_1>/Resources server: <server_ip_address> vmGroup: <name_of_vm_group_1> # ...对于每个
MachineSetCR 文件,运行以下命令:$ oc create -f <name_of_machine_set_file>.yaml