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> 1 name: <infrastructure_id>-<role> 2 namespace: openshift-machine-api spec: replicas: 1 selector: matchLabels: machine.openshift.io/cluster-api-cluster: <infrastructure_id> 3 machine.openshift.io/cluster-api-machineset: <infrastructure_id>-<role> 4 template: metadata: creationTimestamp: null labels: machine.openshift.io/cluster-api-cluster: <infrastructure_id> 5 machine.openshift.io/cluster-api-machine-role: <role> 6 machine.openshift.io/cluster-api-machine-type: <role> 7 machine.openshift.io/cluster-api-machineset: <infrastructure_id>-<role> 8 spec: metadata: creationTimestamp: null labels: node-role.kubernetes.io/<role>: "" 9 providerSpec: value: apiVersion: vsphereprovider.openshift.io/v1beta1 credentialsSecret: name: vsphere-cloud-credentials diskGiB: 120 kind: VSphereMachineProviderSpec memoryMiB: 8192 metadata: creationTimestamp: null network: devices: - networkName: "<vm_network_name>" 10 numCPUs: 4 numCoresPerSocket: 1 snapshot: "" template: <vm_template_name> 11 userDataSecret: name: worker-user-data workspace: datacenter: <vcenter_data_center_name> 12 datastore: <vcenter_datastore_name> 13 folder: <vcenter_vm_folder_path> 14 resourcepool: <vsphere_resource_pool> 15 server: <vcenter_server_ip> 16
- 1 3 5
- 指定基于置备集群时所设置的集群 ID 的基础架构 ID。如果已安装 OpenShift CLI(
oc
)软件包,您可以通过运行以下命令来获取基础架构 ID:$ oc get -o jsonpath='{.status.infrastructureName}{"\n"}' infrastructure cluster
- 2 4 8
- 指定基础架构 ID 和节点标签。
- 6 7 9
- 指定要添加的节点标签。
- 10
- 指定要将计算机器设置为的 vSphere VM 网络。此虚拟机网络必须是集群中其他计算机器所处的位置。
- 11
- 指定要使用的 vSphere 虚拟机模板,如
user-5ddjd-rhcos
。 - 12
- 指定要部署计算机器集的 vCenter 数据中心。
- 13
- 指定要部署计算机器集的 vCenter 数据存储。
- 14
- 指定 vCenter 中 vSphere 虚拟机文件夹的路径,如
/dc1/vm/user-inst-5ddjd
。 - 15
- 指定虚拟机的 vSphere 资源池。
- 16
- 指定 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。
获取基础架构 ID
要创建计算机器集,您必须能够为集群提供基础架构 ID。
流程
要获取集群的基础架构 ID,请运行以下命令:
$ oc get infrastructure cluster -o jsonpath='{.status.infrastructureName}'
满足 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>
满足 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-credentials 1 diskGiB: 120 kind: VSphereMachineProviderSpec memoryMiB: 16384 network: devices: - networkName: "<vm_network_name>" numCPUs: 4 numCoresPerSocket: 4 snapshot: "" template: <vm_template_name> 2 userDataSecret: name: worker-user-data 3 workspace: datacenter: <vcenter_data_center_name> datastore: <vcenter_datastore_name> folder: <vcenter_vm_folder_path> resourcepool: <vsphere_resource_pool> server: <vcenter_server_address> 4
运行以下命令来创建
MachineSet
CR:$ 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: nvidia-t4 1
- 1
- 指定您选择的标签,其由字母数字字符、
-
、_
或.
组成,并以字母数字字符开头,并以字母数字字符结尾。例如,您可以使用nvidia-t4
代表 Nvidia T4 GPU,或使用nvidia-a10g
代表 A10G GPU。注意您必须为
ClusterAutoscaler
CR 中的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 # ...