搜索

13.2. 使用 API 在 Nutanix 中添加主机

download PDF

要使用 API 在 Nutanix 中添加主机,请从 Assisted Installer 生成发现镜像 ISO。使用最小的发现镜像 ISO。这是默认设置。镜像仅包含使用联网引导主机所需的内容。在引导时会下载大多数内容。ISO 镜像大小为 100MB。

完成后,您必须为 Nutanix 平台创建一个镜像,并创建 Nutanix 虚拟机。

先决条件

  • 您已设置 Assisted Installer API 身份验证。
  • 您已创建了 Assisted Installer 集群配置集。
  • 您已创建了辅助安装程序基础架构环境。
  • 在 shell 中将您的基础架构环境 ID 导出为 $INFRA_ENV_ID
  • 您已完成 Assisted Installer 集群配置。
  • 您已设置了 Nutanix 集群环境,并记录集群名称和子网名称。

流程

  1. 如果要使用 ignition 文件引导,请配置发现镜像。
  2. 创建 Nutanix 集群配置文件来保存环境变量:

    $ touch ~/nutanix-cluster-env.sh
    $ chmod +x ~/nutanix-cluster-env.sh

    如果需要启动新的终端会话,您可以轻松重新加载环境变量。例如:

    $ source ~/nutanix-cluster-env.sh
  3. 将 Nutanix 集群的名称分配给配置文件中的 NTX_CLUSTER_NAME 环境变量:

    $ cat << EOF >> ~/nutanix-cluster-env.sh
    export NTX_CLUSTER_NAME=<cluster_name>
    EOF

    <cluster_name> 替换为 Nutanix 集群的名称。

  4. 将 Nutanix 集群的子网名称分配给配置文件中的 NTX_SUBNET_NAME 环境变量:

    $ cat << EOF >> ~/nutanix-cluster-env.sh
    export NTX_SUBNET_NAME=<subnet_name>
    EOF

    <subnet_name> 替换为 Nutanix 集群子网的名称。

  5. 刷新 API 令牌:

    $ source refresh-token
  6. 获取下载 URL:

    $ curl -H "Authorization: Bearer ${API_TOKEN}" \
    https://api.openshift.com/api/assisted-install/v2/infra-envs/${INFRA_ENV_ID}/downloads/image-url
  7. 创建 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。

  8. 创建 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

  9. 将返回的 UUID 分配给配置文件中的 NTX_IMAGE_UUID 环境变量:

    $ cat << EOF >> ~/nutanix-cluster-env.sh
    export NTX_IMAGE_UUID=<uuid>
    EOF
  10. 获取 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 集群的名称。

  11. 将返回的 Nutanix 集群 UUID 分配给配置文件中的 NTX_CLUSTER_UUID 环境变量:

    $ cat << EOF >> ~/nutanix-cluster-env.sh
    export NTX_CLUSTER_UUID=<uuid>
    EOF

    <uuid> 替换为 Nutanix 集群的返回 UUID。

  12. 获取 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> 替换为集群子网的名称。

  13. 将返回的 Nutanix 子网 UUID 分配给配置文件中的 NTX_CLUSTER_UUID 环境变量:

    $ cat << EOF >> ~/nutanix-cluster-env.sh
    export NTX_SUBNET_UUID=<uuid>
    EOF

    <uuid> 替换为集群子网的返回 UUID。

  14. 确保设置了 Nutanix 环境变量:

    $ source ~/nutanix-cluster-env.sh
  15. 为每个 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> 替换为主机的名称。

  16. 引导每个 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> 替换为虚拟机配置文件的名称。

  17. 将返回的虚拟机 UUID 分配给配置文件中的唯一环境变量:

    $ cat << EOF >> ~/nutanix-cluster-env.sh
    export NTX_MASTER_0_UUID=<uuid>
    EOF

    <uuid> 替换为虚拟机返回的 UUID。

    注意

    环境变量必须具有每个虚拟机的唯一名称。

  18. 等待 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'
  19. 修改集群定义以启用与 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
  20. 继续安装过程。
Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.