$ oc get infrastructure cluster -o jsonpath='{.status.platform}'
您可以创建不同的计算机器集以在您的VMware vSphere上的OpenShift Container Platform集群中服务特定目的。例如,您可以创建基础架构机器集和相关机器,以便您可以将支持的工作负载移动到新机器。
您只能在Machine API正在运行的集群中使用高级机器管理和扩展功能。具有用户配置基础架构的集群需要额外的验证和配置才能使用Machine API。 基础架构平台类型为 要查看集群的平台类型,请运行以下命令
|
此示例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> (1)
machine.openshift.io/cluster-api-machineset: <infrastructure_id>-<role> (2)
template:
metadata:
creationTimestamp: null
labels:
machine.openshift.io/cluster-api-cluster: <infrastructure_id> (1)
machine.openshift.io/cluster-api-machine-role: <role> (3)
machine.openshift.io/cluster-api-machine-type: <role> (3)
machine.openshift.io/cluster-api-machineset: <infrastructure_id>-<role> (2)
spec:
metadata:
creationTimestamp: null
labels:
node-role.kubernetes.io/<role>: "" (3)
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>" (4)
numCPUs: 4
numCoresPerSocket: 1
snapshot: ""
template: <vm_template_name> (5)
userDataSecret:
name: worker-user-data
workspace:
datacenter: <vcenter_data_center_name> (6)
datastore: <vcenter_datastore_name> (7)
folder: <vcenter_vm_folder_path> (8)
resourcepool: <vsphere_resource_pool> (9)
server: <vcenter_server_ip> (10)
1 | 指定基于您在配置集群时设置的集群ID的基础架构ID。如果您已安装OpenShift CLI (oc ),则可以通过运行以下命令获取基础架构ID
|
2 | 指定基于集群ID的基础架构ID和节点标签。 |
3 | 指定要添加的节点标签。 |
4 | 指定要将计算机器集部署到的vSphere虚拟机网络。此虚拟机网络必须是集群中其他计算机器所在的位置。 |
5 | 指定要使用的vSphere虚拟机模板,例如user-5ddjd-rhcos 。 |
6 | 指定部署计算机器集的vCenter数据中心。 |
7 | 指定部署计算机器集的vCenter数据存储。 |
8 | 指定vCenter中vSphere虚拟机文件夹的路径,例如/dc1/vm/user-inst-5ddjd 。 |
9 | 指定虚拟机的vSphere资源池。 |
10 | 指定vCenter服务器IP地址或完全限定域名。 |
要在vCenter上的OpenShift Container Platform集群中管理计算机器集,您必须使用具有读取、创建和删除所需资源权限的帐户。使用具有全局管理员权限的帐户是访问所有必要权限的最简单方法。
如果您无法使用具有全局管理员权限的帐户,则必须创建角色以授予所需的最低权限。下表列出了创建、扩展和删除计算机器集以及删除OpenShift Container Platform集群中机器所需的最低vCenter角色和权限。
角色的vSphere对象 | 何时需要 | 所需权限 |
---|---|---|
vSphere vCenter |
始终 |
|
vSphere vCenter集群 |
始终 |
|
vSphere数据存储 |
始终 |
|
vSphere端口组 |
始终 |
|
虚拟机文件夹 |
始终 |
|
vSphere vCenter数据中心 |
如果安装程序创建虚拟机文件夹 |
|
1 |
下表详细说明了管理计算机器集所需的权限和传播设置。
vSphere对象 | 文件夹类型 | 传播到子项 | 所需权限 |
---|---|---|---|
vSphere vCenter |
始终 |
不需要 |
列出的所需权限 |
vSphere vCenter数据中心 |
现有文件夹 |
不需要 |
|
安装程序创建文件夹 |
需要 |
列出的所需权限 |
|
vSphere vCenter集群 |
始终 |
需要 |
列出的所需权限 |
vSphere vCenter数据存储 |
始终 |
不需要 |
列出的所需权限 |
vSphere交换机 |
始终 |
不需要 |
|
vSphere端口组 |
始终 |
不需要 |
列出的所需权限 |
vSphere vCenter虚拟机文件夹 |
现有文件夹 |
需要 |
列出的所需权限 |
有关仅创建具有所需权限的帐户的更多信息,请参阅vSphere文档中的vSphere权限和用户管理任务。
要在具有用户自备基础架构的集群上使用计算机器集,您必须确保集群配置支持使用Machine API。
要创建计算机器集,您必须能够提供集群的基础架构ID。
要获取集群的基础架构ID,请运行以下命令
$ oc get infrastructure cluster -o jsonpath='{.status.infrastructureName}'
要使用计算机器集,Machine API必须能够与vCenter交互。授权Machine API组件与vCenter交互的凭据必须存在于openshift-machine-api
命名空间中的密钥中。
要确定所需凭据是否存在,请运行以下命令
$ 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管理员凭据。
如果密钥不存在,请通过运行以下命令创建它
$ 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>
预配虚拟机 (VM) 需要有效的Ignition配置。Ignition配置包含machine-config-server
地址和用于从Machine Config Operator获取更多Ignition配置的系统信任捆绑包。
默认情况下,此配置存储在machine-api-operator
命名空间中的worker-user-data
密钥中。计算机器集在机器创建过程中引用该密钥。
要确定所需密钥是否存在,请运行以下命令
$ 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 | 此处省略完整输出,但应具有此格式。 |
如果密钥不存在,请通过运行以下命令创建它
$ oc create secret generic worker-user-data \
-n openshift-machine-api \
--from-file=<installation_directory>/worker.ign
其中<installation_directory>
是在集群安装期间用于存储安装资源的目录。
除了安装程序创建的计算机器集之外,您还可以创建自己的计算机器集,以动态管理您选择的特定工作负载的机器计算资源。
使用用户自备基础架构安装的集群与安装程序预配的基础架构集群具有不同的网络堆栈。由于这种差异,在具有用户自备基础架构的集群上不支持自动负载均衡器管理。对于这些集群,计算机器集只能创建 |
部署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)
...
1 | 集群基础架构ID。 | ||
2 | 默认节点标签。
|
||
3 | 计算机器集CR的<providerSpec> 部分中的值是特定于平台的。有关CR中<providerSpec> 参数的更多信息,请参阅您的提供程序的示例计算机器集CR配置。 |
如果您要为具有用户自备基础架构的集群创建计算机器集,请注意以下重要值
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)
1 | 包含所需vCenter凭据的openshift-machine-api 命名空间中密钥的名称。 |
2 | 安装期间创建的集群的RHCOS虚拟机模板的名称。 |
3 | 包含所需Ignition配置凭据的openshift-machine-api 命名空间中密钥的名称。 |
4 | vCenter 服务器的 IP 地址或完全限定域名 (FQDN)。 |
运行以下命令创建 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
值将匹配。如果计算机器集不可用,请等待几分钟,然后再次运行该命令。
您可以使用机器集标签来指示集群自动伸缩器可以使用哪些机器来部署启用 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。
|
OpenShift Container Platform 会向其创建的每个虚拟机 (VM) 添加一个特定于集群的标签。安装程序使用这些标签来选择在卸载集群时要删除的 VM。
除了分配给 VM 的特定于集群的标签外,您还可以配置机器集,以便最多向其配置的 VM 添加 10 个 vSphere 标签。
您可以使用具有 cluster-admin
权限的帐户访问安装在 vSphere 上的 OpenShift Container Platform 集群。
您可以访问与您的集群关联的 VMware vCenter 控制台。
您已在 vCenter 控制台中创建了一个标签。
您已安装 OpenShift CLI (oc
)。
使用 vCenter 控制台查找要添加到机器的任何标签的标签 ID。
登录到 vCenter 控制台。
从“主页”菜单中,单击“标签和自定义属性”。
选择要添加到机器的标签。
使用您选择的标签的浏览器 URL 来标识标签 ID。
https://vcenter.example.com/ui/app/tags/tag/urn:vmomi:InventoryServiceTag:208e713c-cae3-4b7f-918e-4051ca7d1f97:GLOBAL/permissions
urn:vmomi:InventoryServiceTag:208e713c-cae3-4b7f-918e-4051ca7d1f97:GLOBAL
在文本编辑器中,打开现有机器集的 YAML 文件或创建一个新的 YAML 文件。
编辑 providerSpec
字段下的以下行:
apiVersion: machine.openshift.io/v1beta1
kind: MachineSet
# ...
spec:
template:
spec:
providerSpec:
value:
tagIDs: (1)
- <tag_id_value> (2)
# ...
1 | 指定最多 10 个要添加到此机器集配置的机器的标签列表。 |
2 | 指定要添加到机器的标签的值。例如,urn:vmomi:InventoryServiceTag:208e713c-cae3-4b7f-918e-4051ca7d1f97:GLOBAL 。 |