2.10. 在 vSphere 上创建机器集
您可以在 VMware vSphere 上的 OpenShift Container Platform 集群中创建不同的机器集来满足特定目的。例如,您可以创建基础架构机器集和相关的机器,以便将支持型工作负载转移到新机器上。
您只能在 Machine API 操作的集群中使用高级机器管理和扩展功能。具有用户置备的基础架构的集群需要额外的验证和配置才能使用 Machine API。
具有基础架构平台类型 none
的集群无法使用 Machine API。即使附加到集群的计算机器安装在支持该功能的平台上,也会应用这个限制。在安装后无法更改此参数。
要查看集群的平台类型,请运行以下命令:
$ oc get infrastructure cluster -o jsonpath='{.status.platform}'
2.10.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_datacenter_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 Datacenter。
- 13
- 指定要部署计算机器的 vCenter Datastore。
- 14
- 指定 vCenter 中 vSphere 虚拟机文件夹的路径,如
/dc1/vm/user-inst-5ddjd
。 - 15
- 指定虚拟机的 vSphere 资源池。
- 16
- 指定 vCenter 服务器 IP 或完全限定域名。
2.10.2. 机器集管理的最低所需的 vCenter 权限
要在 vCenter 上的 OpenShift Container Platform 集群中管理机器集,您必须使用具有特权的帐户来读取、创建和删除所需资源。使用具有全局管理特权的帐户是访问所有所需权限的最简单方法。
如果无法使用具有全局管理权限的帐户,您必须创建一个角色来授予最低所需的权限。下表列出了创建、扩展和删除 OpenShift Container Platform 集群中的机器所需的最小 vCenter 角色和权限。
例 2.1. 机器集管理所需的最小 vCenter 角色和权限
适用于角色的 vSphere 对象 | 必要时 | 所需的权限 |
---|---|---|
vSphere vCenter | Always |
|
vSphere vCenter 集群 | Always |
|
vSphere Datastore | Always |
|
vSphere 端口组 | Always |
|
虚拟机文件夹 | Always |
|
vSphere vCenter Datacenter | 如果安装程序创建虚拟机文件夹 |
|
1 |
下表详细介绍了机器集管理所需的权限和传播设置。
例 2.2. 所需的权限和传播设置
vSphere object | 文件夹类型 | 传播到子对象 | 所需的权限 |
---|---|---|---|
vSphere vCenter | Always | 不是必需的 | 列出所需的权限 |
vSphere vCenter Datacenter | 现有文件夹 | 不是必需的 |
|
安装程序创建文件夹 | 必填 | 列出所需的权限 | |
vSphere vCenter 集群 | Always | 必填 | 列出所需的权限 |
vSphere vCenter 数据存储 | Always | 不是必需的 | 列出所需的权限 |
vSphere Switch | Always | 不是必需的 |
|
vSphere 端口组 | Always | 不是必需的 | 列出所需的权限 |
vSphere vCenter 虚拟机文件夹 | 现有文件夹 | 必填 | 列出所需的权限 |
有关只使用所需权限创建帐户的更多信息,请参阅 vSphere 文档中的 vSphere 权限和用户管理任务。
2.10.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.10.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_datacenter_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
的值会匹配。如果机器集不可用,请等待几分钟,然后再次运行命令。