$ oc get infrastructure cluster -o jsonpath='{.status.platform}'
您可以创建不同的计算机器集合来为Microsoft Azure上的OpenShift Container Platform集群中的特定目的服务。例如,您可以创建基础架构机器集合和相关的机器,以便您可以将支持的工作负载迁移到新的机器。
您只能在Machine API正在运行的集群中使用高级机器管理和扩展功能。具有用户预配基础设施的集群需要额外的验证和配置才能使用Machine API。 基础设施平台类型为 要查看集群的平台类型,请运行以下命令
|
此示例YAML定义了一个在区域中的1
个Microsoft Azure区域中运行的计算机器集合,并创建标记为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>
name: <infrastructure_id>-<role>-<region> (3)
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>-<region>
template:
metadata:
creationTimestamp: null
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>-<region>
spec:
metadata:
creationTimestamp: null
labels:
machine.openshift.io/cluster-api-machineset: <machineset_name>
node-role.kubernetes.io/<role>: ""
providerSpec:
value:
apiVersion: azureproviderconfig.openshift.io/v1beta1
credentialsSecret:
name: azure-cloud-credentials
namespace: openshift-machine-api
image: (4)
offer: ""
publisher: ""
resourceID: /resourceGroups/<infrastructure_id>-rg/providers/Microsoft.Compute/galleries/gallery_<infrastructure_id>/images/<infrastructure_id>-gen2/versions/latest (5)
sku: ""
version: ""
internalLoadBalancer: ""
kind: AzureMachineProviderSpec
location: <region> (6)
managedIdentity: <infrastructure_id>-identity
metadata:
creationTimestamp: null
natRule: null
networkResourceGroup: ""
osDisk:
diskSizeGB: 128
managedDisk:
storageAccountType: Premium_LRS
osType: Linux
publicIP: false
publicLoadBalancer: ""
resourceGroup: <infrastructure_id>-rg
sshPrivateKey: ""
sshPublicKey: ""
tags:
- name: <custom_tag_name> (7)
value: <custom_tag_value>
subnet: <infrastructure_id>-<role>-subnet
userDataSecret:
name: worker-user-data
vmSize: Standard_D4s_v3
vnet: <infrastructure_id>-vnet
zone: "1" (8)
1 | 指定基于您在预配集群时设置的集群ID的基础架构ID。如果您安装了OpenShift CLI,则可以通过运行以下命令获取基础架构ID
您可以通过运行以下命令获取子网
您可以通过运行以下命令获取VNet
|
2 | 指定要添加的节点标签。 |
3 | 指定基础架构ID、节点标签和区域。 |
4 | 指定计算机器集合的映像详细信息。如果您想使用Azure Marketplace映像,请参阅“选择Azure Marketplace映像”。 |
5 | 指定与您的实例类型兼容的映像。安装程序创建的Hyper-V第2代映像具有-gen2 后缀,而第1代映像则具有相同名称,没有后缀。 |
6 | 指定放置机器的区域。 |
7 | 可选:在您的机器集合中指定自定义标签。在<custom_tag_name> 字段中提供标签名称,在<custom_tag_value> 字段中提供相应的标签值。 |
8 | 指定要在其上放置机器的区域内的区域。确保您的区域支持您指定的区域。 |
除了安装程序创建的计算机器集合之外,您还可以创建自己的集合来动态管理您选择的特定工作负载的机器计算资源。
部署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)
...
1 | 集群基础设施 ID。 | ||
2 | 默认节点标签。
|
||
3 | 计算机构集合 CR 的<providerSpec> 部分中的值是特定于平台的。有关 CR 中<providerSpec> 参数的更多信息,请参阅您提供商的示例计算机构集合 CR 配置。 |
通过运行以下命令创建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。
|
您可以创建一个在 Azure 上运行的机器集合,该集合部署使用 Azure 市场产品的机器。要使用此产品,您必须首先获取 Azure 市场映像。获取映像时,请考虑以下几点
虽然映像相同,但 Azure 市场发布者因地区而异。如果您位于北美,请指定redhat
作为发布者。如果您位于 EMEA,请指定redhat-limited
作为发布者。
此产品包括rh-ocp-worker
SKU 和rh-ocp-worker-gen1
SKU。rh-ocp-worker
SKU 代表 Hyper-V 第 2 代 VM 映像。OpenShift Container Platform 中使用的默认实例类型与第 2 代兼容。如果您计划使用仅与第 1 代兼容的实例类型,请使用与rh-ocp-worker-gen1
SKU 关联的映像。rh-ocp-worker-gen1
SKU 代表 Hyper-V 第 1 代 VM 映像。
在具有 64 位 ARM 实例的集群上不支持安装使用 Azure 市场的产品的映像。 |
您已安装 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-ocp-worker:4.15.2024072409 4.15.2024072409
rh-ocp-worker RedHat rh-ocp-worker-gen1 RedHat:rh-ocp-worker:rh-ocp-worker-gen1:4.15.2024072409 4.15.2024072409
EMEA
$ 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.15.2024072409 4.15.2024072409
rh-ocp-worker redhat-limited rh-ocp-worker-gen1 redhat-limited:rh-ocp-worker:rh-ocp-worker-gen1:4.15.2024072409 4.15.2024072409
使用最新的可用于计算和控制平面节点的映像。如果需要,您的虚拟机将在安装过程中自动升级。 |
通过运行以下命令之一来检查您的产品的映像
北美
$ az vm image show --urn redhat:rh-ocp-worker:rh-ocp-worker:<version>
EMEA
$ 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>
EMEA
$ 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>
EMEA
$ az vm image terms accept --urn redhat-limited:rh-ocp-worker:rh-ocp-worker:<version>
记录您的产品映像详细信息,特别是publisher
、offer
、sku
和version
的值。
使用您的产品映像详细信息,将以下参数添加到机器集合 YAML 文件的providerSpec
部分
providerSpec
映像值providerSpec:
value:
image:
offer: rh-ocp-worker
publisher: redhat
resourceID: ""
sku: rh-ocp-worker
type: MarketplaceWithPlan
version: 413.92.2023101700
您可以为机器集合创建的 Azure 机器启用启动诊断。
拥有现有的 Microsoft Azure 集群。
将适用于您的存储类型的diagnostics
配置添加到机器集合 YAML 文件中的providerSpec
字段
对于 Azure 托管存储帐户
providerSpec:
diagnostics:
boot:
storageAccountType: AzureManaged (1)
1 | 指定 Azure 托管存储帐户。 |
对于 Azure 非托管存储帐户
providerSpec:
diagnostics:
boot:
storageAccountType: CustomerManaged (1)
customerManaged:
storageAccountURI: https://<storage-account>.blob.core.windows.net (2)
1 | 指定 Azure 非托管存储帐户。 |
2 | 将<storage-account> 替换为您存储帐户的名称。 |
仅支持 Azure Blob 存储数据服务。 |
在 Microsoft Azure 门户上,查看机器集合部署的机器的**启动诊断**页面,并验证您可以看到该机器的串行日志。
您可以通过创建在 Azure 上运行的计算机构集合来节省成本,该集合将机器部署为非保证的抢占式虚拟机。抢占式虚拟机利用未使用的 Azure 容量,并且比标准虚拟机更便宜。您可以将抢占式虚拟机用于可以容忍中断的工作负载,例如批处理或无状态的水平可扩展工作负载。
Azure 可以随时终止抢占式虚拟机。发生中断时,Azure 会向用户发出 30 秒的警告。当 Azure 发布终止警告时,OpenShift Container Platform 开始从受影响的实例中删除工作负载。
使用抢占式虚拟机时,可能会由于以下原因发生中断
实例价格超过您的最高价格
抢占式虚拟机的供应减少
Azure 需要收回容量
当 Azure 终止实例时,在抢占式虚拟机节点上运行的终止处理程序会删除机器资源。为了满足计算机构集合replicas
数量,计算机构集合会创建一个请求抢占式虚拟机的机器。
您可以通过将spotVMOptions
添加到计算机构集合 YAML 文件来启动 Azure 上的抢占式虚拟机。
在providerSpec
字段下添加以下行
providerSpec:
value:
spotVMOptions: {}
您可以选择设置spotVMOptions.maxPrice
字段以限制抢占式虚拟机的成本。例如,您可以设置maxPrice: '0.98765'
。如果设置了maxPrice
,则此值将用作每小时最高抢占价格。如果没有设置,则最高价格默认为-1
,并收取高达标准虚拟机价格的费用。
Azure 将抢占式虚拟机的价格限制在标准价格。如果实例设置为默认maxPrice
,则 Azure 不会由于定价而逐出实例。但是,由于容量限制,实例仍然可能被逐出。
强烈建议使用默认标准虚拟机价格作为 |
您可以创建一个在 Azure 上运行的计算机集群,该集群在临时操作系统磁盘上部署虚拟机。临时操作系统磁盘使用本地虚拟机容量,而不是远程 Azure 存储。因此,此配置不会产生额外费用,并可降低读取、写入和重新映像的延迟。
有关更多信息,请参阅 Microsoft Azure 文档关于Azure VM 的临时操作系统磁盘。
您可以通过编辑计算机会集群 YAML 文件,在 Azure 上的临时操作系统磁盘上启动虚拟机。
拥有现有的 Microsoft Azure 集群。
运行以下命令编辑自定义资源 (CR):
$ oc edit machineset <machine-set-name>
其中<machine-set-name>
是您想要在其上配置临时操作系统磁盘的计算机会集群。
将以下内容添加到providerSpec
字段:
providerSpec:
value:
...
osDisk:
...
diskSettings: (1)
ephemeralStorageLocation: Local (1)
cachingType: ReadOnly (1)
managedDisk:
storageAccountType: Standard_LRS (2)
...
1 | 这些行启用临时操作系统磁盘的使用。 |
2 | 临时操作系统磁盘仅支持使用标准 LRS 存储帐户类型的 VM 或规模集实例。 |
OpenShift Container Platform 中对临时操作系统磁盘支持的实现仅支持 |
使用更新的配置创建计算机会集群:
$ oc create -f <machine-set-config>.yaml
在 Microsoft Azure 门户上,查看计算机会集群部署的虚拟机的**概述**页面,并验证临时操作系统磁盘
字段是否设置为操作系统缓存位置
。
您可以创建一个在 Azure 上运行的机器集群,该集群部署带有超高速磁盘的虚拟机。超高速磁盘是高性能存储,旨在用于最苛刻的数据工作负载。
您还可以创建一个持久卷声明 (PVC),它动态绑定到由 Azure 超高速磁盘支持的存储类,并将它们挂载到 Pod。
数据磁盘不支持指定磁盘吞吐量或磁盘 IOPS 的功能。您可以使用 PVC 配置这些属性。 |
您可以通过编辑机器集群 YAML 文件,在 Azure 上部署带有超高速磁盘的虚拟机。
拥有现有的 Microsoft Azure 集群。
使用以下命令在openshift-machine-api
命名空间中创建自定义密钥,使用worker
数据密钥:
$ oc -n openshift-machine-api \
get secret <role>-user-data \ (1)
--template='{{index .data.userData | base64decode}}' | jq > userData.txt (2)
1 | 将<role> 替换为worker 。 |
2 | 指定userData.txt 作为新自定义密钥的名称。 |
在文本编辑器中,打开userData.txt
文件,找到文件中的最后一个}
字符。
在其前面的行上添加一个,
。
在,
之后创建一个新行,并添加以下配置详细信息:
"storage": {
"disks": [ (1)
{
"device": "/dev/disk/azure/scsi1/lun0", (2)
"partitions": [ (3)
{
"label": "lun0p1", (4)
"sizeMiB": 1024, (5)
"startMiB": 0
}
]
}
],
"filesystems": [ (6)
{
"device": "/dev/disk/by-partlabel/lun0p1",
"format": "xfs",
"path": "/var/lib/lun0p1"
}
]
},
"systemd": {
"units": [ (7)
{
"contents": "[Unit]\nBefore=local-fs.target\n[Mount]\nWhere=/var/lib/lun0p1\nWhat=/dev/disk/by-partlabel/lun0p1\nOptions=defaults,pquota\n[Install]\nWantedBy=local-fs.target\n", (8)
"enabled": true,
"name": "var-lib-lun0p1.mount"
}
]
}
1 | 您想要作为超高速磁盘附加到节点的磁盘的配置详细信息。 |
2 | 指定在您使用的机器集群的dataDisks 节中定义的lun 值。例如,如果机器集群包含lun: 0 ,则指定lun0 。您可以通过在此配置文件中指定多个"disks" 条目来初始化多个数据磁盘。如果您指定多个"disks" 条目,请确保每个条目的lun 值与机器集群中的值匹配。 |
3 | 磁盘上新分区的配置详细信息。 |
4 | 为分区指定一个标签。使用分层名称(例如lun0p1 表示lun0 的第一个分区)可能会有所帮助。 |
5 | 指定分区的总大小(以 MiB 为单位)。 |
6 | 指定格式化分区时使用的文件系统。使用分区标签指定分区。 |
7 | 指定一个systemd 单元,以便在启动时挂载分区。使用分区标签指定分区。您可以通过在此配置文件中指定多个"partitions" 条目来创建多个分区。如果您指定多个"partitions" 条目,则必须为每个条目指定一个systemd 单元。 |
8 | 对于Where ,指定storage.filesystems.path 的值。对于What ,指定storage.filesystems.device 的值。 |
使用以下命令将禁用模板值提取到名为disableTemplating.txt
的文件中:
$ oc -n openshift-machine-api get secret <role>-user-data \ (1)
--template='{{index .data.disableTemplating | base64decode}}' | jq > disableTemplating.txt
1 | 将<role> 替换为worker 。 |
组合userData.txt
文件和disableTemplating.txt
文件以创建数据密钥文件,请运行以下命令:
$ oc -n openshift-machine-api create secret generic <role>-user-data-x5 \ (1)
--from-file=userData=userData.txt \
--from-file=disableTemplating=disableTemplating.txt
1 | 对于<role>-user-data-x5 ,指定密钥的名称。将<role> 替换为worker 。 |
复制现有的 Azure MachineSet
自定义资源 (CR) 并编辑它,请运行以下命令:
$ oc edit machineset <machine-set-name>
其中<machine-set-name>
是您想要在其上配置超高速磁盘的机器集群。
在指示的位置添加以下行:
apiVersion: machine.openshift.io/v1beta1
kind: MachineSet
spec:
template:
spec:
metadata:
labels:
disk: ultrassd (1)
providerSpec:
value:
ultraSSDCapability: Enabled (2)
dataDisks: (2)
- nameSuffix: ultrassd
lun: 0
diskSizeGB: 4
deletionPolicy: Delete
cachingType: None
managedDisk:
storageAccountType: UltraSSD_LRS
userDataSecret:
name: <role>-user-data-x5 (3)
1 | 指定一个标签,用于选择此机器集群创建的节点。此过程为此值使用disk.ultrassd 。 |
2 | 这些行启用超高速磁盘的使用。对于dataDisks ,请包含整个节。 |
3 | 指定前面创建的用户数据密钥。将<role> 替换为worker 。 |
运行以下命令创建使用更新配置的机器集群:
$ oc create -f <machine-set-name>.yaml
运行以下命令验证虚拟机是否已创建:
$ oc get machines
虚拟机应处于运行中
状态。
对于正在运行并已附加节点的虚拟机,运行以下命令验证分区:
$ oc debug node/<node-name> -- chroot /host lsblk
在此命令中,oc debug node/<node-name>
在节点<node-name>
上启动一个调试 shell,并使用--
传递一个命令。传递的命令chroot /host
提供对底层主机操作系统二进制文件的访问权限,而lsblk
显示附加到主机操作系统虚拟机的块设备。
要在 Pod 中使用超高速磁盘,请创建一个使用挂载点的工作负载。创建一个类似于以下示例的 YAML 文件:
apiVersion: v1
kind: Pod
metadata:
name: ssd-benchmark1
spec:
containers:
- name: ssd-benchmark1
image: nginx
ports:
- containerPort: 80
name: "http-server"
volumeMounts:
- name: lun0p1
mountPath: "/tmp"
volumes:
- name: lun0p1
hostPath:
path: /var/lib/lun0p1
type: DirectoryOrCreate
nodeSelector:
disktype: ultrassd
使用本节中的信息来了解和恢复您可能遇到的问题。
如果在机器集群中指定了ultraSSDCapability
参数的错误配置,则虚拟机配置将失败。
例如,如果ultraSSDCapability
参数设置为Disabled
,但在dataDisks
参数中指定了超高速磁盘,则会出现以下错误消息:
StorageAccountType UltraSSD_LRS can be used only when additionalCapabilities.ultraSSDEnabled is set.
要解决此问题,请验证您的机器集群配置是否正确。
如果在机器集群中指定了与超高速磁盘不兼容的区域、可用区或实例大小,则虚拟机配置将失败。检查日志中是否有以下错误消息:
failed to create vm <machine_name>: failure sending request for machine <machine_name>: cannot create vm: compute.VirtualMachinesClient#CreateOrUpdate: Failure sending request: StatusCode=400 -- Original Error: Code="BadRequest" Message="Storage Account type 'UltraSSD_LRS' is not supported <more_information_about_why>."
要解决此问题,请验证您是否在受支持的环境中使用此功能,以及您的机器集群配置是否正确。
您可以向 Azure 提供加密密钥来加密静止状态下托管磁盘上的数据。您可以使用 Machine API 启用使用客户管理密钥的服务器端加密。
要使用客户管理的密钥,需要 Azure Key Vault、磁盘加密集和加密密钥。磁盘加密集必须位于云凭据操作员 (CCO) 已授予权限的资源组中。如果没有,则需要在磁盘加密集上额外授予读取器角色。
在机器集 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 虚拟机使用可信启动仅是技术预览功能。技术预览功能不受 Red Hat 生产服务级别协议 (SLA) 的支持,并且可能功能不完整。Red Hat 不建议在生产环境中使用它们。这些功能可让您抢先体验即将推出的产品功能,从而能够在开发过程中测试功能并提供反馈。 有关 Red Hat 技术预览功能的支持范围的更多信息,请参阅技术预览功能支持范围。 |
OpenShift Container Platform 4.17 支持 Azure 虚拟机 (VM) 的可信启动。通过编辑机器集 YAML 文件,您可以配置机器集对其部署的机器使用的可信启动选项。例如,您可以将这些机器配置为使用 UEFI 安全功能(例如安全启动或专用虚拟可信平台模块 (vTPM) 实例)。
某些功能组合会导致配置无效。 |
安全启动[1] | vTPM[2] | 有效配置 |
---|---|---|
已启用 |
已启用 |
是 |
已启用 |
已禁用 |
是 |
已启用 |
已省略 |
是 |
已禁用 |
已启用 |
是 |
已省略 |
已启用 |
是 |
已禁用 |
已禁用 |
否 |
已省略 |
已禁用 |
否 |
已省略 |
已省略 |
否 |
使用secureBoot
字段。
使用virtualizedTrustedPlatformModule
字段。
有关相关功能和功能的更多信息,请参阅 Microsoft Azure 关于Azure 虚拟机的可信启动的文档。
在文本编辑器中,打开现有机器集的 YAML 文件或创建一个新文件。
编辑providerSpec
字段下的以下部分以提供有效的配置
apiVersion: machine.openshift.io/v1beta1
kind: MachineSet
# ...
spec:
template:
machines_v1beta1_machine_openshift_io:
spec:
providerSpec:
value:
securityProfile:
settings:
securityType: TrustedLaunch (1)
trustedLaunch:
uefiSettings: (2)
secureBoot: Enabled (3)
virtualizedTrustedPlatformModule: Enabled (4)
# ...
1 | 启用对 Azure 虚拟机的可信启动的使用。此值对于所有有效配置都是必需的。 |
2 | 指定要使用的 UEFI 安全功能。此部分对于所有有效配置都是必需的。 |
3 | 启用 UEFI 安全启动。 |
4 | 启用 vTPM 的使用。 |
在 Azure 门户上,查看机器集部署的机器的详细信息,并验证可信启动选项是否与您配置的值匹配。
使用 Azure 机密虚拟机仅是技术预览功能。技术预览功能不受 Red Hat 生产服务级别协议 (SLA) 的支持,并且可能功能不完整。Red Hat 不建议在生产环境中使用它们。这些功能可让您抢先体验即将推出的产品功能,从而能够在开发过程中测试功能并提供反馈。 有关 Red Hat 技术预览功能的支持范围的更多信息,请参阅技术预览功能支持范围。 |
OpenShift Container Platform 4.17 支持 Azure 机密虚拟机 (VM)。
目前不支持在 64 位 ARM 架构上使用机密 VM。 |
通过编辑机器集 YAML 文件,您可以配置机器集对其部署的机器使用的机密 VM 选项。例如,您可以将这些机器配置为使用 UEFI 安全功能(例如安全启动或专用虚拟可信平台模块 (vTPM) 实例)。
有关相关功能和功能的更多信息,请参阅 Microsoft Azure 关于机密虚拟机的文档。
在文本编辑器中,打开现有机器集的 YAML 文件或创建一个新文件。
编辑providerSpec
字段下的以下部分
apiVersion: machine.openshift.io/v1beta1
kind: MachineSet
# ...
spec:
template:
spec:
providerSpec:
value:
osDisk:
# ...
managedDisk:
securityProfile: (1)
securityEncryptionType: VMGuestStateOnly (2)
# ...
securityProfile: (3)
settings:
securityType: ConfidentialVM (4)
confidentialVM:
uefiSettings: (5)
secureBoot: Disabled (6)
virtualizedTrustedPlatformModule: Enabled (7)
vmSize: Standard_DC16ads_v5 (8)
# ...
1 | 使用机密 VM 时,指定托管磁盘的安全配置文件设置。 |
2 | 启用 Azure VM 来宾状态 (VMGS) blob 的加密。此设置需要使用 vTPM。 |
3 | 指定机密 VM 的安全配置文件设置。 |
4 | 启用机密 VM 的使用。此值对于所有有效配置都是必需的。 |
5 | 指定要使用的 UEFI 安全功能。此部分对于所有有效配置都是必需的。 |
6 | 禁用 UEFI 安全启动。 |
7 | 启用 vTPM 的使用。 |
8 | 指定支持机密 VM 的实例类型。 |
在 Azure 门户上,查看机器集部署的机器的详细信息,并验证机密 VM 选项是否与您配置的值匹配。
加速网络使用单根 I/O 虚拟化 (SR-IOV) 为 Microsoft Azure VM 提供到交换机的更直接路径。这增强了网络性能。此功能可以在安装期间或之后启用。
在决定是否使用加速网络时,请考虑以下限制:
加速网络仅在 Machine API 可运行的集群上受支持。
虽然 Azure 工作节点的最低要求是两个 vCPU,但加速网络需要包含至少四个 vCPU 的 Azure VM 大小。要满足此要求,您可以更改机器集中的vmSize
值。有关 Azure VM 大小的信息,请参阅Microsoft Azure 文档。
在此功能在现有 Azure 集群上启用后,只有新配置的节点会受到影响。当前运行的节点不会协调。要在所有节点上启用此功能,必须替换每个现有机器。这可以针对每台机器单独进行,也可以通过将副本缩减到零,然后缩放到所需的副本数量来完成。
OpenShift Container Platform 4.17 及更高版本支持在 Microsoft Azure 集群上使用容量预留组进行按需容量预留。
您可以将机器集配置为部署在与您定义的容量请求参数匹配的任何可用资源上。这些参数指定您要预留的 VM 大小、区域和实例数量。如果您的 Azure 订阅配额可以容纳容量请求,则部署将成功。
有关更多信息,包括此 Azure 实例类型的限制和建议用例,请参阅 Microsoft Azure 关于按需容量预留的文档。
您无法更改机器集的现有容量预留配置。要使用不同的容量预留组,必须替换机器集和以前机器集部署的机器。 |
您可以使用cluster-admin
权限访问集群。
您已安装 OpenShift CLI (oc
)。
您已创建容量预留组。
有关更多信息,请参阅 Microsoft Azure 文档创建容量预留。
在文本编辑器中,打开现有机器集的 YAML 文件或创建一个新文件。
编辑providerSpec
字段下的以下部分
apiVersion: machine.openshift.io/v1beta1
kind: MachineSet
# ...
spec:
template:
spec:
providerSpec:
value:
capacityReservationGroupID: <capacity_reservation_group> (1)
# ...
1 | 指定您希望机器集在其上部署机器的容量预留组的 ID。 |
要验证机器部署,请列出通过运行以下命令创建的机器集中的机器
$ oc get machines.machine.openshift.io \
-n openshift-machine-api \
-l machine.openshift.io/cluster-api-machineset=<machine_set_name>
其中<machine_set_name>
是计算机器集的名称。
在输出中,验证列出机器的特性是否与您的容量预留参数匹配。
您可以复制和修改默认的计算机器集配置,以创建支持 GPU 的机器集和 Azure 云提供商的机器。
下表列出了经过验证的实例类型
vmSize | NVIDIA GPU 加速器 | 最大 GPU 数量 | 架构 |
---|---|---|---|
|
V100 |
4 |
x86 |
|
T4 |
1 |
x86 |
|
A100 |
8 |
x86 |
默认情况下,Azure 订阅没有针对具有 GPU 的 Azure 实例类型的配额。客户必须请求增加上面列出的 Azure 实例系列的配额。 |
通过运行以下命令查看openshift-machine-api
命名空间中存在的机器和机器集。每个计算机器集都与 Azure 区域内的不同可用区相关联。安装程序会自动在可用区之间平衡计算机器。
$ oc get machineset -n openshift-machine-api
NAME DESIRED CURRENT READY AVAILABLE AGE
myclustername-worker-centralus1 1 1 1 1 6h9m
myclustername-worker-centralus2 1 1 1 1 6h9m
myclustername-worker-centralus3 1 1 1 1 6h9m
复制一个现有的计算MachineSet
定义,并将结果输出到 YAML 文件,方法是运行以下命令。这将成为支持 GPU 的计算机器集定义的基础。
$ oc get machineset -n openshift-machine-api myclustername-worker-centralus1 -o yaml > machineset-azure.yaml
查看 machineset 的内容
$ cat machineset-azure.yaml
machineset-azure.yaml
文件apiVersion: machine.openshift.io/v1beta1
kind: MachineSet
metadata:
annotations:
machine.openshift.io/GPU: "0"
machine.openshift.io/memoryMb: "16384"
machine.openshift.io/vCPU: "4"
creationTimestamp: "2023-02-06T14:08:19Z"
generation: 1
labels:
machine.openshift.io/cluster-api-cluster: myclustername
machine.openshift.io/cluster-api-machine-role: worker
machine.openshift.io/cluster-api-machine-type: worker
name: myclustername-worker-centralus1
namespace: openshift-machine-api
resourceVersion: "23601"
uid: acd56e0c-7612-473a-ae37-8704f34b80de
spec:
replicas: 1
selector:
matchLabels:
machine.openshift.io/cluster-api-cluster: myclustername
machine.openshift.io/cluster-api-machineset: myclustername-worker-centralus1
template:
metadata:
labels:
machine.openshift.io/cluster-api-cluster: myclustername
machine.openshift.io/cluster-api-machine-role: worker
machine.openshift.io/cluster-api-machine-type: worker
machine.openshift.io/cluster-api-machineset: myclustername-worker-centralus1
spec:
lifecycleHooks: {}
metadata: {}
providerSpec:
value:
acceleratedNetworking: true
apiVersion: machine.openshift.io/v1beta1
credentialsSecret:
name: azure-cloud-credentials
namespace: openshift-machine-api
diagnostics: {}
image:
offer: ""
publisher: ""
resourceID: /resourceGroups/myclustername-rg/providers/Microsoft.Compute/galleries/gallery_myclustername_n6n4r/images/myclustername-gen2/versions/latest
sku: ""
version: ""
kind: AzureMachineProviderSpec
location: centralus
managedIdentity: myclustername-identity
metadata:
creationTimestamp: null
networkResourceGroup: myclustername-rg
osDisk:
diskSettings: {}
diskSizeGB: 128
managedDisk:
storageAccountType: Premium_LRS
osType: Linux
publicIP: false
publicLoadBalancer: myclustername
resourceGroup: myclustername-rg
spotVMOptions: {}
subnet: myclustername-worker-subnet
userDataSecret:
name: worker-user-data
vmSize: Standard_D4s_v3
vnet: myclustername-vnet
zone: "1"
status:
availableReplicas: 1
fullyLabeledReplicas: 1
observedGeneration: 1
readyReplicas: 1
replicas: 1
通过运行以下命令复制machineset-azure.yaml
文件
$ cp machineset-azure.yaml machineset-azure-gpu.yaml
更新machineset-azure-gpu.yaml
中的以下字段
将.metadata.name
更改为包含gpu
的名称。
将.spec.selector.matchLabels["machine.openshift.io/cluster-api-machineset"]
更改为与新的.metadata.name匹配。
将.spec.template.metadata.labels["machine.openshift.io/cluster-api-machineset"]
更改为与新的.metadata.name
匹配。
将.spec.template.spec.providerSpec.value.vmSize
更改为Standard_NC4as_T4_v3
。
machineset-azure-gpu.yaml
文件apiVersion: machine.openshift.io/v1beta1
kind: MachineSet
metadata:
annotations:
machine.openshift.io/GPU: "1"
machine.openshift.io/memoryMb: "28672"
machine.openshift.io/vCPU: "4"
creationTimestamp: "2023-02-06T20:27:12Z"
generation: 1
labels:
machine.openshift.io/cluster-api-cluster: myclustername
machine.openshift.io/cluster-api-machine-role: worker
machine.openshift.io/cluster-api-machine-type: worker
name: myclustername-nc4ast4-gpu-worker-centralus1
namespace: openshift-machine-api
resourceVersion: "166285"
uid: 4eedce7f-6a57-4abe-b529-031140f02ffa
spec:
replicas: 1
selector:
matchLabels:
machine.openshift.io/cluster-api-cluster: myclustername
machine.openshift.io/cluster-api-machineset: myclustername-nc4ast4-gpu-worker-centralus1
template:
metadata:
labels:
machine.openshift.io/cluster-api-cluster: myclustername
machine.openshift.io/cluster-api-machine-role: worker
machine.openshift.io/cluster-api-machine-type: worker
machine.openshift.io/cluster-api-machineset: myclustername-nc4ast4-gpu-worker-centralus1
spec:
lifecycleHooks: {}
metadata: {}
providerSpec:
value:
acceleratedNetworking: true
apiVersion: machine.openshift.io/v1beta1
credentialsSecret:
name: azure-cloud-credentials
namespace: openshift-machine-api
diagnostics: {}
image:
offer: ""
publisher: ""
resourceID: /resourceGroups/myclustername-rg/providers/Microsoft.Compute/galleries/gallery_myclustername_n6n4r/images/myclustername-gen2/versions/latest
sku: ""
version: ""
kind: AzureMachineProviderSpec
location: centralus
managedIdentity: myclustername-identity
metadata:
creationTimestamp: null
networkResourceGroup: myclustername-rg
osDisk:
diskSettings: {}
diskSizeGB: 128
managedDisk:
storageAccountType: Premium_LRS
osType: Linux
publicIP: false
publicLoadBalancer: myclustername
resourceGroup: myclustername-rg
spotVMOptions: {}
subnet: myclustername-worker-subnet
userDataSecret:
name: worker-user-data
vmSize: Standard_NC4as_T4_v3
vnet: myclustername-vnet
zone: "1"
status:
availableReplicas: 1
fullyLabeledReplicas: 1
observedGeneration: 1
readyReplicas: 1
replicas: 1
要验证您的更改,请运行以下命令执行原始计算定义和新的支持 GPU 的节点定义的diff
$ diff machineset-azure.yaml machineset-azure-gpu.yaml
14c14
< name: myclustername-worker-centralus1
---
> name: myclustername-nc4ast4-gpu-worker-centralus1
23c23
< machine.openshift.io/cluster-api-machineset: myclustername-worker-centralus1
---
> machine.openshift.io/cluster-api-machineset: myclustername-nc4ast4-gpu-worker-centralus1
30c30
< machine.openshift.io/cluster-api-machineset: myclustername-worker-centralus1
---
> machine.openshift.io/cluster-api-machineset: myclustername-nc4ast4-gpu-worker-centralus1
67c67
< vmSize: Standard_D4s_v3
---
> vmSize: Standard_NC4as_T4_v3
从定义文件创建支持 GPU 的计算机器集,方法是运行以下命令
$ oc create -f machineset-azure-gpu.yaml
machineset.machine.openshift.io/myclustername-nc4ast4-gpu-worker-centralus1 created
通过运行以下命令查看openshift-machine-api
命名空间中存在的机器和机器集。每个计算机器集都与 Azure 区域内的不同可用区相关联。安装程序会自动在可用区之间平衡计算机器。
$ oc get machineset -n openshift-machine-api
NAME DESIRED CURRENT READY AVAILABLE AGE
clustername-n6n4r-nc4ast4-gpu-worker-centralus1 1 1 1 1 122m
clustername-n6n4r-worker-centralus1 1 1 1 1 8h
clustername-n6n4r-worker-centralus2 1 1 1 1 8h
clustername-n6n4r-worker-centralus3 1 1 1 1 8h
通过运行以下命令查看openshift-machine-api
命名空间中存在的机器。您每个集合只能配置一台计算机器,尽管您可以扩展计算机器集以在特定区域和区域中添加节点。
$ oc get machines -n openshift-machine-api
NAME PHASE TYPE REGION ZONE AGE
myclustername-master-0 Running Standard_D8s_v3 centralus 2 6h40m
myclustername-master-1 Running Standard_D8s_v3 centralus 1 6h40m
myclustername-master-2 Running Standard_D8s_v3 centralus 3 6h40m
myclustername-nc4ast4-gpu-worker-centralus1-w9bqn Running centralus 1 21m
myclustername-worker-centralus1-rbh6b Running Standard_D4s_v3 centralus 1 6h38m
myclustername-worker-centralus2-dbz7w Running Standard_D4s_v3 centralus 2 6h38m
myclustername-worker-centralus3-p9b8c Running Standard_D4s_v3 centralus 3 6h38m
通过运行以下命令查看现有的节点、机器和机器集。请注意,每个节点都是具有特定 Azure 区域和 OpenShift Container Platform 角色的机器定义的实例。
$ oc get nodes
NAME STATUS ROLES AGE VERSION
myclustername-master-0 Ready control-plane,master 6h39m v1.30.3
myclustername-master-1 Ready control-plane,master 6h41m v1.30.3
myclustername-master-2 Ready control-plane,master 6h39m v1.30.3
myclustername-nc4ast4-gpu-worker-centralus1-w9bqn Ready worker 14m v1.30.3
myclustername-worker-centralus1-rbh6b Ready worker 6h29m v1.30.3
myclustername-worker-centralus2-dbz7w Ready worker 6h29m v1.30.3
myclustername-worker-centralus3-p9b8c Ready worker 6h31m v1.30.3
查看计算机器集列表
$ oc get machineset -n openshift-machine-api
NAME DESIRED CURRENT READY AVAILABLE AGE
myclustername-worker-centralus1 1 1 1 1 8h
myclustername-worker-centralus2 1 1 1 1 8h
myclustername-worker-centralus3 1 1 1 1 8h
从定义文件创建支持 GPU 的计算机器集,方法是运行以下命令
$ oc create -f machineset-azure-gpu.yaml
查看计算机器集列表
oc get machineset -n openshift-machine-api
NAME DESIRED CURRENT READY AVAILABLE AGE
myclustername-nc4ast4-gpu-worker-centralus1 1 1 1 1 121m
myclustername-worker-centralus1 1 1 1 1 8h
myclustername-worker-centralus2 1 1 1 1 8h
myclustername-worker-centralus3 1 1 1 1 8h
通过运行以下命令查看您创建的机器集
$ oc get machineset -n openshift-machine-api | grep gpu
MachineSet 副本计数设置为1
,因此会自动创建一个新的Machine
对象。
myclustername-nc4ast4-gpu-worker-centralus1 1 1 1 1 121m
查看通过运行以下命令创建的机器集的Machine
对象
$ oc -n openshift-machine-api get machines | grep gpu
myclustername-nc4ast4-gpu-worker-centralus1-w9bqn Running Standard_NC4as_T4_v3 centralus 1 21m
无需为节点指定命名空间。节点定义是集群范围的。 |
创建支持 GPU 的节点后,您需要发现支持 GPU 的节点,以便可以对其进行调度。为此,请安装节点功能发现 (NFD) 运算符。NFD 运算符识别节点中的硬件设备功能。它解决了识别和编目基础架构节点中的硬件资源的通用问题,以便可以将其提供给 OpenShift Container Platform。
从 OpenShift Container Platform 控制台中的**OperatorHub**安装节点功能发现运算符。
在**OperatorHub**中安装 NFD 运算符后,从已安装的运算符列表中选择**节点功能发现**,然后选择**创建实例**。这将在openshift-nfd
命名空间中安装nfd-master
和nfd-worker
pod,每个计算节点一个nfd-worker
pod。
通过运行以下命令验证运算符是否已安装并正在运行
$ oc get pods -n openshift-nfd
NAME READY STATUS RESTARTS AGE
nfd-controller-manager-8646fcbb65-x5qgk 2/2 Running 7 (8h ago) 1d
在控制台中浏览到已安装的运算符,然后选择**创建节点功能发现**。
选择**创建**以构建 NFD 自定义资源。这将在openshift-nfd
命名空间中创建 NFD pod,这些 pod 会轮询 OpenShift Container Platform 节点以获取硬件资源并对其进行编目。
成功构建后,通过运行以下命令验证每个节点上是否正在运行 NFD pod
$ oc get pods -n openshift-nfd
NAME READY STATUS RESTARTS AGE
nfd-controller-manager-8646fcbb65-x5qgk 2/2 Running 7 (8h ago) 12d
nfd-master-769656c4cb-w9vrv 1/1 Running 0 12d
nfd-worker-qjxb2 1/1 Running 3 (3d14h ago) 12d
nfd-worker-xtz9b 1/1 Running 5 (3d14h ago) 12d
NFD 运算符使用供应商 PCI ID 来识别节点中的硬件。NVIDIA 使用 PCI ID 10de
。
通过运行以下命令查看 NFD 运算符发现的 NVIDIA GPU
$ oc describe node ip-10-0-132-138.us-east-2.compute.internal | egrep 'Roles|pci'
Roles: worker
feature.node.kubernetes.io/pci-1013.present=true
feature.node.kubernetes.io/pci-10de.present=true
feature.node.kubernetes.io/pci-1d0f.present=true
10de
出现在支持 GPU 的节点的节点功能列表中。这意味着 NFD 运算符已正确识别来自支持 GPU 的 MachineSet 的节点。
您可以通过将acceleratedNetworking
添加到机器集 YAML 文件来启用 Azure 上的加速网络。
拥有一个 Machine API 正在运行的现有 Microsoft Azure 集群。
将以下内容添加到providerSpec
字段:
providerSpec:
value:
acceleratedNetworking: true (1)
vmSize: <azure-vm-size> (2)
1 | 此行启用加速网络。 |
2 | 指定包含至少四个 vCPU 的 Azure VM 大小。有关 VM 大小的信息,请参阅Microsoft Azure 文档。 |
要对当前运行的节点启用此功能,您必须替换每个现有机器。这可以针对每台机器单独进行,也可以通过将副本缩减到零,然后按比例放大到所需的副本数量来完成。
在 Microsoft Azure 门户上,查看机器集配置的机器的**网络**设置页面,并验证加速网络
字段是否设置为已启用
。