2.3. 在 Azure 上创建机器集
您可以在 Microsoft Azure 上的 OpenShift Container Platform 集群中创建不同的机器集来满足特定目的。例如,您可以创建基础架构机器集和相关的机器,以便将支持型工作负载转移到新机器上。
您只能在 Machine API 操作的集群中使用高级机器管理和扩展功能。具有用户置备的基础架构的集群需要额外的验证和配置才能使用 Machine API。
具有基础架构平台类型 none
的集群无法使用 Machine API。即使附加到集群的计算机器安装在支持该功能的平台上,也会应用这个限制。在安装后无法更改此参数。
要查看集群的平台类型,请运行以下命令:
$ oc get infrastructure cluster -o jsonpath='{.status.platform}'
2.3.1. Azure 上机器设置自定义资源的 YAML 示例
此 YAML 示例定义了一个在区域(region)的 1
Microsoft Azure 区域(zone)中运行的机器集,并创建通过 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>-<region> 4 namespace: openshift-machine-api spec: replicas: 1 selector: matchLabels: machine.openshift.io/cluster-api-cluster: <infrastructure_id> 5 machine.openshift.io/cluster-api-machineset: <infrastructure_id>-<role>-<region> 6 template: metadata: creationTimestamp: null 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>-<region> 10 spec: metadata: creationTimestamp: null labels: machine.openshift.io/cluster-api-machineset: <machineset_name> 11 node-role.kubernetes.io/<role>: "" 12 providerSpec: value: apiVersion: azureproviderconfig.openshift.io/v1beta1 credentialsSecret: name: azure-cloud-credentials namespace: openshift-machine-api image: 13 offer: "" publisher: "" resourceID: /resourceGroups/<infrastructure_id>-rg/providers/Microsoft.Compute/images/<infrastructure_id> 14 sku: "" version: "" internalLoadBalancer: "" kind: AzureMachineProviderSpec location: <region> 15 managedIdentity: <infrastructure_id>-identity 16 metadata: creationTimestamp: null natRule: null networkResourceGroup: "" osDisk: diskSizeGB: 128 managedDisk: storageAccountType: Premium_LRS osType: Linux publicIP: false publicLoadBalancer: "" resourceGroup: <infrastructure_id>-rg 17 sshPrivateKey: "" sshPublicKey: "" tags: - name: <custom_tag_name> 18 value: <custom_tag_value> 19 subnet: <infrastructure_id>-<role>-subnet 20 21 userDataSecret: name: worker-user-data 22 vmSize: Standard_D4s_v3 vnet: <infrastructure_id>-vnet 23 zone: "1" 24
- 1 5 7 16 17 20 23
- 指定基于置备集群时所设置的集群 ID 的基础架构 ID。如果已安装 OpenShift CLI,您可以通过运行以下命令来获取基础架构 ID:
$ oc get -o jsonpath='{.status.infrastructureName}{"\n"}' infrastructure cluster
您可以运行以下命令来获取子网:
$ oc -n openshift-machine-api \ -o jsonpath='{.spec.template.spec.providerSpec.value.subnet}{"\n"}' \ get machineset/<infrastructure_id>-worker-centralus1
您可以运行以下命令来获取 vnet:
$ oc -n openshift-machine-api \ -o jsonpath='{.spec.template.spec.providerSpec.value.vnet}{"\n"}' \ get machineset/<infrastructure_id>-worker-centralus1
- 2 3 8 9 12 21 22
- 指定要添加的节点标签。
- 4 6 10
- 指定基础架构 ID、节点标签和地区。
- 11
- 可选:指定机器集名称以启用可用性集。此设置仅适用于新的计算机器。
- 13
- 指定机器集的镜像详情。如果要使用 Azure Marketplace 镜像,请参阅"选择 Azure Marketplace 镜像"。
- 14
- 指定与实例类型兼容的镜像。安装程序创建的 Hyper-V 生成 V2 镜像具有
-gen2
后缀,而 V1 镜像则与没有后缀的名称相同。 - 15
- 指定要放置机器的区域。
- 24
- 指定您所在地区(region)内要放置机器的区域 (zone) 。确保您的地区支持您指定的区域。
- 18 19
- 可选:在机器集中指定自定义标签。在
<custom_tag_name>
字段中提供标签名称,并在<custom_tag_value>
字段中提供对应的标签值。
2.3.2. 创建机器集
除了安装程序创建的计算机器集外,您还可以创建自己的来动态管理您选择的特定工作负载的机器计算资源。
先决条件
- 部署一个 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
的值会匹配。如果机器集不可用,请等待几分钟,然后再次运行命令。
2.3.3. 选择 Azure Marketplace 镜像
您可以创建在 Azure 上运行的机器集,以部署使用 Azure Marketplace 产品的机器。要使用此产品,您必须首先获取 Azure Marketplace 镜像。在获取您的镜像时,请考虑以下事项:
-
虽然镜像相同,但 Azure Marketplace publisher 根据您的区域。如果您位于北美,请将
redhat
指定为发布者。如果您位于 EMEA,请将redhat-limited
指定为发布者。 -
此项优惠包括
rh-ocp-worker
SKU 和rh-ocp-worker-gen1
SKU。rh-ocp-worker
SKU 代表 Hyper-V 生成版本 2 虚拟机镜像。OpenShift Container Platform 中使用的默认实例类型与版本 2 兼容。如果您要使用仅兼容 1 版本的实例类型,请使用与rh-ocp-worker-gen1
SKU 关联的镜像。rh-ocp-worker-gen1
SKU 代表 Hyper-V 版本 1 虚拟机镜像。
先决条件
-
已安装 Azure CLI 客户端
(az)
。 - 您的 Azure 帐户为产品授权,您使用 Azure CLI 客户端登录到此帐户。
流程
运行以下命令之一,显示所有可用的 OpenShift Container Platform 镜像:
北美:
$ az vm image list --all --offer rh-ocp-worker --publisher redhat -o table
输出示例
Offer Publisher Sku Urn Version ------------- -------------- ------------------ -------------------------------------------------------------- -------------- rh-ocp-worker RedHat rh-ocp-worker RedHat:rh-ocp-worker:rh-ocpworker:4.8.2021122100 4.8.2021122100 rh-ocp-worker RedHat rh-ocp-worker-gen1 RedHat:rh-ocp-worker:rh-ocp-worker-gen1:4.8.2021122100 4.8.2021122100
欧洲、中东和非洲地区:
$ az vm image list --all --offer rh-ocp-worker --publisher redhat-limited -o table
输出示例
Offer Publisher Sku Urn Version ------------- -------------- ------------------ -------------------------------------------------------------- -------------- rh-ocp-worker redhat-limited rh-ocp-worker redhat-limited:rh-ocp-worker:rh-ocp-worker:4.8.2021122100 4.8.2021122100 rh-ocp-worker redhat-limited rh-ocp-worker-gen1 redhat-limited:rh-ocp-worker:rh-ocp-worker-gen1:4.8.2021122100 4.8.2021122100
注意无论您安装的 OpenShift Container Platform 版本是什么,要使用的 Azure Marketplace 镜像的正确版本为 4.8.x。如果需要,在安装过程中,您的虚拟机会自动升级。
运行以下命令之一检查您的所提供的镜像:
北美:
$ az vm image show --urn redhat:rh-ocp-worker:rh-ocp-worker:<version>
欧洲、中东和非洲地区:
$ az vm image show --urn redhat-limited:rh-ocp-worker:rh-ocp-worker:<version>
运行以下命令之一查看提供的术语:
北美:
$ az vm image terms show --urn redhat:rh-ocp-worker:rh-ocp-worker:<version>
欧洲、中东和非洲地区:
$ az vm image terms show --urn redhat-limited:rh-ocp-worker:rh-ocp-worker:<version>
运行以下命令之一接受产品条款:
北美:
$ az vm image terms accept --urn redhat:rh-ocp-worker:rh-ocp-worker:<version>
欧洲、中东和非洲地区:
$ az vm image terms accept --urn redhat-limited:rh-ocp-worker:rh-ocp-worker:<version>
-
记录您所提供的镜像详情,特别是
publisher
,offer
,sku
, 和version
的值。 使用您提供的镜像详情,在机器集 YAML 文件的
providerSpec
部分添加以下参数:Azure Marketplace 计算机器的
providerSpec
镜像值示例providerSpec: value: image: offer: rh-ocp-worker publisher: redhat resourceID: "" sku: rh-ocp-worker type: MarketplaceWithPlan version: 4.8.2021122100
2.3.4. 将机器部署为 Spot 虚拟机的机器
您可以通过创建在 Azure 上运行的机器集将机器部署为非保障的 Spot 虚拟机来节约成本。Spot VM 使用未使用的 Azure 容量,且比标准虚拟机的成本要低。您可以将 Spot 虚拟机用于可容许中断的工作负载,如批处理或无状态工作负载、横向可扩展工作负载。
Azure 可随时终止 Spot 虚拟机。Azure 在发生中断时向用户发出 30 秒警告。当 Azure 发出终止警告时,OpenShift Container Platform 开始从受影响的实例中删除工作负载。
使用 Spot 虚拟机时可能会因为以下原因造成中断:
- 实例价格超过您的最大价格
- Spot 虚拟机的提供减少
- Azure 需要容量退回
当 Azure 终止实例时,在 Spot VM 节点上运行的终止处理器会删除机器资源。为了满足机器集副本
数量,机器集会创建一个请求 Spot 虚拟机的机器。
2.3.5. 使用机器集创建 Spot 虚拟机
您可以通过在机器设置 YAML 文件中添加 spotVMOptions
,在 Azure 上启动 Spot VM。
流程
在
providerSpec
字段中添加以下行:providerSpec: value: spotVMOptions: {}
您可以选择设置
spotVMOptions.maxPrice
字段来限制 Spot 虚拟机的成本。例如,您可以设置maxPrice: '0.98765'
。如果设置了maxPrice
,则将此值用作每小时最大即时价格。如果没有设置,则最大价格默认为-1
且不超过标准虚拟机价格。Azure 封顶 Spot VM 价格以标准价格为基础。如果实例使用默认的
maxPrice
设置,Azure 不会因为定价而驱除实例。但是,一个实例仍然可能会因为容量限制而被驱除。
强烈建议您使用默认标准 VM 价格作为 maxPrice
值,而不为 Spot 虚拟机设置最大价格。
2.3.6. 在临时操作系统磁盘中部署机器的机器集
您可以创建在 Azure 上运行的机器集,用于在 Ephemeral OS 磁盘上部署机器。临时 OS 磁盘使用本地虚拟机容量,而不是远程 Azure 存储。因此,此配置不会产生额外费用,并提供了较低的读、写和重新处理延迟。
其他资源
- 如需更多信息,请参阅 Microsoft Azure 文档中有关 Azure 虚拟机的 Ephemeral OS 磁盘 的内容。
2.3.7. 使用机器集在临时 OS 磁盘上创建机器
您可以通过编辑机器集 YAML 文件在 Azure 上的 Ephemeral OS 磁盘上启动机器。
先决条件
- 已有 Microsoft Azure 集群。
流程
运行以下命令来编辑自定义资源(CR):
$ oc edit machineset <machine-set-name>
其中
<machine-set-name>
是要在 Ephemeral OS 磁盘上置备机器的机器集。在
providerSpec
字段中添加以下内容:providerSpec: value: ... osDisk: ... diskSettings: 1 ephemeralStorageLocation: Local 2 cachingType: ReadOnly 3 managedDisk: storageAccountType: Standard_LRS 4 ...
重要OpenShift Container Platform 中支持 Ephemeral OS 磁盘实现只支持
CacheDisk
放置类型。不要更改placement
配置设置。使用更新的配置创建机器集:
$ oc create -f <machine-set-config>.yaml
验证
-
在 Microsoft Azure 门户中,查看机器集部署的机器的 Overview 页面,并验证
Ephemeral OS 磁盘
字段是否已设置为OS 缓存放置
。
2.3.8. 为机器集启用客户管理的加密密钥
您可以为 Azure 提供加密密钥,以便加密受管磁盘上的数据。您可以使用 Machine API 使用客户管理的密钥启用服务器端加密。
使用客户管理的密钥需要 Azure Key Vault、磁盘加密集和加密密钥。磁盘加密集必须先在 Cloud Credential Operator(CCO)授予权限的资源组中。如果没有,则需要在磁盘加密集中授予额外的 reader 角色。
流程
在机器集 YAML 文件中的
providerSpec
字段中配置磁盘加密集。例如:... providerSpec: value: ... osDisk: diskSizeGB: 128 managedDisk: diskEncryptionSet: id: /subscriptions/<subscription_id>/resourceGroups/<resource_group_name>/providers/Microsoft.Compute/diskEncryptionSets/<disk_encryption_set_name> storageAccountType: Premium_LRS ...
其他资源
- 您可以在 Azure 文档中了解更多有关客户管理的密钥的信息。
2.3.9. Microsoft Azure 虚拟机的加速网络
加速网络使用单一根 I/O 虚拟化(SR-IOV)为 Microsoft Azure 虚拟机提供更直接的路径到交换机。这提高了网络性能。此功能可在安装过程中或安装后启用。
2.3.9.1. 限制
在决定是否使用加速网络时,请考虑以下限制:
- 只有在 Machine API 操作的集群中支持加速网络。
-
虽然 Azure worker 节点的最低要求是两个 vCPU,但 Accelerated Networking 需要包含至少四个 vCPU 的 Azure 虚拟机大小。为了满足此要求,您可以在机器集中更改
vmSize
的值。有关 Azure VM 大小的信息,请参阅 Microsoft Azure 文档。 - 当在现有 Azure 集群上启用这个功能时,只有新置备的节点会受到影响。当前运行的节点不会被协调。要在所有节点上启用这个功能,必须替换每个现有机器。这可以为每个机器单独完成,或者将副本缩减为零,然后备份到所需的副本数。
其他资源
- 有关在安装过程中启用加速网络的详情,请参考 在安装过程中启用加速网络。
2.3.10. 在现有 Microsoft Azure 集群上启用加速网络
您可以通过在机器集 YAML 文件中添加 acceleratedNetworking
,在 Azure 上启用加速网络。
先决条件
- 有一个现有的 Microsoft Azure 集群,其中的 Machine API 正常运行。
流程
运行以下命令列出集群中的机器集:
$ oc get machinesets -n openshift-machine-api
机器集以
<cluster-id>-worker-<region>
的形式列出。输出示例
NAME DESIRED CURRENT READY AVAILABLE AGE jmywbfb-8zqpx-worker-centralus1 1 1 1 1 15m jmywbfb-8zqpx-worker-centralus2 1 1 1 1 15m jmywbfb-8zqpx-worker-centralus3 1 1 1 1 15m
对于每个机器集:
运行以下命令来编辑自定义资源(CR):
$ oc edit machineset <machine-set-name>
在
providerSpec
字段中添加以下内容:providerSpec: value: ... acceleratedNetworking: true 1 ... vmSize: <azure-vm-size> 2 ...
- 1
- 此行启用加速网络。
- 2
- 指定包含至少四个 vCPU 的 Azure VM 大小。有关 VM 大小的信息,请参阅 Microsoft Azure 文档。
- 要在当前运行的节点上启用这个功能,必须替换每个现有机器。这可以为每个机器单独完成,或者将副本缩减为零,然后备份到所需的副本数。
验证
-
在 Microsoft Azure 门户上,查看机器集调配的机器的 Networking 设置页面,并验证
Accelerated networking
字段设置为Enabled
。
其他资源
- 有关扩展机器集的详情,请参阅 手动扩展机器集。