3.4. 在 GCP 上使用多架构计算机器创建集群
要使用多架构计算机器创建 Google Cloud Platform (GCP)集群,您必须首先使用多架构安装程序二进制文件创建一个单架构 GCP 安装程序置备集群。如需有关 AWS 安装的更多信息,请参阅使用自定义在 GCP 上安装集群。
您还可以将带有单架构计算机器的当前集群迁移到使用多架构计算机器的集群。如需更多信息,请参阅使用多架构计算机器迁移到集群。
创建多架构集群后,您可以将具有不同架构的节点添加到集群中。
目前,GCP 的 64 位 ARM 机器不支持安全引导
3.4.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>" }
重要要迁移集群以便集群支持多架构计算机器,请按照使用多架构计算机器迁移到集群的步骤进行操作。
3.4.2. 在 GCP 集群中添加多架构计算机器集
创建多架构集群后,您可以添加具有不同架构的节点。
您可以使用以下方法将不同架构的计算机器添加到多架构集群中:
- 将 64 位 x86 计算机器添加到使用 64 位 ARM control plane 机器的集群中,且已经包含 64 位 ARM 计算机器。在这种情况下,64 位 x86 被视为辅助架构。
- 将 64 位 ARM 计算机器添加到使用 64 位 x86 control plane 机器的集群,且已经包含 64 位 x86 计算机器。在这种情况下,64 位 ARM 被视为二级架构。
在集群中添加二级架构节点前,建议安装 Multiarch Tuning Operator,并部署 ClusterPodPlacementConfig
自定义资源。如需更多信息,请参阅"使用 Multiarch Tuning Operator 在多架构集群上管理工作负载"。
先决条件
-
已安装 OpenShift CLI(
oc
)。 - 您可以使用安装程序创建使用多架构安装程序二进制文件的 64 位 x86 或 64 位 ARM 单架构 GCP 集群。
流程
-
登录 OpenShift CLI (
oc
)。 创建 YAML 文件,并添加配置来创建计算机器集来控制集群中的 64 位 ARM 或 64 位 x86 计算节点。
GCP 64 位 ARM 或 64 位 x86 计算节点的
MachineSet
对象示例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 5 metadata: creationTimestamp: null networkInterfaces: - network: <infrastructure_id>-network subnetwork: <infrastructure_id>-worker-subnet projectID: <project_name> 6 region: us-central1 7 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
- 1
- 指定基于置备集群时所设置的集群 ID 的基础架构 ID。您可以运行以下命令来获取基础架构 ID:
$ oc get -o jsonpath='{.status.infrastructureName}{"\n"}' infrastructure cluster
- 2
- 指定要添加的角色节点标签。
- 3
- 指定当前计算机器集中使用的镜像的路径。您需要到镜像的路径的项目和镜像名称。
要访问项目和镜像名称,请运行以下命令:
$ oc get configmap/coreos-bootimages \ -n openshift-machine-config-operator \ -o jsonpath='{.data.stream}' | jq \ -r '.architectures.aarch64.images.gcp'
输出示例
"gcp": { "release": "415.92.202309142014-0", "project": "rhcos-cloud", "name": "rhcos-415-92-202309142014-0-gcp-aarch64" }
使用输出中的
project
和name
参数,在机器集中创建 image 字段的路径。镜像的路径应该采用以下格式:$ projects/<project>/global/images/<image_name>
- 4
- 可选:以
key:value
对的形式指定自定义元数据。有关用例,请参阅 GCP 文档,以查看设置自定义元数据。 - 5
- 指定与所选操作系统镜像的 CPU 架构一致的机器类型。如需更多信息,请参阅"在 64 位 ARM 基础架构上为 GCP 测试的实例类型"。
- 6
- 指定用于集群的 GCP 项目的名称。
- 7
- 指定区域。例如,
us-central1
。确保您选择的区有带有所需架构的机器。
运行以下命令来创建计算机器集:
$ oc create -f <file_name> 1
- 1
- 将
<file_name>
替换为计算机器设置配置 YAML 文件的名称。例如:gcp-arm64-machine-set-0.yaml
, 或gcp-amd64-machine-set-0.yaml
。
验证
运行以下命令,查看计算机器集列表:
$ oc get machineset -n openshift-machine-api
输出必须包含您创建的机器集。
输出示例
NAME DESIRED CURRENT READY AVAILABLE AGE <infrastructure_id>-gcp-machine-set-0 2 2 2 2 10m
您可以运行以下命令来检查节点是否已就绪并可以调度:
$ oc get nodes