VMware Engine プライベート クラウドの作成

プライベート クラウドとは、ESXi ホスト、vCenter、vSAN、NSX-T、HCX で構成される、分離された VMware スタックのことです。プライベート クラウドは、Google Cloud VMware Engine ポータルを介して管理されます。プライベート クラウドを作成すると、単一の vSphere クラスタと、そのクラスタ内に作成されるすべての管理 VM が得られます。

VMware Engine では、vSphere / vSAN サブネット用に選択したネットワークに管理コンポーネントをデプロイします。ネットワーク IP アドレス範囲は、デプロイ中に異なるサブネットに分割されます。

始める前に

このページのタスクを実行する前に、次の準備を行っておく必要があります。

vSphere / vSAN のサブネット アドレス空間は、オンプレミス ネットワークと Google Cloud Virtual Private Cloud(VPC)など、プライベート クラウドと通信するネットワークと重複しないようにする必要があります。vSphere または vSAN サブネットの詳細については、VMware Engine の VLAN とサブネットをご覧ください。

gcloud と API の要件

gcloud コマンドライン ツールまたは API を使用して VMware Engine リソースを管理するには、以下で説明するようにツールを構成することをおすすめします。

gcloud

  1. デフォルトのプロジェクト ID を設定します。

    gcloud config set project PROJECT_ID
    
  2. デフォルトのリージョンとゾーンを設定します。

    gcloud config set compute/region REGION
    gcloud config set compute/zone ZONE

gcloud vmware ツールの詳細については、Cloud SDK リファレンス ドキュメントをご確認ください

API

このドキュメント セットの API の例では、cURL コマンドライン ツールを使用して API がクエリされています。cURL リクエストには、有効なアクセス トークンが必要です。有効なアクセス トークンを取得するにはさまざまな方法があります。次の手順では、gcloud ツールを使用してアクセス トークンを生成します。

  1. Google Cloud にログインする

    gcloud auth login
    
  2. アクセス トークンを生成して TOKEN にエクスポートする

    export TOKEN=`gcloud auth print-access-token`
    
  3. TOKEN が正しく設定されていることを確認する

    echo $TOKEN
    
    Output:
    TOKEN
    

API へのリクエストで認証トークンを使用します。次に例を示します。

curl -X GET -H "Authorization: Bearer \"$TOKEN\""  -H "Content-Type: application/json; charset=utf-8" https://vmwareengine.googleapis.com/v1/projects/PROJECT_ID/locations

Python

このドキュメントの Python コードサンプルは、VMware Engine ライブラリを使用して API と通信します。このアプローチを使用するには、ライブラリをインストールし、アプリケーションのデフォルト認証情報を構成する必要があります。

  1. Python ライブラリをダウンロードしてインストールする

     pip install google-cloud-vmwareengine
    
  2. シェルで次のコマンドを実行して、アプリケーションのデフォルト認証情報を構成する

      gcloud auth application-default login
    

    または、サービス アカウント キー ファイルを使用する

      export GOOGLE_APPLICATION_CREDENTIALS="FILE_PATH"
    

ライブラリの詳細については、リファレンス ページまたは GitHub のコードサンプルをご覧ください。

プライベート クラウドを作成する

コンソール

  1. Google Cloud VMware Engine ポータルにアクセスします
  2. [Resources] ページで [Create private cloud] をクリックします。
  3. プライベート クラウドのロケーションを選択します。
  4. プライベート クラウドのノード数を選択します。本番環境ワークロードの場合、少なくとも 3 つのノードを持つプライベート クラウドを作成します。VMware Engine は、60 日後にノードが 1 つのみ存在するプライベート クラウドを削除します。
  5. 省略可: 管理クラスタ内の各ノードで使用可能なコア数を減らすには、[Customize Cores] トグルをクリックします。詳細については、カスタムコア数をご覧ください。
  6. VMware 管理ネットワークの CIDR 範囲を入力します。この範囲の制限については、始める前にのセクションをご覧ください。
  7. HCX デプロイ ネットワークの CIDR 範囲を入力します。これは HCX コンポーネントのデプロイに使用されます。CIDR 範囲がオンプレミス サブネットやクラウド サブネットと重複していないことを確認します。CIDR 範囲は、/27 以上である必要があります。
  8. [確認して作成] を選択します。
  9. 設定を確認します。設定を変更するには、[Back] をクリックします。
  10. [Create] をクリックして、プライベート クラウドのプロビジョニングを開始します。

VMware Engine は新しいプライベート クラウドが作成されると、多数の VMware コンポーネントがデプロイされ、指定された IP アドレス範囲がサブネットに分割されます。プライベート クラウドの作成には 30 分から 2 時間かかる場合があります。プロビジョニングが完了すると、メールが届きます。

gcloud

  1. [省略可] プロジェクトで使用可能なリージョンとゾーンを一覧表示します。

    gcloud vmware locations list --project=PROJECT_ID
    
  2. プライベート クラウドのネットワークを作成します。ネットワーク名の形式は、REGION-default にする必要があります。

    gcloud vmware networks create REGION-default --type=LEGACY --location=REGION --description="Legacy network created using gcloud vmware"
    

    このリクエストはオペレーション ID を返します。

  3. オペレーションのステータスを確認します。オペレーションが DONE として返されたら、レスポンスをチェックしてオペレーションが成功したかどうかを確認します。

    gcloud vmware operations describe OPERATION_ID \
        --location REGION
    

    OPERATION_ID は、前の手順の ID に置き換えます。

  4. 次に、3 ノードのプライベート クラウドを作成します。

    gcloud vmware private-clouds create PC_NAME \
       --location=ZONE --cluster=CLUSTER_NAME\
       --node-type-config=standard-72,count=3 \
       --management-range=192.168.0.0/24 \
       --vmware-engine-network=NETWORK_NAME
    

    次のように置き換えます。

    • PC_NAME: プライベート クラウドの名前
    • ZONE: プライベート クラウドのゾーン
    • CLUSTER_NAME: このプライベート クラウドの新しいクラスタの名前
    • NETWORK_NAME: このクラウドのネットワーク名

    リクエストはオペレーション ID を返します。この ID を使用してオペレーションの進行状況を確認できます。

  5. オペレーションのステータスを確認します。オペレーションが DONE として返されたら、レスポンスをチェックしてオペレーションが成功したかどうかを確認します。

    gcloud vmware operations describe OPERATION_ID \
        --location REGION
    

    OPERATION_ID は、前の手順の ID に置き換えます。

  6. プライベート サービス アクセスを設定して、VMware Engine ネットワークを VPC に接続します。

  7. vCenter と NSX-T の認証情報を取得します。

    gcloud vmware private-clouds vcenter credentials describe \
    --private-cloud=PC_NAME  --location=ZONE
    
    gcloud vmware private-clouds nsx credentials describe \
    --private-cloud=PC_NAME --location=ZONE
    

API

  1. レガシー ネットワークを作成します。ネットワーク名は、REGION-default の形式にする必要があります。

    curl -X POST -H "Authorization: Bearer TOKEN"  -H "Content-Type: application/json; charset=utf-8" https://vmwareengine.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/vmwareEngineNetworks?vmwareEngineNetworkId=REGION-default -d "{"type": "legacy"}"
    

    次のように置き換えます。

    • TOKEN: このリクエストの認証トークン。
    • PROJECT_ID: このリクエストのプロジェクト。
    • REGION: このネットワークを作成するリージョン。

    リクエストはオペレーション ID を返します。この ID を使用してオペレーションの進行状況を確認できます。

  2. オペレーションのステータスを確認します。オペレーションが DONE として返されたら、レスポンスをチェックしてオペレーションが成功したかどうかを確認します。

    curl -X GET -H "Authorization: Bearer TOKEN"  -H "Content-Type: application/json; charset=utf-8" https://vmwareengine.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/operations/OPERATION_ID
    

    OPERATION_ID は、前の手順の ID に置き換えます。

  3. 3 ノードのプライベート クラウドを作成します。

    curl -X POST -H "Authorization: Bearer TOKEN"  -H "Content-Type: application/json; charset=utf-8" https://vmwareengine.googleapis.com/v1/projects/PROJECT_ID/locations/ZONE/privateClouds?privateCloudId=PC_NAME -d "{
    "networkConfig":{
      "vmwareEngineNetwork":"projects/PROJECT_ID/locations/REGION/vmwareEngineNetworks/REGION-default",
      "managementCidr":"10.241.0.0/22"
       },
    "managementCluster":{
      "clusterId": "CLUSTER_NAME",
      "nodeTypeConfigs": {
      "standard-72": {
        "nodeCount": 3
       }
      }
     }
    }"
    

    次のように置き換えます。

    • TOKEN: このリクエストの認証トークン。
    • PROJECT_ID: このリクエストのプロジェクト
    • ZONE: プライベート クラウドのゾーン
    • PC_NAME: プライベート クラウドの名前
    • REGION: このプライベート クラウドのネットワークのリージョン
    • CLUSTER_NAME: このプライベート クラウドの新しいクラスタの名前

    リクエストはオペレーション ID を返します。この ID を使用してオペレーションの進行状況を確認できます。

  4. オペレーションのステータスを確認します。オペレーションが DONE として返されたら、レスポンスをチェックしてオペレーションが成功したかどうかを確認します。

    curl -X GET -H "Authorization: Bearer TOKEN"  -H "Content-Type: application/json; charset=utf-8" https://vmwareengine.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/operations/OPERATION_ID
    

    OPERATION_ID は、前の手順の ID に置き換えます。

  5. プライベート サービス アクセスを設定して、VMware Engine ネットワークを VPC に接続します。

  6. vCenter と NSX-T の認証情報を取得します。

    curl -X GET -H "Authorization: Bearer \"TOKEN"\"  -H "Content-Type: application/json; charset=utf-8" "https://vmwareengine.googleapis.com/v1/projects/PROJECT_ID/locations/ZONE/privateClouds/my-private-cloud:showVcenterCredentials"
    
    curl -X GET -H "Authorization: Bearer \"TOKEN"\"  -H "Content-Type: application/json; charset=utf-8" "https://vmwareengine.googleapis.com/v1/projects/PROJECT_ID/locations/ZONE/privateClouds/my-private-cloud:showNsxCredentials"
    

Python

  1. レガシー ネットワークを作成します。

    from google.cloud import vmwareengine_v1
    
    TIMEOUT = 1200  # 20 minutes
    
    def create_legacy_network(
        project_id: str, region: str
    ) -> vmwareengine_v1.VmwareEngineNetwork:
        """
        Creates a new legacy network.
    
        Args:
            project_id: name of the project you want to use.
            region: name of the region you want to use. I.e. "us-central1"
    
        Returns:
            The newly created VmwareEngineNetwork object.
        """
        network = vmwareengine_v1.VmwareEngineNetwork()
        network.description = (
            "Legacy network created using vmwareengine_v1.VmwareEngineNetwork"
        )
        network.type_ = vmwareengine_v1.VmwareEngineNetwork.Type.LEGACY
    
        request = vmwareengine_v1.CreateVmwareEngineNetworkRequest()
        request.parent = f"projects/{project_id}/locations/{region}"
        request.vmware_engine_network_id = f"{region}-default"
        request.vmware_engine_network = network
    
        client = vmwareengine_v1.VmwareEngineClient()
        result = client.create_vmware_engine_network(request, timeout=TIMEOUT).result()
    
        return result
    
    
  2. 3 ノードのプライベート クラウドを作成します。

    from google.api_core import operation
    from google.cloud import vmwareengine_v1
    
    DEFAULT_MANAGEMENT_CIDR = "192.168.0.0/24"
    DEFAULT_NODE_COUNT = 3
    
    def create_private_cloud(
        project_id: str, zone: str, network_name: str, cloud_name: str, cluster_name: str
    ) -> operation.Operation:
        """
        Creates a new Private Cloud using VMWare Engine.
    
        Creating a new Private Cloud is a long-running operation and it may take over an hour.
    
        Args:
            project_id: name of the project you want to use.
            zone: the zone you want to use, i.e. "us-central1-a"
            network_name: name of the VMWareNetwork to use for the new Private Cloud
            cloud_name: name of the new Private Cloud
            cluster_name: name for the new cluster in this Private Cloud
    
        Returns:
            An operation object representing the started operation. You can call its .result() method to wait for it to finish.
        """
        request = vmwareengine_v1.CreatePrivateCloudRequest()
        request.parent = f"projects/{project_id}/locations/{zone}"
        request.private_cloud_id = cloud_name
    
        request.private_cloud = vmwareengine_v1.PrivateCloud()
        request.private_cloud.management_cluster = (
            vmwareengine_v1.PrivateCloud.ManagementCluster()
        )
        request.private_cloud.management_cluster.cluster_id = cluster_name
    
        node_config = vmwareengine_v1.NodeTypeConfig()
        node_config.node_count = DEFAULT_NODE_COUNT
    
        # Currently standard-72 is the only supported node type.
        request.private_cloud.management_cluster.node_type_configs = {
            "standard-72": node_config
        }
    
        request.private_cloud.network_config = vmwareengine_v1.NetworkConfig()
        request.private_cloud.network_config.vmware_engine_network = network_name
        request.private_cloud.network_config.management_cidr = DEFAULT_MANAGEMENT_CIDR
    
        client = vmwareengine_v1.VmwareEngineClient()
        return client.create_private_cloud(request)
    
    

    create_private_cloud 関数は、オペレーションの進行状況を確認するために使用できるオペレーション オブジェクトを返します。

  3. オペレーションのステータスを確認します。次のコードにより、オペレーションに関する現在の情報を取得します。

    from google.cloud import vmwareengine_v1
    from google.longrunning.operations_pb2 import GetOperationRequest
    
    def get_operation_by_name(operation_name: str) -> Operation:
        """
        Retrieve detailed information about an operation.
    
        Args:
            operation_name: name identifying an operation you want to check.
                Expected format: projects/{project_id}/locations/{region}/operations/{operation_id}
    
        Returns:
            Operation object with details.
        """
        client = vmwareengine_v1.VmwareEngineClient()
        request = GetOperationRequest()
        request.name = operation_name
        return client.get_operation(request)
    
    def get_operation(project_id: str, region: str, operation_id: str) -> Operation:
        """
        Retrieve detailed information about an operation.
    
        Args:
            project_id: name of the project running the operation.
            region: name of the region in which the operation is running.
            operation_id: identifier of the operation.
    
        Returns:
            Operation object with details.
        """
        return get_operation_by_name(
            f"projects/{project_id}/locations/{region}/operations/{operation_id}"
        )
    
    

    オペレーション オブジェクトのメンバー メソッド .result() を使用して、オペレーションが完了するまで待機できます。

  4. プライベート サービス アクセスを設定して、VMware Engine ネットワークを VPC に接続します。

  5. vCenter と NSX-T の認証情報を取得します。

    from google.cloud import vmwareengine_v1
    
    def get_vcenter_credentials(
        project_id: str, zone: str, private_cloud_name: str
    ) -> vmwareengine_v1.Credentials:
        """
        Retrieves VCenter credentials for a Private Cloud.
    
        Args:
            project_id: name of the project hosting the private cloud.
            zone: name of the zone hosting the private cloud.
            private_cloud_name: name of the private cloud.
    
        Returns:
            A Credentials object.
        """
        client = vmwareengine_v1.VmwareEngineClient()
        credentials = client.show_vcenter_credentials(
            private_cloud=f"projects/{project_id}/locations/{zone}/privateClouds/{private_cloud_name}"
        )
        return credentials
    
    
    from google.cloud import vmwareengine_v1
    
    def get_nsx_credentials(
        project_id: str, zone: str, private_cloud_name: str
    ) -> vmwareengine_v1.Credentials:
        """
        Retrieves NSX credentials for a Private Cloud.
    
        Args:
            project_id: name of the project hosting the private cloud.
            zone: name of the zone hosting the private cloud.
            private_cloud_name: name of the private cloud.
    
        Returns:
            A Credentials object.
        """
        client = vmwareengine_v1.VmwareEngineClient()
        credentials = client.show_nsx_credentials(
            private_cloud=f"projects/{project_id}/locations/{zone}/privateClouds/{private_cloud_name}"
        )
        return credentials
    
    

次のステップ