4.2. 在 Azure 上使用多架构计算机器创建集群
要使用多架构计算机器部署 Azure 集群,您必须首先创建一个使用多架构安装程序二进制文件的单架构 Azure 安装程序置备集群。如需有关 Azure 安装的更多信息,请参阅使用自定义在 Azure 上安装集群。
您还可以将带有单架构计算机器的当前集群迁移到使用多架构计算机器的集群。如需更多信息,请参阅使用多架构计算机器迁移到集群。
创建多架构集群后,您可以将具有不同架构的节点添加到集群中。
4.2.1. 验证集群兼容性
在开始在集群中添加不同架构的计算节点前,您必须验证集群是否兼容多架构。
先决条件
-
已安装 OpenShift CLI(
oc
)。
流程
-
登录 OpenShift CLI (
oc
)。 您可以运行以下命令来检查集群是否使用构架有效负载:
$ oc adm release info -o jsonpath="{ .metadata.metadata}"
验证
如果您看到以下输出,代表集群使用多架构有效负载:
{ "release.openshift.io/architecture": "multi", "url": "https://access.redhat.com/errata/<errata_version>" }
然后,您可以开始在集群中添加多架构计算节点。
如果您看到以下输出,代表集群没有使用多架构有效负载:
{ "url": "https://access.redhat.com/errata/<errata_version>" }
重要要迁移集群以便集群支持多架构计算机器,请按照使用多架构计算机器迁移到集群的步骤进行操作。
4.2.2. 使用 Azure 镜像 gallery 创建 64 位 ARM 引导镜像
以下流程描述了如何手动生成 64 位 ARM 引导镜像。
先决条件
-
已安装 Azure CLI (
az
)。 - 已使用多架构安装程序二进制文件创建了单架构 Azure 安装程序置备集群。
流程
登录到您的 Azure 帐户:
$ az login
创建存储帐户并将
aarch64
虚拟硬盘 (VHD) 上传到您的存储帐户。OpenShift Container Platform 安装程序会创建一个资源组,但引导镜像也可以上传到名为资源组的自定义中:$ az storage account create -n ${STORAGE_ACCOUNT_NAME} -g ${RESOURCE_GROUP} -l westus --sku Standard_LRS 1
- 1
westus
对象是一个示例区域。
使用您生成的存储帐户创建存储容器:
$ az storage container create -n ${CONTAINER_NAME} --account-name ${STORAGE_ACCOUNT_NAME}
您必须使用 OpenShift Container Platform 安装程序 JSON 文件提取 URL 和
aarch64
VHD 名称:运行以下命令,提取
URL
字段并将其设置为RHCOS_VHD_ORIGIN_URL
:$ RHCOS_VHD_ORIGIN_URL=$(oc -n openshift-machine-config-operator get configmap/coreos-bootimages -o jsonpath='{.data.stream}' | jq -r '.architectures.aarch64."rhel-coreos-extensions"."azure-disk".url')
运行以下命令,提取
aarch64
VHD 名称并将其设置为BLOB_NAME
作为文件名:$ BLOB_NAME=rhcos-$(oc -n openshift-machine-config-operator get configmap/coreos-bootimages -o jsonpath='{.data.stream}' | jq -r '.architectures.aarch64."rhel-coreos-extensions"."azure-disk".release')-azure.aarch64.vhd
生成共享访问令牌 (SAS) 令牌。通过以下命令,使用此令牌将 RHCOS VHD 上传到存储容器:
$ end=`date -u -d "30 minutes" '+%Y-%m-%dT%H:%MZ'`
$ sas=`az storage container generate-sas -n ${CONTAINER_NAME} --account-name ${STORAGE_ACCOUNT_NAME} --https-only --permissions dlrw --expiry $end -o tsv`
将 RHCOS VHD 复制到存储容器中:
$ az storage blob copy start --account-name ${STORAGE_ACCOUNT_NAME} --sas-token "$sas" \ --source-uri "${RHCOS_VHD_ORIGIN_URL}" \ --destination-blob "${BLOB_NAME}" --destination-container ${CONTAINER_NAME}
您可以使用以下命令检查复制过程的状态:
$ az storage blob show -c ${CONTAINER_NAME} -n ${BLOB_NAME} --account-name ${STORAGE_ACCOUNT_NAME} | jq .properties.copy
输出示例
{ "completionTime": null, "destinationSnapshot": null, "id": "1fd97630-03ca-489a-8c4e-cfe839c9627d", "incrementalCopy": null, "progress": "17179869696/17179869696", "source": "https://rhcos.blob.core.windows.net/imagebucket/rhcos-411.86.202207130959-0-azure.aarch64.vhd", "status": "success", 1 "statusDescription": null }
- 1
- 如果 status 参数显示
success
对象,则复制过程已完成。
使用以下命令创建镜像 gallery:
$ az sig create --resource-group ${RESOURCE_GROUP} --gallery-name ${GALLERY_NAME}
使用镜像 gallery 创建镜像定义。在以下示例中,
rhcos-arm64
是镜像定义的名称。$ az sig image-definition create --resource-group ${RESOURCE_GROUP} --gallery-name ${GALLERY_NAME} --gallery-image-definition rhcos-arm64 --publisher RedHat --offer arm --sku arm64 --os-type linux --architecture Arm64 --hyper-v-generation V2
要获取 VHD 的 URL,并将其设置为
RHCOS_VHD_URL
作为文件名称,请运行以下命令:$ RHCOS_VHD_URL=$(az storage blob url --account-name ${STORAGE_ACCOUNT_NAME} -c ${CONTAINER_NAME} -n "${BLOB_NAME}" -o tsv)
使用
RHCOS_VHD_URL
文件、您的存储帐户、资源组和镜像 gallery 创建镜像版本。在以下示例中,1.0.0
是镜像版本。$ az sig image-version create --resource-group ${RESOURCE_GROUP} --gallery-name ${GALLERY_NAME} --gallery-image-definition rhcos-arm64 --gallery-image-version 1.0.0 --os-vhd-storage-account ${STORAGE_ACCOUNT_NAME} --os-vhd-uri ${RHCOS_VHD_URL}
现在生成您的
arm64
引导镜像。您可以使用以下命令访问镜像的 ID:$ az sig image-version show -r $GALLERY_NAME -g $RESOURCE_GROUP -i rhcos-arm64 -e 1.0.0
以下示例镜像 ID 在计算机器设置的
recourseID
参数中使用:resourceID
示例/resourceGroups/${RESOURCE_GROUP}/providers/Microsoft.Compute/galleries/${GALLERY_NAME}/images/rhcos-arm64/versions/1.0.0
4.2.3. 使用 Azure 镜像 gallery 创建 64 位 x86 引导镜像
以下流程描述了如何手动生成 64 位 x86 引导镜像。
先决条件
-
已安装 Azure CLI (
az
)。 - 已使用多架构安装程序二进制文件创建了单架构 Azure 安装程序置备集群。
流程
运行以下命令登录到您的 Azure 帐户:
$ az login
运行以下命令,创建一个存储帐户并将
x86_64
虚拟硬盘 (VHD) 上传到您的存储帐户。OpenShift Container Platform 安装程序会创建一个资源组。但是,引导镜像也可以上传到名为资源组的自定义中:$ az storage account create -n ${STORAGE_ACCOUNT_NAME} -g ${RESOURCE_GROUP} -l westus --sku Standard_LRS 1
- 1
westus
对象是一个示例区域。
运行以下命令,使用您生成的存储帐户创建存储容器:
$ az storage container create -n ${CONTAINER_NAME} --account-name ${STORAGE_ACCOUNT_NAME}
使用 OpenShift Container Platform 安装程序 JSON 文件提取 URL 和
x86_64
VHD 名称:运行以下命令,提取
URL
字段并将其设置为RHCOS_VHD_ORIGIN_URL
:$ RHCOS_VHD_ORIGIN_URL=$(oc -n openshift-machine-config-operator get configmap/coreos-bootimages -o jsonpath='{.data.stream}' | jq -r '.architectures.x86_64."rhel-coreos-extensions"."azure-disk".url')
运行以下命令,提取
x86_64
VHD 名称并将其设置为BLOB_NAME
作为文件名:$ BLOB_NAME=rhcos-$(oc -n openshift-machine-config-operator get configmap/coreos-bootimages -o jsonpath='{.data.stream}' | jq -r '.architectures.x86_64."rhel-coreos-extensions"."azure-disk".release')-azure.x86_64.vhd
生成共享访问令牌 (SAS) 令牌。运行以下命令,使用此令牌将 RHCOS VHD 上传到存储容器:
$ end=`date -u -d "30 minutes" '+%Y-%m-%dT%H:%MZ'`
$ sas=`az storage container generate-sas -n ${CONTAINER_NAME} --account-name ${STORAGE_ACCOUNT_NAME} --https-only --permissions dlrw --expiry $end -o tsv`
运行以下命令,将 RHCOS VHD 复制到存储容器中:
$ az storage blob copy start --account-name ${STORAGE_ACCOUNT_NAME} --sas-token "$sas" \ --source-uri "${RHCOS_VHD_ORIGIN_URL}" \ --destination-blob "${BLOB_NAME}" --destination-container ${CONTAINER_NAME}
您可以运行以下命令来检查复制过程的状态:
$ az storage blob show -c ${CONTAINER_NAME} -n ${BLOB_NAME} --account-name ${STORAGE_ACCOUNT_NAME} | jq .properties.copy
输出示例
{ "completionTime": null, "destinationSnapshot": null, "id": "1fd97630-03ca-489a-8c4e-cfe839c9627d", "incrementalCopy": null, "progress": "17179869696/17179869696", "source": "https://rhcos.blob.core.windows.net/imagebucket/rhcos-411.86.202207130959-0-azure.aarch64.vhd", "status": "success", 1 "statusDescription": null }
- 1
- 如果
status
参数显示success
对象,则代表复制过程已完成。
运行以下命令来创建镜像 gallery:
$ az sig create --resource-group ${RESOURCE_GROUP} --gallery-name ${GALLERY_NAME}
运行以下命令,使用镜像 gallery 创建镜像定义:
$ az sig image-definition create --resource-group ${RESOURCE_GROUP} --gallery-name ${GALLERY_NAME} --gallery-image-definition rhcos-x86_64 --publisher RedHat --offer x86_64 --sku x86_64 --os-type linux --architecture x64 --hyper-v-generation V2
在本例中,
rhcos-x86_64
是镜像定义的名称。要获取 VHD 的 URL,并将其设置为
RHCOS_VHD_URL
作为文件名称,请运行以下命令:$ RHCOS_VHD_URL=$(az storage blob url --account-name ${STORAGE_ACCOUNT_NAME} -c ${CONTAINER_NAME} -n "${BLOB_NAME}" -o tsv)
运行以下命令,使用
RHCOS_VHD_URL
文件、存储帐户、资源组和镜像 gallery 创建镜像版本:$ az sig image-version create --resource-group ${RESOURCE_GROUP} --gallery-name ${GALLERY_NAME} --gallery-image-definition rhcos-arm64 --gallery-image-version 1.0.0 --os-vhd-storage-account ${STORAGE_ACCOUNT_NAME} --os-vhd-uri ${RHCOS_VHD_URL}
在本例中,
1.0.0
是镜像版本。可选:运行以下命令来访问生成的
x86_64
引导镜像的 ID:$ az sig image-version show -r $GALLERY_NAME -g $RESOURCE_GROUP -i rhcos-x86_64 -e 1.0.0
以下示例镜像 ID 在计算机器设置的
recourseID
参数中使用:resourceID
示例/resourceGroups/${RESOURCE_GROUP}/providers/Microsoft.Compute/galleries/${GALLERY_NAME}/images/rhcos-x86_64/versions/1.0.0
4.2.4. 在 Azure 集群中添加多架构计算机器集
创建多架构集群后,您可以添加具有不同架构的节点。
您可以使用以下方法将不同架构的计算机器添加到多架构集群中:
- 将 64 位 x86 计算机器添加到使用 64 位 ARM control plane 机器的集群中,且已经包含 64 位 ARM 计算机器。在这种情况下,64 位 x86 被视为辅助架构。
- 将 64 位 ARM 计算机器添加到使用 64 位 x86 control plane 机器的集群,且已经包含 64 位 x86 计算机器。在这种情况下,64 位 ARM 被视为二级架构。
要在 Azure 上创建自定义计算机器集,请参阅"创建 Azure 上的计算机器集"。
在集群中添加二级架构节点前,建议安装 Multiarch Tuning Operator,并部署 ClusterPodPlacementConfig
自定义资源。如需更多信息,请参阅"使用 Multiarch Tuning Operator 在多架构集群上管理工作负载"。
先决条件
-
已安装 OpenShift CLI(
oc
)。 - 您创建了 64 位 ARM 或 64 位 x86 引导镜像。
- 您可以使用安装程序创建使用多架构安装程序二进制文件的 64 位 ARM 或 64 位 x86 单架构 Azure 集群。
流程
-
登录 OpenShift CLI (
oc
)。 创建 YAML 文件,并添加配置来创建计算机器集来控制集群中的 64 位 ARM 或 64 位 x86 计算节点。
Azure 64 位 ARM 或 64 位 x86 计算节点的
MachineSet
对象示例apiVersion: machine.openshift.io/v1beta1 kind: MachineSet metadata: labels: machine.openshift.io/cluster-api-cluster: <infrastructure_id> machine.openshift.io/cluster-api-machine-role: worker machine.openshift.io/cluster-api-machine-type: worker name: <infrastructure_id>-machine-set-0 namespace: openshift-machine-api spec: replicas: 2 selector: matchLabels: machine.openshift.io/cluster-api-cluster: <infrastructure_id> machine.openshift.io/cluster-api-machineset: <infrastructure_id>-machine-set-0 template: metadata: labels: machine.openshift.io/cluster-api-cluster: <infrastructure_id> machine.openshift.io/cluster-api-machine-role: worker machine.openshift.io/cluster-api-machine-type: worker machine.openshift.io/cluster-api-machineset: <infrastructure_id>-machine-set-0 spec: lifecycleHooks: {} metadata: {} providerSpec: value: acceleratedNetworking: true apiVersion: machine.openshift.io/v1beta1 credentialsSecret: name: azure-cloud-credentials namespace: openshift-machine-api image: offer: "" publisher: "" resourceID: /resourceGroups/${RESOURCE_GROUP}/providers/Microsoft.Compute/galleries/${GALLERY_NAME}/images/rhcos-arm64/versions/1.0.0 1 sku: "" version: "" kind: AzureMachineProviderSpec location: <region> managedIdentity: <infrastructure_id>-identity networkResourceGroup: <infrastructure_id>-rg osDisk: diskSettings: {} diskSizeGB: 128 managedDisk: storageAccountType: Premium_LRS osType: Linux publicIP: false publicLoadBalancer: <infrastructure_id> resourceGroup: <infrastructure_id>-rg subnet: <infrastructure_id>-worker-subnet userDataSecret: name: worker-user-data vmSize: Standard_D4ps_v5 2 vnet: <infrastructure_id>-vnet zone: "<zone>"
运行以下命令来创建计算机器集:
$ oc create -f <file_name> 1
- 1
- 将
<file_name>
替换为计算机器设置配置 YAML 文件的名称。例如:arm64-machine-set-0.yaml
, 或amd64-machine-set-0.yaml
。
验证
运行以下命令验证新机器是否正在运行:
$ oc get machineset -n openshift-machine-api
输出必须包含您创建的机器集。
输出示例
NAME DESIRED CURRENT READY AVAILABLE AGE <infrastructure_id>-machine-set-0 2 2 2 2 10m
您可以运行以下命令来检查节点是否已就绪并可以调度:
$ oc get nodes