2.9. 在 vSphere 上创建计算机器设置
您可以在 VMware vSphere 上的 OpenShift Container Platform 集群中创建不同的计算机器集来满足特定目的。例如,您可以创建基础架构机器集和相关的机器,以便将支持型工作负载转移到新机器上。
您只能在 Machine API 操作的集群中使用高级机器管理和扩展功能。具有用户置备的基础架构的集群需要额外的验证和配置才能使用 Machine API。
具有基础架构平台类型 none 的集群无法使用 Machine API。即使附加到集群的计算机器安装在支持该功能的平台上,也会应用这个限制。在安装后无法更改此参数。
要查看集群的平台类型,请运行以下命令:
$ oc get infrastructure cluster -o jsonpath='{.status.platform}'
2.9.1. vSphere 上计算机器设置自定义资源的 YAML 示例 复制链接链接已复制到粘贴板!
此 YAML 示例定义了一个在 VMware vSphere 上运行的计算机器集,并创建通过 node-role.kubernetes.io/<role>: "" 标记的节点。
在本例中,<infrastructure_id> 是基础架构 ID 标签,该标签基于您在置备集群时设定的集群 ID,而 <role> 则是要添加的节点标签。
apiVersion: machine.openshift.io/v1beta1
kind: MachineSet
metadata:
creationTimestamp: null
labels:
machine.openshift.io/cluster-api-cluster: <infrastructure_id>
name: <infrastructure_id>-<role>
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:
creationTimestamp: null
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:
metadata:
creationTimestamp: null
labels:
node-role.kubernetes.io/<role>: ""
providerSpec:
value:
apiVersion: machine.openshift.io/v1beta1
credentialsSecret:
name: vsphere-cloud-credentials
dataDisks:
- name: "<disk_name>"
provisioningMode: "<mode>"
sizeGiB: 20
diskGiB: 120
kind: VSphereMachineProviderSpec
memoryMiB: 8192
metadata:
creationTimestamp: null
network:
devices:
- networkName: "<vm_network_name>"
numCPUs: 4
numCoresPerSocket: 1
snapshot: ""
template: <vm_template_name>
userDataSecret:
name: worker-user-data
workspace:
datacenter: <vcenter_data_center_name>
datastore: <vcenter_datastore_name>
folder: <vcenter_vm_folder_path>
resourcepool: <vsphere_resource_pool>
server: <vcenter_server_ip>
- 1
- 指定基于置备集群时所设置的集群 ID 的基础架构 ID。如果已安装 OpenShift CLI(
oc)软件包,您可以通过运行以下命令来获取基础架构 ID:$ oc get -o jsonpath='{.status.infrastructureName}{"\n"}' infrastructure cluster - 2
- 指定基础架构 ID 和节点标签。
- 3
- 指定要添加的节点标签。
- 4
- 指定一个或多个数据磁盘定义。如需更多信息,请参阅"使用机器集配置数据磁盘"。
- 5
- 指定要将计算机器设置为的 vSphere VM 网络。此虚拟机网络必须是集群中其他计算机器所处的位置。
- 6
- 指定要使用的 vSphere 虚拟机模板,如
user-5ddjd-rhcos。 - 7
- 指定要部署计算机器集的 vCenter 数据中心。
- 8
- 指定要部署计算机器集的 vCenter 数据存储。
- 9
- 指定 vCenter 中 vSphere 虚拟机文件夹的路径,如
/dc1/vm/user-inst-5ddjd。 - 10
- 指定虚拟机的 vSphere 资源池。
- 11
- 指定 vCenter 服务器 IP 或完全限定域名。
2.9.2. 计算机器设置管理的最低 vCenter 权限 复制链接链接已复制到粘贴板!
要在 vCenter 上的 OpenShift Container Platform 集群中管理计算机器,您必须使用一个具有特权的帐户来读取、创建和删除所需资源。使用具有全局管理特权的帐户是访问所有所需权限的最简单方法。
如果无法使用具有全局管理权限的帐户,您必须创建一个角色来授予最低所需的权限。下表列出了创建、扩展和删除 OpenShift Container Platform 集群中的机器所需的最低 vCenter 角色和特权。
例 2.1. 计算机器设置管理所需的最低 vCenter 角色和权限
| 适用于角色的 vSphere 对象 | 必要时 | 所需的权限 |
|---|---|---|
| vSphere vCenter | Always |
|
| vSphere vCenter 集群 | Always |
|
| vSphere 数据存储 | Always |
|
| vSphere 端口组 | Always |
|
| 虚拟机文件夹 | Always |
|
| vSphere vCenter 数据中心 | 如果安装程序创建虚拟机文件夹 |
|
|
1 | ||
下表详细介绍了计算机器设置管理所需的权限和传播设置。
例 2.2. 所需的权限和传播设置
| vSphere object | 文件夹类型 | 传播到子对象 | 所需的权限 |
|---|---|---|---|
| vSphere vCenter | Always | 不是必需的 | 列出所需的权限 |
| vSphere vCenter 数据中心 | 现有文件夹 | 不是必需的 |
|
| 安装程序创建文件夹 | 必填 | 列出所需的权限 | |
| vSphere vCenter 集群 | Always | 必填 | 列出所需的权限 |
| vSphere vCenter 数据存储 | Always | 不是必需的 | 列出所需的权限 |
| vSphere Switch | Always | 不是必需的 |
|
| vSphere 端口组 | Always | 不是必需的 | 列出所需的权限 |
| vSphere vCenter 虚拟机文件夹 | 现有文件夹 | 必填 | 列出所需的权限 |
有关只使用所需权限创建帐户的更多信息,请参阅 vSphere 文档中的 vSphere 权限和用户管理任务。
2.9.3. 具有用户置备基础架构的集群的要求以使用计算机器集 复制链接链接已复制到粘贴板!
要在具有用户置备的基础架构的集群中使用计算机器集,您必须确保集群配置支持使用 Machine API。
2.9.3.1. 获取基础架构 ID 复制链接链接已复制到粘贴板!
要创建计算机器集,您必须能够为集群提供基础架构 ID。
流程
要获取集群的基础架构 ID,请运行以下命令:
$ oc get infrastructure cluster -o jsonpath='{.status.infrastructureName}'
2.9.3.2. 满足 vSphere 凭证要求 复制链接链接已复制到粘贴板!
要使用计算机器集,Machine API 必须能够与 vCenter 交互。授权 Machine API 组件与 vCenter 交互的凭证必须存在于 openshift-machine-api 命名空间中的 secret 中。
流程
要确定所需的凭证是否存在,请运行以下命令:
$ oc get secret \ -n openshift-machine-api vsphere-cloud-credentials \ -o go-template='{{range $k,$v := .data}}{{printf "%s: " $k}}{{if not $v}}{{$v}}{{else}}{{$v | base64decode}}{{end}}{{"\n"}}{{end}}'输出示例
<vcenter-server>.password=<openshift-user-password> <vcenter-server>.username=<openshift-user>其中
<vcenter-server>是 vCenter 服务器的 IP 地址或完全限定域名(FQDN),<openshift-user>和<openshift-user-password>是要使用的 OpenShift Container Platform 管理员凭证。如果 secret 不存在,请运行以下命令来创建它:
$ oc create secret generic vsphere-cloud-credentials \ -n openshift-machine-api \ --from-literal=<vcenter-server>.username=<openshift-user> --from-literal=<vcenter-server>.password=<openshift-user-password>
2.9.3.3. 满足 Ignition 配置要求 复制链接链接已复制到粘贴板!
置备虚拟机 (VM) 需要有效的 Ignition 配置。Ignition 配置包含 machine-config-server 地址和系统信任捆绑包,用于从 Machine Config Operator 获取进一步的 Ignition 配置。
默认情况下,此配置存储在 machine-api-operator 命名空间中的 worker-user-data secret 中。计算机器集在机器创建过程中引用 secret。
流程
要确定所需的 secret 是否存在,请运行以下命令:
$ oc get secret \ -n openshift-machine-api worker-user-data \ -o go-template='{{range $k,$v := .data}}{{printf "%s: " $k}}{{if not $v}}{{$v}}{{else}}{{$v | base64decode}}{{end}}{{"\n"}}{{end}}'输出示例
disableTemplating: false userData:1 { "ignition": { ... }, ... }- 1
- 此处省略了完整输出,但应该具有此格式。
如果 secret 不存在,请运行以下命令来创建它:
$ oc create secret generic worker-user-data \ -n openshift-machine-api \ --from-file=<installation_directory>/worker.ign其中
<installation_directory>是在集群安装过程中存储安装资产的目录。
2.9.4. 创建计算机器集 复制链接链接已复制到粘贴板!
除了安装程序创建的计算机器集外,您还可以创建自己的来动态管理您选择的特定工作负载的机器计算资源。
使用用户置备的基础架构安装的集群有不同的网络堆栈,与带有安装程序置备的基础架构的集群不同。因此,具有用户置备的基础架构的集群中不支持自动负载均衡器管理。对于这些集群,计算机器集只能创建 worker 和 infra 类型的机器。
先决条件
- 部署一个 OpenShift Container Platform 集群。
-
安装 OpenShift CLI(
oc)。 -
以具有
cluster-admin权限的用户身份登录oc。 - 具有在 vCenter 实例中部署虚拟机所需的权限,并对指定的数据存储具有所需的访问权限。
- 如果您的集群使用用户置备的基础架构,则代表已满足该配置的特定 Machine API 要求。
流程
创建一个包含计算机器集自定义资源(CR)示例的新 YAML 文件,并将其命名为
<file_name>.yaml。确保设置
<clusterID>和<role>参数值。可选:如果您不确定要为特定字段设置哪个值,您可以从集群中检查现有计算机器集:
要列出集群中的计算机器集,请运行以下命令:
$ oc get machinesets -n openshift-machine-api输出示例
NAME DESIRED CURRENT READY AVAILABLE AGE agl030519-vplxk-worker-us-east-1a 1 1 1 1 55m agl030519-vplxk-worker-us-east-1b 1 1 1 1 55m agl030519-vplxk-worker-us-east-1c 1 1 1 1 55m agl030519-vplxk-worker-us-east-1d 0 0 55m agl030519-vplxk-worker-us-east-1e 0 0 55m agl030519-vplxk-worker-us-east-1f 0 0 55m要查看特定计算机器集自定义资源 (CR) 的值,请运行以下命令:
$ oc get machineset <machineset_name> \ -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 ...如果您要为具有用户置备的基础架构的集群创建计算机器集,请注意以下重要值:
vSphere
providerSpec值示例apiVersion: machine.openshift.io/v1beta1 kind: MachineSet ... template: ... spec: providerSpec: value: apiVersion: machine.openshift.io/v1beta1 credentialsSecret: name: vsphere-cloud-credentials1 dataDisks:2 - name: <disk_name> provisioningMode: <mode> sizeGiB: 10 diskGiB: 120 kind: VSphereMachineProviderSpec memoryMiB: 16384 network: devices: - networkName: "<vm_network_name>" numCPUs: 4 numCoresPerSocket: 4 snapshot: "" template: <vm_template_name>3 userDataSecret: name: worker-user-data4 workspace: datacenter: <vcenter_data_center_name> datastore: <vcenter_datastore_name> folder: <vcenter_vm_folder_path> resourcepool: <vsphere_resource_pool> server: <vcenter_server_address>5
运行以下命令来创建
MachineSetCR:$ oc create -f <file_name>.yaml
验证
运行以下命令,查看计算机器集列表:
$ oc get machineset -n openshift-machine-api输出示例
NAME DESIRED CURRENT READY AVAILABLE AGE agl030519-vplxk-infra-us-east-1a 1 1 1 1 11m agl030519-vplxk-worker-us-east-1a 1 1 1 1 55m agl030519-vplxk-worker-us-east-1b 1 1 1 1 55m agl030519-vplxk-worker-us-east-1c 1 1 1 1 55m agl030519-vplxk-worker-us-east-1d 0 0 55m agl030519-vplxk-worker-us-east-1e 0 0 55m agl030519-vplxk-worker-us-east-1f 0 0 55m当新的计算机器集可用时,
DESIRED和CURRENT的值会匹配。如果 compute 机器集不可用,请等待几分钟,然后再次运行命令。
2.9.5. 为集群自动扩展标记 GPU 机器集 复制链接链接已复制到粘贴板!
您可以使用机器集标签来指示集群自动扩展可以用来部署启用了 GPU 的节点的机器。
先决条件
- 集群使用集群自动扩展。
流程
在您要为集群自动扩展创建机器的机器集中,用来部署启用了 GPU 的节点,添加
cluster-api/accelerator标签:apiVersion: machine.openshift.io/v1beta1 kind: MachineSet metadata: name: machine-set-name spec: template: spec: metadata: labels: cluster-api/accelerator: <accelerator_name>其中:
- <accelerator_name>
指定您选择的标签,它由字母数字字符、
-、_或.组成,并以字母数字字符开头和结尾。例如,您可以使用nvidia-t4代表 Nvidia T4 GPU,或使用nvidia-a10g代表 A10G GPU。注意您必须为
ClusterAutoscalerCR 中的spec.resourceLimits.gpus.type参数指定此标签的值。如需更多信息,请参阅"集群自动扩展资源定义"。
2.9.6. 使用机器集向机器添加标签 复制链接链接已复制到粘贴板!
OpenShift Container Platform 为其创建的每个虚拟机 (VM) 添加特定于集群的标签。安装程序使用这些标签在卸载集群时选择要删除的虚拟机。
除了分配给虚拟机的特定于集群的标签外,您还可以将机器集配置为向它置备的虚拟机中添加最多 10 个额外的 vSphere 标签。
先决条件
-
您可以使用具有
cluster-admin权限的账户访问在 vSphere 上安装的 OpenShift Container Platform 集群。 - 您可以访问与集群关联的 VMware vCenter 控制台。
- 您已在 vCenter 控制台中创建了标签。
-
已安装 OpenShift CLI(
oc)。
流程
使用 vCenter 控制台查找您要添加到机器的任何标签的标签 ID:
- 登录到 vCenter 控制台。
- 在 Home 菜单中,点 Tags & Custom Attributes。
- 选择您要添加到机器的标签。
使用您选择的标签的浏览器 URL 来识别标签 ID。
标签 URL 示例
https://vcenter.example.com/ui/app/tags/tag/urn:vmomi:InventoryServiceTag:208e713c-cae3-4b7f-918e-4051ca7d1f97:GLOBAL/permissions标签 ID 示例
urn:vmomi:InventoryServiceTag:208e713c-cae3-4b7f-918e-4051ca7d1f97:GLOBAL
- 在文本编辑器中,为现有机器集打开 YAML 文件或创建新机器。
编辑
providerSpec字段中的以下行:apiVersion: machine.openshift.io/v1beta1 kind: MachineSet # ... spec: template: spec: providerSpec: value: tagIDs:1 - <tag_id_value>2 # ...
2.9.7. 使用机器集配置多个网络接口控制器 复制链接链接已复制到粘贴板!
VMware vSphere 上的 OpenShift Container Platform 集群支持将最多 10 个网络接口控制器 (NIC) 连接到节点。通过配置多个 NIC,您可以在节点虚拟机(VM)中提供专用网络链接,以便使用存储或数据库。
您可以使用机器集来管理此配置。
- 如果要在未配置为在安装过程中配置的 vSphere 集群中使用多个 NIC,您可以使用机器集来实现此配置。
- 如果在安装过程中将集群设置为使用多个 NIC,则您创建的机器集可以使用现有的故障域配置。
- 如果您的故障域配置更改,您可以使用机器集进行反映这些更改的更新。
先决条件
-
具有 vSphere 上 OpenShift Container Platform 集群的 OpenShift CLI (
oc) 管理员访问权限。
流程
对于已经使用多个 NIC 的集群,请运行以下命令从
Infrastructure资源获取以下值:$ oc get infrastructure cluster -o=jsonpath={.spec.platformSpec.vsphere.failureDomains}Expand 表 2.3. 所需的网络接口控制器值 Infrastructure资源值示例机器集的占位符值 描述 failureDomain.topology.networks[0]<vm_network_name_1>要使用的第一个 NIC 的名称。
failureDomain.topology.networks[1]<vm_network_name_2>要使用的第二个 NIC 的名称。
failureDomain.topology.networks[<n-1>]<vm_network_name_n>要使用的第 n 个 NIC 的名称。收集
Infrastructure资源中的每个 NIC 的名称。failureDomain.topology.template<vm_template_name>要使用的 vSphere 虚拟机模板。
failureDomain.topology.datacenter<vcenter_data_center_name>在其中部署机器集的 vCenter 数据中心。
failureDomain.topology.datastore<vcenter_datastore_name>用于部署机器集的 vCenter 数据存储。
failureDomain.topology.folder<vcenter_vm_folder_path>vCenter 中 vSphere 虚拟机文件夹的路径,如
/dc1/vm/user-inst-5ddjd。failureDomain.topology.computeCluster+/Resources<vsphere_resource_pool>虚拟机的 vSphere 资源池。
failureDomain.server<vcenter_server_ip>vCenter 服务器 IP 或完全限定域名(FQDN)。
- 在文本编辑器中,为现有机器集打开 YAML 文件或创建新机器。
使用类似以下示例的机器集配置。
-
对于当前使用多个 NIC 的集群,请使用
Infrastructure资源中的值填充机器设置自定义资源中的值。 - 对于不使用多个 NIC 的集群,请填充机器集自定义资源中使用的值。
机器集示例
apiVersion: machine.openshift.io/v1beta1 kind: MachineSet # ... spec: template: spec: providerSpec: value: network: devices:1 - networkName: "<vm_network_name_1>" - networkName: "<vm_network_name_2>" template: <vm_template_name>2 workspace: datacenter: <vcenter_data_center_name>3 datastore: <vcenter_datastore_name>4 folder: <vcenter_vm_folder_path>5 resourcepool: <vsphere_resource_pool>6 server: <vcenter_server_ip>7 # ...-
对于当前使用多个 NIC 的集群,请使用
2.9.8. 使用机器集配置数据磁盘 复制链接链接已复制到粘贴板!
VMware vSphere 上的 OpenShift Container Platform 集群支持向虚拟机(VM)控制器中添加最多 29 个磁盘。
配置 vSphere 数据磁盘只是一个技术预览功能。技术预览功能不受红帽产品服务等级协议(SLA)支持,且功能可能并不完整。红帽不推荐在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。
有关红帽技术预览功能支持范围的更多信息,请参阅以下链接:
通过配置数据磁盘,您可以将磁盘附加到虚拟机,并使用它们存储 etcd、容器镜像和其他用途的数据。分离数据有助于避免填充主磁盘,以便升级等重要活动具有所需的资源。
将数据磁盘添加到虚拟机中,并将其挂载到 RHCOS 指定的位置。
先决条件
-
具有 vSphere 上 OpenShift Container Platform 集群的 OpenShift CLI (
oc) 管理员访问权限。
流程
- 在文本编辑器中,为现有机器集打开 YAML 文件或创建新机器。
编辑
providerSpec字段中的以下行:apiVersion: machine.openshift.io/v1beta1 kind: MachineSet # ... spec: template: spec: providerSpec: value: dataDisks:1 - name: "<disk_name>"2 provisioningMode: "<mode>"3 sizeGiB: 204 - name: "<disk_name>" provisioningMode: "<mode>" sizeGiB: 20 # ...