![]() |
会开车的熊猫 · MongoTemplate使用指南 - 掘金· 1 年前 · |
![]() |
爱吹牛的柑橘 · PrintPreviewControl ...· 1 年前 · |
![]() |
帅气的枇杷 · 带水印的Spark结构化流重复数据删除系统· 2 年前 · |
电脑 集群服务器 openshift rh |
https://access.redhat.com/documentation/zh-cn/openshift_container_platform/4.13/html-single/machine_management/index |
![]() |
阳刚的消防车
1 年前 |
Increase visibility into IT operations to detect and resolve technical issues before they impact your business.
Learn More Go to InsightsEngage with our Red Hat Product Security team, access security updates, and ensure your environments are not exposed to any known security vulnerabilities. Product Security Center
Keep your systems secure with Red Hat's specialized responses to security vulnerabilities. View Responses
摘要
您可以使用机器管理来灵活地处理底层基础架构,如 Amazon Web Services (AWS)、Microsoft Azure、Google Cloud Platform (GCP)、Red Hat OpenStack Platform (RHOSP)、Red Hat Virtualization (RHV) 和 VMware vSphere 来管理 OpenShift Container Platform 集群。您可以控制集群并执行自动扩展,如根据特定工作负载策略扩展和缩减集群。
务必要让集群适应不断变化的工作负载。当负载增加或减少时,OpenShift Container Platform 集群可以水平扩展和缩减。
机器管理作为
自定义资源定义
(CRD) 实施。CRD 对象在集群中定义了一个新的唯一对象
Kind
,并允许 Kubernetes API 服务器处理对象的整个生命周期。
Machine API Operator 置备以下资源:
MachineSet
ClusterAutoscaler
MachineAutoscaler
MachineHealthCheck
Machine API 将基于上游 Cluster API 项目的主要资源与自定义 OpenShift Container Platform 资源相结合。 对于 OpenShift Container Platform 4.13 集群,Machine API 在集群安装完成后执行所有节点主机置备管理操作。由于此系统的缘故,OpenShift Container Platform 4.13 在公有或私有云基础架构之上提供了一种弹性动态置备方法。 两种主要资源分别是:
providerSpec
规格,用于描述为不同云平台提供的计算节点的类型。例如,计算节点的机器类型可能会定义特定的机器类型和所需的元数据。
MachineSet
资源是计算机器组。计算机器集适用于计算机器,因为副本集是针对 pod。如果需要更多计算机器或必须缩减规模,您可以更改
MachineSet
资源的
replicas
字段来满足您的计算需求。
control plane 机器不能由计算机器集管理。
control plane 机器集为 control plane 机器提供管理功能,与为计算机器提供的计算机器集类似。
如需更多信息,请参阅"管理 control plane 机器"。
以下自定义资源可为集群添加更多功能:
MachineAutoscaler
资源自动扩展云中的计算机器。您可以为指定计算机器集中的节点设置最小和最大扩展界限,机器自动扩展则维护该范围内的节点。
ClusterAutoscaler
对象存在后,
MachineAutoscaler
对象生效。
ClusterAutoscaler
和
MachineAutoscaler
资源都由
ClusterAutoscalerOperator
对象提供。
此资源基于上游集群自动扩展项目。在 OpenShift Container Platform 实现中,它通过扩展计算机器设置 API 来与 Machine API 集成。您可以使用以下方法使用集群自动扩展来管理集群: 为内核、节点、内存和 GPU 等资源设置集群范围的扩展限制 设置优先级,以便集群对 pod 和新节点进行优先排序,而在不太重要的 pod 时不会上线 设置扩展策略,以便您可以扩展节点,但不会缩减节点
MachineHealthCheck
资源可检测机器何时处于不健康状态并将其删除,然后在支持的平台上生成新的机器。
在 OpenShift Container Platform 版本 3.11 中,您无法轻松地推出多区架构,因为集群不负责管理机器置备。自 OpenShift Container Platform 版本 4.1 起,此过程变得更加容易。每个计算机器集限定在一个区,因此安装程序可以代表您的可用区向计算机器集发送。然后,由于您的计算是动态的,因此在面对区域故障时,您始终都有一个区域来应对必须重新平衡机器的情况。在没有多个可用区的全局 Azure 区域,您可以使用可用性集来确保高可用性。自动扩展器在集群生命周期内尽可能提供平衡。
作为集群管理员,您可以执行以下操作:
为以下云供应商创建计算机器集:
Azure
RHOSP
vSphere
为裸机部署创建机器集:
在裸机上创建计算机器集
通过从计算机器集中添加或删除机器,
手动扩展计算机器
。
通过
MachineSet
YAML 配置文件
修改计算机器设置
。
删除
机器。
创建基础架构计算机器集
。
配置和部署
机器健康检查
,以自动修复机器池中损坏的机器。
作为集群管理员,您可以执行以下操作: 使用以下云供应商的 control plane 机器集 更新 control plane 配置 : Azure vSphere 配置和部署 机器健康检查 ,以自动恢复不健康的 control plane 机器。
您可以自动扩展 OpenShift Container Platform 集群,以确保更改工作负载的灵活性。要 自动扩展 您的集群,必须首先部署集群自动扩展,然后为每个计算机器集部署机器自动扩展。 集群自动扩展 会根据部署需求增加和缩小集群的大小。 机器自动扩展 会调整您在 OpenShift Container Platform 集群中部署的计算机器集中的机器数量。
用户置备的基础架构是一个环境,您可以在其中部署托管 OpenShift Container Platform 的计算、网络和存储资源等基础架构。您可以在安装过程中或安装后,将 计算机器添加到 用户置备的基础架构上的集群。
作为集群管理员,您可以执行以下操作: 将 Red Hat Enterprise Linux(RHEL)计算机器(也称为 worker 机器)添加到 用户置备的基础架构集群或安装置备的基础架构集群中。 将更多 Red Hat Enterprise Linux(RHEL)计算机器添加到 现有集群中。
您可以在 Alibaba Cloud 上的 OpenShift Container Platform 集群中创建不同的计算机器集来满足特定目的。例如,您可以创建基础架构机器集和相关的机器,以便将支持型工作负载转移到新机器上。
您只能在 Machine API 操作的集群中使用高级机器管理和扩展功能。具有用户置备的基础架构的集群需要额外的验证和配置才能使用 Machine API。
具有基础架构平台类型
none
的集群无法使用 Machine API。即使附加到集群的计算机器安装在支持该功能的平台上,也会应用这个限制。在安装后无法更改此参数。
要查看集群的平台类型,请运行以下命令:
$ oc get infrastructure cluster -o jsonpath='{.status.platform}'
此 YAML 示例定义了一个在区域中指定的 Alibaba Cloud 区域中运行的计算机器集,并创建通过
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>-<zone> 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>-<zone> 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>-<zone> 10 spec: metadata: labels: node-role.kubernetes.io/<role>: "" providerSpec: value: apiVersion: machine.openshift.io/v1 credentialsSecret: name: alibabacloud-credentials imageId: <image_id> 11 instanceType: <instance_type> 12 kind: AlibabaCloudMachineProviderConfig ramRoleName: <infrastructure_id>-role-worker 13 regionId: <region> 14 resourceGroup: 15 id: <resource_group_id> type: ID securityGroups: - tags: 16 - Key: Name Value: <infrastructure_id>-sg-<role> type: Tags systemDisk: 17 category: cloud_essd size: <disk_size> tag: 18 - Key: kubernetes.io/cluster/<infrastructure_id> Value: owned userDataSecret: name: <user_data_secret> 19 vSwitch: tags: 20 - Key: Name Value: <infrastructure_id>-vswitch-<zone> type: Tags vpcId: "" zoneId: <zone> 21
oc
)软件包,您可以通过运行以下命令来获取基础架构 ID:
$ oc get -o jsonpath='{.status.infrastructureName}{"\n"}' infrastructure cluster
category
值。如果需要,以 GB 为单位指定
大小
的不同值。
指定
openshift-machine-api
命名空间中的用户数据 YAML 文件中的 secret 名称。使用安装程序在默认计算机器集中填充的值。
指定您所在地区(region)内要放置机器的区域 (zone) 。确保您的地区支持您指定的区域。
安装程序为 Alibaba Cloud 集群创建的默认计算机器集包括 Alibaba Cloud 用来跟踪用量统计的 nonessential 标签值。这些标签在
spec.template.spec.providerSpec.value
列表的
securityGroups
、
tag
和
vSwitch
参数中填充。
在创建部署额外机器的计算机器集时,必须包含所需的 Kubernetes 标签。使用统计标签默认应用,即使它们没有在您创建的计算机器集中指定。您还可以根据需要包含其他标签。
以下 YAML 片段表示默认计算机器集中哪些标签是可选的,且需要哪些标签。
spec.template.spec.providerSpec.value.securityGroups
中的标签
spec: template: spec: providerSpec: value: securityGroups: - tags: - Key: kubernetes.io/cluster/<infrastructure_id> 1 Value: owned - Key: GISV Value: ocp - Key: sigs.k8s.io/cloud-provider-alibaba/origin 2 Value: ocp - Key: Name Value: <infrastructure_id>-sg-<role> 3 type: Tags可选:即使计算机器集中没有指定,也会应用该标签。
<infrastructure_id>
是基础架构 ID,它基于您在置备集群时设定的集群 ID。
<role>
是要添加的节点标签。
spec.template.spec.providerSpec.value.tag
中的标签
spec: template: spec: providerSpec: value: - Key: kubernetes.io/cluster/<infrastructure_id> 1 Value: owned - Key: GISV 2 Value: ocp - Key: sigs.k8s.io/cloud-provider-alibaba/origin 3 Value: ocp可选:即使计算机器集中没有指定,也会应用该标签。 其中
<infrastructure_id>
是基础架构 ID,它基于您在置备集群时设定的集群 ID。
spec.template.spec.providerSpec.value.vSwitch
中的标签
spec: template: spec: providerSpec: value: vSwitch: tags: - Key: kubernetes.io/cluster/<infrastructure_id> 1 Value: owned - Key: GISV 2 Value: ocp - Key: sigs.k8s.io/cloud-provider-alibaba/origin 3 Value: ocp - Key: Name Value: <infrastructure_id>-vswitch-<zone> 4 type: Tags
除了安装程序创建的计算机器集外,您还可以创建自己的来动态管理您选择的特定工作负载的机器计算资源。
部署一个 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 集群基础架构 ID。 默认节点标签。 对于具有用户置备的基础架构的集群,计算机器集只能创建worker
和infra
类型机器。 计算机器设置 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
的值会匹配。如果 compute 机器集不可用,请等待几分钟,然后再次运行命令。
您可以在 Amazon Web Services (AWS)上的 OpenShift Container Platform 集群中创建不同的计算机器集来满足特定目的。例如,您可以创建基础架构机器集和相关的机器,以便将支持型工作负载转移到新机器上。
您只能在 Machine API 操作的集群中使用高级机器管理和扩展功能。具有用户置备的基础架构的集群需要额外的验证和配置才能使用 Machine API。
具有基础架构平台类型
none
的集群无法使用 Machine API。即使附加到集群的计算机器安装在支持该功能的平台上,也会应用这个限制。在安装后无法更改此参数。
要查看集群的平台类型,请运行以下命令:
$ oc get infrastructure cluster -o jsonpath='{.status.platform}'
此 YAML 示例定义了一个在
us-east-1a
Amazon Web Services (AWS) 区域中运行的计算机器集,并创建通过
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 name: <infrastructure_id>-<role>-<zone> 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>-<zone> 4 template: metadata: 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>-<zone> 8 spec: metadata: labels: node-role.kubernetes.io/<role>: "" 9 providerSpec: value: id: ami-046fe691f52a953f9 10 apiVersion: awsproviderconfig.openshift.io/v1beta1 blockDevices: - ebs: iops: 0 volumeSize: 120 volumeType: gp2 credentialsSecret: name: aws-cloud-credentials deviceIndex: 0 iamInstanceProfile: id: <infrastructure_id>-worker-profile 11 instanceType: m6i.large kind: AWSMachineProviderConfig placement: availabilityZone: <zone> 12 region: <region> 13 securityGroups: - filters: - name: tag:Name values: - <infrastructure_id>-worker-sg 14 subnet: filters: - name: tag:Name values: - <infrastructure_id>-private-<zone> 15 tags: - name: kubernetes.io/cluster/<infrastructure_id> 16 value: owned - name: <custom_tag_name> 17 value: <custom_tag_value> 18 userDataSecret: name: worker-user-data
$ oc get -o jsonpath='{.status.infrastructureName}{"\n"}' infrastructure cluster
$ oc -n openshift-machine-api \ -o jsonpath='{.spec.template.spec.providerSpec.value.ami.id}{"\n"}' \ get machineset/<infrastructure_id>-<role>-<zone>
Email:[email protected]
的
name:value
对来添加管理员的电子邮件地址。
也可以在
install-config.yml
文件中在安装过程中指定自定义标签。如果
install-config.yml
文件和机器集包含具有相同
name
数据的标签,则机器集的标签值优先于
install-config.yml
文件中的标签值。
指定区域,如
us-east-1a
。
指定区域,如
us-east-1
。
指定基础架构 ID 和区域。
除了安装程序创建的计算机器集外,您还可以创建自己的来动态管理您选择的特定工作负载的机器计算资源。
部署一个 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 集群基础架构 ID。 默认节点标签。 对于具有用户置备的基础架构的集群,计算机器集只能创建worker
和infra
类型机器。 计算机器设置 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
的值会匹配。如果 compute 机器集不可用,请等待几分钟,然后再次运行命令。
您可以使用机器集创建使用 Amazon EC2 实例元数据服务 (IMDS) 的特定版本的机器。机器集可以创建允许使用 IMDSv1 和 IMDSv2 的机器或需要使用 IMDSv2 的机器。 只有在 OpenShift Container Platform 版本 4.7 或更高版本中创建的 AWS 集群上才支持使用 IMDSv2。 要更改现有机器的 IMDS 配置,请编辑管理这些机器的机器设置 YAML 文件。要使用您首选的 IMDS 配置部署新计算机器,请使用适当的值创建计算机器设置 YAML 文件。 在配置机器集来创建需要 IMDSv2 的机器前,请确保与 AWS 元数据服务交互的工作负载都支持 IMDSv2。
您可以通过在机器集 YAML 文件中添加或编辑
metadataServiceOptions.authentication
,来指定是否需要使用 IMDSv2。
要使用 IMDSv2,您的 AWS 集群必须使用 OpenShift Container Platform 版本 4.7 或更高版本创建。
在
providerSpec
字段中添加或编辑以下行:
providerSpec:
value:
metadataServiceOptions:
authentication: Required 1
Required
。要允许使用 IMDSv1 和 IMDSv2,请将参数值设置为
Optional
。如果没有指定值,则允许 IMDSv1 和 IMDSv2。
您可以创建在 AWS 上运行的机器集,该机器将机器部署为 Dedicated 实例。专用实例在专用于单一客户的硬件上运行虚拟私有云(VPC)。这些 Amazon EC2 实例在主机硬件级别被物理隔离。Dedicated 实例的隔离也会存在,即使实例属于链接到一个 Forer 帐户的不同 AWS 帐户。但是,其他未专用实例如果属于同一 AWS 帐户,则可以与 Dedicated 实例共享硬件。 Machine API 支持具有公共或专用租期的实例。具有公共租期的实例在共享硬件上运行。公共租期是默认租期。具有专用租期的实例在单租户硬件上运行。
您可以使用 Machine API 集成来运行由 Dedicated 实例支持的机器。设置机器设置 YAML 文件中的
tenancy
字段,以便在 AWS 上启动 Dedicated 实例。
在
providerSpec
字段中指定专用租户:
providerSpec: placement: tenancy: dedicated
您可以通过创建一个在 AWS 上运行的计算机器集来节约成本,该机器集将机器部署为非保障的 Spot 实例。Spo 实例使用未使用的 AWS EC2 容量,且比按需(On-Demand)实例的成本要低。您可以将 Spot 实例用于可容许中断的工作负载,如批处理或无状态工作负载、横向可扩展工作负载。
AWS EC2 可随时终止 Spot 实例。当发生中断时,AWS 会向用户发出两分钟警告信息。当 AWS 发出终止警告时,OpenShift Container Platform 开始从受影响的实例中删除工作负载。
使用 Spot 实例时可能会因为以下原因造成中断:
实例价格超过您的最大价格
Spot 实例的需求增加
Spot 实例的提供减少
当 AWS 终止实例时,Spot 实例节点上运行的终止处理器会删除机器资源。为了满足计算机器设置
副本
数量,计算机器会创建一个请求 Spot 实例的机器。
您可以通过在计算机器设置 YAML 文件中添加
SpotMarketOptions
,在 AWS 上启动 Spot 实例。
在
providerSpec
字段中添加以下行:
providerSpec: value: spotMarketOptions: {}
您可以选择设置
spotMarketOptions.maxPrice
字段来限制 Spot 实例的成本。例如,您可以设置
maxPrice: '2.50'
。
如果设置了
maxPrice
,则将此值用作每小时最大即时价格。如果没有设置,则默认使用最大价格收费,以达到按需处理的实例价格。
强烈建议您使用默认的 On-Demand 价格作为
maxPrice
值,不要为 Spot 实例设置最大价格。
您可以复制并修改默认计算机器集配置,以便为 AWS EC2 云供应商创建启用了 GPU 的机器集和机器。 有关支持的实例类型的更多信息,请参阅以下 NVIDIA 文档: NVIDIA GPU Operator 社区支持列表 NVIDIA AI Enterprise 支持列表 运行以下命令,查看现有节点、机器和机器集。请注意,每个节点都是带有特定 AWS 区域和 OpenShift Container Platform 角色的机器定义实例。
$ oc get nodes
输出示例
NAME STATUS ROLES AGE VERSION ip-10-0-52-50.us-east-2.compute.internal Ready worker 3d17h v1.26.0 ip-10-0-58-24.us-east-2.compute.internal Ready control-plane,master 3d17h v1.26.0 ip-10-0-68-148.us-east-2.compute.internal Ready worker 3d17h v1.26.0 ip-10-0-68-68.us-east-2.compute.internal Ready control-plane,master 3d17h v1.26.0 ip-10-0-72-170.us-east-2.compute.internal Ready control-plane,master 3d17h v1.26.0 ip-10-0-74-50.us-east-2.compute.internal Ready worker 3d17h v1.26.0运行以下命令,查看
openshift-machine-api
命名空间中存在的机器和机器集。每个计算机器集都与 AWS 区域的不同可用区关联。安装程序会在可用区之间自动负载平衡计算机器。
$ oc get machinesets -n openshift-machine-api
输出示例
NAME DESIRED CURRENT READY AVAILABLE AGE preserve-dsoc12r4-ktjfc-worker-us-east-2a 1 1 1 1 3d11h preserve-dsoc12r4-ktjfc-worker-us-east-2b 2 2 2 2 3d11h运行以下命令,查看
openshift-machine-api
命名空间中存在的机器。目前,每个机器集只有一个计算机器,但可以扩展计算机器集,以便在特定地区和区域中添加节点。
$ oc get machines -n openshift-machine-api | grep worker
输出示例
preserve-dsoc12r4-ktjfc-worker-us-east-2a-dts8r Running m5.xlarge us-east-2 us-east-2a 3d11h preserve-dsoc12r4-ktjfc-worker-us-east-2b-dkv7w Running m5.xlarge us-east-2 us-east-2b 3d11h preserve-dsoc12r4-ktjfc-worker-us-east-2b-k58cw Running m5.xlarge us-east-2 us-east-2b 3d11h运行以下命令,复制现有计算
MachineSet
定义并将结果输出到 JSON 文件。这将是启用了 GPU 的计算机器集定义的基础。
$ oc get machineset preserve-dsoc12r4-ktjfc-worker-us-east-2a -n openshift-machine-api -o json > <output_file.json>
编辑 JSON 文件,并对新
MachineSet
定义进行以下更改:
将
worker
替换为
gpu
。这将是新计算机集的名称。
将新
MachineSet
定义的实例类型更改为
g4dn
,其中包括 NVIDIA Tesla T4 GPU。要了解更多有关 AWS
g4dn
实例类型的信息,请参阅
加速计算
。
$ jq .spec.template.spec.providerSpec.value.instanceType preserve-dsoc12r4-ktjfc-worker-gpu-us-east-2a.json "g4dn.xlarge"
<output_file.json>
文件被保持为
preserve-dsoc12r4-ktjfc-worker-gpu-us-east-2a.json
。
更新
preserve-dsoc12r4-ktjfc-worker-gpu-us-east-2a.json
中的以下字段:
将
.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.instanceType
替换为
g4dn.xlarge
。
要验证您的更改,请运行以下命令对原始计算定义和新的 GPU 节点定义执行
diff
:
$ oc -n openshift-machine-api get preserve-dsoc12r4-ktjfc-worker-us-east-2a -o json | diff preserve-dsoc12r4-ktjfc-worker-gpu-us-east-2a.json -
输出示例
10c10 < "name": "preserve-dsoc12r4-ktjfc-worker-gpu-us-east-2a", > "name": "preserve-dsoc12r4-ktjfc-worker-us-east-2a", 21c21 < "machine.openshift.io/cluster-api-machineset": "preserve-dsoc12r4-ktjfc-worker-gpu-us-east-2a" > "machine.openshift.io/cluster-api-machineset": "preserve-dsoc12r4-ktjfc-worker-us-east-2a" 31c31 < "machine.openshift.io/cluster-api-machineset": "preserve-dsoc12r4-ktjfc-worker-gpu-us-east-2a" > "machine.openshift.io/cluster-api-machineset": "preserve-dsoc12r4-ktjfc-worker-us-east-2a" 60c60 < "instanceType": "g4dn.xlarge", > "instanceType": "m5.xlarge",运行以下命令,从定义创建启用了 GPU 的计算机器集:
$ oc create -f preserve-dsoc12r4-ktjfc-worker-gpu-us-east-2a.json
输出示例
machineset.machine.openshift.io/preserve-dsoc12r4-ktjfc-worker-gpu-us-east-2a created运行以下命令,查看您创建的机器集:
$ oc -n openshift-machine-api get machinesets | grep gpu
MachineSet 副本数被设置为
1
,以便自动创建新的
Machine
对象。
preserve-dsoc12r4-ktjfc-worker-gpu-us-east-2a 1 1 1 1 4m21s运行以下命令,查看创建机器集的
Machine
对象:
$ oc -n openshift-machine-api get machines | grep gpu
输出示例
preserve-dsoc12r4-ktjfc-worker-gpu-us-east-2a running g4dn.xlarge us-east-2 us-east-2a 4m36s请注意,不需要为节点指定命名空间。节点定义是在集群范围之内。
创建启用了 GPU 的节点后,您需要发现启用了 GPU 的节点,以便调度它。为此,请安装 Node Feature Discovery (NFD) Operator。NFD Operator 识别节点中的硬件设备功能。它解决了在基础架构节点中识别和目录硬件资源的一般问题,以便 OpenShift Container Platform 可以使用它们。
在 OpenShift Container Platform 控制台中,从
OperatorHub
安装 Node Feature Discovery Operator。
将 NFD Operator 安装到
OperatorHub
后,从已安装的 Operator 列表中选择
Node Feature Discovery
,然后选择
Create instance
。这会在
openshift-nfd
命名空间中安装
nfd-master
和
nfd-worker
pod,每个计算节点一个
nfd-worker
pod。
运行以下命令验证 Operator 是否已安装并正在运行:
$ oc get pods -n openshift-nfd
输出示例
NAME READY STATUS RESTARTS AGE nfd-controller-manager-8646fcbb65-x5qgk 2/2 Running 7 (8h ago) 1d浏览到控制台中的已安装的 Oerator,再选择 Create Node Feature Discovery 。 选择 Create 以构建 NFD 自定义资源。这会在
openshift-nfd
命名空间中创建 NFD 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) 12dNFD Operator 使用厂商 PCI ID 来识别节点的硬件。NVIDIA 使用 PCI ID
10de
。
运行以下命令,查看 NFD Operator 发现的 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 Operator 可以正确地识别启用了 GPU 的 MachineSet 的节点。
您可以在 Microsoft Azure 上的 OpenShift Container Platform 集群中创建不同的计算机器集来满足特定目的。例如,您可以创建基础架构机器集和相关的机器,以便将支持型工作负载转移到新机器上。
您只能在 Machine API 操作的集群中使用高级机器管理和扩展功能。具有用户置备的基础架构的集群需要额外的验证和配置才能使用 Machine API。
具有基础架构平台类型
none
的集群无法使用 Machine API。即使附加到集群的计算机器安装在支持该功能的平台上,也会应用这个限制。在安装后无法更改此参数。
要查看集群的平台类型,请运行以下命令:
$ oc get infrastructure cluster -o jsonpath='{.status.platform}'
此 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
$ 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
-gen2
后缀,而 V1 镜像则与没有后缀的名称相同。
指定要放置机器的区域。
指定您所在地区(region)内要放置机器的区域 (zone) 。确保您的地区支持您指定的区域。
<custom_tag_name>
字段中提供标签名称,并在
<custom_tag_value>
字段中提供对应的标签值。
除了安装程序创建的计算机器集外,您还可以创建自己的来动态管理您选择的特定工作负载的机器计算资源。
部署一个 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 集群基础架构 ID。 默认节点标签。 对于具有用户置备的基础架构的集群,计算机器集只能创建worker
和infra
类型机器。 计算机器设置 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
的值会匹配。如果 compute 机器集不可用,请等待几分钟,然后再次运行命令。
您可以创建在 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 虚拟机镜像。
在使用 64 位 ARM 实例的集群上不支持使用 Azure marketplace 安装镜像。
已安装 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。如果需要,您的虚拟机会在安装过程中自动升级。 运行以下命令之一检查您的所提供的镜像:
$ 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
您可以在机器集创建的 Azure 机器上启用引导诊断。
已有 Microsoft Azure 集群。
将适用于您的存储类型的
diagnostics
配置添加到机器集 YAML 文件中的
providerSpec
字段中:
对于 Azure Managed 存储帐户:
providerSpec:
diagnostics:
boot:
storageAccountType: AzureManaged 1
providerSpec: diagnostics: boot: storageAccountType: CustomerManaged 1 customerManaged: storageAccountURI: https://<storage-account>.blob.core.windows.net 2
<storage-account>
替换为存储帐户的名称。
仅支持 Azure Blob Storage 数据服务。
在 Microsoft Azure 门户上,查看机器集部署的机器的
Boot diagnostics
页面,并验证您可以看到机器的串行日志。
您可以通过创建一个在 Azure 上运行的计算机器集来节约成本,该机器集将机器部署为非保障的 Spot 虚拟机。Spot VM 使用未使用的 Azure 容量,且比标准虚拟机的成本要低。您可以将 Spot 虚拟机用于可容许中断的工作负载,如批处理或无状态工作负载、横向可扩展工作负载。
Azure 可随时终止 Spot 虚拟机。Azure 在发生中断时向用户发出 30 秒警告。当 Azure 发出终止警告时,OpenShift Container Platform 开始从受影响的实例中删除工作负载。
使用 Spot 虚拟机时可能会因为以下原因造成中断:
实例价格超过您的最大价格
Spot 虚拟机的提供减少
Azure 需要容量退回
当 Azure 终止实例时,在 Spot VM 节点上运行的终止处理器会删除机器资源。为了满足计算机器设置
副本
数量,计算机器会创建一个请求 Spot 虚拟机的机器。
您可以通过在计算机器设置 YAML 文件中添加
spotVMOptions
,在 Azure 上启动 Spot 虚拟机。
在
providerSpec
字段中添加以下行:
providerSpec: value: spotVMOptions: {}
您可以选择设置
spotVMOptions.maxPrice
字段来限制 Spot 虚拟机的成本。例如,您可以设置
maxPrice: '0.98765'
。如果设置了
maxPrice
,则将此值用作每小时最大即时价格。如果没有设置,则最大价格默认为
-1
且不超过标准虚拟机价格。
Azure 封顶 Spot VM 价格以标准价格为基础。如果实例使用默认的
maxPrice
设置,Azure 不会因为定价而驱除实例。但是,一个实例仍然可能会因为容量限制而被驱除。
强烈建议您使用默认标准 VM 价格作为
maxPrice
值,而不为 Spot 虚拟机设置最大价格。
您可以创建在 Azure 上运行的计算机器,用于在 Ephemeral OS 磁盘上部署机器。临时 OS 磁盘使用本地虚拟机容量,而不是远程 Azure 存储。因此,此配置不会产生额外费用,并提供了较低的读、写和重新处理延迟。 如需更多信息,请参阅 Microsoft Azure 文档中有关 Azure 虚拟机的 Ephemeral 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 ...
CacheDisk
放置类型。不要更改
placement
配置设置。
使用更新的配置创建计算机器集:
$ oc create -f <machine-set-config>.yaml
验证
Ephemeral OS 磁盘
字段是否已设置为
OS 缓存放置
。
您可以创建在 Azure 上运行的机器集,该机器集用来部署带有巨型磁盘的机器。ultra 磁盘是高性能存储,用于要求最苛刻的数据工作负载。 您还可以创建一个持久性卷声明(PVC)来动态绑定到 Azureultra 磁盘支持的存储类,并将它们挂载到 pod。 数据磁盘不支持指定磁盘吞吐量或磁盘 IOPS。您可以使用 PVC 配置这些属性。 Microsoft Azure ultra 磁盘文档 使用 CSI PVC 在强制磁盘上部署机器的机器集 使用树内 PVC 部署机器的机器集
您可以通过编辑机器集 YAML 文件在 Azure 上部署带有巨型磁盘的机器。
已有 Microsoft Azure 集群。
运行以下命令,使用
worker
数据 secret 在
openshift-machine-api
命名空间中创建自定义 secret:
$ oc -n openshift-machine-api \ get secret <role>-user-data \ 1 --template='{{index .data.userData | base64decode}}' | jq > userData.txt 2
<role>
替换为
worker
。
指定
userData.txt
作为新自定义 secret 的名称。
在文本编辑器中,打开
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" 您要作为 ultra 磁盘附加到节点的磁盘的配置详情。 指定您使用的机器集的dataDisks
小节中定义的lun
值。例如,如果机器集包含lun: 0
,请指定lun0
。您可以通过在这个配置文件中指定多个"disks"
条目来初始化多个数据磁盘。如果您指定多个"disks"
条目,请确保每个条目的lun
值与机器集中的值匹配。 磁盘上新分区的配置详情。 为分区指定标签。使用分层的名称可能会有帮助,如lun0p1
代表lun0
的第一个分区。 指定分区的总大小(以 MiB 为单位)。 指定在格式化分区时要使用的文件系统。使用分区标签来指定分区。 指定一个systemd
单元来在引导时挂载分区。使用分区标签来指定分区。您可以通过在这个配置文件中指定多个"partitions"
条目来创建多个分区。如果指定多个"partitions"
条目,则必须为每个条目指定一个systemd
单元。 对于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
文件来创建数据 secret 文件:$ 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
,请指定 secret 的名称。将<role>
替换为worker
。 运行以下命令,复制现有的 AzureMachineSet
自定义资源(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: 3 - nameSuffix: ultrassd lun: 0 diskSizeGB: 4 deletionPolicy: Delete cachingType: None managedDisk: storageAccountType: UltraSSD_LRS userDataSecret: name: <role>-user-data-x5 4
- 1
指定标签,用于选择此机器集创建的节点。此流程使用disk.ulssd
用于这个值。 这些行支持使用 ultra 磁盘。对于dataDisks
,请包括整个小节。 指定之前创建的用户数据 secret。将<role>
替换为worker
。 运行以下命令,使用更新的配置创建机器集:$ oc create -f <machine-set-name>.yaml验证
运行以下命令验证机器是否已创建:
$ oc get machines机器应处于
Running
状态。 对于正在运行并附加节点的机器,请运行以下命令验证分区:$ oc debug node/<node-name> -- chroot /host lsblk在这个命令中,
oc debug node/<node-name>
会在节点<node-name>
上启动一个 debugging 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
参数中指定了 ultra 磁盘,则会出现以下出错信息:
StorageAccountType UltraSSD_LRS can be used only when additionalCapabilities.ultraSSDEnabled is set.
如果在机器集中指定与 ultra 磁盘不兼容的区域、可用性区域或实例大小,则机器置备会失败。检查日志中的以下出错信息:
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、磁盘加密集和加密密钥。磁盘加密集必须在 Cloud Credential Operator(CCO)授予权限的资源组中。如果没有,则需要在磁盘加密集中授予额外的 reader 角色。
创建 Azure Key Vault 实例
。
创建磁盘加密集的实例
。
授予磁盘加密集对密钥 vault 的访问权限
。
在机器集 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
其他资源
加速网络使用单一根 I/O 虚拟化(SR-IOV)为 Microsoft Azure 虚拟机提供更直接的路径到交换机。这提高了网络性能。此功能可在安装过程中或安装后启用。
在决定是否使用加速网络时,请考虑以下限制:
只有在 Machine API 操作的集群中支持加速网络。
虽然 Azure worker 节点的最低要求是两个 vCPU,但 Accelerated Networking 需要包含至少四个 vCPU 的 Azure 虚拟机大小。为了满足此要求,您可以在机器集中更改
vmSize
的值。有关 Azure VM 大小的信息,请参阅
Microsoft Azure 文档
。
当在现有 Azure 集群上启用这个功能时,只有新置备的节点会受到影响。当前运行的节点不会被协调。要在所有节点上启用这个功能,必须替换每个现有机器。这可以为每个机器单独完成,或者将副本缩减为零,然后备份到所需的副本数。
您可以复制并修改默认计算机器集配置,以便为 Azure 云供应商创建启用了 GPU 的机器集和机器。 下表列出了经过验证的实例类型:
vmSize | NVIDIA GPU 加速器 | 最大 GPU 数 | 架构 | ||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
$ 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
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
更新
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.26.0 myclustername-master-1 Ready control-plane,master 6h41m v1.26.0 myclustername-master-2 Ready control-plane,master 6h39m v1.26.0 myclustername-nc4ast4-gpu-worker-centralus1-w9bqn Ready worker 14m v1.26.0 myclustername-worker-centralus1-rbh6b Ready worker 6h29m v1.26.0 myclustername-worker-centralus2-dbz7w Ready worker 6h29m v1.26.0 myclustername-worker-centralus3-p9b8c Ready worker 6h31m v1.26.0查看计算机器集的列表:
$ 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 副本数被设置为
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不需要为节点指定命名空间。节点定义是在集群范围之内。
2.3.11. 部署 Node Feature Discovery Operator
创建启用了 GPU 的节点后,您需要发现启用了 GPU 的节点,以便调度它。为此,请安装 Node Feature Discovery (NFD) Operator。NFD Operator 识别节点中的硬件设备功能。它解决了在基础架构节点中识别和目录硬件资源的一般问题,以便 OpenShift Container Platform 可以使用它们。
在 OpenShift Container Platform 控制台中,从
OperatorHub
安装 Node Feature Discovery Operator。
将 NFD Operator 安装到
OperatorHub
后,从已安装的 Operator 列表中选择
Node Feature Discovery
,然后选择
Create instance
。这会在
$ oc get pods -n openshift-nfd 输出示例
NAME READY STATUS RESTARTS AGE nfd-controller-manager-8646fcbb65-x5qgk 2/2 Running 7 (8h ago) 1d浏览到控制台中的已安装的 Oerator,再选择 Create Node Feature Discovery 。 选择 Create 以构建 NFD 自定义资源。这会在
openshift-nfd
命名空间中创建 NFD 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) 12dNFD Operator 使用厂商 PCI ID 来识别节点的硬件。NVIDIA 使用 PCI ID
10de
。
运行以下命令,查看 NFD Operator 发现的 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 Operator 可以正确地识别启用了 GPU 的 MachineSet 的节点。
在安装过程中启用加速网络
2.3.11.1. 在现有 Microsoft Azure 集群上启用加速网络
您可以通过在机器集 YAML 文件中添加
providerSpec: value: acceleratedNetworking: true 1 vmSize: <azure-vm-size> 2
2.4. 在 Azure Stack Hub 上创建计算机器集
您可以在 Microsoft Azure Stack Hub 上的 OpenShift Container Platform 集群中创建不同的计算机器集来满足特定目的。例如,您可以创建基础架构机器集和相关的机器,以便将支持型工作负载转移到新机器上。
您只能在 Machine API 操作的集群中使用高级机器管理和扩展功能。具有用户置备的基础架构的集群需要额外的验证和配置才能使用 Machine API。
具有基础架构平台类型
$ oc get infrastructure cluster -o jsonpath='{.status.platform}' 2.4.1. Azure Stack Hub 上计算机器设置自定义资源的 YAML 示例
此 YAML 示例定义了一个在区域(region)的
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: node-role.kubernetes.io/<role>: "" 11 providerSpec: value: apiVersion: machine.openshift.io/v1beta1 availabilitySet: <availability_set> 12 credentialsSecret: name: azure-cloud-credentials namespace: openshift-machine-api image: offer: "" publisher: "" resourceID: /resourceGroups/<infrastructure_id>-rg/providers/Microsoft.Compute/images/<infrastructure_id> 13 sku: "" version: "" internalLoadBalancer: "" kind: AzureMachineProviderSpec location: <region> 14 managedIdentity: <infrastructure_id>-identity 15 metadata: creationTimestamp: null natRule: null networkResourceGroup: "" osDisk: diskSizeGB: 128 managedDisk: storageAccountType: Premium_LRS osType: Linux publicIP: false publicLoadBalancer: "" resourceGroup: <infrastructure_id>-rg 16 sshPrivateKey: "" sshPublicKey: "" subnet: <infrastructure_id>-<role>-subnet 17 18 userDataSecret: name: worker-user-data 19 vmSize: Standard_DS4_v2 vnet: <infrastructure_id>-vnet 20 zone: "1" 21
2.4.2. 创建计算机器集
除了安装程序创建的计算机器集外,您还可以创建自己的来动态管理您选择的特定工作负载的机器计算资源。
部署一个 OpenShift Container Platform 集群。
安装 OpenShift CLI(
$ 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 集群基础架构 ID。 默认节点标签。 对于具有用户置备的基础架构的集群,计算机器集只能创建 验证
2.4.3. 启用 Azure 引导诊断
您可以在机器集创建的 Azure 机器上启用引导诊断。
有一个现有的 Microsoft Azure Stack Hub 集群。
将适用于您的存储类型的
providerSpec:
diagnostics:
boot:
storageAccountType: AzureManaged 1
2.4.4. 为机器集启用客户管理的加密密钥
您可以为 Azure 提供加密密钥,以便加密受管磁盘上的数据。您可以使用 Machine API 使用客户管理的密钥启用服务器端加密。
使用客户管理的密钥需要 Azure Key Vault、磁盘加密集和加密密钥。磁盘加密集必须在 Cloud Credential Operator(CCO)授予权限的资源组中。如果没有,则需要在磁盘加密集中授予额外的 reader 角色。
创建 Azure Key Vault 实例
。
创建磁盘加密集的实例
。
授予磁盘加密集对密钥 vault 的访问权限
。
在机器集 YAML 文件中的
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 其他资源 2.5. 在 GCP 上创建计算机器设置
您可以在 Google Cloud Platform (GCP)上的 OpenShift Container Platform 集群中创建不同的计算机器集来满足特定目的。例如,您可以创建基础架构机器集和相关的机器,以便将支持型工作负载转移到新机器上。
您只能在 Machine API 操作的集群中使用高级机器管理和扩展功能。具有用户置备的基础架构的集群需要额外的验证和配置才能使用 Machine API。
具有基础架构平台类型
$ oc get infrastructure cluster -o jsonpath='{.status.platform}' 2.5.1. GCP 上计算机器设置自定义资源的 YAML 示例
此 YAML 示例定义了一个在 Google Cloud Platform (GCP)中运行的计算机器集,并创建通过
使用 OpenShift CLI 获取的值在以下示例中,您可以使用 OpenShift CLI 获取集群的一些值。
GCP
apiVersion: machine.openshift.io/v1beta1 kind: MachineSet metadata: labels: machine.openshift.io/cluster-api-cluster: <infrastructure_id> 1 name: <infrastructure_id>-w-a 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>-w-a template: metadata: creationTimestamp: null labels: machine.openshift.io/cluster-api-cluster: <infrastructure_id> machine.openshift.io/cluster-api-machine-role: <role> 2 machine.openshift.io/cluster-api-machine-type: <role> machine.openshift.io/cluster-api-machineset: <infrastructure_id>-w-a spec: metadata: labels: node-role.kubernetes.io/<role>: "" providerSpec: value: apiVersion: gcpprovider.openshift.io/v1beta1 canIPForward: false credentialsSecret: name: gcp-cloud-credentials deletionProtection: false disks: - autoDelete: true boot: true image: <path_to_image> 3 labels: null sizeGb: 128 type: pd-ssd gcpMetadata: 4 - key: <custom_metadata_key> value: <custom_metadata_value> kind: GCPMachineProviderSpec machineType: n1-standard-4 metadata: creationTimestamp: null networkInterfaces: - network: <infrastructure_id>-network subnetwork: <infrastructure_id>-worker-subnet projectID: <project_name> 5 region: us-central1 serviceAccounts: - email: <infrastructure_id>-w@<project_name>.iam.gserviceaccount.com scopes: - https://www.googleapis.com/auth/cloud-platform tags: - <infrastructure_id>-worker userDataSecret: name: worker-user-data zone: us-central1-a其中
<infrastructure_id>
是基础架构 ID,它基于您在置备集群时设定的集群 ID。
对于
<node>
,指定要添加的节点标签。
指定当前计算机器集中使用的镜像的路径。
要使用 GCP Marketplace 镜像,请指定要使用的功能:
OpenShift Container Platform:
https://www.googleapis.com/compute/v1/projects/redhat-marketplace-public/global/images/redhat-coreos-ocp-48-x86-64-202210040145
OpenShift Platform Plus:
https://www.googleapis.com/compute/v1/projects/redhat-marketplace-public/global/images/redhat-coreos-opp-48-x86-64-202206140145
OpenShift Kubernetes Engine:
https://www.googleapis.com/compute/v1/projects/redhat-marketplace-public/global/images/redhat-coreos-oke-48-x86-64-202206140145
可选:以
key:value
对的形式指定自定义元数据。有关用例,请参阅 GCP 文档,以查看
设置自定义元数据
。
对于
<project_name>
,请指定用于集群的 GCP 项目的名称。
2.5.2. 创建计算机器集
除了安装程序创建的计算机器集外,您还可以创建自己的来动态管理您选择的特定工作负载的机器计算资源。
部署一个 OpenShift Container Platform 集群。
安装 OpenShift CLI(
$ 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 集群基础架构 ID。 默认节点标签。 对于具有用户置备的基础架构的集群,计算机器集只能创建 验证
2.5.3. 使用机器集配置持久性磁盘类型
您可以通过编辑机器集 YAML 文件,配置机器集在其中部署机器的持久性磁盘类型。
有关持久性磁盘类型、兼容性、区域可用性和限制的更多信息,请参阅 GCP Compute Engine 文档有关
持久性磁盘
的信息。
在文本编辑器中,为现有机器集打开 YAML 文件或创建新机器。
编辑
apiVersion: machine.openshift.io/v1beta1
kind: MachineSet
spec:
template:
spec:
providerSpec:
value:
disks:
type: <pd-disk-type> 1
2.5.4. 使用机器集配置机密虚拟机
通过编辑机器集 YAML 文件,您可以配置机器集用于部署的机器的机密虚拟机选项。
有关机密计算功能、功能和兼容性的更多信息,请参阅 GCP Compute Engine 文档有关
机密虚拟机
。
机密计算只是一个技术预览功能。技术预览功能不受红帽产品服务等级协议(SLA)支持,且功能可能并不完整。红帽不推荐在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。
有关红帽技术预览功能支持范围的更多信息,请参阅
技术预览功能支持范围
。
在文本编辑器中,为现有机器集打开 YAML 文件或创建新机器。
在
apiVersion: machine.openshift.io/v1beta1 kind: MachineSet spec: template: spec: providerSpec: value: confidentialCompute: Enabled 1 onHostMaintenance: Terminate 2 machineType: n2d-standard-8 3 ...
2.5.5. 将机器部署为可抢占虚拟机实例的机器集
您可以通过创建一个在 GCP 上运行的计算机器集来节约成本,该 MachineSet 将机器部署为非保障的虚拟机实例。抢占虚拟机实例使用了超额的 Compute Engine 容量,且比一般实例的成本要低。您可以将抢占虚拟机实例用于可容许中断的工作负载,如批处理或无状态工作负载、横向可扩展工作负载。
GCP Compute Engine 可随时终止可抢占的虚拟机实例。Compute Engine 向用户发送抢占通知,表示会在 30 秒内发生中断。当 Compute Engine 发出抢占通知时,OpenShift Container Platform 开始从受影响的实例中删除工作负载。如果实例没有停止,则 ACPI G3 Mechanical Off 信号会在 30 秒后发送到操作系统。然后,抢占虚拟机实例由 Compute Engine 转换为
2.5.5.1. 使用计算机器集创建抢占虚拟机实例
您可以通过在计算机器设置 YAML 文件中添加
providerSpec: value: preemptible: true
如果
2.5.6. 使用机器集配置 Shielded VM 选项
通过编辑机器集 YAML 文件,您可以配置机器集用于部署的机器的 Shielded VM 选项。
有关 Shielded VM 特性和功能的更多信息,请参阅有关
Shielded VM
的 GCP Compute Engine 文档。
在文本编辑器中,为现有机器集打开 YAML 文件或创建新机器。
在
apiVersion: machine.openshift.io/v1beta1 kind: MachineSet spec: template: spec: providerSpec: value: shieldedInstanceConfig: 1 integrityMonitoring: Enabled 2 secureBoot: Disabled 3 virtualizedTrustedPlatformModule: Enabled 4 ...
2.5.7. 为机器集启用客户管理的加密密钥
Google Cloud Platform(GCP)Compute Engine 允许用户提供加密密钥来加密磁盘上的数据。密钥用于对数据加密密钥进行加密,而不是加密客户的数据。默认情况下,Compute Engine 使用 Compute Engine 密钥加密这些数据。
您可以使用 Machine API 的集群中使用客户管理的密钥启用加密。您必须首先
创建 KMS 密钥
并为服务帐户分配正确的权限。需要 KMS 密钥名称、密钥环名称和位置来允许服务帐户使用您的密钥。
如果您不想将专用服务帐户用于 KMS 加密,则使用 Compute Engine 默认服务帐户。如果没有使用专用服务帐户,则必须授予默认服务帐户权限来访问密钥。Compute Engine 默认服务帐户名称遵循
$ gcloud kms keys add-iam-policy-binding <key_name> \ --keyring <key_ring_name> \ --location <key_ring_location> \ --member "serviceAccount:service-<project_number>@compute-system.iam.gserviceaccount.com” \ --role roles/cloudkms.cryptoKeyEncrypterDecrypter
在机器集 YAML 文件中的
apiVersion: machine.openshift.io/v1beta1 kind: MachineSet spec: template: spec: providerSpec: value: disks: - type: encryptionKey: kmsKey: name: machine-encryption-key 1 keyRing: openshift-encrpytion-ring 2 location: global 3 projectID: openshift-gcp-project 4 kmsKeyServiceAccount: openshift-service-account@openshift-gcp-project.iam.gserviceaccount.com 5
2.5.8. 为计算机器设置启用 GPU 支持Google Cloud Platform(GCP)Compute Engine 允许用户在虚拟机实例中添加 GPU。得益于访问 GPU 资源的工作负载可在启用了此功能的计算机器上更好地执行。GCP 上的 OpenShift Container Platform 支持 A2 和 N1 机器集中的 NVIDIA GPU 模型。 表 2.1. 支持的 GPU 配置
|