11.4. 使用 API 添加主机
您可以使用 Assisted Installer REST API 将主机添加到集群。
先决条件
-
安装 Red Hat OpenShift Cluster Manager CLI (
ocm
)。 - 以具有集群创建权限的用户身份登录 Red Hat OpenShift Cluster Manager。
-
安装
jq
。 - 确保您要扩展的集群存在所有必需的 DNS 记录。
在第 2 天操作中添加 control plane 节点时,请确保新节点共享与第 1 天网络相同的子网。子网在 install-config.yaml
文件的 machineNetwork
字段中指定。这个要求适用于集群管理的网络,如裸机或 vSphere,不适用于用户管理的网络。
流程
- 针对 Assisted Installer REST API 进行身份验证,并为会话生成 API 令牌。生成的令牌有效期仅为 15 分钟。
运行以下命令设置
$API_URL
变量:export API_URL=<api_url>
$ export API_URL=<api_url>
1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 将
<api_url>
替换为 Assisted Installer API URL,例如https://api.openshift.com
运行以下命令导入集群:
设置
$CLUSTER_ID
变量:登录到集群并运行以下命令:
export CLUSTER_ID=$(oc get clusterversion -o jsonpath='{.items[].spec.clusterID}')
$ export CLUSTER_ID=$(oc get clusterversion -o jsonpath='{.items[].spec.clusterID}')
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 显示
$CLUSTER_ID
变量输出:echo ${CLUSTER_ID}
$ echo ${CLUSTER_ID}
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
设置用于导入集群的
$CLUSTER_REQUEST
变量:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 导入集群并设置
$CLUSTER_ID
变量。运行以下命令:CLUSTER_ID=$(curl "$API_URL/api/assisted-install/v2/clusters/import" -H "Authorization: Bearer ${API_TOKEN}" -H 'accept: application/json' -H 'Content-Type: application/json' \ -d "$CLUSTER_REQUEST" | tee /dev/stderr | jq -r '.id')
$ CLUSTER_ID=$(curl "$API_URL/api/assisted-install/v2/clusters/import" -H "Authorization: Bearer ${API_TOKEN}" -H 'accept: application/json' -H 'Content-Type: application/json' \ -d "$CLUSTER_REQUEST" | tee /dev/stderr | jq -r '.id')
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
运行以下命令,为集群生成
InfraEnv
资源并设置$INFRA_ENV_ID
变量:- 从位于 console.redhat.com 的 Red Hat OpenShift Cluster Manager 下载 pull secret 文件。
设置
$INFRA_ENV_REQUEST
变量:Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 将
<path_to_pull_secret_file>
替换为包含从位于 console.redhat.com 的 Red Hat OpenShift Cluster Manager 下载的 pull secret 的本地文件的路径。 - 2
- 将
<path_to_ssh_pub_key>
替换为访问主机所需的公共 SSH 密钥的路径。如果没有设置这个值,则无法在发现模式下访问主机。 - 3
- 将
<infraenv_name>
替换为InfraEnv
资源的纯文本名称。 - 4
- 将
<iso_image_type>
替换为 ISO 镜像类型,可以是full-iso
或minimal-iso
。
将
$INFRA_ENV_REQUEST
发布到 /v2/infra-envs API,并设置$INFRA_ENV_ID
变量:INFRA_ENV_ID=$(curl "$API_URL/api/assisted-install/v2/infra-envs" -H "Authorization: Bearer ${API_TOKEN}" -H 'accept: application/json' -H 'Content-Type: application/json' -d "$INFRA_ENV_REQUEST" | tee /dev/stderr | jq -r '.id')
$ INFRA_ENV_ID=$(curl "$API_URL/api/assisted-install/v2/infra-envs" -H "Authorization: Bearer ${API_TOKEN}" -H 'accept: application/json' -H 'Content-Type: application/json' -d "$INFRA_ENV_REQUEST" | tee /dev/stderr | jq -r '.id')
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
运行以下命令,获取集群主机的发现 ISO 的 URL:
curl -s "$API_URL/api/assisted-install/v2/infra-envs/$INFRA_ENV_ID" -H "Authorization: Bearer ${API_TOKEN}" | jq -r '.download_url'
$ curl -s "$API_URL/api/assisted-install/v2/infra-envs/$INFRA_ENV_ID" -H "Authorization: Bearer ${API_TOKEN}" | jq -r '.download_url'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
https://api.openshift.com/api/assisted-images/images/41b91e72-c33e-42ee-b80f-b5c5bbf6431a?arch=x86_64&image_token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE2NTYwMjYzNzEsInN1YiI6IjQxYjkxZTcyLWMzM2UtNDJlZS1iODBmLWI1YzViYmY2NDMxYSJ9.1EX_VGaMNejMhrAvVRBS7PDPIQtbOOc8LtG8OukE1a4&type=minimal-iso&version=4.12
https://api.openshift.com/api/assisted-images/images/41b91e72-c33e-42ee-b80f-b5c5bbf6431a?arch=x86_64&image_token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE2NTYwMjYzNzEsInN1YiI6IjQxYjkxZTcyLWMzM2UtNDJlZS1iODBmLWI1YzViYmY2NDMxYSJ9.1EX_VGaMNejMhrAvVRBS7PDPIQtbOOc8LtG8OukE1a4&type=minimal-iso&version=4.12
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 下载 ISO:
curl -L -s '<iso_url>' --output rhcos-live-minimal.iso
$ curl -L -s '<iso_url>' --output rhcos-live-minimal.iso
1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 将
<iso_url>
替换为上一步中的 ISO URL。
-
从下载的
rhcos-live-minimal.iso
中引导新的 worker 主机。 获取没有安装的集群中的主机列表。继续运行以下命令,直到新主机显示:
curl -s "$API_URL/api/assisted-install/v2/clusters/$CLUSTER_ID" -H "Authorization: Bearer ${API_TOKEN}" | jq -r '.hosts[] | select(.status != "installed").id'
$ curl -s "$API_URL/api/assisted-install/v2/clusters/$CLUSTER_ID" -H "Authorization: Bearer ${API_TOKEN}" | jq -r '.hosts[] | select(.status != "installed").id'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
2294ba03-c264-4f11-ac08-2f1bb2f8c296
2294ba03-c264-4f11-ac08-2f1bb2f8c296
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 为新主机设置
$HOST_ID
变量,例如:HOST_ID=<host_id>
$ HOST_ID=<host_id>
1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 将
<host_id>
替换为上一步中的主机 ID。
运行以下命令检查主机是否已就绪:
注意确保复制整个命令,包括完整的
jq
表达式。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 当上一个命令显示主机就绪时,通过运行以下命令来使用 /v2/infra-envs/{infra_env_id}/hosts/{host_id}/actions/install API 开始安装:
curl -X POST -s "$API_URL/api/assisted-install/v2/infra-envs/$INFRA_ENV_ID/hosts/$HOST_ID/actions/install" -H "Authorization: Bearer ${API_TOKEN}"
$ curl -X POST -s "$API_URL/api/assisted-install/v2/infra-envs/$INFRA_ENV_ID/hosts/$HOST_ID/actions/install" -H "Authorization: Bearer ${API_TOKEN}"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 当安装继续进行时,安装会为主机生成待处理的证书签名请求 (CSR)。
重要您必须批准 CSR 才能完成安装。
运行以下 API 调用以监控集群安装:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 可选: 运行以下命令以查看集群的所有事件:
curl -s "$API_URL/api/assisted-install/v2/events?cluster_id=$CLUSTER_ID" -H "Authorization: Bearer ${API_TOKEN}" | jq -c '.[] | {severity, message, event_time, host_id}'
$ curl -s "$API_URL/api/assisted-install/v2/events?cluster_id=$CLUSTER_ID" -H "Authorization: Bearer ${API_TOKEN}" | jq -c '.[] | {severity, message, event_time, host_id}'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 登录到集群并批准待处理的 CSR 以完成安装。
验证
检查新主机是否已成功添加到集群中,状态为
Ready
:oc get nodes
$ oc get nodes
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
NAME STATUS ROLES AGE VERSION control-plane-1.example.com Ready master,worker 56m v1.25.0 compute-1.example.com Ready worker 11m v1.25.0
NAME STATUS ROLES AGE VERSION control-plane-1.example.com Ready master,worker 56m v1.25.0 compute-1.example.com Ready worker 11m v1.25.0
Copy to Clipboard Copied! Toggle word wrap Toggle overflow