2.8. 在 OpenStack 上创建计算机器集
您可以在 Red Hat OpenStack Platform (RHOSP) 上的 OpenShift Container Platform 集群中创建不同的计算机器集来满足特定目的。例如,您可以创建基础架构机器集和相关的机器,以便将支持型工作负载转移到新机器上。
您只能在 Machine API 操作的集群中使用高级机器管理和扩展功能。具有用户置备的基础架构的集群需要额外的验证和配置才能使用 Machine API。
具有基础架构平台类型 none
的集群无法使用 Machine API。即使附加到集群的计算机器安装在支持该功能的平台上,也会应用这个限制。在安装后无法更改此参数。
要查看集群的平台类型,请运行以下命令:
$ oc get infrastructure cluster -o jsonpath='{.status.platform}'
2.8.1. RHOSP 上计算机器设置自定义资源的 YAML 示例
此 YAML 示例定义了一个在 Red Hat OpenStack Platform (RHOSP) 上运行的计算机器集,并创建通过 node-role.kubernetes.io/<role>: ""
标记的节点。
在本例中,<infrastructure_id>
是基础架构 ID 标签,该标签基于您在置备集群时设定的集群 ID,而 <role>
则是要添加的节点标签。
apiVersion: machine.openshift.io/v1beta1 kind: MachineSet metadata: labels: machine.openshift.io/cluster-api-cluster: <infrastructure_id> 1 machine.openshift.io/cluster-api-machine-role: <role> 2 machine.openshift.io/cluster-api-machine-type: <role> 3 name: <infrastructure_id>-<role> 4 namespace: openshift-machine-api spec: replicas: <number_of_replicas> selector: matchLabels: machine.openshift.io/cluster-api-cluster: <infrastructure_id> 5 machine.openshift.io/cluster-api-machineset: <infrastructure_id>-<role> 6 template: metadata: labels: machine.openshift.io/cluster-api-cluster: <infrastructure_id> 7 machine.openshift.io/cluster-api-machine-role: <role> 8 machine.openshift.io/cluster-api-machine-type: <role> 9 machine.openshift.io/cluster-api-machineset: <infrastructure_id>-<role> 10 spec: providerSpec: value: apiVersion: machine.openshift.io/v1alpha1 cloudName: openstack cloudsSecret: name: openstack-cloud-credentials namespace: openshift-machine-api flavor: <nova_flavor> image: <glance_image_name_or_location> serverGroupID: <optional_UUID_of_server_group> 11 kind: OpenstackProviderSpec networks: 12 - filter: {} subnets: - filter: name: <subnet_name> tags: openshiftClusterID=<infrastructure_id> 13 primarySubnet: <rhosp_subnet_UUID> 14 securityGroups: - filter: {} name: <infrastructure_id>-worker 15 serverMetadata: Name: <infrastructure_id>-worker 16 openshiftClusterID: <infrastructure_id> 17 tags: - openshiftClusterID=<infrastructure_id> 18 trunk: true userDataSecret: name: worker-user-data 19 availabilityZone: <optional_openstack_availability_zone>
- 1 5 7 13 15 16 17 18
- 指定基于置备集群时所设置的集群 ID 的基础架构 ID。如果已安装 OpenShift CLI,您可以通过运行以下命令来获取基础架构 ID:
$ oc get -o jsonpath='{.status.infrastructureName}{"\n"}' infrastructure cluster
- 2 3 8 9 19
- 指定要添加的节点标签。
- 4 6 10
- 指定基础架构 ID 和节点标签。
- 11
- 12
- 部署到多个网络需要。要指定多个网络,请在网络数组中添加另一个条目。此外,您必须包含用作
primarySubnet
值的网络。 - 14
- 指定您要发布节点端点的 RHOSP 子网。通常,这与
install-config.yaml
文件中的machineSubnet
值相同。
2.8.2. 在 RHOSP 上使用 SR-IOV 的计算机器设置自定义资源的 YAML 示例
如果您为单根 I/O 虚拟化(SR-IOV)配置了集群,您可以创建使用该技术的计算机器集。
此 YAML 示例定义了一个使用 SR-IOV 网络的计算机器集。它创建的节点标记为 node-role.openshift.io/<node_role>: ""
在本例中,infrastructure_id
是基础架构 ID 标签,该标签基于您在置备集群时设定的集群 ID,而 node_role
则是要添加的节点标签。
示例假定两个名为"radio"和"uplink"的 SR-IOV 网络。网络在 spec.template.spec.providerSpec.value.ports
列表中的端口定义中使用。
本例中仅描述特定于 SR-IOV 部署的参数。要查看更常规的示例,请参阅 "Sample YAML for a compute machine set custom resource on RHOSP"。
使用 SR-IOV 网络的计算机器集示例
apiVersion: machine.openshift.io/v1beta1 kind: MachineSet metadata: labels: machine.openshift.io/cluster-api-cluster: <infrastructure_id> machine.openshift.io/cluster-api-machine-role: <node_role> machine.openshift.io/cluster-api-machine-type: <node_role> name: <infrastructure_id>-<node_role> namespace: openshift-machine-api spec: replicas: <number_of_replicas> selector: matchLabels: machine.openshift.io/cluster-api-cluster: <infrastructure_id> machine.openshift.io/cluster-api-machineset: <infrastructure_id>-<node_role> template: metadata: labels: machine.openshift.io/cluster-api-cluster: <infrastructure_id> machine.openshift.io/cluster-api-machine-role: <node_role> machine.openshift.io/cluster-api-machine-type: <node_role> machine.openshift.io/cluster-api-machineset: <infrastructure_id>-<node_role> spec: metadata: providerSpec: value: apiVersion: machine.openshift.io/v1alpha1 cloudName: openstack cloudsSecret: name: openstack-cloud-credentials namespace: openshift-machine-api flavor: <nova_flavor> image: <glance_image_name_or_location> serverGroupID: <optional_UUID_of_server_group> kind: OpenstackProviderSpec networks: - subnets: - UUID: <machines_subnet_UUID> ports: - networkID: <radio_network_UUID> 1 nameSuffix: radio fixedIPs: - subnetID: <radio_subnet_UUID> 2 tags: - sriov - radio vnicType: direct 3 portSecurity: false 4 - networkID: <uplink_network_UUID> 5 nameSuffix: uplink fixedIPs: - subnetID: <uplink_subnet_UUID> 6 tags: - sriov - uplink vnicType: direct 7 portSecurity: false 8 primarySubnet: <machines_subnet_UUID> securityGroups: - filter: {} name: <infrastructure_id>-<node_role> serverMetadata: Name: <infrastructure_id>-<node_role> openshiftClusterID: <infrastructure_id> tags: - openshiftClusterID=<infrastructure_id> trunk: true userDataSecret: name: <node_role>-user-data availabilityZone: <optional_openstack_availability_zone>
部署支持 SR-IOV 的计算机器后,您必须标记它们,如:例如,在命令行中输入:
$ oc label node <NODE_NAME> feature.node.kubernetes.io/network-sriov.capable="true"
对于由网络和子网列表中的条目创建的端口,启用中继(Trunking)。从这些列表中创建的端口名称遵循 <machine_name>-<nameSuffix>
模式。端口定义中需要 nameSuffix
字段。
您可以为每个端口启用中继。
另外,您还可以在端口中添加标签作为其标签(tags)
列表的一部分。
2.8.3. 禁用端口安全性的 SR-IOV 部署的 YAML 示例
要在禁用端口安全性的网络上创建单根 I/O 虚拟化 (SR-IOV) 端口,请定义一个计算机器集,将端口作为 spec.template.spec.providerSpec.value.ports
列表中的项目包含。与标准 SR-IOV 计算机器集的区别在于,自动安全组以及使用网络和子网接口创建的端口允许的地址对配置。
您为机器子网定义的端口需要:
- API 和入口虚拟 IP 端口允许的地址对
- 计算安全组
- 附加到机器网络和子网
本例中仅描述特定于禁用端口安全性的 SR-IOV 部署的参数。要查看更常规的示例,请参阅 RHOSP 上使用 SR-IOV 的计算机器设置自定义资源的 Sample YAML"。
使用 SR-IOV 网络并禁用端口安全性的计算机器集示例
apiVersion: machine.openshift.io/v1beta1 kind: MachineSet metadata: labels: machine.openshift.io/cluster-api-cluster: <infrastructure_id> machine.openshift.io/cluster-api-machine-role: <node_role> machine.openshift.io/cluster-api-machine-type: <node_role> name: <infrastructure_id>-<node_role> namespace: openshift-machine-api spec: replicas: <number_of_replicas> selector: matchLabels: machine.openshift.io/cluster-api-cluster: <infrastructure_id> machine.openshift.io/cluster-api-machineset: <infrastructure_id>-<node_role> template: metadata: labels: machine.openshift.io/cluster-api-cluster: <infrastructure_id> machine.openshift.io/cluster-api-machine-role: <node_role> machine.openshift.io/cluster-api-machine-type: <node_role> machine.openshift.io/cluster-api-machineset: <infrastructure_id>-<node_role> spec: metadata: {} providerSpec: value: apiVersion: machine.openshift.io/v1alpha1 cloudName: openstack cloudsSecret: name: openstack-cloud-credentials namespace: openshift-machine-api flavor: <nova_flavor> image: <glance_image_name_or_location> kind: OpenstackProviderSpec ports: - allowedAddressPairs: 1 - ipAddress: <API_VIP_port_IP> - ipAddress: <ingress_VIP_port_IP> fixedIPs: - subnetID: <machines_subnet_UUID> 2 nameSuffix: nodes networkID: <machines_network_UUID> 3 securityGroups: - <compute_security_group_UUID> 4 - networkID: <SRIOV_network_UUID> nameSuffix: sriov fixedIPs: - subnetID: <SRIOV_subnet_UUID> tags: - sriov vnicType: direct portSecurity: False primarySubnet: <machines_subnet_UUID> serverMetadata: Name: <infrastructure_ID>-<node_role> openshiftClusterID: <infrastructure_id> tags: - openshiftClusterID=<infrastructure_id> trunk: false userDataSecret: name: worker-user-data
对于由网络和子网列表中的条目创建的端口,启用中继(Trunking)。从这些列表中创建的端口名称遵循 <machine_name>-<nameSuffix>
模式。端口定义中需要 nameSuffix
字段。
您可以为每个端口启用中继。
另外,您还可以在端口中添加标签作为其标签(tags)
列表的一部分。
2.8.4. 创建计算机器集
除了安装程序创建的计算机器集外,您还可以创建自己的来动态管理您选择的特定工作负载的机器计算资源。
先决条件
- 部署一个 OpenShift Container Platform 集群。
-
安装 OpenShift CLI(
oc
)。 -
以具有
cluster-admin
权限的用户身份登录oc
。
流程
创建一个包含计算机器集自定义资源(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 ...
运行以下命令来创建
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 机器集不可用,请等待几分钟,然后再次运行命令。