$ oc adm release info -o jsonpath="{ .metadata.metadata}"
要部署具有多架构计算机的 Azure 集群,您必须首先创建一个使用多架构安装程序二进制文件的单架构 Azure 安装程序预配集群。有关 Azure 安装的更多信息,请参阅 使用自定义项在 Azure 上安装集群。
您还可以将当前具有单架构计算机的集群迁移到具有多架构计算机的集群。有关更多信息,请参阅 迁移到具有多架构计算机的集群。
创建多架构集群后,您可以向集群添加具有不同架构的节点。
在开始向集群添加不同架构的计算节点之前,必须验证集群是否与多架构兼容。
您已安装 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>"
}
要迁移集群以便集群支持多架构计算机构建,请按照 迁移到具有多架构计算机的集群 中的步骤操作。 |
以下步骤描述如何手动生成 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 | 如果状态参数显示success 对象,则复制过程已完成。 |
使用以下命令创建一个映像库
$ az sig create --resource-group ${RESOURCE_GROUP} --gallery-name ${GALLERY_NAME}
使用映像库创建映像定义。在以下示例命令中,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
文件、您的存储帐户、资源组和映像库来创建映像版本。在以下示例中,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
以下步骤描述了如何手动生成 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 对象,则复制过程已完成。 |
运行以下命令创建一个镜像库
$ az sig create --resource-group ${RESOURCE_GROUP} --gallery-name ${GALLERY_NAME}
使用镜像库运行以下命令创建一个镜像定义
$ 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
文件、您的存储帐户、资源组和镜像库运行以下命令创建一个镜像版本
$ 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
创建多架构集群后,您可以添加具有不同架构的节点。
您可以通过以下方式向多架构集群添加多架构计算机构:
向使用 64 位 ARM 控制平面机器并已包含 64 位 ARM 计算机构的集群添加 64 位 x86 计算机构。在这种情况下,64 位 x86 被视为辅助架构。
向使用 64 位 x86 控制平面机器并已包含 64 位 x86 计算机构的集群添加 64 位 ARM 计算机构。在这种情况下,64 位 ARM 被视为辅助架构。
要创建 Azure 上的自定义计算机构集合,请参阅“在 Azure 上创建计算机构集合”。
在向集群添加辅助架构节点之前,建议安装 Multiarch Tuning Operator 并部署 |
您已安装 OpenShift CLI (oc
)。
您已创建 64 位 ARM 或 64 位 x86 启动镜像。
您使用安装程序使用多架构安装程序二进制文件创建了 64 位 ARM 或 64 位 x86 单架构 Azure 集群。
登录到 OpenShift CLI (oc
)。
创建一个 YAML 文件,并添加配置以创建计算机构集合来控制集群中的 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>"
1 | 将resourceID 参数设置为arm64 或amd64 启动镜像。 |
2 | 将vmSize 参数设置为安装中使用的实例类型。一些示例实例类型为Standard_D4ps_v5 或D8ps 。 |
运行以下命令创建计算机构集合
$ 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