13.2. 使用 API 在 Nutanix 中添加主机
要使用 API 在 Nutanix 中添加主机,请从 Assisted Installer 生成发现镜像 ISO。使用最小的发现镜像 ISO。这是默认设置。镜像仅包含使用联网引导主机所需的内容。在引导时会下载大多数内容。ISO 镜像大小为 100MB。
完成后,您必须为 Nutanix 平台创建一个镜像,并创建 Nutanix 虚拟机。
先决条件
- 您已设置 Assisted Installer API 身份验证。
- 您已创建了 Assisted Installer 集群配置集。
- 您已创建了辅助安装程序基础架构环境。
-
在 shell 中将您的基础架构环境 ID 导出为
$INFRA_ENV_ID
。 - 您已完成 Assisted Installer 集群配置。
- 您已设置了 Nutanix 集群环境,并记录集群名称和子网名称。
流程
- 如果要使用 ignition 文件引导,请配置发现镜像。
创建 Nutanix 集群配置文件来保存环境变量:
$ touch ~/nutanix-cluster-env.sh
$ chmod +x ~/nutanix-cluster-env.sh
如果需要启动新的终端会话,您可以轻松重新加载环境变量。例如:
$ source ~/nutanix-cluster-env.sh
将 Nutanix 集群的名称分配给配置文件中的
NTX_CLUSTER_NAME
环境变量:$ cat << EOF >> ~/nutanix-cluster-env.sh export NTX_CLUSTER_NAME=<cluster_name> EOF
将
<cluster_name>
替换为 Nutanix 集群的名称。将 Nutanix 集群的子网名称分配给配置文件中的
NTX_SUBNET_NAME
环境变量:$ cat << EOF >> ~/nutanix-cluster-env.sh export NTX_SUBNET_NAME=<subnet_name> EOF
将
<subnet_name>
替换为 Nutanix 集群子网的名称。刷新 API 令牌:
$ source refresh-token
获取下载 URL:
$ curl -H "Authorization: Bearer ${API_TOKEN}" \ https://api.openshift.com/api/assisted-install/v2/infra-envs/${INFRA_ENV_ID}/downloads/image-url
创建 Nutanix 镜像配置文件:
$ cat << EOF > create-image.json { "spec": { "name": "ocp_ai_discovery_image.iso", "description": "ocp_ai_discovery_image.iso", "resources": { "architecture": "X86_64", "image_type": "ISO_IMAGE", "source_uri": "<image_url>", "source_options": { "allow_insecure_connection": true } } }, "metadata": { "spec_version": 3, "kind": "image" } } EOF
将
<image_url>
替换为从上一步中下载的镜像 URL。创建 Nutanix 镜像:
$ curl -k -u <user>:'<password>' -X 'POST' \ 'https://<domain-or-ip>:<port>/api/nutanix/v3/images \ -H 'accept: application/json' \ -H 'Content-Type: application/json' \ -d @./create-image.json | jq '.metadata.uuid'
将
<user>
替换为 Nutanix 用户名。将'<password>'
替换为 Nutanix 密码。将<domain-or-ip>
替换为 Nutanix plaform 的域名或 IP 地址。将<port>
替换为 Nutanix 服务器的端口。端口默认为9440
。将返回的 UUID 分配给配置文件中的
NTX_IMAGE_UUID
环境变量:$ cat << EOF >> ~/nutanix-cluster-env.sh export NTX_IMAGE_UUID=<uuid> EOF
获取 Nutanix 集群 UUID:
$ curl -k -u <user>:'<password>' -X 'POST' \ 'https://<domain-or-ip>:<port>/api/nutanix/v3/clusters/list' \ -H 'accept: application/json' \ -H 'Content-Type: application/json' \ -d '{ "kind": "cluster" }' | jq '.entities[] | select(.spec.name=="<nutanix_cluster_name>") | .metadata.uuid'
将
<user>
替换为 Nutanix 用户名。将'<password>'
替换为 Nutanix 密码。将<domain-or-ip>
替换为 Nutanix plaform 的域名或 IP 地址。将<port>
替换为 Nutanix 服务器的端口。端口默认为9440
。将<nutanix_cluster_name>
替换为 Nutanix 集群的名称。将返回的 Nutanix 集群 UUID 分配给配置文件中的
NTX_CLUSTER_UUID
环境变量:$ cat << EOF >> ~/nutanix-cluster-env.sh export NTX_CLUSTER_UUID=<uuid> EOF
将
<uuid>
替换为 Nutanix 集群的返回 UUID。获取 Nutanix 集群的子网 UUID:
$ curl -k -u <user>:'<password>' -X 'POST' \ 'https://<domain-or-ip>:<port>/api/nutanix/v3/subnets/list' \ -H 'accept: application/json' \ -H 'Content-Type: application/json' \ -d '{ "kind": "subnet", "filter": "name==<subnet_name>" }' | jq '.entities[].metadata.uuid'
将
<user>
替换为 Nutanix 用户名。将'<password>'
替换为 Nutanix 密码。将<domain-or-ip>
替换为 Nutanix plaform 的域名或 IP 地址。将<port>
替换为 Nutanix 服务器的端口。端口默认为9440
。将<subnet_name>
替换为集群子网的名称。将返回的 Nutanix 子网 UUID 分配给配置文件中的
NTX_CLUSTER_UUID
环境变量:$ cat << EOF >> ~/nutanix-cluster-env.sh export NTX_SUBNET_UUID=<uuid> EOF
将
<uuid>
替换为集群子网的返回 UUID。确保设置了 Nutanix 环境变量:
$ source ~/nutanix-cluster-env.sh
为每个 Nutanix 主机创建一个虚拟机配置文件。创建三个 control plane (master) 虚拟机和至少两个 worker 虚拟机。例如:
$ touch create-master-0.json
$ cat << EOF > create-master-0.json { "spec": { "name": "<host_name>", "resources": { "power_state": "ON", "num_vcpus_per_socket": 1, "num_sockets": 16, "memory_size_mib": 32768, "disk_list": [ { "disk_size_mib": 122880, "device_properties": { "device_type": "DISK" } }, { "device_properties": { "device_type": "CDROM" }, "data_source_reference": { "kind": "image", "uuid": "$NTX_IMAGE_UUID" } } ], "nic_list": [ { "nic_type": "NORMAL_NIC", "is_connected": true, "ip_endpoint_list": [ { "ip_type": "DHCP" } ], "subnet_reference": { "kind": "subnet", "name": "$NTX_SUBNET_NAME", "uuid": "$NTX_SUBNET_UUID" } } ], "guest_tools": { "nutanix_guest_tools": { "state": "ENABLED", "iso_mount_state": "MOUNTED" } } }, "cluster_reference": { "kind": "cluster", "name": "$NTX_CLUSTER_NAME", "uuid": "$NTX_CLUSTER_UUID" } }, "api_version": "3.1.0", "metadata": { "kind": "vm" } } EOF
将
<host_name>
替换为主机的名称。引导每个 Nutanix 虚拟机:
$ curl -k -u <user>:'<password>' -X 'POST' \ 'https://<domain-or-ip>:<port>/api/nutanix/v3/vms' \ -H 'accept: application/json' \ -H 'Content-Type: application/json' \ -d @./<vm_config_file_name> | jq '.metadata.uuid'
将
<user>
替换为 Nutanix 用户名。将'<password>'
替换为 Nutanix 密码。将<domain-or-ip>
替换为 Nutanix plaform 的域名或 IP 地址。将<port>
替换为 Nutanix 服务器的端口。端口默认为9440
。将<vm_config_file_name>
替换为虚拟机配置文件的名称。将返回的虚拟机 UUID 分配给配置文件中的唯一环境变量:
$ cat << EOF >> ~/nutanix-cluster-env.sh export NTX_MASTER_0_UUID=<uuid> EOF
将
<uuid>
替换为虚拟机返回的 UUID。注意环境变量必须具有每个虚拟机的唯一名称。
等待 Assisted Installer 发现每个虚拟机,并已通过验证。
$ curl -s -X GET "https://api.openshift.com/api/assisted-install/v2/clusters/$CLUSTER_ID" --header "Content-Type: application/json" -H "Authorization: Bearer $API_TOKEN" | jq '.enabled_host_count'
修改集群定义以启用与 Nutanix 集成:
$ curl https://api.openshift.com/api/assisted-install/v2/clusters/${CLUSTER_ID} \ -X PATCH \ -H "Authorization: Bearer ${API_TOKEN}" \ -H "Content-Type: application/json" \ -d ' { "platform_type":"nutanix" } ' | jq
- 继续安装过程。